summaryrefslogtreecommitdiff
path: root/java/common
diff options
context:
space:
mode:
Diffstat (limited to 'java/common')
-rw-r--r--java/common/Composite.tpl350
-rw-r--r--java/common/Constant.tpl35
-rw-r--r--java/common/Enum.tpl57
-rw-r--r--java/common/Invoker.tpl73
-rw-r--r--java/common/MethodDelegate.tpl37
-rw-r--r--java/common/Option.tpl42
-rw-r--r--java/common/StructFactory.tpl60
-rw-r--r--java/common/Type.tpl84
-rwxr-xr-xjava/common/bin/qpid-jaddr33
-rwxr-xr-xjava/common/bin/qpid-run259
-rw-r--r--java/common/build.xml102
-rwxr-xr-xjava/common/codegen89
-rw-r--r--java/common/etc/qpid-run.conf25
-rw-r--r--java/common/etc/qpid-run.conf.dev26
-rw-r--r--java/common/genutil.py256
-rw-r--r--java/common/protocol-version.xml70
-rw-r--r--java/common/readme.txt4
-rwxr-xr-xjava/common/src/main/java/common.bnd25
-rw-r--r--java/common/src/main/java/org/apache/configuration/PropertyNameResolver.java129
-rw-r--r--java/common/src/main/java/org/apache/mina/common/FixedSizeByteBufferAllocator.java467
-rw-r--r--java/common/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java227
-rw-r--r--java/common/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java351
-rw-r--r--java/common/src/main/java/org/apache/mina/filter/WriteBufferFullExeception.java48
-rw-r--r--java/common/src/main/java/org/apache/mina/filter/WriteBufferLimitFilterBuilder.java272
-rw-r--r--java/common/src/main/java/org/apache/mina/filter/codec/OurCumulativeProtocolDecoder.java197
-rw-r--r--java/common/src/main/java/org/apache/mina/filter/codec/QpidProtocolCodecFilter.java440
-rw-r--r--java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketAcceptor.java547
-rw-r--r--java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketConnector.java486
-rw-r--r--java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketFilterChain.java67
-rw-r--r--java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketIoProcessor.java1026
-rw-r--r--java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketSessionConfigImpl.java240
-rw-r--r--java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketSessionImpl.java488
-rw-r--r--java/common/src/main/java/org/apache/mina/transport/vmpipe/QpidVmPipeConnector.java151
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQChannelClosedException.java41
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQChannelException.java59
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQConnectionClosedException.java44
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQConnectionException.java70
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQConnectionFailureException.java62
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQDisconnectedException.java39
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQException.java124
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQInternalException.java49
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQInvalidArgumentException.java45
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQInvalidRoutingKeyException.java39
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQPInvalidClassException.java42
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQProtocolException.java38
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQSecurityException.java54
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQStoreException.java48
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQTimeoutException.java39
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQUndeliveredException.java54
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQUnknownExchangeType.java43
-rw-r--r--java/common/src/main/java/org/apache/qpid/AMQUnresolvedAddressException.java50
-rw-r--r--java/common/src/main/java/org/apache/qpid/ConsoleOutput.java62
-rw-r--r--java/common/src/main/java/org/apache/qpid/QpidConfig.java111
-rw-r--r--java/common/src/main/java/org/apache/qpid/SerialException.java40
-rw-r--r--java/common/src/main/java/org/apache/qpid/ToyBroker.java208
-rw-r--r--java/common/src/main/java/org/apache/qpid/ToyClient.java108
-rw-r--r--java/common/src/main/java/org/apache/qpid/ToyExchange.java154
-rw-r--r--java/common/src/main/java/org/apache/qpid/api/Message.java126
-rw-r--r--java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java78
-rw-r--r--java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java340
-rw-r--r--java/common/src/main/java/org/apache/qpid/codec/AMQEncoder.java66
-rw-r--r--java/common/src/main/java/org/apache/qpid/common/AMQPFilterTypes.java61
-rw-r--r--java/common/src/main/java/org/apache/qpid/common/ClientProperties.java52
-rw-r--r--java/common/src/main/java/org/apache/qpid/common/Closeable.java27
-rw-r--r--java/common/src/main/java/org/apache/qpid/common/QpidProperties.java190
-rw-r--r--java/common/src/main/java/org/apache/qpid/configuration/Accessor.java273
-rw-r--r--java/common/src/main/java/org/apache/qpid/configuration/ClientProperties.java134
-rw-r--r--java/common/src/main/java/org/apache/qpid/configuration/Configured.java44
-rw-r--r--java/common/src/main/java/org/apache/qpid/configuration/PropertyException.java43
-rw-r--r--java/common/src/main/java/org/apache/qpid/configuration/PropertyUtils.java164
-rw-r--r--java/common/src/main/java/org/apache/qpid/configuration/QpidProperty.java181
-rw-r--r--java/common/src/main/java/org/apache/qpid/configuration/Validator.java31
-rw-r--r--java/common/src/main/java/org/apache/qpid/dtx/XidImpl.java259
-rw-r--r--java/common/src/main/java/org/apache/qpid/exchange/ExchangeDefaults.java67
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQBody.java40
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java63
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java131
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java61
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQFrame.java125
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQFrameDecodingException.java47
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQMethodBody.java83
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyFactory.java45
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyImpl.java258
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyInstanceFactory.java30
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQMethodFactory.java90
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQProtocolClassException.java39
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQProtocolHeaderException.java41
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQProtocolInstanceException.java39
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQProtocolVersionException.java39
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java779
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQShortStringTokenizer.java31
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQType.java795
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQTypeMap.java48
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQTypedValue.java179
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java838
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/BodyFactory.java31
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/CommonContentHeaderProperties.java81
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/CompositeAMQDataBlock.java78
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/Content.java26
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/ContentBody.java121
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/ContentBodyFactory.java48
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java141
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBodyFactory.java50
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/ContentHeaderProperties.java60
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/ContentHeaderPropertiesFactory.java59
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/DeferredDataBlock.java50
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/EncodableAMQDataBlock.java35
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java1033
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/FieldTable.java1246
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/FieldTableFactory.java38
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/HeartbeatBody.java79
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/HeartbeatBodyFactory.java31
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/ProtocolInitiation.java223
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/SmallCompositeAMQDataBlock.java98
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/VersionSpecificRegistry.java198
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/abstraction/AbstractMethodConverter.java47
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/abstraction/ContentChunk.java32
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfo.java38
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfoConverter.java32
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfoImpl.java85
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/abstraction/ProtocolVersionMethodConverter.java36
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/AMQMethodBody_0_9.java37
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java134
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/AMQMethodBody_0_91.java37
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/MethodConverter_0_91.java132
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/AMQMethodBody_8_0.java40
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/MethodConverter_8_0.java113
-rw-r--r--java/common/src/main/java/org/apache/qpid/messaging/Address.java75
-rw-r--r--java/common/src/main/java/org/apache/qpid/messaging/util/AddressParser.java380
-rw-r--r--java/common/src/main/java/org/apache/qpid/messaging/util/JAddr.java97
-rw-r--r--java/common/src/main/java/org/apache/qpid/messaging/util/LexError.java37
-rw-r--r--java/common/src/main/java/org/apache/qpid/messaging/util/Lexer.java84
-rw-r--r--java/common/src/main/java/org/apache/qpid/messaging/util/Lexicon.java103
-rw-r--r--java/common/src/main/java/org/apache/qpid/messaging/util/LineInfo.java93
-rw-r--r--java/common/src/main/java/org/apache/qpid/messaging/util/ParseError.java58
-rw-r--r--java/common/src/main/java/org/apache/qpid/messaging/util/Parser.java85
-rw-r--r--java/common/src/main/java/org/apache/qpid/messaging/util/PyPrint.java146
-rw-r--r--java/common/src/main/java/org/apache/qpid/messaging/util/Token.java106
-rw-r--r--java/common/src/main/java/org/apache/qpid/pool/Job.java253
-rw-r--r--java/common/src/main/java/org/apache/qpid/pool/ReadWriteJobQueue.java432
-rw-r--r--java/common/src/main/java/org/apache/qpid/pool/ReadWriteRunnable.java26
-rw-r--r--java/common/src/main/java/org/apache/qpid/pool/ReferenceCountingExecutorService.java215
-rw-r--r--java/common/src/main/java/org/apache/qpid/protocol/AMQConstant.java236
-rw-r--r--java/common/src/main/java/org/apache/qpid/protocol/AMQMethodEvent.java95
-rw-r--r--java/common/src/main/java/org/apache/qpid/protocol/AMQMethodListener.java70
-rw-r--r--java/common/src/main/java/org/apache/qpid/protocol/AMQProtocolWriter.java43
-rw-r--r--java/common/src/main/java/org/apache/qpid/protocol/AMQVersionAwareProtocolSession.java64
-rw-r--r--java/common/src/main/java/org/apache/qpid/protocol/ProtocolEngine.java61
-rw-r--r--java/common/src/main/java/org/apache/qpid/protocol/ProtocolEngineFactory.java31
-rw-r--r--java/common/src/main/java/org/apache/qpid/protocol/ProtocolVersionAware.java53
-rw-r--r--java/common/src/main/java/org/apache/qpid/security/AMQPCallbackHandler.java28
-rw-r--r--java/common/src/main/java/org/apache/qpid/security/UsernamePasswordCallbackHandler.java60
-rw-r--r--java/common/src/main/java/org/apache/qpid/ssl/SSLContextFactory.java195
-rw-r--r--java/common/src/main/java/org/apache/qpid/thread/DefaultThreadFactory.java45
-rw-r--r--java/common/src/main/java/org/apache/qpid/thread/LoggingUncaughtExceptionHandler.java60
-rw-r--r--java/common/src/main/java/org/apache/qpid/thread/QpidThreadExecutor.java42
-rw-r--r--java/common/src/main/java/org/apache/qpid/thread/RealtimeThreadFactory.java72
-rw-r--r--java/common/src/main/java/org/apache/qpid/thread/ThreadFactory.java28
-rw-r--r--java/common/src/main/java/org/apache/qpid/thread/Threading.java47
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Binary.java154
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Binding.java36
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java320
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Connection.java703
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java102
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java70
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ConnectionListener.java38
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ConnectionSettings.java336
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Field.java83
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Future.java37
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Header.java92
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Method.java236
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/NetworkDriver.java63
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/NetworkDriverConfiguration.java44
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/OpenException.java34
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ProtocolDelegate.java40
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ProtocolError.java88
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ProtocolEvent.java41
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ProtocolHeader.java123
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java62
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ProtocolViolationException.java35
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Range.java125
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/RangeSet.java152
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Receiver.java38
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Sender.java39
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/SenderException.java52
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java203
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Session.java1057
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java49
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java212
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/SessionException.java61
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/SessionListener.java42
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/Struct.java142
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/TransportBuilder.java78
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/TransportException.java51
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/codec/AbstractDecoder.java478
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/codec/AbstractEncoder.java621
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java149
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/codec/BBEncoder.java357
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/codec/Decoder.java283
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/codec/Encodable.java44
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/codec/Encoder.java282
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java256
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/ConnectionBinding.java103
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java233
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/Frame.java151
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/InputHandler.java205
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/NetworkDelegate.java42
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/NetworkEvent.java34
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/NetworkTransport.java38
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/Transport.java56
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/io/InputHandler_0_9.java130
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/io/IoAcceptor.java92
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/io/IoContext.java35
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java116
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java162
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java307
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/io/IoTransport.java231
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/mina/MINANetworkDriver.java435
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/mina/MinaHandler.java274
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/mina/MinaSender.java90
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/nio/NioHandler.java135
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/nio/NioSender.java126
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/security/SecurityLayer.java185
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLEncryptor.java66
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLReceiver.java86
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLSender.java123
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/QpidClientX509KeyManager.java100
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java202
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java274
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java197
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/util/Functions.java102
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/util/Logger.java130
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/util/SliceIterator.java59
-rw-r--r--java/common/src/main/java/org/apache/qpid/transport/util/Waiter.java63
-rw-r--r--java/common/src/main/java/org/apache/qpid/url/AMQBindingURL.java237
-rw-r--r--java/common/src/main/java/org/apache/qpid/url/BindingURL.java60
-rw-r--r--java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java478
-rw-r--r--java/common/src/main/java/org/apache/qpid/url/URLHelper.java173
-rw-r--r--java/common/src/main/java/org/apache/qpid/url/URLSyntaxException.java97
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/CommandLineParser.java695
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedMessageQueueAtomicSize.java258
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedQueueAtomicSize.java70
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedQueueNoSize.java38
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/FileUtils.java395
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/MessageQueue.java43
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/NameUUIDGen.java59
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/NetMatcher.java264
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/PrettyPrintingUtils.java75
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/RandomUUIDGen.java39
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/Serial.java108
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/Strings.java260
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/UUIDGen.java36
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/UUIDs.java59
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/concurrent/AlreadyUnblockedException.java34
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueue.java122
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueueBase.java834
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/concurrent/BooleanLatch.java128
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/concurrent/Capacity.java35
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/concurrent/SynchBuffer.java50
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/concurrent/SynchException.java52
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/concurrent/SynchQueue.java48
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRecord.java74
-rw-r--r--java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRef.java51
-rw-r--r--java/common/src/test/java/org/apache/mina/SocketIOTest/IOWriterClient.java396
-rw-r--r--java/common/src/test/java/org/apache/mina/SocketIOTest/IOWriterServer.java157
-rw-r--r--java/common/src/test/java/org/apache/qpid/AMQExceptionTest.java106
-rw-r--r--java/common/src/test/java/org/apache/qpid/codec/AMQDecoderTest.java151
-rw-r--r--java/common/src/test/java/org/apache/qpid/codec/MockAMQVersionAwareProtocolSession.java105
-rw-r--r--java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java109
-rw-r--r--java/common/src/test/java/org/apache/qpid/framing/BasicContentHeaderPropertiesTest.java188
-rw-r--r--java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java974
-rw-r--r--java/common/src/test/java/org/apache/qpid/framing/abstraction/MessagePublishInfoImplTest.java99
-rw-r--r--java/common/src/test/java/org/apache/qpid/pool/ReferenceCountingExecutorServiceTest.java159
-rw-r--r--java/common/src/test/java/org/apache/qpid/session/TestSession.java277
-rw-r--r--java/common/src/test/java/org/apache/qpid/test/utils/QpidTestCase.java130
-rw-r--r--java/common/src/test/java/org/apache/qpid/thread/ThreadFactoryTest.java104
-rw-r--r--java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java446
-rw-r--r--java/common/src/test/java/org/apache/qpid/transport/GenTest.java44
-rw-r--r--java/common/src/test/java/org/apache/qpid/transport/RangeSetTest.java238
-rw-r--r--java/common/src/test/java/org/apache/qpid/transport/TestNetworkDriver.java133
-rw-r--r--java/common/src/test/java/org/apache/qpid/transport/codec/BBEncoderTest.java47
-rw-r--r--java/common/src/test/java/org/apache/qpid/transport/network/mina/MINANetworkDriverTest.java494
-rw-r--r--java/common/src/test/java/org/apache/qpid/util/CommandLineParserTest.java554
-rw-r--r--java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java612
-rw-r--r--java/common/src/test/java/org/apache/qpid/util/PropertyUtilsTest.java48
-rw-r--r--java/common/src/test/java/org/apache/qpid/util/SerialTest.java82
-rw-r--r--java/common/templates/method/MethodBodyInterface.vm62
-rw-r--r--java/common/templates/method/version/MethodBodyClass.vm213
-rw-r--r--java/common/templates/model/ClientMethodDispatcherInterface.vm56
-rw-r--r--java/common/templates/model/MethodDispatcherInterface.vm39
-rw-r--r--java/common/templates/model/MethodRegistryClass.vm104
-rw-r--r--java/common/templates/model/ProtocolVersionListClass.vm201
-rw-r--r--java/common/templates/model/ServerMethodDispatcherInterface.vm56
-rw-r--r--java/common/templates/model/version/AmqpConstantsClass.vm37
-rw-r--r--java/common/templates/model/version/ClientMethodDispatcherInterface.vm55
-rw-r--r--java/common/templates/model/version/MethodDispatcherInterface.vm43
-rw-r--r--java/common/templates/model/version/MethodRegistryClass.vm193
-rw-r--r--java/common/templates/model/version/ServerMethodDispatcherInterface.vm55
-rw-r--r--java/common/templating.py119
299 files changed, 0 insertions, 46080 deletions
diff --git a/java/common/Composite.tpl b/java/common/Composite.tpl
deleted file mode 100644
index 350dd893c8..0000000000
--- a/java/common/Composite.tpl
+++ /dev/null
@@ -1,350 +0,0 @@
-package org.apache.qpid.transport;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.apache.qpid.transport.codec.Decoder;
-import org.apache.qpid.transport.codec.Encodable;
-import org.apache.qpid.transport.codec.Encoder;
-
-import org.apache.qpid.transport.network.Frame;
-
-import org.apache.qpid.util.Strings;
-
-
-${
-from genutil import *
-
-cls = klass(type)["@name"]
-
-segments = type["segments"]
-
-connectioncontrol="false"
-
-if type.name in ("control", "command"):
- base = "Method"
- size = 0
- pack = 2
- if segments:
- payload = "true"
- else:
- payload = "false"
- if type.name == "control" and cls == "connection":
- track = "Frame.L1"
- connectioncontrol="true"
- elif cls == "session" and type["@name"] in ("attach", "attached", "detach", "detached"):
- track = "Frame.L2"
- elif type.name == "command":
- track = "Frame.L4"
- else:
- track = "Frame.L3"
-else:
- base = "Struct"
- size = type["@size"]
- pack = num(type["@pack"])
- payload = "false"
- track = "-1"
-
-PACK_TYPES = {
- 1: "byte",
- 2: "short",
- 4: "int"
-}
-
-typecode = code(type)
-}
-
-public final class $name extends $base {
-
- public static final int TYPE = $typecode;
-
- public final int getStructType() {
- return TYPE;
- }
-
- public final int getSizeWidth() {
- return $size;
- }
-
- public final int getPackWidth() {
- return $pack;
- }
-
- public final boolean hasPayload() {
- return $payload;
- }
-
- public final byte getEncodedTrack() {
- return $track;
- }
-
- public final boolean isConnectionControl()
- {
- return $connectioncontrol;
- }
-
-${
-
-if pack > 0:
- out(" private $(PACK_TYPES[pack]) packing_flags = 0;\n");
-
-fields = get_fields(type)
-params = get_parameters(type, fields)
-options = get_options(fields)
-
-for f in fields:
- if not f.empty:
- out(" private $(f.type) $(f.name);\n")
-
-if segments:
- out(" private Header header;\n")
- out(" private ByteBuffer body;\n")
-}
-
-${
-if fields:
- out(" public $name() {}\n")
-}
-
- public $name($(", ".join(params))) {
-${
-for f in fields:
- if f.option: continue
- if f.ref_type != f.type:
- out(" $(f.set)($(f.name));\n")
- else:
- out(" if($(f.name) != null) {\n")
- out(" $(f.set)($(f.name));\n")
- out(" }\n")
-
-if segments:
- out(" setHeader(header);\n")
- out(" setBody(body);\n")
-
-if options or base == "Method":
- out("""
- for (int i=0; i < _options.length; i++) {
- switch (_options[i]) {
-""")
-
- for f in options:
- out(" case $(f.option): packing_flags |= $(f.flag_mask(pack)); break;\n")
-
- if base == "Method":
- out(""" case SYNC: this.setSync(true); break;
- case BATCH: this.setBatch(true); break;
- case UNRELIABLE: this.setUnreliable(true); break;
-""")
- out(""" case NONE: break;
- default: throw new IllegalArgumentException("invalid option: " + _options[i]);
- }
- }
-""")
-}
- }
-
-${
-
-if base == "Method":
- out(""" public <C> void dispatch(C context, MethodDelegate<C> delegate) {
- delegate.$(dromedary(name))(context, this);
- }""")
-}
-
-${
-for f in fields:
- if pack > 0:
- out("""
- public final boolean $(f.has)() {
- return (packing_flags & $(f.flag_mask(pack))) != 0;
- }
-
- public final $name $(f.clear)() {
- packing_flags &= ~$(f.flag_mask(pack));
-${
-if not f.empty:
- out(" this.$(f.name) = $(f.default);")
-}
- this.dirty = true;
- return this;
- }
-""")
-
- out("""
- public final $(f.type) $(f.get)() {
-${
-if f.empty:
- out(" return $(f.has)();")
-else:
- out(" return $(f.name);")
-}
- }
-
- public final $name $(f.set)($(f.type) value) {
-${
-if not f.empty:
- out(" this.$(f.name) = value;")
-}
-${
-if pack > 0:
- if f.empty:
- out(" if (value)\\n")
- out(" packing_flags |= $(f.flag_mask(pack));\\n")
- out(" else\\n")
- out(" packing_flags &= ~$(f.flag_mask(pack));")
- else:
- out(" packing_flags |= $(f.flag_mask(pack));")
-}
- this.dirty = true;
- return this;
- }
-
- public final $name $(f.name)($(f.type) value) {
- return $(f.set)(value);
- }
-""")
-}
-
-${
-if segments:
- out(""" public final Header getHeader() {
- return this.header;
- }
-
- public final void setHeader(Header header) {
- this.header = header;
- }
-
- public final $name header(Header header) {
- setHeader(header);
- return this;
- }
-
- public final ByteBuffer getBody() {
- if (this.body == null)
- {
- return null;
- }
- else
- {
- return this.body.slice();
- }
- }
-
- public final void setBody(ByteBuffer body) {
- this.body = body;
- }
-
- public final $name body(ByteBuffer body)
- {
- setBody(body);
- return this;
- }
-
- public final byte[] getBodyBytes() {
- ByteBuffer buf = getBody();
- byte[] bytes = new byte[buf.remaining()];
- buf.get(bytes);
- return bytes;
- }
-
- public final void setBody(byte[] body)
- {
- setBody(ByteBuffer.wrap(body));
- }
-
- public final String getBodyString() {
- return Strings.fromUTF8(getBodyBytes());
- }
-
- public final void setBody(String body) {
- setBody(Strings.toUTF8(body));
- }
-""")
-}
-
- public void write(Encoder enc)
- {
-${
-if pack > 0:
- out(" enc.writeUint%s(packing_flags);\n" % (pack*8));
-
-for f in fields:
- if f.empty:
- continue
- if pack > 0:
- out(" if ((packing_flags & $(f.flag_mask(pack))) != 0)\n ")
- pre = ""
- post = ""
- if f.type_node.name == "struct":
- pre = "%s.TYPE, " % cname(f.type_node)
- elif f.type_node.name == "domain":
- post = ".getValue()"
- out(" enc.write$(f.coder)($(pre)this.$(f.name)$(post));\n")
-}
- }
-
- public void read(Decoder dec)
- {
-${
-if pack > 0:
- out(" packing_flags = ($(PACK_TYPES[pack])) dec.readUint%s();\n" % (pack*8));
-
-for f in fields:
- if f.empty:
- continue
- if pack > 0:
- out(" if ((packing_flags & $(f.flag_mask(pack))) != 0)\n ")
- pre = ""
- post = ""
- arg = ""
- if f.type_node.name == "struct":
- pre = "(%s)" % cname(f.type_node)
- arg = "%s.TYPE" % cname(f.type_node)
- elif f.type_node.name == "domain":
- pre = "%s.get(" % cname(f.type_node)
- post = ")"
- out(" this.$(f.name) = $(pre)dec.read$(f.coder)($(arg))$(post);\n")
-}
- }
-
- public Map<String,Object> getFields()
- {
- Map<String,Object> result = new LinkedHashMap<String,Object>();
-
-${
-for f in fields:
- if pack > 0:
- out(" if ((packing_flags & $(f.flag_mask(pack))) != 0)\n ")
- out(' result.put("$(f.name)", $(f.get)());\n')
-}
-
- return result;
- }
-
-}
diff --git a/java/common/Constant.tpl b/java/common/Constant.tpl
deleted file mode 100644
index da4233c847..0000000000
--- a/java/common/Constant.tpl
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.apache.qpid.transport;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-${from genutil import *}
-
-public interface Constant
-{
-${
-constants = spec.query["amqp/constant"]
-
-for c in constants:
- name = scream(c["@name"])
- value = c["@value"]
- out(" public static final int $name = $value;\n")
-}}
diff --git a/java/common/Enum.tpl b/java/common/Enum.tpl
deleted file mode 100644
index 0835d34a20..0000000000
--- a/java/common/Enum.tpl
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.apache.qpid.transport;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-public enum $name {
-${
-from genutil import *
-
-vtype = jtype(resolve_type(type))
-
-choices = [(scream(ch["@name"]), "(%s) %s" % (vtype, ch["@value"]))
- for ch in type.query["enum/choice"]]
-}
- $(",\n ".join(["%s(%s)" % ch for ch in choices]));
-
- private final $vtype value;
-
- $name($vtype value)
- {
- this.value = value;
- }
-
- public $vtype getValue()
- {
- return value;
- }
-
- public static $name get($vtype value)
- {
- switch (value)
- {
-${
-for ch, value in choices:
- out(' case $value: return $ch;\n')
-} default: throw new IllegalArgumentException("no such value: " + value);
- }
- }
-}
diff --git a/java/common/Invoker.tpl b/java/common/Invoker.tpl
deleted file mode 100644
index 2eed43ad28..0000000000
--- a/java/common/Invoker.tpl
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.apache.qpid.transport;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.nio.ByteBuffer;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-public abstract class $(invoker) {
-${
-from genutil import *
-
-results = False
-
-for c in composites:
- name = cname(c)
- fields = get_fields(c)
- params = get_parameters(c, fields)
- args = get_arguments(c, fields)
- result = c["result"]
- if result:
- results = True
- if not result["@type"]:
- rname = cname(result["struct"])
- else:
- rname = cname(result, "@type")
- jresult = "Future<%s>" % rname
- jreturn = "return "
- jclass = ", %s.class" % rname
- else:
- jresult = "void"
- jreturn = ""
- jclass = ""
-
- if c.name == "command":
- access = "public "
- else:
- access = ""
-
- out("""
- $(access)final $jresult $(dromedary(name))($(", ".join(params))) {
- $(jreturn)invoke(new $name($(", ".join(args)))$jclass);
- }
-""")
-}
- protected abstract void invoke(Method method);
-${
-if results:
- out("""
- protected abstract <T> Future<T> invoke(Method method, Class<T> resultClass);
-""")
-}
-}
diff --git a/java/common/MethodDelegate.tpl b/java/common/MethodDelegate.tpl
deleted file mode 100644
index 27e20a7ef2..0000000000
--- a/java/common/MethodDelegate.tpl
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.apache.qpid.transport;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-public abstract class MethodDelegate<C> {
-
- public abstract void handle(C context, Method method);
-${
-from genutil import *
-
-for c in composites:
- name = cname(c)
- out("""
- public void $(dromedary(name))(C context, $name method) {
- handle(context, method);
- }""")
-}
-}
diff --git a/java/common/Option.tpl b/java/common/Option.tpl
deleted file mode 100644
index c22b35b999..0000000000
--- a/java/common/Option.tpl
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.apache.qpid.transport;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-public enum Option {
-
-${
-from genutil import *
-
-options = {}
-
-for c in composites:
- for f in c.query["field"]:
- t = resolve_type(f)
- if t["@name"] == "bit":
- option = scream(f["@name"])
- if not options.has_key(option):
- options[option] = None
- out(" $option,\n")}
- BATCH,
- UNRELIABLE,
- NONE
-}
diff --git a/java/common/StructFactory.tpl b/java/common/StructFactory.tpl
deleted file mode 100644
index 09c669f74e..0000000000
--- a/java/common/StructFactory.tpl
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.apache.qpid.transport;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-class StructFactory {
-
- public static Struct create(int type)
- {
- switch (type)
- {
-${
-from genutil import *
-
-fragment = """ case $name.TYPE:
- return new $name();
-"""
-
-for c in composites:
- name = cname(c)
- if c.name == "struct":
- out(fragment)
-} default:
- throw new IllegalArgumentException("type: " + type);
- }
- }
-
- public static Struct createInstruction(int type)
- {
- switch (type)
- {
-${
-for c in composites:
- name = cname(c)
- if c.name in ("command", "control"):
- out(fragment)
-} default:
- throw new IllegalArgumentException("type: " + type);
- }
- }
-
-}
diff --git a/java/common/Type.tpl b/java/common/Type.tpl
deleted file mode 100644
index 7f9cfee268..0000000000
--- a/java/common/Type.tpl
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.apache.qpid.transport;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-${from genutil import *}
-
-public enum Type
-{
-
-${
-types = spec.query["amqp/type"] + spec.query["amqp/class/type"]
-codes = {}
-first = True
-for t in types:
- code = t["@code"]
- fix_width = t["@fixed-width"]
- var_width = t["@variable-width"]
-
- if code is None:
- continue
-
- if fix_width is None:
- width = var_width
- fixed = "false"
- else:
- width = fix_width
- fixed = "true"
-
- name = scream(t["@name"])
- codes[code] = name
-
- if first:
- first = False
- else:
- out(",\n")
-
- out(" $name((byte) $code, $width, $fixed)")
-};
-
- public byte code;
- public int width;
- public boolean fixed;
-
- Type(byte code, int width, boolean fixed)
- {
- this.code = code;
- this.width = width;
- this.fixed = fixed;
- }
-
- public static Type get(byte code)
- {
- switch (code)
- {
-${
-keys = list(codes.keys())
-keys.sort()
-
-for code in keys:
- out(" case (byte) $code: return $(codes[code]);\n")
-}
- default: return null;
- }
- }
-}
diff --git a/java/common/bin/qpid-jaddr b/java/common/bin/qpid-jaddr
deleted file mode 100755
index d456171bf1..0000000000
--- a/java/common/bin/qpid-jaddr
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-if [ -z "$QPID_HOME" ]; then
- export QPID_HOME=$(dirname $(dirname $(readlink -f $0)))
- export PATH=${PATH}:${QPID_HOME}/bin
-fi
-
-# Set classpath to include Qpid jar with all required jars in manifest
-QPID_LIBS=$QPID_HOME/lib/qpid-all.jar
-
-# Set other variables used by the qpid-run script before calling
-export JAVA=java \
- QPID_CLASSPATH=$QPID_LIBS
-
-. qpid-run org.apache.qpid.messaging.util.JAddr "$@"
diff --git a/java/common/bin/qpid-run b/java/common/bin/qpid-run
deleted file mode 100755
index 15d88992df..0000000000
--- a/java/common/bin/qpid-run
+++ /dev/null
@@ -1,259 +0,0 @@
-#!/bin/bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-# Test if we're running on cygwin.
-cygwin=false
-if [[ "$(uname -a | fgrep Cygwin)" != "" ]]; then
- cygwin=true
-fi
-
-die() {
- if [[ $1 = -usage ]]; then
- shift
- usage=true
- else
- usage=false
- fi
- echo "$@"
- $usage && echo
- $usage && usage
- exit 1
-}
-
-OFF=0
-WARN=1
-INFO=2
-
-if [ -z "$QPID_RUN_LOG" ]; then
- QPID_RUN_LOG=$OFF
-fi
-
-log() {
- if [ "$1" -le "$QPID_RUN_LOG" ]; then
- shift
- echo "$@"
- fi
-}
-
-if [ -z $AMQJ_LOGGING_LEVEL ]; then
- export AMQJ_LOGGING_LEVEL=info
-fi
-
-if [ -z "$QPID_HOME" ]; then
- export QPID_HOME=$(dirname $(dirname $(readlink -f $0)))
- export PATH=${PATH}:${QPID_HOME}/bin
-fi
-
-if [ -z "$QPID_WORK" ]; then
- log $INFO Setting QPID_WORK to $HOME as default
- QPID_WORK=$HOME
-fi
-
-if [ -z "$JAVA" ]; then
- JAVA=java
-fi
-
-if $cygwin; then
- QPID_HOME=$(cygpath -w $QPID_HOME)
- QPID_WORK=$(cygpath -w $QPID_WORK)
-fi
-
-#Set the default system properties that we'll use now that they have
-#all been initialised
-SYSTEM_PROPS="-Damqj.logging.level=$AMQJ_LOGGING_LEVEL -DQPID_HOME=$QPID_HOME -DQPID_WORK=$QPID_WORK"
-
-#If logprefix or logsuffix set to use PID make that happen
-#Otherwise just pass the value through for these props
-#Using X character to avoid probs with empty strings
-if [ -n "$QPID_LOG_PREFIX" ]; then
- if [ "X$QPID_LOG_PREFIX" = "XPID" ]; then
- log $INFO Using pid in qpid log name prefix
- LOG_PREFIX=" -Dlogprefix=$$"
- else
- log $INFO Using qpid logprefix property
- LOG_PREFIX=" -Dlogprefix=$QPID_LOG_PREFIX"
- fi
- SYSTEM_PROPS="${SYSTEM_PROPS} ${LOG_PREFIX}"
-fi
-
-if [ -n "$QPID_LOG_SUFFIX" ]; then
- if [ "X$QPID_LOG_SUFFIX" = "XPID" ]; then
- log $INFO Using pid in qpid log name suffix
- LOG_SUFFIX=" -Dlogsuffix=$$"
- else
- log $INFO Using qpig logsuffix property
- LOG_SUFFIX=" -Dlogsuffix=$QPID_LOG_SUFFIX"
- fi
- SYSTEM_PROPS="${SYSTEM_PROPS} ${LOG_SUFFIX}"
-fi
-
-log $INFO System Properties set to $SYSTEM_PROPS
-log $INFO QPID_OPTS set to $QPID_OPTS
-
-program=$(basename $0)
-sourced=${BASH_SOURCE[0]}
-if [[ -z ${sourced:-''} ]]; then
- sourced=$(which qpid-run) || ${QPID_HOME}/bin/qpid-run
-fi
-
-usage() {
- echo Usage: $program ... "[-run:<option>]" ...
- echo
- echo Options:
- egrep -B 1 "^\s*#USAGE: " ${sourced} |\
- sed "s/#USAGE:/ /" |\
- sed "s/-run:\(.*\))/-run:\1/" |\
- sed "s/-run:\(.*\)=\*/-run:\1=<value>/" |\
- sed "s/^--$//"
-}
-
-export EXTERNAL_CLASSPATH=$CLASSPATH
-unset CLASSPATH
-
-#Use QPID_CLASSPATH if set
-if [ -n "$QPID_CLASSPATH" ]; then
- export CLASSPATH=$QPID_CLASSPATH
- log $INFO "Using QPID_CLASSPATH" $QPID_CLASSPATH
-else
- log $WARN "Warning: Qpid classpath not set. CLASSPATH must include qpid jars."
-fi
-
-#Use QPID_JAVA_GC if set
-if [ -n "$QPID_JAVA_GC" ]; then
- export JAVA_GC=$QPID_JAVA_GC
- log $INFO "Using QPID_JAVA_GC setting" $QPID_JAVA_GC
-else
- log $INFO "Info: QPID_JAVA_GC not set. Defaulting to JAVA_GC" $JAVA_GC
-fi
-
-
-#Use QPID_JAVA_MEM if set
-if [ -n "$QPID_JAVA_MEM" ]; then
- export JAVA_MEM=$QPID_JAVA_MEM
- log $INFO "Using QPID_JAVA_MEM setting" $QPID_JAVA_MEM
-else
- log $INFO "Info: QPID_JAVA_MEM not set. Defaulting to JAVA_MEM" $JAVA_MEM
-fi
-
-declare -a RUN_ARGS JAVA_ARGS
-for arg in "$@"; do
- if [[ $arg == -run:* ]]; then
- RUN_ARGS[${#RUN_ARGS[@]}]="$arg"
- else
- JAVA_ARGS[${#JAVA_ARGS[@]}]="$arg"
- fi
-done
-
-# this defines the default behavior, it may be modified during option
-# processing below
-DISPATCH() {
- if $debug; then
- echo "CLASSPATH=${CLASSPATH}"
- echo "${COMMAND[@]}"
- fi
-
- exec "${COMMAND[@]}"
-}
-
-exclusive() {
- if [ -z "$PREVIOUS_ARGS" ]; then
- PREVIOUS_ARGS=$1
- else
- PREVIOUS_ARGS="${PREVIOUS_ARGS}, $1"
- DISPATCH() {
- die -usage "you must choose one of: $PREVIOUS_ARGS"
- }
- fi
-}
-
-debug=false
-
-for arg in "${RUN_ARGS[@]}"; do
- case $arg in
- -run:debug)
-#USAGE: print the classpath and command before running it
- debug=true
- ;;
- -run:jpda)
-#USAGE: adds debugging options to the java command, use
-#USAGE: JPDA_TRANSPORT and JPDA_ADDRESS to customize the debugging
-#USAGE: behavior and use JPDA_OPTS to override it entirely
- if [ -z "$JPDA_OPTS" ]; then
- JPDA_OPTS="-Xdebug -Xrunjdwp:transport=${JPDA_TRANSPORT:-dt_socket},address=${JPDA_ADDRESS:-8000},server=y,suspend=n"
- fi
- QPID_OPTS="${QPID_OPTS} ${JPDA_OPTS}"
- ;;
- -run:external-classpath=*)
-#USAGE: controls how the CLASSPATH environment variable is used by
-#USAGE: this script, value can be one of ignore (the default), first,
-#USAGE: last, and only
- case $arg in
- *=ignore)
- # do nothing
- ;;
- *=first)
- CLASSPATH=$EXTERNAL_CLASSPATH:$CLASSPATH
- ;;
- *=last)
- CLASSPATH=$CLASSPATH:$EXTERNAL_CLASSPATH
- ;;
- *=only)
- CLASSPATH=$EXTERNAL_CLASSPATH
- ;;
- *)
- die -usage $(echo $arg | sed "s/=/: invalid value '/")\'
- ;;
- esac
- ;;
- -run:print-classpath)
-#USAGE: print the classpath
- DISPATCH() {
- echo $CLASSPATH
- }
- exclusive $arg
- ;;
- -run:print-command)
-#USAGE: print the command
- DISPATCH() {
- echo "${COMMAND[@]}"
- }
- exclusive $arg
- ;;
- -run:help)
-#USAGE: print this message
- DISPATCH() {
- usage
- }
- exclusive $arg
- ;;
- *)
- die -usage "unrecognized -run option '$arg'"
- ;;
- esac
-done
-
-if $cygwin; then
- CLASSPATH=$(cygpath -w -p $CLASSPATH)
- JAVA=$(cygpath -u $JAVA)
-fi
-
-COMMAND=($JAVA $JAVA_VM $QPID_PNAME $JAVA_GC $JAVA_MEM $SYSTEM_PROPS $JAVA_OPTS $QPID_OPTS "${JAVA_ARGS[@]}")
-
-DISPATCH
diff --git a/java/common/build.xml b/java/common/build.xml
deleted file mode 100644
index f2f85fc634..0000000000
--- a/java/common/build.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<!--
- -
- - Licensed to the Apache Software Foundation (ASF) under one
- - or more contributor license agreements. See the NOTICE file
- - distributed with this work for additional information
- - regarding copyright ownership. The ASF licenses this file
- - to you under the Apache License, Version 2.0 (the
- - "License"); you may not use this file except in compliance
- - with the License. You may obtain a copy of the License at
- -
- - http://www.apache.org/licenses/LICENSE-2.0
- -
- - Unless required by applicable law or agreed to in writing,
- - software distributed under the License is distributed on an
- - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- - KIND, either express or implied. See the License for the
- - specific language governing permissions and limitations
- - under the License.
- -
- -->
-<project name="AMQ Common" default="build">
-
- <property name="module.genpom" value="true"/>
-
- <import file="../module.xml"/>
-
- <property name="generated.package" value="org/apache/qpid/framing" />
- <property name="framing.generated.dir" location="${module.precompiled}/${generated.package}" />
- <property name="qpidbuildversion.java" location="${module.precompiled}/org/apache/qpid/QpidBuildVersion.java" />
- <property name="xml.spec.dir" location="${project.root}/../specs" />
- <property name="xml.spec.deps" value="amqp.0-8.xml amqp.0-9.xml amqp0-9-1.stripped.xml" />
- <property name="xml.spec.list" value='"${xml.spec.dir}/amqp.0-8.xml" "${xml.spec.dir}/amqp.0-9.xml" "${xml.spec.dir}/amqp0-9-1.stripped.xml"' />
- <property name="gentools.timestamp" location="${framing.generated.dir}/gentools.timestamp" />
- <property name="jython.timestamp" location="${framing.generated.dir}/jython.timestamp" />
-
- <target name="check_jython_deps">
- <uptodate property="jython.notRequired" targetfile="${jython.timestamp}">
- <srcfiles dir="${xml.spec.dir}" includes="amqp.0-10-qpid-errata.xml" />
- </uptodate>
- </target>
-
- <target name="jython" depends="check_jython_deps" unless="jython.notRequired">
- <jython path="${mllib.dir}">
- <args>
- <arg value="${basedir}/codegen"/>
- <arg value="${module.precompiled}"/>
- <arg value="${xml.spec.dir}/amqp.0-10-qpid-errata.xml"/>
- <arg value="${basedir}"/>
- </args>
- </jython>
- <touch file="${jython.timestamp}" />
- </target>
-
- <target name="compile_gentools">
- <ant dir="${gentools.home}" />
- </target>
-
- <target name="check_gentool_deps">
- <uptodate property="gentools.notRequired" targetfile="${gentools.timestamp}">
- <srcfiles dir="${xml.spec.dir}" includes="${xml.spec.deps}" />
- </uptodate>
- </target>
-
- <target name="gentools" depends="compile_gentools,check_gentool_deps" unless="gentools.notRequired">
- <mkdir dir="${framing.generated.dir}"/>
- <java classname="org.apache.qpid.gentools.Main" fork="true" dir="${gentools.home}/src" failonerror="true">
- <arg line='-j -o "${framing.generated.dir}" -t "${project.root}/common/templates" ${xml.spec.list}'/>
- <classpath>
- <pathelement path="${gentools.home}/src" />
- <fileset dir="${gentools.home}/lib">
- <include name="**/*.jar"/>
- </fileset>
- <pathelement path="${gentools.home}/lib/velocity-1.4.jar" />
- <pathelement path="${gentools.home}/lib/velocity-dep-1.4.jar" />
- </classpath>
- </java>
- <touch file="${gentools.timestamp}" />
- </target>
-
- <target name="build-version" depends="create-version" if="version-stale">
- <tstamp>
- <format property="build.time" pattern="yyyy-MM-dd HH:mm:ss z" timezone="UTC"/>
- </tstamp>
-
- <echo file="${qpidbuildversion.java}" append="false">package org.apache.qpid;
-
-public class QpidBuildVersion
-{
- public static final String VERSION = "${project.version}";
- public static final String SVN_VERSION = "${svnversion.output}";
- public static final String BUILD_PROJECT = "${project.name}";
- public static final String BUILD_TIME = "${build.time}";
-
-}
-</echo>
-
- </target>
-
- <target name="precompile" depends="gentools,jython,create-version,build-version"/>
-
- <target name="bundle" depends="bundle-tasks"/>
-</project>
diff --git a/java/common/codegen b/java/common/codegen
deleted file mode 100755
index 6a1effc07b..0000000000
--- a/java/common/codegen
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/env python
-
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-import os, sys, mllib
-from templating import Parser
-from genutil import *
-
-out_dir = sys.argv[1]
-spec_file = sys.argv[2]
-tpl_dir = sys.argv[3]
-pkg_dir = os.path.join(out_dir, "org/apache/qpid/transport")
-
-if not os.path.exists(pkg_dir):
- os.makedirs(pkg_dir)
-
-spec = mllib.xml_parse(spec_file)
-
-def excludes(nd):
- if (nd.parent is not None and
- nd.parent.name == "class" and
- nd.parent["@name"] in ("file", "stream")):
- return False
- else:
- return True
-
-def execute(output, template, **kwargs):
- f = open(os.path.join(tpl_dir, template))
- input = f.read()
- f.close()
- p = Parser(**kwargs)
- p.parse(input)
- fname = os.path.join(pkg_dir, output)
- f = open(fname, "w")
- f.write(p.output)
- f.close()
-
-execute("Type.java", "Type.tpl", spec = spec)
-execute("Constant.java", "Constant.tpl", spec = spec)
-
-structs = spec.query["amqp/struct"] + \
- spec.query["amqp/class/struct", excludes] + \
- spec.query["amqp/class/command/result/struct", excludes]
-controls = spec.query["amqp/class/control", excludes]
-commands = spec.query["amqp/class/command", excludes]
-
-composites = structs + controls + commands
-actions = controls + commands
-connection = [c for c in actions if c.parent["@name"] == "connection"]
-session = [c for c in actions if c.parent["@name"] != "connection"]
-
-for c in composites:
- name = cname(c)
- execute("%s.java" % name, "Composite.tpl", type = c, name = name)
-
-execute("MethodDelegate.java", "MethodDelegate.tpl", composites = actions)
-execute("Option.java", "Option.tpl", composites = composites)
-execute("ConnectionInvoker.java", "Invoker.tpl", invoker = "ConnectionInvoker",
- composites = connection)
-execute("SessionInvoker.java", "Invoker.tpl", invoker = "SessionInvoker",
- composites = session)
-execute("StructFactory.java", "StructFactory.tpl", composites = composites)
-
-def is_enum(nd):
- return nd["enum"] is not None
-
-enums = spec.query["amqp/domain", is_enum] + \
- spec.query["amqp/class/domain", is_enum]
-
-for e in enums:
- name = cname(e)
- execute("%s.java" % name, "Enum.tpl", name = name, type = e)
diff --git a/java/common/etc/qpid-run.conf b/java/common/etc/qpid-run.conf
deleted file mode 100644
index b9765fe3ce..0000000000
--- a/java/common/etc/qpid-run.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-QPID_LIBS=$(find ${QPID_HOME}/lib -name "*.jar" -print | sed -e :a -e '$!N;s/\n/:/;ta' -e 'P;D')
-
-export JAVA=java \
- JAVA_VM=-server \
- JAVA_MEM=-Xmx1024m \
- CLASSPATH=$QPID_LIBS
diff --git a/java/common/etc/qpid-run.conf.dev b/java/common/etc/qpid-run.conf.dev
deleted file mode 100644
index a5419eb4e8..0000000000
--- a/java/common/etc/qpid-run.conf.dev
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-QPID_LIBS=$(find ${QPID_HOME} -type d -name "classes" -print | sed -e :a -e '$!N;s/\n/:/;ta' -e 'P;D')
-QPID_LIBS=${QPID_LIBS}:$(find $(dirname ${QPID_HOME}) -name "*.jar" -print | sed -e :a -e '$!N;s/\n/:/;ta' -e 'P;D')
-
-export JAVA=java \
- JAVA_VM=-server \
- JAVA_MEM=-Xmx1024m \
- CLASSPATH=$QPID_LIBS
diff --git a/java/common/genutil.py b/java/common/genutil.py
deleted file mode 100644
index 57a461ed40..0000000000
--- a/java/common/genutil.py
+++ /dev/null
@@ -1,256 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-def camel(offset, *args):
- parts = []
- for a in args:
- parts.extend(a.split("-"))
- return "".join(parts[:offset] + [p[0].upper() + p[1:] for p in parts[offset:]])
-
-def dromedary(s):
- return s[0].lower() + s[1:]
-
-def scream(*args):
- return "_".join([a.replace("-", "_").upper() for a in args])
-
-def num(x, default=None):
- if x is not None and x != "":
- return int(x, 0)
- else:
- return default
-
-def klass(nd):
- parent = nd.parent
- while parent is not None:
- if hasattr(parent, "name") and parent.name == "class":
- return parent
- parent = parent.parent
-
-untyped = -1
-
-def code(nd):
- global untyped
- cd = num(nd["@code"])
- if cd is None:
- cd = untyped
- untyped -= 1
- return cd
-
- cls = klass(nd)
- if cls:
- cd |= (num(cls["@code"]) << 8)
- return cd
-
-def root(nd):
- if nd.parent is None:
- return nd
- else:
- return root(nd.parent)
-
-def qname(nd):
- name = nd["@name"]
- cls = klass(nd)
- if cls != None:
- return "%s.%s" % (cls["@name"], name)
- else:
- return name
-
-RESOLVED = {}
-
-def resolve(node, name):
- key = (node, name)
- if RESOLVED.has_key(key):
- return RESOLVED[key]
- else:
- spec = root(node)
- cls = klass(node)
- if cls:
- for nd in cls.query["#tag"]:
- if nd["@name"] == name:
- RESOLVED[key] = nd
- return nd
- for nd in spec.query["amqp/#tag"] + spec.query["amqp/class/#tag"]:
- if name == qname(nd):
- RESOLVED[key] = nd
- return nd
- raise Exception("unresolved name: %s" % name)
-
-def resolve_type(nd):
- if hasattr(nd, "_resolved_type"):
- return nd._resolved_type
- else:
- name = nd["@type"]
- type = resolve(nd, name)
- if type.name == "domain" and not type["enum"]:
- type = resolve_type(type)
- nd._resolved_type = type
- return type
-
-TYPES = {
- "bit": "boolean",
- "uint8": "short",
- "uint16": "int",
- "uint32": "long",
- "uint64": "long",
- "datetime": "long",
- "uuid": "UUID",
- "sequence-no": "int",
- "sequence-set": "RangeSet", # XXX
- "byte-ranges": "RangeSet", # XXX
- "str8": "String",
- "str16": "String",
- "vbin8": "byte[]",
- "vbin16": "byte[]",
- "vbin32": "byte[]",
- "struct32": "Struct",
- "map": "Map<String,Object>",
- "array": "List<Object>"
- }
-
-def cname(nd, field="@name"):
- cls = klass(nd)
- if cls:
- if (nd.name in ("struct", "result") and
- cls["@name"] != "session" and
- nd[field] != "header"):
- return camel(0, nd[field])
- else:
- return camel(0, cls["@name"], nd[field])
- else:
- return camel(0, nd[field])
-
-def jtype(nd):
- if nd.name == "struct" or nd["enum"]:
- return cname(nd)
- else:
- return TYPES[nd["@name"]]
-
-REFS = {
- "boolean": "Boolean",
- "byte": "Byte",
- "short": "Short",
- "int": "Integer",
- "long": "Long",
- "float": "Float",
- "double": "Double",
- "char": "Character"
-}
-
-def jref(jt):
- return REFS.get(jt, jt)
-
-def jclass(jt):
- idx = jt.find('<')
- if idx > 0:
- return jt[:idx]
- else:
- return jt
-
-DEFAULTS = {
- "long": 0,
- "int": 0,
- "short": 0,
- "byte": 0,
- "char": 0,
- "boolean": "false"
- }
-
-class Field:
-
- def __init__(self, index, nd):
- self.index = index
- self.name = camel(1, nd["@name"])
- self.type_node = resolve_type(nd)
- if self.type_node.name == "domain":
- self.prim_type = resolve_type(self.type_node)
- else:
- self.prim_type = self.type_node
- self.variable_width = num(self.prim_type["@variable-width"], 0)
- self.fixed_width = num(self.prim_type["@fixed-width"], 0)
- self.empty = self.variable_width == 0 and self.fixed_width == 0 and self.prim_type.name != "struct"
- tname = cname(self.type_node)
- if self.type_node.name == "struct":
- self.read = "(%s) dec.readStruct(%s.TYPE)" % (tname, tname)
- self.write = "enc.writeStruct(%s.TYPE, check(struct).%s)" % (tname, self.name)
- self.coder = "Struct"
- elif self.type_node.name == "domain":
- self.coder = camel(0, self.prim_type["@name"])
- self.read = "%s.get(dec.read%s())" % (tname, self.coder)
- self.write = "enc.write%s(check(struct).%s.getValue())" % (self.coder, self.name)
- else:
- self.coder = camel(0, self.type_node["@name"])
- self.read = "dec.read%s()" % self.coder
- self.write = "enc.write%s(check(struct).%s)" % (self.coder, self.name)
- self.type = jtype(self.type_node)
- self.ref_type = jref(self.type)
- self.default = DEFAULTS.get(self.type, "null")
- self.has = camel(1, "has", self.name)
- self.get = camel(1, "get", self.name)
- self.set = camel(1, "set", self.name)
- self.clear = camel(1, "clear", self.name)
- if self.type == "boolean":
- self.option = scream(nd["@name"])
- else:
- self.option = None
-
- def flag_mask(self, pack):
- flag = pack * 8 - 8 - (self.index/8)*8 + (self.index % 8)
- return 1 << flag
-
-
-def get_fields(nd):
- fields = []
- index = 0
- for f in nd.query["field"]:
- fields.append(Field(index, f))
- index += 1
- return fields
-
-def get_parameters(type, fields):
- params = []
- options = False
- for f in fields:
- if f.option:
- options = True
- else:
- params.append("%s %s" % (f.type, f.name))
- if type["segments"]:
- params.append("Header header")
- params.append("ByteBuffer body")
- if options or type.name in ("control", "command"):
- params.append("Option ... _options")
- return params
-
-def get_arguments(type, fields):
- args = []
- options = False
- for f in fields:
- if f.option:
- options = True
- else:
- args.append(f.name)
- if type["segments"]:
- args.append("header")
- args.append("body")
- if options or type.name in ("control", "command"):
- args.append("_options")
- return args
-
-def get_options(fields):
- return [f for f in fields if f.option]
diff --git a/java/common/protocol-version.xml b/java/common/protocol-version.xml
deleted file mode 100644
index 5435a0a582..0000000000
--- a/java/common/protocol-version.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<!--
- -
- - Licensed to the Apache Software Foundation (ASF) under one
- - or more contributor license agreements. See the NOTICE file
- - distributed with this work for additional information
- - regarding copyright ownership. The ASF licenses this file
- - to you under the Apache License, Version 2.0 (the
- - "License"); you may not use this file except in compliance
- - with the License. You may obtain a copy of the License at
- -
- - http://www.apache.org/licenses/LICENSE-2.0
- -
- - Unless required by applicable law or agreed to in writing,
- - software distributed under the License is distributed on an
- - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- - KIND, either express or implied. See the License for the
- - specific language governing permissions and limitations
- - under the License.
- -
- -->
-<project name="Qpid Common Protocol Versions" default="generate">
- <property name="topDirectoryLocation" location=".." />
- <property name="project.build.directory" location="target" />
- <property name="gentools.home" location="${topDirectoryLocation}/../gentools" />
- <property name="generated.path" location="${project.build.directory}/generated-sources/gentools" />
- <property name="generated.package" value="org/apache/qpid/framing" />
- <property name="generated.dir" location="${generated.path}/${generated.package}" />
- <property name="generated.timestamp" location="${generated.dir}/timestamp" />
- <property name="xml.spec.dir" location="${topDirectoryLocation}/../specs" />
- <property name="xml.spec.deps" value="amqp.0-8.xml amqp.0-9.xml amqp0-9-1.stripped.xml" />
- <property name="xml.spec.list" value="${xml.spec.dir}/amqp.0-8.xml ${xml.spec.dir}/amqp.0-9.xml ${xml.spec.dir}/amqp0-9-1.stripped.xml" />
- <property name="template.dir" value="${topDirectoryLocation}/common/templates" />
-
-
- <!--<target name="generate" depends="compile_generator,check_generate_deps" unless="generation.notRequired">-->
- <target name="generate" depends="compile_generator" unless="generation.notRequired">
- <mkdir dir="${generated.dir}"/>
- <java classname="org.apache.qpid.gentools.Main" fork="true" dir="${gentools.home}/src" failonerror="true">
- <arg line="-j -o ${generated.dir} -t ${template.dir} ${xml.spec.list}" />
- <classpath>
- <pathelement path="${gentools.home}/src" />
- <fileset dir="${gentools.home}/lib">
- <include name="**/*.jar"/>
- </fileset>
- <pathelement path="${gentools.home}/lib/velocity-1.4.jar" />
- <pathelement path="${gentools.home}/lib/velocity-dep-1.4.jar" />
- </classpath>
- </java>
- <touch file="${generated.timestamp}" />
- </target>
-
- <target name="check_generate_deps">
- <uptodate property="generation.notRequired" targetfile="${generated.timestamp}">
- <srcfiles dir="${xml.spec.dir}" includes="${xml.spec.deps}" />
- <srcfiles dir="${template.dir}" includes="**/*.vm **/*.tmpl" />
- </uptodate>
- </target>
-
- <target name="compile_generator">
- <ant dir="${gentools.home}" />
- </target>
-
- <target name="precompile" depends="generate"/>
-
- <target name="clean">
- <delete dir="${generated.path}" />
- </target>
-
-</project>
-
diff --git a/java/common/readme.txt b/java/common/readme.txt
deleted file mode 100644
index 12841fa08d..0000000000
--- a/java/common/readme.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-AMQP Common Java API
-
-Common generated functionality for AMQP Java client and broker. See the
-readme in the client and broker directories.
diff --git a/java/common/src/main/java/common.bnd b/java/common/src/main/java/common.bnd
deleted file mode 100755
index 89c397f400..0000000000
--- a/java/common/src/main/java/common.bnd
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-ver: 0.11.0
-
-Bundle-SymbolicName: qpid-common
-Bundle-Version: ${ver}
-Export-Package: *;version=${ver}
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/java/common/src/main/java/org/apache/configuration/PropertyNameResolver.java b/java/common/src/main/java/org/apache/configuration/PropertyNameResolver.java
deleted file mode 100644
index 73ee747c07..0000000000
--- a/java/common/src/main/java/org/apache/configuration/PropertyNameResolver.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*
-*/
-
-package org.apache.configuration;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class PropertyNameResolver
-{
- public static interface Accessor
- {
- Object get(String name);
- }
-
- private static Map<Class<?>,Accessor> accessors = new HashMap<Class<?>,Accessor>();
- protected Map<String,QpidProperty> properties;
-
- private static class BooleanAccessor implements Accessor
- {
- public Boolean get(String name)
- {
- return Boolean.getBoolean(name);
- }
- }
-
- private static class IntegerAccessor implements Accessor
- {
- public Integer get(String name)
- {
- return Integer.getInteger(name);
- }
- }
-
- private static class LongAccessor implements Accessor
- {
- public Long get(String name)
- {
- return Long.getLong(name);
- }
- }
-
- private static class StringAccessor implements Accessor
- {
- public String get(String name)
- {
- return System.getProperty(name);
- }
- }
-
- static
- {
- accessors.put(Boolean.class, new BooleanAccessor());
- accessors.put(Integer.class, new IntegerAccessor());
- accessors.put(String.class, new StringAccessor());
- accessors.put(Long.class, new LongAccessor());
- }
-
- public Integer getIntegerValue(String propName)
- {
- return properties.get(propName).get(Integer.class);
- }
-
- public Long getLongValue(String propName)
- {
- return properties.get(propName).get(Long.class);
- }
-
- public String getStringValue(String propName)
- {
- return properties.get(propName).get(String.class);
- }
-
- public Boolean getBooleanValue(String propName)
- {
- return properties.get(propName).get(Boolean.class);
- }
-
- public <T> T get(String propName,Class<T> klass)
- {
- return properties.get(propName).get(klass);
- }
-
- static class QpidProperty
- {
- private Object defValue;
- private String[] names;
-
- QpidProperty(Object defValue, String ... names)
- {
- this.defValue = defValue;
- this.names = names;
- }
-
- <T> T get(Class<T> klass)
- {
- Accessor acc = accessors.get(klass);
- for (String name : names)
- {
- Object obj = acc.get(name);
- if (obj != null)
- {
- return klass.cast(obj);
- }
- }
-
- return klass.cast(defValue);
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/mina/common/FixedSizeByteBufferAllocator.java b/java/common/src/main/java/org/apache/mina/common/FixedSizeByteBufferAllocator.java
deleted file mode 100644
index 0c311b6645..0000000000
--- a/java/common/src/main/java/org/apache/mina/common/FixedSizeByteBufferAllocator.java
+++ /dev/null
@@ -1,467 +0,0 @@
-package org.apache.mina.common;
-
-import org.apache.mina.common.ByteBuffer;
-
-import java.nio.*;
-
-/*
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*
-*/
-public class FixedSizeByteBufferAllocator implements ByteBufferAllocator
-{
-
-
- private static final int MINIMUM_CAPACITY = 1;
-
- public FixedSizeByteBufferAllocator ()
- {
- }
-
- public ByteBuffer allocate( int capacity, boolean direct )
- {
- java.nio.ByteBuffer nioBuffer;
- if( direct )
- {
- nioBuffer = java.nio.ByteBuffer.allocateDirect( capacity );
- }
- else
- {
- nioBuffer = java.nio.ByteBuffer.allocate( capacity );
- }
- return new FixedSizeByteBuffer( nioBuffer );
- }
-
- public ByteBuffer wrap( java.nio.ByteBuffer nioBuffer )
- {
- return new FixedSizeByteBuffer( nioBuffer );
- }
-
- public void dispose()
- {
- }
-
-
-
- private static final class FixedSizeByteBuffer extends ByteBuffer
- {
- private java.nio.ByteBuffer buf;
- private int mark = -1;
-
-
- protected FixedSizeByteBuffer( java.nio.ByteBuffer buf )
- {
- this.buf = buf;
- buf.order( ByteOrder.BIG_ENDIAN );
- }
-
- public synchronized void acquire()
- {
- }
-
- public void release()
- {
- }
-
- public java.nio.ByteBuffer buf()
- {
- return buf;
- }
-
- public boolean isPooled()
- {
- return false;
- }
-
- public void setPooled( boolean pooled )
- {
- }
-
- public ByteBuffer duplicate() {
- return new FixedSizeByteBuffer( this.buf.duplicate() );
- }
-
- public ByteBuffer slice() {
- return new FixedSizeByteBuffer( this.buf.slice() );
- }
-
- public ByteBuffer asReadOnlyBuffer() {
- return new FixedSizeByteBuffer( this.buf.asReadOnlyBuffer() );
- }
-
- public byte[] array()
- {
- return buf.array();
- }
-
- public int arrayOffset()
- {
- return buf.arrayOffset();
- }
-
- public boolean isDirect()
- {
- return buf.isDirect();
- }
-
- public boolean isReadOnly()
- {
- return buf.isReadOnly();
- }
-
- public int capacity()
- {
- return buf.capacity();
- }
-
- public ByteBuffer capacity( int newCapacity )
- {
- if( newCapacity > capacity() )
- {
- throw new IllegalArgumentException();
- }
-
- return this;
- }
-
-
-
- public boolean isAutoExpand()
- {
- return false;
- }
-
- public ByteBuffer setAutoExpand( boolean autoExpand )
- {
- if(autoExpand) throw new IllegalArgumentException();
- else return this;
- }
-
- public ByteBuffer expand( int pos, int expectedRemaining )
- {
- int end = pos + expectedRemaining;
- if( end > capacity() )
- {
- // The buffer needs expansion.
- capacity( end );
- }
-
- if( end > limit() )
- {
- // We call limit() directly to prevent StackOverflowError
- buf.limit( end );
- }
- return this;
- }
-
- public int position()
- {
- return buf.position();
- }
-
- public ByteBuffer position( int newPosition )
- {
-
- buf.position( newPosition );
- if( mark > newPosition )
- {
- mark = -1;
- }
- return this;
- }
-
- public int limit()
- {
- return buf.limit();
- }
-
- public ByteBuffer limit( int newLimit )
- {
- buf.limit( newLimit );
- if( mark > newLimit )
- {
- mark = -1;
- }
- return this;
- }
-
- public ByteBuffer mark()
- {
- buf.mark();
- mark = position();
- return this;
- }
-
- public int markValue()
- {
- return mark;
- }
-
- public ByteBuffer reset()
- {
- buf.reset();
- return this;
- }
-
- public ByteBuffer clear()
- {
- buf.clear();
- mark = -1;
- return this;
- }
-
- public ByteBuffer flip()
- {
- buf.flip();
- mark = -1;
- return this;
- }
-
- public ByteBuffer rewind()
- {
- buf.rewind();
- mark = -1;
- return this;
- }
-
- public byte get()
- {
- return buf.get();
- }
-
- public ByteBuffer put( byte b )
- {
- buf.put( b );
- return this;
- }
-
- public byte get( int index )
- {
- return buf.get( index );
- }
-
- public ByteBuffer put( int index, byte b )
- {
- buf.put( index, b );
- return this;
- }
-
- public ByteBuffer get( byte[] dst, int offset, int length )
- {
- buf.get( dst, offset, length );
- return this;
- }
-
- public ByteBuffer put( java.nio.ByteBuffer src )
- {
- buf.put( src );
- return this;
- }
-
- public ByteBuffer put( byte[] src, int offset, int length )
- {
- buf.put( src, offset, length );
- return this;
- }
-
- public ByteBuffer compact()
- {
- buf.compact();
- mark = -1;
- return this;
- }
-
- public ByteOrder order()
- {
- return buf.order();
- }
-
- public ByteBuffer order( ByteOrder bo )
- {
- buf.order( bo );
- return this;
- }
-
- public char getChar()
- {
- return buf.getChar();
- }
-
- public ByteBuffer putChar( char value )
- {
- buf.putChar( value );
- return this;
- }
-
- public char getChar( int index )
- {
- return buf.getChar( index );
- }
-
- public ByteBuffer putChar( int index, char value )
- {
- buf.putChar( index, value );
- return this;
- }
-
- public CharBuffer asCharBuffer()
- {
- return buf.asCharBuffer();
- }
-
- public short getShort()
- {
- return buf.getShort();
- }
-
- public ByteBuffer putShort( short value )
- {
- buf.putShort( value );
- return this;
- }
-
- public short getShort( int index )
- {
- return buf.getShort( index );
- }
-
- public ByteBuffer putShort( int index, short value )
- {
- buf.putShort( index, value );
- return this;
- }
-
- public ShortBuffer asShortBuffer()
- {
- return buf.asShortBuffer();
- }
-
- public int getInt()
- {
- return buf.getInt();
- }
-
- public ByteBuffer putInt( int value )
- {
- buf.putInt( value );
- return this;
- }
-
- public int getInt( int index )
- {
- return buf.getInt( index );
- }
-
- public ByteBuffer putInt( int index, int value )
- {
- buf.putInt( index, value );
- return this;
- }
-
- public IntBuffer asIntBuffer()
- {
- return buf.asIntBuffer();
- }
-
- public long getLong()
- {
- return buf.getLong();
- }
-
- public ByteBuffer putLong( long value )
- {
- buf.putLong( value );
- return this;
- }
-
- public long getLong( int index )
- {
- return buf.getLong( index );
- }
-
- public ByteBuffer putLong( int index, long value )
- {
- buf.putLong( index, value );
- return this;
- }
-
- public LongBuffer asLongBuffer()
- {
- return buf.asLongBuffer();
- }
-
- public float getFloat()
- {
- return buf.getFloat();
- }
-
- public ByteBuffer putFloat( float value )
- {
- buf.putFloat( value );
- return this;
- }
-
- public float getFloat( int index )
- {
- return buf.getFloat( index );
- }
-
- public ByteBuffer putFloat( int index, float value )
- {
- buf.putFloat( index, value );
- return this;
- }
-
- public FloatBuffer asFloatBuffer()
- {
- return buf.asFloatBuffer();
- }
-
- public double getDouble()
- {
- return buf.getDouble();
- }
-
- public ByteBuffer putDouble( double value )
- {
- buf.putDouble( value );
- return this;
- }
-
- public double getDouble( int index )
- {
- return buf.getDouble( index );
- }
-
- public ByteBuffer putDouble( int index, double value )
- {
- buf.putDouble( index, value );
- return this;
- }
-
- public DoubleBuffer asDoubleBuffer()
- {
- return buf.asDoubleBuffer();
- }
-
-
- }
-
-
-}
diff --git a/java/common/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java b/java/common/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java
deleted file mode 100644
index 4fd28c4eb5..0000000000
--- a/java/common/src/main/java/org/apache/mina/common/support/DefaultIoFuture.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.mina.common.support;
-
-import org.apache.mina.common.IoFuture;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.common.IoFutureListener;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * A default implementation of {@link org.apache.mina.common.IoFuture}.
- *
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
- */
-public class DefaultIoFuture implements IoFuture
-{
- private final IoSession session;
- private final Object lock;
- private List listeners;
- private Object result;
- private boolean ready;
-
-
- /**
- * Creates a new instance.
- *
- * @param session an {@link IoSession} which is associated with this future
- */
- public DefaultIoFuture( IoSession session )
- {
- this.session = session;
- this.lock = this;
- }
-
- /**
- * Creates a new instance which uses the specified object as a lock.
- */
- public DefaultIoFuture( IoSession session, Object lock )
- {
- if( lock == null )
- {
- throw new NullPointerException( "lock" );
- }
- this.session = session;
- this.lock = lock;
- }
-
- public IoSession getSession()
- {
- return session;
- }
-
- public Object getLock()
- {
- return lock;
- }
-
- public void join()
- {
- synchronized( lock )
- {
- while( !ready )
- {
- try
- {
- lock.wait();
- }
- catch( InterruptedException e )
- {
- }
- }
- }
- }
-
- public boolean join( long timeoutInMillis )
- {
- long startTime = ( timeoutInMillis <= 0 ) ? 0 : System
- .currentTimeMillis();
- long waitTime = timeoutInMillis;
-
- synchronized( lock )
- {
- if( ready )
- {
- return ready;
- }
- else if( waitTime <= 0 )
- {
- return ready;
- }
-
- for( ;; )
- {
- try
- {
- lock.wait( waitTime );
- }
- catch( InterruptedException e )
- {
- }
-
- if( ready )
- return true;
- else
- {
- waitTime = timeoutInMillis - ( System.currentTimeMillis() - startTime );
- if( waitTime <= 0 )
- {
- return ready;
- }
- }
- }
- }
- }
-
- public boolean isReady()
- {
- synchronized( lock )
- {
- return ready;
- }
- }
-
- /**
- * Sets the result of the asynchronous operation, and mark it as finished.
- */
- protected void setValue( Object newValue )
- {
- synchronized( lock )
- {
- // Allow only once.
- if( ready )
- {
- return;
- }
-
- result = newValue;
- ready = true;
- lock.notifyAll();
-
- notifyListeners();
- }
- }
-
- /**
- * Returns the result of the asynchronous operation.
- */
- protected Object getValue()
- {
- synchronized( lock )
- {
- return result;
- }
- }
-
- public void addListener( IoFutureListener listener )
- {
- if( listener == null )
- {
- throw new NullPointerException( "listener" );
- }
-
- synchronized( lock )
- {
- if(listeners == null)
- {
- listeners = new ArrayList();
- }
- listeners.add( listener );
- if( ready )
- {
- listener.operationComplete( this );
- }
- }
- }
-
- public void removeListener( IoFutureListener listener )
- {
- if( listener == null )
- {
- throw new NullPointerException( "listener" );
- }
-
- synchronized( lock )
- {
- listeners.remove( listener );
- }
- }
-
- private void notifyListeners()
- {
- synchronized( lock )
- {
-
- if(listeners != null)
- {
-
- for( Iterator i = listeners.iterator(); i.hasNext(); ) {
- ( ( IoFutureListener ) i.next() ).operationComplete( this );
- }
- }
- }
- }
-}
-
-
-
diff --git a/java/common/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java b/java/common/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
deleted file mode 100644
index 5723ffbaa9..0000000000
--- a/java/common/src/main/java/org/apache/mina/common/support/IoServiceListenerSupport.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.mina.common.support;
-
-import java.net.SocketAddress;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-
-import org.apache.mina.common.IoAcceptorConfig;
-import org.apache.mina.common.IoConnector;
-import org.apache.mina.common.IoFuture;
-import org.apache.mina.common.IoFutureListener;
-import org.apache.mina.common.IoHandler;
-import org.apache.mina.common.IoService;
-import org.apache.mina.common.IoServiceConfig;
-import org.apache.mina.common.IoServiceListener;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.util.IdentityHashSet;
-
-/**
- * A helper which provides addition and removal of {@link IoServiceListener}s and firing
- * events.
- *
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
- * @version $Rev: 446526 $, $Date: 2006-09-15 01:44:11 -0400 (Fri, 15 Sep 2006) $
- */
-public class IoServiceListenerSupport
-{
- /**
- * A list of {@link IoServiceListener}s.
- */
- private final List listeners = new ArrayList();
-
- /**
- * Tracks managed <tt>serviceAddress</tt>es.
- */
- private final Set managedServiceAddresses = new HashSet();
-
- /**
- * Tracks managed sesssions with <tt>serviceAddress</tt> as a key.
- */
- private final Map managedSessions = new HashMap();
-
- /**
- * Creates a new instance.
- */
- public IoServiceListenerSupport()
- {
- }
-
- /**
- * Adds a new listener.
- */
- public void add( IoServiceListener listener )
- {
- synchronized( listeners )
- {
- listeners.add( listener );
- }
- }
-
- /**
- * Removes an existing listener.
- */
- public void remove( IoServiceListener listener )
- {
- synchronized( listeners )
- {
- listeners.remove( listener );
- }
- }
-
- public Set getManagedServiceAddresses()
- {
- return Collections.unmodifiableSet( managedServiceAddresses );
- }
-
- public boolean isManaged( SocketAddress serviceAddress )
- {
- synchronized( managedServiceAddresses )
- {
- return managedServiceAddresses.contains( serviceAddress );
- }
- }
-
- public Set getManagedSessions( SocketAddress serviceAddress )
- {
- Set sessions;
- synchronized( managedSessions )
- {
- sessions = ( Set ) managedSessions.get( serviceAddress );
- if( sessions == null )
- {
- sessions = new IdentityHashSet();
- }
- }
-
- synchronized( sessions )
- {
- return new IdentityHashSet( sessions );
- }
- }
-
- /**
- * Calls {@link IoServiceListener#serviceActivated(IoService, SocketAddress, IoHandler, IoServiceConfig)}
- * for all registered listeners.
- */
- public void fireServiceActivated(
- IoService service, SocketAddress serviceAddress,
- IoHandler handler, IoServiceConfig config )
- {
- synchronized( managedServiceAddresses )
- {
- if( !managedServiceAddresses.add( serviceAddress ) )
- {
- return;
- }
- }
-
- synchronized( listeners )
- {
- for( Iterator i = listeners.iterator(); i.hasNext(); )
- {
- ( ( IoServiceListener ) i.next() ).serviceActivated(
- service, serviceAddress, handler, config );
- }
- }
- }
-
- /**
- * Calls {@link IoServiceListener#serviceDeactivated(IoService, SocketAddress, IoHandler, IoServiceConfig)}
- * for all registered listeners.
- */
- public synchronized void fireServiceDeactivated(
- IoService service, SocketAddress serviceAddress,
- IoHandler handler, IoServiceConfig config )
- {
- synchronized( managedServiceAddresses )
- {
- if( !managedServiceAddresses.remove( serviceAddress ) )
- {
- return;
- }
- }
-
- try
- {
- synchronized( listeners )
- {
- for( Iterator i = listeners.iterator(); i.hasNext(); )
- {
- ( ( IoServiceListener ) i.next() ).serviceDeactivated(
- service, serviceAddress, handler, config );
- }
- }
- }
- finally
- {
- disconnectSessions( serviceAddress, config );
- }
- }
-
-
- /**
- * Calls {@link IoServiceListener#sessionCreated(IoSession)} for all registered listeners.
- */
- public void fireSessionCreated( IoSession session )
- {
- SocketAddress serviceAddress = session.getServiceAddress();
-
- // Get the session set.
- boolean firstSession = false;
- Set sessions;
- synchronized( managedSessions )
- {
- sessions = ( Set ) managedSessions.get( serviceAddress );
- if( sessions == null )
- {
- sessions = new IdentityHashSet();
- managedSessions.put( serviceAddress, sessions );
- firstSession = true;
- }
- }
-
- // If already registered, ignore.
- synchronized( sessions )
- {
- if ( !sessions.add( session ) )
- {
- return;
- }
- }
-
- // If the first connector session, fire a virtual service activation event.
- if( session.getService() instanceof IoConnector && firstSession )
- {
- fireServiceActivated(
- session.getService(), session.getServiceAddress(),
- session.getHandler(), session.getServiceConfig() );
- }
-
- // Fire session events.
- session.getFilterChain().fireSessionCreated( session );
- session.getFilterChain().fireSessionOpened( session);
-
- // Fire listener events.
- synchronized( listeners )
- {
- for( Iterator i = listeners.iterator(); i.hasNext(); )
- {
- ( ( IoServiceListener ) i.next() ).sessionCreated( session );
- }
- }
- }
-
- /**
- * Calls {@link IoServiceListener#sessionDestroyed(IoSession)} for all registered listeners.
- */
- public void fireSessionDestroyed( IoSession session )
- {
- SocketAddress serviceAddress = session.getServiceAddress();
-
- // Get the session set.
- Set sessions;
- boolean lastSession = false;
- synchronized( managedSessions )
- {
- sessions = ( Set ) managedSessions.get( serviceAddress );
- // Ignore if unknown.
- if( sessions == null )
- {
- return;
- }
-
- // Try to remove the remaining empty seession set after removal.
- synchronized( sessions )
- {
- sessions.remove( session );
- if( sessions.isEmpty() )
- {
- managedSessions.remove( serviceAddress );
- lastSession = true;
- }
- }
- }
-
- // Fire session events.
- session.getFilterChain().fireSessionClosed( session );
-
- // Fire listener events.
- try
- {
- synchronized( listeners )
- {
- for( Iterator i = listeners.iterator(); i.hasNext(); )
- {
- ( ( IoServiceListener ) i.next() ).sessionDestroyed( session );
- }
- }
- }
- finally
- {
- // Fire a virtual service deactivation event for the last session of the connector.
- //TODO double-check that this is *STILL* the last session. May not be the case
- if( session.getService() instanceof IoConnector && lastSession )
- {
- fireServiceDeactivated(
- session.getService(), session.getServiceAddress(),
- session.getHandler(), session.getServiceConfig() );
- }
- }
- }
-
- private void disconnectSessions( SocketAddress serviceAddress, IoServiceConfig config )
- {
- if( !( config instanceof IoAcceptorConfig ) )
- {
- return;
- }
-
- if( !( ( IoAcceptorConfig ) config ).isDisconnectOnUnbind() )
- {
- return;
- }
-
- Set sessions;
- synchronized( managedSessions )
- {
- sessions = ( Set ) managedSessions.get( serviceAddress );
- }
-
- if( sessions == null )
- {
- return;
- }
-
- Set sessionsCopy;
-
- // Create a copy to avoid ConcurrentModificationException
- synchronized( sessions )
- {
- sessionsCopy = new IdentityHashSet( sessions );
- }
-
- final CountDownLatch latch = new CountDownLatch(sessionsCopy.size());
-
- for( Iterator i = sessionsCopy.iterator(); i.hasNext(); )
- {
- ( ( IoSession ) i.next() ).close().addListener( new IoFutureListener()
- {
- public void operationComplete( IoFuture future )
- {
- latch.countDown();
- }
- } );
- }
-
- try
- {
- latch.await();
- }
- catch( InterruptedException ie )
- {
- // Ignored
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/mina/filter/WriteBufferFullExeception.java b/java/common/src/main/java/org/apache/mina/filter/WriteBufferFullExeception.java
deleted file mode 100644
index 47f19aa76d..0000000000
--- a/java/common/src/main/java/org/apache/mina/filter/WriteBufferFullExeception.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.apache.mina.filter;
-
-import org.apache.mina.common.IoFilter;/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-public class WriteBufferFullExeception extends RuntimeException
-{
- private IoFilter.WriteRequest _writeRequest;
-
- public WriteBufferFullExeception()
- {
- this(null);
- }
-
- public WriteBufferFullExeception(IoFilter.WriteRequest writeRequest)
- {
- _writeRequest = writeRequest;
- }
-
-
- public void setWriteRequest(IoFilter.WriteRequest writeRequest)
- {
- _writeRequest = writeRequest;
- }
-
- public IoFilter.WriteRequest getWriteRequest()
- {
- return _writeRequest;
- }
-}
diff --git a/java/common/src/main/java/org/apache/mina/filter/WriteBufferLimitFilterBuilder.java b/java/common/src/main/java/org/apache/mina/filter/WriteBufferLimitFilterBuilder.java
deleted file mode 100644
index 4e9db9071a..0000000000
--- a/java/common/src/main/java/org/apache/mina/filter/WriteBufferLimitFilterBuilder.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.mina.filter;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.DefaultIoFilterChainBuilder;
-import org.apache.mina.common.IoFilterAdapter;
-import org.apache.mina.common.IoFilterChain;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.executor.ExecutorFilter;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * This filter will turn the asynchronous filterWrite method in to a blocking send when there are more than
- * the prescribed number of messages awaiting filterWrite. It should be used in conjunction with the
- * {@link ReadThrottleFilterBuilder} on a server as the blocking writes will allow the read thread to
- * cause an Out of Memory exception due to a back log of unprocessed messages.
- *
- * This is should only be viewed as a temporary work around for DIRMINA-302.
- *
- * A true solution should not be implemented as a filter as this issue will always occur. On a machine
- * where the network is slower than the local producer.
- *
- * Suggested improvement is to allow implementation of policices on what to do when buffer is full.
- *
- * They could be:
- * Block - As this does
- * Wait on a given Future - to drain more of the queue.. in essence this filter with high/low watermarks
- * Throw Exception - through the client filterWrite() method to allow them to get immediate feedback on buffer state
- *
- * <p/>
- * <p>Usage:
- * <p/>
- * <pre><code>
- * DefaultFilterChainBuilder builder = ...
- * WriteBufferLimitFilterBuilder filter = new WriteBufferLimitFilterBuilder();
- * filter.attach( builder );
- * </code></pre>
- * <p/>
- * or
- * <p/>
- * <pre><code>
- * IoFilterChain chain = ...
- * WriteBufferLimitFilterBuilder filter = new WriteBufferLimitFilterBuilder();
- * filter.attach( chain );
- * </code></pre>
- *
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
- * @version $Rev: 619823 $, $Date: 2008-02-08 10:09:37 +0000 (Fri, 08 Feb 2008) $
- */
-public class WriteBufferLimitFilterBuilder
-{
- public static final String PENDING_SIZE = WriteBufferLimitFilterBuilder.class.getName() + ".pendingSize";
-
- private static int DEFAULT_CONNECTION_BUFFER_MESSAGE_COUNT = 5000;
-
- private volatile boolean throwNotBlock = false;
-
- private volatile int maximumConnectionBufferCount;
- private volatile long maximumConnectionBufferSize;
-
- private final Object _blockLock = new Object();
-
- private int _blockWaiters = 0;
-
-
- public WriteBufferLimitFilterBuilder()
- {
- this(DEFAULT_CONNECTION_BUFFER_MESSAGE_COUNT);
- }
-
- public WriteBufferLimitFilterBuilder(int maxWriteBufferSize)
- {
- setMaximumConnectionBufferCount(maxWriteBufferSize);
- }
-
-
- /**
- * Set the maximum amount pending items in the writeQueue for a given session.
- * Changing the value will only take effect when new data is received for a
- * connection, including existing connections. Default value is 5000 msgs.
- *
- * @param maximumConnectionBufferCount New buffer size. Must be > 0
- */
- public void setMaximumConnectionBufferCount(int maximumConnectionBufferCount)
- {
- this.maximumConnectionBufferCount = maximumConnectionBufferCount;
- this.maximumConnectionBufferSize = 0;
- }
-
- public void setMaximumConnectionBufferSize(long maximumConnectionBufferSize)
- {
- this.maximumConnectionBufferSize = maximumConnectionBufferSize;
- this.maximumConnectionBufferCount = 0;
- }
-
- /**
- * Attach this filter to the specified filter chain. It will search for the ThreadPoolFilter, and attach itself
- * before and after that filter.
- *
- * @param chain {@link IoFilterChain} to attach self to.
- */
- public void attach(IoFilterChain chain)
- {
- String name = getThreadPoolFilterEntryName(chain.getAll());
-
- chain.addBefore(name, getClass().getName() + ".sendlimit", new SendLimit());
- }
-
- /**
- * Attach this filter to the specified builder. It will search for the
- * {@link ExecutorFilter}, and attach itself before and after that filter.
- *
- * @param builder {@link DefaultIoFilterChainBuilder} to attach self to.
- */
- public void attach(DefaultIoFilterChainBuilder builder)
- {
- String name = getThreadPoolFilterEntryName(builder.getAll());
-
- builder.addBefore(name, getClass().getName() + ".sendlimit", new SendLimit());
- }
-
- private String getThreadPoolFilterEntryName(List entries)
- {
- Iterator i = entries.iterator();
-
- while (i.hasNext())
- {
- IoFilterChain.Entry entry = (IoFilterChain.Entry) i.next();
-
- if (entry.getFilter().getClass().isAssignableFrom(ExecutorFilter.class))
- {
- return entry.getName();
- }
- }
-
- throw new IllegalStateException("Chain does not contain a ExecutorFilter");
- }
-
-
- public class SendLimit extends IoFilterAdapter
- {
- public void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception
- {
- try
- {
- waitTillSendAllowed(session);
- }
- catch (WriteBufferFullExeception wbfe)
- {
- nextFilter.exceptionCaught(session, wbfe);
- }
-
- if (writeRequest.getMessage() instanceof ByteBuffer)
- {
- increasePendingWriteSize(session, (ByteBuffer) writeRequest.getMessage());
- }
-
- nextFilter.filterWrite(session, writeRequest);
- }
-
- private void increasePendingWriteSize(IoSession session, ByteBuffer message)
- {
- synchronized (session)
- {
- Long pendingSize = getScheduledWriteBytes(session) + message.remaining();
- session.setAttribute(PENDING_SIZE, pendingSize);
- }
- }
-
- private boolean sendAllowed(IoSession session)
- {
- if (session.isClosing())
- {
- return true;
- }
-
- int lmswm = maximumConnectionBufferCount;
- long lmswb = maximumConnectionBufferSize;
-
- return (lmswm == 0 || session.getScheduledWriteRequests() < lmswm)
- && (lmswb == 0 || getScheduledWriteBytes(session) < lmswb);
- }
-
- private long getScheduledWriteBytes(IoSession session)
- {
- synchronized (session)
- {
- Long i = (Long) session.getAttribute(PENDING_SIZE);
- return null == i ? 0 : i;
- }
- }
-
- private void waitTillSendAllowed(IoSession session)
- {
- synchronized (_blockLock)
- {
- if (throwNotBlock)
- {
- throw new WriteBufferFullExeception();
- }
-
- _blockWaiters++;
-
- while (!sendAllowed(session))
- {
- try
- {
- _blockLock.wait();
- }
- catch (InterruptedException e)
- {
- // Ignore.
- }
- }
- _blockWaiters--;
- }
- }
-
- public void messageSent(NextFilter nextFilter, IoSession session, Object message) throws Exception
- {
- if (message instanceof ByteBuffer)
- {
- decrementPendingWriteSize(session, (ByteBuffer) message);
- }
- notifyWaitingWriters();
- nextFilter.messageSent(session, message);
- }
-
- private void decrementPendingWriteSize(IoSession session, ByteBuffer message)
- {
- synchronized (session)
- {
- session.setAttribute(PENDING_SIZE, getScheduledWriteBytes(session) - message.remaining());
- }
- }
-
- private void notifyWaitingWriters()
- {
- synchronized (_blockLock)
- {
- if (_blockWaiters != 0)
- {
- _blockLock.notifyAll();
- }
- }
-
- }
-
- }//SentLimit
-
-
-}
diff --git a/java/common/src/main/java/org/apache/mina/filter/codec/OurCumulativeProtocolDecoder.java b/java/common/src/main/java/org/apache/mina/filter/codec/OurCumulativeProtocolDecoder.java
deleted file mode 100644
index 3f7e206cb4..0000000000
--- a/java/common/src/main/java/org/apache/mina/filter/codec/OurCumulativeProtocolDecoder.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.mina.filter.codec;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoSession;
-
-/**
- * A {@link ProtocolDecoder} that cumulates the content of received
- * buffers to a <em>cumulative buffer</em> to help users implement decoders.
- * <p>
- * If the received {@link ByteBuffer} is only a part of a message.
- * decoders should cumulate received buffers to make a message complete or
- * to postpone decoding until more buffers arrive.
- * <p>
- * Here is an example decoder that decodes CRLF terminated lines into
- * <code>Command</code> objects:
- * <pre>
- * public class CRLFTerminatedCommandLineDecoder
- * extends CumulativeProtocolDecoder {
- *
- * private Command parseCommand(ByteBuffer in) {
- * // Convert the bytes in the specified buffer to a
- * // Command object.
- * ...
- * }
- *
- * protected boolean doDecode(IoSession session, ByteBuffer in,
- * ProtocolDecoderOutput out)
- * throws Exception {
- *
- * // Remember the initial position.
- * int start = in.position();
- *
- * // Now find the first CRLF in the buffer.
- * byte previous = 0;
- * while (in.hasRemaining()) {
- * byte current = in.get();
- *
- * if (previous == '\r' && current == '\n') {
- * // Remember the current position and limit.
- * int position = in.position();
- * int limit = in.limit();
- * try {
- * in.position(start);
- * in.limit(position);
- * // The bytes between in.position() and in.limit()
- * // now contain a full CRLF terminated line.
- * out.write(parseCommand(in.slice()));
- * } finally {
- * // Set the position to point right after the
- * // detected line and set the limit to the old
- * // one.
- * in.position(position);
- * in.limit(limit);
- * }
- * // Decoded one line; CumulativeProtocolDecoder will
- * // call me again until I return false. So just
- * // return true until there are no more lines in the
- * // buffer.
- * return true;
- * }
- *
- * previous = current;
- * }
- *
- * // Could not find CRLF in the buffer. Reset the initial
- * // position to the one we recorded above.
- * in.position(start);
- *
- * return false;
- * }
- * }
- * </pre>
- *
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
- * @version $Rev: 619823 $, $Date: 2008-02-08 10:09:37 +0000 (Fri, 08 Feb 2008) $
- */
-public abstract class OurCumulativeProtocolDecoder extends ProtocolDecoderAdapter {
-
- private static final String BUFFER = OurCumulativeProtocolDecoder.class
- .getName()
- + ".Buffer";
-
- /**
- * Creates a new instance.
- */
- protected OurCumulativeProtocolDecoder() {
- }
-
- /**
- * Cumulates content of <tt>in</tt> into internal buffer and forwards
- * decoding request to {@link #doDecode(IoSession, ByteBuffer, ProtocolDecoderOutput)}.
- * <tt>doDecode()</tt> is invoked repeatedly until it returns <tt>false</tt>
- * and the cumulative buffer is NOT compacted after decoding ends.
- *
- * @throws IllegalStateException if your <tt>doDecode()</tt> returned
- * <tt>true</tt> not consuming the cumulative buffer.
- */
- public void decode(IoSession session, ByteBuffer in,
- ProtocolDecoderOutput out) throws Exception {
- boolean usingSessionBuffer = true;
- ByteBuffer buf = (ByteBuffer) session.getAttribute(BUFFER);
- // If we have a session buffer, append data to that; otherwise
- // use the buffer read from the network directly.
- if (buf != null) {
- buf.put(in);
- buf.flip();
- } else {
- buf = in;
- usingSessionBuffer = false;
- }
-
- for (;;) {
- int oldPos = buf.position();
- boolean decoded = doDecode(session, buf, out);
- if (decoded) {
- if (buf.position() == oldPos) {
- throw new IllegalStateException(
- "doDecode() can't return true when buffer is not consumed.");
- }
-
- if (!buf.hasRemaining()) {
- break;
- }
- } else {
- break;
- }
- }
-
-
- // if there is any data left that cannot be decoded, we store
- // it in a buffer in the session and next time this decoder is
- // invoked the session buffer gets appended to
- if (buf.hasRemaining()) {
- storeRemainingInSession(buf, session);
- } else {
- if (usingSessionBuffer)
- removeSessionBuffer(session);
- }
- }
-
- /**
- * Implement this method to consume the specified cumulative buffer and
- * decode its content into message(s).
- *
- * @param in the cumulative buffer
- * @return <tt>true</tt> if and only if there's more to decode in the buffer
- * and you want to have <tt>doDecode</tt> method invoked again.
- * Return <tt>false</tt> if remaining data is not enough to decode,
- * then this method will be invoked again when more data is cumulated.
- * @throws Exception if cannot decode <tt>in</tt>.
- */
- protected abstract boolean doDecode(IoSession session, ByteBuffer in,
- ProtocolDecoderOutput out) throws Exception;
-
- /**
- * Releases the cumulative buffer used by the specified <tt>session</tt>.
- * Please don't forget to call <tt>super.dispose( session )</tt> when
- * you override this method.
- */
- public void dispose(IoSession session) throws Exception {
- removeSessionBuffer(session);
- }
-
- private void removeSessionBuffer(IoSession session) {
- ByteBuffer buf = (ByteBuffer) session.removeAttribute(BUFFER);
- if (buf != null) {
- buf.release();
- }
- }
-
- private void storeRemainingInSession(ByteBuffer buf, IoSession session) {
- ByteBuffer remainingBuf = ByteBuffer.allocate(buf.capacity());
- remainingBuf.setAutoExpand(true);
- remainingBuf.order(buf.order());
- remainingBuf.put(buf);
- session.setAttribute(BUFFER, remainingBuf);
- }
-}
diff --git a/java/common/src/main/java/org/apache/mina/filter/codec/QpidProtocolCodecFilter.java b/java/common/src/main/java/org/apache/mina/filter/codec/QpidProtocolCodecFilter.java
deleted file mode 100644
index b8c6f29720..0000000000
--- a/java/common/src/main/java/org/apache/mina/filter/codec/QpidProtocolCodecFilter.java
+++ /dev/null
@@ -1,440 +0,0 @@
-package org.apache.mina.filter.codec;
-
-
-/*
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*
-*/
-
-import org.apache.mina.common.*;
-import org.apache.mina.common.support.DefaultWriteFuture;
-import org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput;
-import org.apache.mina.util.SessionLog;
-import org.apache.mina.util.Queue;
-
-
-public class QpidProtocolCodecFilter extends IoFilterAdapter
-{
- public static final String ENCODER = QpidProtocolCodecFilter.class.getName() + ".encoder";
- public static final String DECODER = QpidProtocolCodecFilter.class.getName() + ".decoder";
-
- private static final Class[] EMPTY_PARAMS = new Class[0];
- private static final ByteBuffer EMPTY_BUFFER = ByteBuffer.wrap( new byte[0] );
-
- private final ProtocolCodecFactory factory;
-
- public QpidProtocolCodecFilter( ProtocolCodecFactory factory )
- {
- if( factory == null )
- {
- throw new NullPointerException( "factory" );
- }
- this.factory = factory;
- }
-
- public QpidProtocolCodecFilter( final ProtocolEncoder encoder, final ProtocolDecoder decoder )
- {
- if( encoder == null )
- {
- throw new NullPointerException( "encoder" );
- }
- if( decoder == null )
- {
- throw new NullPointerException( "decoder" );
- }
-
- this.factory = new ProtocolCodecFactory()
- {
- public ProtocolEncoder getEncoder()
- {
- return encoder;
- }
-
- public ProtocolDecoder getDecoder()
- {
- return decoder;
- }
- };
- }
-
- public QpidProtocolCodecFilter( final Class encoderClass, final Class decoderClass )
- {
- if( encoderClass == null )
- {
- throw new NullPointerException( "encoderClass" );
- }
- if( decoderClass == null )
- {
- throw new NullPointerException( "decoderClass" );
- }
- if( !ProtocolEncoder.class.isAssignableFrom( encoderClass ) )
- {
- throw new IllegalArgumentException( "encoderClass: " + encoderClass.getName() );
- }
- if( !ProtocolDecoder.class.isAssignableFrom( decoderClass ) )
- {
- throw new IllegalArgumentException( "decoderClass: " + decoderClass.getName() );
- }
- try
- {
- encoderClass.getConstructor( EMPTY_PARAMS );
- }
- catch( NoSuchMethodException e )
- {
- throw new IllegalArgumentException( "encoderClass doesn't have a public default constructor." );
- }
- try
- {
- decoderClass.getConstructor( EMPTY_PARAMS );
- }
- catch( NoSuchMethodException e )
- {
- throw new IllegalArgumentException( "decoderClass doesn't have a public default constructor." );
- }
-
- this.factory = new ProtocolCodecFactory()
- {
- public ProtocolEncoder getEncoder() throws Exception
- {
- return ( ProtocolEncoder ) encoderClass.newInstance();
- }
-
- public ProtocolDecoder getDecoder() throws Exception
- {
- return ( ProtocolDecoder ) decoderClass.newInstance();
- }
- };
- }
-
- public void onPreAdd( IoFilterChain parent, String name, IoFilter.NextFilter nextFilter ) throws Exception
- {
- if( parent.contains( ProtocolCodecFilter.class ) )
- {
- throw new IllegalStateException( "A filter chain cannot contain more than one QpidProtocolCodecFilter." );
- }
- }
-
- public void messageReceived( IoFilter.NextFilter nextFilter, IoSession session, Object message ) throws Exception
- {
- if( !( message instanceof ByteBuffer ) )
- {
- nextFilter.messageReceived( session, message );
- return;
- }
-
- ByteBuffer in = ( ByteBuffer ) message;
- ProtocolDecoder decoder = getDecoder( session );
- ProtocolDecoderOutput decoderOut = getDecoderOut( session, nextFilter );
-
- try
- {
- decoder.decode( session, in, decoderOut );
- }
- catch( Throwable t )
- {
- ProtocolDecoderException pde;
- if( t instanceof ProtocolDecoderException )
- {
- pde = ( ProtocolDecoderException ) t;
- }
- else
- {
- pde = new ProtocolDecoderException( t );
- }
- pde.setHexdump( in.getHexDump() );
- throw pde;
- }
- finally
- {
- // Dispose the decoder if this session is connectionless.
- if( session.getTransportType().isConnectionless() )
- {
- disposeDecoder( session );
- }
-
- // Release the read buffer.
- in.release();
-
- decoderOut.flush();
- }
- }
-
- public void messageSent( IoFilter.NextFilter nextFilter, IoSession session, Object message ) throws Exception
- {
- if( message instanceof HiddenByteBuffer )
- {
- return;
- }
-
- if( !( message instanceof MessageByteBuffer ) )
- {
- nextFilter.messageSent( session, message );
- return;
- }
-
- nextFilter.messageSent( session, ( ( MessageByteBuffer ) message ).message );
- }
-
- public void filterWrite( IoFilter.NextFilter nextFilter, IoSession session, IoFilter.WriteRequest writeRequest ) throws Exception
- {
- Object message = writeRequest.getMessage();
- if( message instanceof ByteBuffer )
- {
- nextFilter.filterWrite( session, writeRequest );
- return;
- }
-
- ProtocolEncoder encoder = getEncoder( session );
- ProtocolEncoderOutputImpl encoderOut = getEncoderOut( session, nextFilter, writeRequest );
-
- try
- {
- encoder.encode( session, message, encoderOut );
- encoderOut.flush();
- nextFilter.filterWrite(
- session,
- new IoFilter.WriteRequest(
- new MessageByteBuffer( writeRequest.getMessage() ),
- writeRequest.getFuture(), writeRequest.getDestination() ) );
- }
- catch( Throwable t )
- {
- ProtocolEncoderException pee;
- if( t instanceof ProtocolEncoderException )
- {
- pee = ( ProtocolEncoderException ) t;
- }
- else
- {
- pee = new ProtocolEncoderException( t );
- }
- throw pee;
- }
- finally
- {
- // Dispose the encoder if this session is connectionless.
- if( session.getTransportType().isConnectionless() )
- {
- disposeEncoder( session );
- }
- }
- }
-
- public void sessionClosed( IoFilter.NextFilter nextFilter, IoSession session ) throws Exception
- {
- // Call finishDecode() first when a connection is closed.
- ProtocolDecoder decoder = getDecoder( session );
- ProtocolDecoderOutput decoderOut = getDecoderOut( session, nextFilter );
- try
- {
- decoder.finishDecode( session, decoderOut );
- }
- catch( Throwable t )
- {
- ProtocolDecoderException pde;
- if( t instanceof ProtocolDecoderException )
- {
- pde = ( ProtocolDecoderException ) t;
- }
- else
- {
- pde = new ProtocolDecoderException( t );
- }
- throw pde;
- }
- finally
- {
- // Dispose all.
- disposeEncoder( session );
- disposeDecoder( session );
-
- decoderOut.flush();
- }
-
- nextFilter.sessionClosed( session );
- }
-
- private ProtocolEncoder getEncoder( IoSession session ) throws Exception
- {
- ProtocolEncoder encoder = ( ProtocolEncoder ) session.getAttribute( ENCODER );
- if( encoder == null )
- {
- encoder = factory.getEncoder();
- session.setAttribute( ENCODER, encoder );
- }
- return encoder;
- }
-
- private ProtocolEncoderOutputImpl getEncoderOut( IoSession session, IoFilter.NextFilter nextFilter, IoFilter.WriteRequest writeRequest )
- {
- return new ProtocolEncoderOutputImpl( session, nextFilter, writeRequest );
- }
-
- private ProtocolDecoder getDecoder( IoSession session ) throws Exception
- {
- ProtocolDecoder decoder = ( ProtocolDecoder ) session.getAttribute( DECODER );
- if( decoder == null )
- {
- decoder = factory.getDecoder();
- session.setAttribute( DECODER, decoder );
- }
- return decoder;
- }
-
- private ProtocolDecoderOutput getDecoderOut( IoSession session, IoFilter.NextFilter nextFilter )
- {
- return new SimpleProtocolDecoderOutput( session, nextFilter );
- }
-
- private void disposeEncoder( IoSession session )
- {
- ProtocolEncoder encoder = ( ProtocolEncoder ) session.removeAttribute( ENCODER );
- if( encoder == null )
- {
- return;
- }
-
- try
- {
- encoder.dispose( session );
- }
- catch( Throwable t )
- {
- SessionLog.warn(
- session,
- "Failed to dispose: " + encoder.getClass().getName() +
- " (" + encoder + ')' );
- }
- }
-
- private void disposeDecoder( IoSession session )
- {
- ProtocolDecoder decoder = ( ProtocolDecoder ) session.removeAttribute( DECODER );
- if( decoder == null )
- {
- return;
- }
-
- try
- {
- decoder.dispose( session );
- }
- catch( Throwable t )
- {
- SessionLog.warn(
- session,
- "Falied to dispose: " + decoder.getClass().getName() +
- " (" + decoder + ')' );
- }
- }
-
- private static class HiddenByteBuffer extends ByteBufferProxy
- {
- private HiddenByteBuffer( ByteBuffer buf )
- {
- super( buf );
- }
- }
-
- private static class MessageByteBuffer extends ByteBufferProxy
- {
- private final Object message;
-
- private MessageByteBuffer( Object message )
- {
- super( EMPTY_BUFFER );
- this.message = message;
- }
-
- public void acquire()
- {
- // no-op since we are wraping a zero-byte buffer, this instance is to just curry the message
- }
-
- public void release()
- {
- // no-op since we are wraping a zero-byte buffer, this instance is to just curry the message
- }
- }
-
- private static class ProtocolEncoderOutputImpl implements ProtocolEncoderOutput
- {
- private ByteBuffer buffer;
-
- private final IoSession session;
- private final IoFilter.NextFilter nextFilter;
- private final IoFilter.WriteRequest writeRequest;
-
- public ProtocolEncoderOutputImpl( IoSession session, IoFilter.NextFilter nextFilter, IoFilter.WriteRequest writeRequest )
- {
- this.session = session;
- this.nextFilter = nextFilter;
- this.writeRequest = writeRequest;
- }
-
-
-
- public void write( ByteBuffer buf )
- {
- if(buffer != null)
- {
- flush();
- }
- buffer = buf;
- }
-
- public void mergeAll()
- {
- }
-
- public WriteFuture flush()
- {
- WriteFuture future = null;
- if( buffer == null )
- {
- return null;
- }
- else
- {
- ByteBuffer buf = buffer;
- // Flush only when the buffer has remaining.
- if( buf.hasRemaining() )
- {
- future = doFlush( buf );
- }
-
- }
-
- return future;
- }
-
-
- protected WriteFuture doFlush( ByteBuffer buf )
- {
- WriteFuture future = new DefaultWriteFuture( session );
- nextFilter.filterWrite(
- session,
- new IoFilter.WriteRequest(
- buf,
- future, writeRequest.getDestination() ) );
- return future;
- }
- }
-}
-
diff --git a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketAcceptor.java b/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketAcceptor.java
deleted file mode 100644
index e5360d32e0..0000000000
--- a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketAcceptor.java
+++ /dev/null
@@ -1,547 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.mina.transport.socket.nio;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.Selector;
-import java.nio.channels.ServerSocketChannel;
-import java.nio.channels.SocketChannel;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.mina.common.ExceptionMonitor;
-import org.apache.mina.common.IoAcceptor;
-import org.apache.mina.common.IoHandler;
-import org.apache.mina.common.IoServiceConfig;
-import org.apache.mina.common.support.BaseIoAcceptor;
-import org.apache.mina.util.Queue;
-import org.apache.mina.util.NewThreadExecutor;
-import org.apache.mina.util.NamePreservingRunnable;
-import edu.emory.mathcs.backport.java.util.concurrent.Executor;
-
-/**
- * {@link IoAcceptor} for socket transport (TCP/IP).
- *
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
- * @version $Rev: 619823 $, $Date: 2008-02-08 10:09:37 +0000 (Fri, 08 Feb 2008) $
- */
-public class MultiThreadSocketAcceptor extends SocketAcceptor
-{
- /**
- * @noinspection StaticNonFinalField
- */
- private static volatile int nextId = 0;
-
- private final Executor executor;
- private final Object lock = new Object();
- private final int id = nextId ++;
- private final String threadName = "SocketAcceptor-" + id;
- private final Map channels = new HashMap();
-
- private final Queue registerQueue = new Queue();
- private final Queue cancelQueue = new Queue();
-
- private final MultiThreadSocketIoProcessor[] ioProcessors;
- private final int processorCount;
-
- /**
- * @noinspection FieldAccessedSynchronizedAndUnsynchronized
- */
- private Selector selector;
- private Worker worker;
- private int processorDistributor = 0;
-
- /**
- * Create an acceptor with a single processing thread using a NewThreadExecutor
- */
- public MultiThreadSocketAcceptor()
- {
- this( 1, new NewThreadExecutor() );
- }
-
- /**
- * Create an acceptor with the desired number of processing threads
- *
- * @param processorCount Number of processing threads
- * @param executor Executor to use for launching threads
- */
- public MultiThreadSocketAcceptor( int processorCount, Executor executor )
- {
- if( processorCount < 1 )
- {
- throw new IllegalArgumentException( "Must have at least one processor" );
- }
-
- this.executor = executor;
- this.processorCount = processorCount;
- ioProcessors = new MultiThreadSocketIoProcessor[processorCount];
-
- for( int i = 0; i < processorCount; i++ )
- {
- ioProcessors[i] = new MultiThreadSocketIoProcessor( "SocketAcceptorIoProcessor-" + id + "." + i, executor );
- }
- }
-
-
- /**
- * Binds to the specified <code>address</code> and handles incoming connections with the specified
- * <code>handler</code>. Backlog value is configured to the value of <code>backlog</code> property.
- *
- * @throws IOException if failed to bind
- */
- public void bind( SocketAddress address, IoHandler handler, IoServiceConfig config ) throws IOException
- {
- if( handler == null )
- {
- throw new NullPointerException( "handler" );
- }
-
- if( address != null && !( address instanceof InetSocketAddress ) )
- {
- throw new IllegalArgumentException( "Unexpected address type: " + address.getClass() );
- }
-
- if( config == null )
- {
- config = getDefaultConfig();
- }
-
- RegistrationRequest request = new RegistrationRequest( address, handler, config );
-
- synchronized( registerQueue )
- {
- registerQueue.push( request );
- }
-
- startupWorker();
-
- selector.wakeup();
-
- synchronized( request )
- {
- while( !request.done )
- {
- try
- {
- request.wait();
- }
- catch( InterruptedException e )
- {
- ExceptionMonitor.getInstance().exceptionCaught( e );
- }
- }
- }
-
- if( request.exception != null )
- {
- throw request.exception;
- }
- }
-
-
- private synchronized void startupWorker() throws IOException
- {
- synchronized( lock )
- {
- if( worker == null )
- {
- selector = Selector.open();
- worker = new Worker();
-
- executor.execute( new NamePreservingRunnable( worker ) );
- }
- }
- }
-
- public void unbind( SocketAddress address )
- {
- if( address == null )
- {
- throw new NullPointerException( "address" );
- }
-
- CancellationRequest request = new CancellationRequest( address );
-
- try
- {
- startupWorker();
- }
- catch( IOException e )
- {
- // IOException is thrown only when Worker thread is not
- // running and failed to open a selector. We simply throw
- // IllegalArgumentException here because we can simply
- // conclude that nothing is bound to the selector.
- throw new IllegalArgumentException( "Address not bound: " + address );
- }
-
- synchronized( cancelQueue )
- {
- cancelQueue.push( request );
- }
-
- selector.wakeup();
-
- synchronized( request )
- {
- while( !request.done )
- {
- try
- {
- request.wait();
- }
- catch( InterruptedException e )
- {
- ExceptionMonitor.getInstance().exceptionCaught( e );
- }
- }
- }
-
- if( request.exception != null )
- {
- request.exception.fillInStackTrace();
-
- throw request.exception;
- }
- }
-
-
- private class Worker implements Runnable
- {
- public void run()
- {
- Thread.currentThread().setName(MultiThreadSocketAcceptor.this.threadName );
-
- for( ; ; )
- {
- try
- {
- int nKeys = selector.select();
-
- registerNew();
-
- if( nKeys > 0 )
- {
- processSessions( selector.selectedKeys() );
- }
-
- cancelKeys();
-
- if( selector.keys().isEmpty() )
- {
- synchronized( lock )
- {
- if( selector.keys().isEmpty() &&
- registerQueue.isEmpty() &&
- cancelQueue.isEmpty() )
- {
- worker = null;
- try
- {
- selector.close();
- }
- catch( IOException e )
- {
- ExceptionMonitor.getInstance().exceptionCaught( e );
- }
- finally
- {
- selector = null;
- }
- break;
- }
- }
- }
- }
- catch( IOException e )
- {
- ExceptionMonitor.getInstance().exceptionCaught( e );
-
- try
- {
- Thread.sleep( 1000 );
- }
- catch( InterruptedException e1 )
- {
- ExceptionMonitor.getInstance().exceptionCaught( e1 );
- }
- }
- }
- }
-
- private void processSessions( Set keys ) throws IOException
- {
- Iterator it = keys.iterator();
- while( it.hasNext() )
- {
- SelectionKey key = ( SelectionKey ) it.next();
-
- it.remove();
-
- if( !key.isAcceptable() )
- {
- continue;
- }
-
- ServerSocketChannel ssc = ( ServerSocketChannel ) key.channel();
-
- SocketChannel ch = ssc.accept();
-
- if( ch == null )
- {
- continue;
- }
-
- boolean success = false;
- try
- {
-
- RegistrationRequest req = ( RegistrationRequest ) key.attachment();
-
- MultiThreadSocketSessionImpl session = new MultiThreadSocketSessionImpl(
- MultiThreadSocketAcceptor.this, nextProcessor(), getListeners(),
- req.config, ch, req.handler, req.address );
-
- // New Interface
-// SocketSessionImpl session = new SocketSessionImpl(
-// SocketAcceptor.this, nextProcessor(), getListeners(),
-// req.config, ch, req.handler, req.address );
-
-
- getFilterChainBuilder().buildFilterChain( session.getFilterChain() );
- req.config.getFilterChainBuilder().buildFilterChain( session.getFilterChain() );
- req.config.getThreadModel().buildFilterChain( session.getFilterChain() );
- session.getIoProcessor().addNew( session );
- success = true;
- }
- catch( Throwable t )
- {
- ExceptionMonitor.getInstance().exceptionCaught( t );
- }
- finally
- {
- if( !success )
- {
- ch.close();
- }
- }
- }
- }
- }
-
- private MultiThreadSocketIoProcessor nextProcessor()
- {
- return ioProcessors[processorDistributor++ % processorCount];
- }
-
-
- private void registerNew()
- {
- if( registerQueue.isEmpty() )
- {
- return;
- }
-
- for( ; ; )
- {
- RegistrationRequest req;
-
- synchronized( registerQueue )
- {
- req = ( RegistrationRequest ) registerQueue.pop();
- }
-
- if( req == null )
- {
- break;
- }
-
- ServerSocketChannel ssc = null;
-
- try
- {
- ssc = ServerSocketChannel.open();
- ssc.configureBlocking( false );
-
- // Configure the server socket,
- SocketAcceptorConfig cfg;
- if( req.config instanceof SocketAcceptorConfig )
- {
- cfg = ( SocketAcceptorConfig ) req.config;
- }
- else
- {
- cfg = ( SocketAcceptorConfig ) getDefaultConfig();
- }
-
- ssc.socket().setReuseAddress( cfg.isReuseAddress() );
- ssc.socket().setReceiveBufferSize(
- ( ( SocketSessionConfig ) cfg.getSessionConfig() ).getReceiveBufferSize() );
-
- // and bind.
- ssc.socket().bind( req.address, cfg.getBacklog() );
- if( req.address == null || req.address.getPort() == 0 )
- {
- req.address = ( InetSocketAddress ) ssc.socket().getLocalSocketAddress();
- }
- ssc.register( selector, SelectionKey.OP_ACCEPT, req );
-
- synchronized( channels )
- {
- channels.put( req.address, ssc );
- }
-
- getListeners().fireServiceActivated(
- this, req.address, req.handler, req.config );
- }
- catch( IOException e )
- {
- req.exception = e;
- }
- finally
- {
- synchronized( req )
- {
- req.done = true;
-
- req.notifyAll();
- }
-
- if( ssc != null && req.exception != null )
- {
- try
- {
- ssc.close();
- }
- catch( IOException e )
- {
- ExceptionMonitor.getInstance().exceptionCaught( e );
- }
- }
- }
- }
- }
-
-
- private void cancelKeys()
- {
- if( cancelQueue.isEmpty() )
- {
- return;
- }
-
- for( ; ; )
- {
- CancellationRequest request;
-
- synchronized( cancelQueue )
- {
- request = ( CancellationRequest ) cancelQueue.pop();
- }
-
- if( request == null )
- {
- break;
- }
-
- ServerSocketChannel ssc;
- synchronized( channels )
- {
- ssc = ( ServerSocketChannel ) channels.remove( request.address );
- }
-
- // close the channel
- try
- {
- if( ssc == null )
- {
- request.exception = new IllegalArgumentException( "Address not bound: " + request.address );
- }
- else
- {
- SelectionKey key = ssc.keyFor( selector );
- request.registrationRequest = ( RegistrationRequest ) key.attachment();
- key.cancel();
-
- selector.wakeup(); // wake up again to trigger thread death
-
- ssc.close();
- }
- }
- catch( IOException e )
- {
- ExceptionMonitor.getInstance().exceptionCaught( e );
- }
- finally
- {
- synchronized( request )
- {
- request.done = true;
- request.notifyAll();
- }
-
- if( request.exception == null )
- {
- getListeners().fireServiceDeactivated(
- this, request.address,
- request.registrationRequest.handler,
- request.registrationRequest.config );
- }
- }
- }
- }
-
- private static class RegistrationRequest
- {
- private InetSocketAddress address;
- private final IoHandler handler;
- private final IoServiceConfig config;
- private IOException exception;
- private boolean done;
-
- private RegistrationRequest( SocketAddress address, IoHandler handler, IoServiceConfig config )
- {
- this.address = ( InetSocketAddress ) address;
- this.handler = handler;
- this.config = config;
- }
- }
-
-
- private static class CancellationRequest
- {
- private final SocketAddress address;
- private boolean done;
- private RegistrationRequest registrationRequest;
- private RuntimeException exception;
-
- private CancellationRequest( SocketAddress address )
- {
- this.address = address;
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketConnector.java b/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketConnector.java
deleted file mode 100644
index 7344f70078..0000000000
--- a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketConnector.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.mina.transport.socket.nio;
-
-import edu.emory.mathcs.backport.java.util.concurrent.Executor;
-import org.apache.mina.common.ConnectFuture;
-import org.apache.mina.common.ExceptionMonitor;
-import org.apache.mina.common.IoConnector;
-import org.apache.mina.common.IoConnectorConfig;
-import org.apache.mina.common.IoHandler;
-import org.apache.mina.common.IoServiceConfig;
-import org.apache.mina.common.support.AbstractIoFilterChain;
-import org.apache.mina.common.support.DefaultConnectFuture;
-import org.apache.mina.util.NamePreservingRunnable;
-import org.apache.mina.util.NewThreadExecutor;
-import org.apache.mina.util.Queue;
-
-import java.io.IOException;
-import java.net.ConnectException;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.Selector;
-import java.nio.channels.SocketChannel;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * {@link IoConnector} for socket transport (TCP/IP).
- *
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
- * @version $Rev: 619823 $, $Date: 2008-02-08 10:09:37 +0000 (Fri, 08 Feb 2008) $
- */
-public class MultiThreadSocketConnector extends SocketConnector
-{
- /** @noinspection StaticNonFinalField */
- private static volatile int nextId = 0;
-
- private final Object lock = new Object();
- private final int id = nextId++;
- private final String threadName = "SocketConnector-" + id;
-
- private final Queue connectQueue = new Queue();
- private final MultiThreadSocketIoProcessor[] ioProcessors;
- private final int processorCount;
- private final Executor executor;
-
- /** @noinspection FieldAccessedSynchronizedAndUnsynchronized */
- private Selector selector;
- private Worker worker;
- private int processorDistributor = 0;
- private int workerTimeout = 60; // 1 min.
-
- /** Create a connector with a single processing thread using a NewThreadExecutor */
- public MultiThreadSocketConnector()
- {
- this(1, new NewThreadExecutor());
- }
-
- /**
- * Create a connector with the desired number of processing threads
- *
- * @param processorCount Number of processing threads
- * @param executor Executor to use for launching threads
- */
- public MultiThreadSocketConnector(int processorCount, Executor executor)
- {
- if (processorCount < 1)
- {
- throw new IllegalArgumentException("Must have at least one processor");
- }
-
- this.executor = executor;
- this.processorCount = processorCount;
- ioProcessors = new MultiThreadSocketIoProcessor[processorCount];
-
- for (int i = 0; i < processorCount; i++)
- {
- ioProcessors[i] = new MultiThreadSocketIoProcessor("SocketConnectorIoProcessor-" + id + "." + i, executor);
- }
- }
-
- /**
- * How many seconds to keep the connection thread alive between connection requests
- *
- * @return Number of seconds to keep connection thread alive
- */
- public int getWorkerTimeout()
- {
- return workerTimeout;
- }
-
- /**
- * Set how many seconds the connection worker thread should remain alive once idle before terminating itself.
- *
- * @param workerTimeout Number of seconds to keep thread alive. Must be >=0
- */
- public void setWorkerTimeout(int workerTimeout)
- {
- if (workerTimeout < 0)
- {
- throw new IllegalArgumentException("Must be >= 0");
- }
- this.workerTimeout = workerTimeout;
- }
-
- public ConnectFuture connect(SocketAddress address, IoHandler handler, IoServiceConfig config)
- {
- return connect(address, null, handler, config);
- }
-
- public ConnectFuture connect(SocketAddress address, SocketAddress localAddress,
- IoHandler handler, IoServiceConfig config)
- {
- if (address == null)
- {
- throw new NullPointerException("address");
- }
- if (handler == null)
- {
- throw new NullPointerException("handler");
- }
-
- if (!(address instanceof InetSocketAddress))
- {
- throw new IllegalArgumentException("Unexpected address type: "
- + address.getClass());
- }
-
- if (localAddress != null && !(localAddress instanceof InetSocketAddress))
- {
- throw new IllegalArgumentException("Unexpected local address type: "
- + localAddress.getClass());
- }
-
- if (config == null)
- {
- config = getDefaultConfig();
- }
-
- SocketChannel ch = null;
- boolean success = false;
- try
- {
- ch = SocketChannel.open();
- ch.socket().setReuseAddress(true);
- if (localAddress != null)
- {
- ch.socket().bind(localAddress);
- }
-
- ch.configureBlocking(false);
-
- if (ch.connect(address))
- {
- DefaultConnectFuture future = new DefaultConnectFuture();
- newSession(ch, handler, config, future);
- success = true;
- return future;
- }
-
- success = true;
- }
- catch (IOException e)
- {
- return DefaultConnectFuture.newFailedFuture(e);
- }
- finally
- {
- if (!success && ch != null)
- {
- try
- {
- ch.close();
- }
- catch (IOException e)
- {
- ExceptionMonitor.getInstance().exceptionCaught(e);
- }
- }
- }
-
- ConnectionRequest request = new ConnectionRequest(ch, handler, config);
- synchronized (lock)
- {
- try
- {
- startupWorker();
- }
- catch (IOException e)
- {
- try
- {
- ch.close();
- }
- catch (IOException e2)
- {
- ExceptionMonitor.getInstance().exceptionCaught(e2);
- }
-
- return DefaultConnectFuture.newFailedFuture(e);
- }
- }
-
- synchronized (connectQueue)
- {
- connectQueue.push(request);
- }
- selector.wakeup();
-
- return request;
- }
-
- private synchronized void startupWorker() throws IOException
- {
- if (worker == null)
- {
- selector = Selector.open();
- worker = new Worker();
- executor.execute(new NamePreservingRunnable(worker));
- }
- }
-
- private void registerNew()
- {
- if (connectQueue.isEmpty())
- {
- return;
- }
-
- for (; ;)
- {
- ConnectionRequest req;
- synchronized (connectQueue)
- {
- req = (ConnectionRequest) connectQueue.pop();
- }
-
- if (req == null)
- {
- break;
- }
-
- SocketChannel ch = req.channel;
- try
- {
- ch.register(selector, SelectionKey.OP_CONNECT, req);
- }
- catch (IOException e)
- {
- req.setException(e);
- }
- }
- }
-
- private void processSessions(Set keys)
- {
- Iterator it = keys.iterator();
-
- while (it.hasNext())
- {
- SelectionKey key = (SelectionKey) it.next();
-
- if (!key.isConnectable())
- {
- continue;
- }
-
- SocketChannel ch = (SocketChannel) key.channel();
- ConnectionRequest entry = (ConnectionRequest) key.attachment();
-
- boolean success = false;
- try
- {
- ch.finishConnect();
- newSession(ch, entry.handler, entry.config, entry);
- success = true;
- }
- catch (Throwable e)
- {
- entry.setException(e);
- }
- finally
- {
- key.cancel();
- if (!success)
- {
- try
- {
- ch.close();
- }
- catch (IOException e)
- {
- ExceptionMonitor.getInstance().exceptionCaught(e);
- }
- }
- }
- }
-
- keys.clear();
- }
-
- private void processTimedOutSessions(Set keys)
- {
- long currentTime = System.currentTimeMillis();
- Iterator it = keys.iterator();
-
- while (it.hasNext())
- {
- SelectionKey key = (SelectionKey) it.next();
-
- if (!key.isValid())
- {
- continue;
- }
-
- ConnectionRequest entry = (ConnectionRequest) key.attachment();
-
- if (currentTime >= entry.deadline)
- {
- entry.setException(new ConnectException());
- try
- {
- key.channel().close();
- }
- catch (IOException e)
- {
- ExceptionMonitor.getInstance().exceptionCaught(e);
- }
- finally
- {
- key.cancel();
- }
- }
- }
- }
-
- private void newSession(SocketChannel ch, IoHandler handler, IoServiceConfig config, ConnectFuture connectFuture)
- throws IOException
- {
- MultiThreadSocketSessionImpl session =
- new MultiThreadSocketSessionImpl(this, nextProcessor(), getListeners(),
- config, ch, handler, ch.socket().getRemoteSocketAddress());
-
- //new interface
-// SocketSessionImpl session = new SocketSessionImpl(
-// this, nextProcessor(), getListeners(),
-// config, ch, handler, ch.socket().getRemoteSocketAddress() );
- try
- {
- getFilterChainBuilder().buildFilterChain(session.getFilterChain());
- config.getFilterChainBuilder().buildFilterChain(session.getFilterChain());
- config.getThreadModel().buildFilterChain(session.getFilterChain());
- }
- catch (Throwable e)
- {
- throw (IOException) new IOException("Failed to create a session.").initCause(e);
- }
-
- // Set the ConnectFuture of the specified session, which will be
- // removed and notified by AbstractIoFilterChain eventually.
- session.setAttribute( AbstractIoFilterChain.CONNECT_FUTURE, connectFuture );
-
- // Forward the remaining process to the SocketIoProcessor.
- session.getIoProcessor().addNew(session);
- }
-
- private MultiThreadSocketIoProcessor nextProcessor()
- {
- return ioProcessors[processorDistributor++ % processorCount];
- }
-
- private class Worker implements Runnable
- {
- private long lastActive = System.currentTimeMillis();
-
- public void run()
- {
- Thread.currentThread().setName(MultiThreadSocketConnector.this.threadName);
-
- for (; ;)
- {
- try
- {
- int nKeys = selector.select(1000);
-
- registerNew();
-
- if (nKeys > 0)
- {
- processSessions(selector.selectedKeys());
- }
-
- processTimedOutSessions(selector.keys());
-
- if (selector.keys().isEmpty())
- {
- if (System.currentTimeMillis() - lastActive > workerTimeout * 1000L)
- {
- synchronized (lock)
- {
- if (selector.keys().isEmpty() &&
- connectQueue.isEmpty())
- {
- worker = null;
- try
- {
- selector.close();
- }
- catch (IOException e)
- {
- ExceptionMonitor.getInstance().exceptionCaught(e);
- }
- finally
- {
- selector = null;
- }
- break;
- }
- }
- }
- }
- else
- {
- lastActive = System.currentTimeMillis();
- }
- }
- catch (IOException e)
- {
- ExceptionMonitor.getInstance().exceptionCaught(e);
-
- try
- {
- Thread.sleep(1000);
- }
- catch (InterruptedException e1)
- {
- ExceptionMonitor.getInstance().exceptionCaught(e1);
- }
- }
- }
- }
- }
-
- private class ConnectionRequest extends DefaultConnectFuture
- {
- private final SocketChannel channel;
- private final long deadline;
- private final IoHandler handler;
- private final IoServiceConfig config;
-
- private ConnectionRequest(SocketChannel channel, IoHandler handler, IoServiceConfig config)
- {
- this.channel = channel;
- long timeout;
- if (config instanceof IoConnectorConfig)
- {
- timeout = ((IoConnectorConfig) config).getConnectTimeoutMillis();
- }
- else
- {
- timeout = ((IoConnectorConfig) getDefaultConfig()).getConnectTimeoutMillis();
- }
- this.deadline = System.currentTimeMillis() + timeout;
- this.handler = handler;
- this.config = config;
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketFilterChain.java b/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketFilterChain.java
deleted file mode 100644
index 67b8c8d820..0000000000
--- a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketFilterChain.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.mina.transport.socket.nio;
-
-import java.io.IOException;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoFilterChain;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.common.IoFilter.WriteRequest;
-import org.apache.mina.common.support.AbstractIoFilterChain;
-import org.apache.mina.util.Queue;
-
-/**
- * An {@link IoFilterChain} for socket transport (TCP/IP).
- *
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
- */
-class MultiThreadSocketFilterChain extends AbstractIoFilterChain {
-
- MultiThreadSocketFilterChain( IoSession parent )
- {
- super( parent );
- }
-
- protected void doWrite( IoSession session, WriteRequest writeRequest )
- {
- MultiThreadSocketSessionImpl s = (MultiThreadSocketSessionImpl) session;
- Queue writeRequestQueue = s.getWriteRequestQueue();
-
- // SocketIoProcessor.doFlush() will reset it after write is finished
- // because the buffer will be passed with messageSent event.
- ( ( ByteBuffer ) writeRequest.getMessage() ).mark();
- synchronized( writeRequestQueue )
- {
- writeRequestQueue.push( writeRequest );
- if( writeRequestQueue.size() == 1 && session.getTrafficMask().isWritable() )
- {
- // Notify SocketIoProcessor only when writeRequestQueue was empty.
- s.getIoProcessor().flush( s );
- }
- }
- }
-
- protected void doClose( IoSession session ) throws IOException
- {
- MultiThreadSocketSessionImpl s = (MultiThreadSocketSessionImpl) session;
- s.getIoProcessor().remove( s );
- }
-}
diff --git a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketIoProcessor.java b/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketIoProcessor.java
deleted file mode 100644
index c23ad8686f..0000000000
--- a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketIoProcessor.java
+++ /dev/null
@@ -1,1026 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.mina.transport.socket.nio;
-
-import edu.emory.mathcs.backport.java.util.concurrent.Executor;
-import edu.emory.mathcs.backport.java.util.concurrent.locks.ReentrantLock;
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.ExceptionMonitor;
-import org.apache.mina.common.IdleStatus;
-import org.apache.mina.common.IoFilter.WriteRequest;
-import org.apache.mina.common.WriteTimeoutException;
-import org.apache.mina.util.IdentityHashSet;
-import org.apache.mina.util.NamePreservingRunnable;
-import org.apache.mina.util.Queue;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.Selector;
-import java.nio.channels.SocketChannel;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-
-/**
- * Performs all I/O operations for sockets which is connected or bound. This class is used by MINA internally.
- *
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
- * @version $Rev: 619823 $, $Date: 2008-02-08 10:09:37 +0000 (Fri, 08 Feb 2008) $,
- */
-class MultiThreadSocketIoProcessor extends SocketIoProcessor
-{
- Logger _logger = LoggerFactory.getLogger(MultiThreadSocketIoProcessor.class);
- Logger _loggerRead = LoggerFactory.getLogger(MultiThreadSocketIoProcessor.class + ".Reader");
- Logger _loggerWrite = LoggerFactory.getLogger(MultiThreadSocketIoProcessor.class + ".Writer");
-
- private static final long SELECTOR_TIMEOUT = 1000L;
-
- private int MAX_READ_BYTES_PER_SESSION = 524288; //512K
- private int MAX_FLUSH_BYTES_PER_SESSION = 524288; //512K
-
- private final Object readLock = new Object();
- private final Object writeLock = new Object();
-
- private final String threadName;
- private final Executor executor;
-
- private ReentrantLock trafficMaskUpdateLock = new ReentrantLock();
-
- /** @noinspection FieldAccessedSynchronizedAndUnsynchronized */
- private volatile Selector selector, writeSelector;
-
- private final Queue newSessions = new Queue();
- private final Queue removingSessions = new Queue();
- private final BlockingQueue flushingSessions = new LinkedBlockingQueue();
- private final IdentityHashSet flushingSessionsSet = new IdentityHashSet();
-
- private final Queue trafficControllingSessions = new Queue();
-
- private ReadWorker readWorker;
- private WriteWorker writeWorker;
- private long lastIdleReadCheckTime = System.currentTimeMillis();
- private long lastIdleWriteCheckTime = System.currentTimeMillis();
-
- MultiThreadSocketIoProcessor(String threadName, Executor executor)
- {
- super(threadName, executor);
- this.threadName = threadName;
- this.executor = executor;
- }
-
- void addNew(SocketSessionImpl session) throws IOException
- {
- synchronized (newSessions)
- {
- newSessions.push(session);
- }
-
- startupWorker();
-
- selector.wakeup();
- writeSelector.wakeup();
- }
-
- void remove(SocketSessionImpl session) throws IOException
- {
- scheduleRemove(session);
- startupWorker();
- selector.wakeup();
- }
-
- private void startupWorker() throws IOException
- {
- synchronized (readLock)
- {
- if (readWorker == null)
- {
- selector = Selector.open();
- readWorker = new ReadWorker();
- executor.execute(new NamePreservingRunnable(readWorker));
- }
- }
-
- synchronized (writeLock)
- {
- if (writeWorker == null)
- {
- writeSelector = Selector.open();
- writeWorker = new WriteWorker();
- executor.execute(new NamePreservingRunnable(writeWorker));
- }
- }
-
- }
-
- void flush(SocketSessionImpl session)
- {
- scheduleFlush(session);
- Selector selector = this.writeSelector;
-
- if (selector != null)
- {
- selector.wakeup();
- }
- }
-
- void updateTrafficMask(SocketSessionImpl session)
- {
- scheduleTrafficControl(session);
- Selector selector = this.selector;
- if (selector != null)
- {
- selector.wakeup();
- }
- }
-
- private void scheduleRemove(SocketSessionImpl session)
- {
- synchronized (removingSessions)
- {
- removingSessions.push(session);
- }
- }
-
- private void scheduleFlush(SocketSessionImpl session)
- {
- synchronized (flushingSessionsSet)
- {
- //if flushingSessions grows to contain Integer.MAX_VALUE sessions
- // then this will fail.
- if (flushingSessionsSet.add(session))
- {
- flushingSessions.offer(session);
- }
- }
- }
-
- private void scheduleTrafficControl(SocketSessionImpl session)
- {
- synchronized (trafficControllingSessions)
- {
- trafficControllingSessions.push(session);
- }
- }
-
- private void doAddNewReader() throws InterruptedException
- {
- if (newSessions.isEmpty())
- {
- return;
- }
-
- for (; ;)
- {
- MultiThreadSocketSessionImpl session;
-
- synchronized (newSessions)
- {
- session = (MultiThreadSocketSessionImpl) newSessions.peek();
- }
-
- if (session == null)
- {
- break;
- }
-
- SocketChannel ch = session.getChannel();
-
-
- try
- {
-
- ch.configureBlocking(false);
- session.setSelectionKey(ch.register(selector,
- SelectionKey.OP_READ,
- session));
-
- //System.out.println("ReadDebug:"+"Awaiting Registration");
- session.awaitRegistration();
- sessionCreated(session);
- }
- catch (IOException e)
- {
- // Clear the AbstractIoFilterChain.CONNECT_FUTURE attribute
- // and call ConnectFuture.setException().
- session.getFilterChain().fireExceptionCaught(session, e);
- }
- }
- }
-
-
- private void doAddNewWrite() throws InterruptedException
- {
- if (newSessions.isEmpty())
- {
- return;
- }
-
- for (; ;)
- {
- MultiThreadSocketSessionImpl session;
-
- synchronized (newSessions)
- {
- session = (MultiThreadSocketSessionImpl) newSessions.peek();
- }
-
- if (session == null)
- {
- break;
- }
-
- SocketChannel ch = session.getChannel();
-
- try
- {
- ch.configureBlocking(false);
- synchronized (flushingSessionsSet)
- {
- flushingSessionsSet.add(session);
- }
-
- session.setWriteSelectionKey(ch.register(writeSelector,
- SelectionKey.OP_WRITE,
- session));
-
- //System.out.println("WriteDebug:"+"Awaiting Registration");
- session.awaitRegistration();
- sessionCreated(session);
- }
- catch (IOException e)
- {
-
- // Clear the AbstractIoFilterChain.CONNECT_FUTURE attribute
- // and call ConnectFuture.setException().
- session.getFilterChain().fireExceptionCaught(session, e);
- }
- }
- }
-
-
- private void sessionCreated(SocketSessionImpl sessionParam) throws InterruptedException
- {
- MultiThreadSocketSessionImpl session = (MultiThreadSocketSessionImpl) sessionParam;
- synchronized (newSessions)
- {
- if (!session.created())
- {
- _logger.debug("Popping new session");
- newSessions.pop();
-
- // AbstractIoFilterChain.CONNECT_FUTURE is cleared inside here
- // in AbstractIoFilterChain.fireSessionOpened().
- session.getServiceListeners().fireSessionCreated(session);
-
- session.doneCreation();
- }
- }
- }
-
- private void doRemove()
- {
- if (removingSessions.isEmpty())
- {
- return;
- }
-
- for (; ;)
- {
- MultiThreadSocketSessionImpl session;
-
- synchronized (removingSessions)
- {
- session = (MultiThreadSocketSessionImpl) removingSessions.pop();
- }
-
- if (session == null)
- {
- break;
- }
-
- SocketChannel ch = session.getChannel();
- SelectionKey key = session.getReadSelectionKey();
- SelectionKey writeKey = session.getWriteSelectionKey();
-
- // Retry later if session is not yet fully initialized.
- // (In case that Session.close() is called before addSession() is processed)
- if (key == null || writeKey == null)
- {
- scheduleRemove(session);
- break;
- }
- // skip if channel is already closed
- if (!key.isValid() || !writeKey.isValid())
- {
- continue;
- }
-
- try
- {
- //System.out.println("ReadDebug:"+"Removing Session: " + System.identityHashCode(session));
- synchronized (readLock)
- {
- key.cancel();
- }
- synchronized (writeLock)
- {
- writeKey.cancel();
- }
- ch.close();
- }
- catch (IOException e)
- {
- session.getFilterChain().fireExceptionCaught(session, e);
- }
- finally
- {
- releaseWriteBuffers(session);
- session.getServiceListeners().fireSessionDestroyed(session);
- }
- }
- }
-
- private void processRead(Set selectedKeys)
- {
- Iterator it = selectedKeys.iterator();
-
- while (it.hasNext())
- {
- SelectionKey key = (SelectionKey) it.next();
- MultiThreadSocketSessionImpl session = (MultiThreadSocketSessionImpl) key.attachment();
-
- synchronized (readLock)
- {
- if (key.isValid() && key.isReadable() && session.getTrafficMask().isReadable())
- {
- read(session);
- }
- }
-
- }
-
- selectedKeys.clear();
- }
-
- private void processWrite(Set selectedKeys)
- {
- Iterator it = selectedKeys.iterator();
-
- while (it.hasNext())
- {
- SelectionKey key = (SelectionKey) it.next();
- SocketSessionImpl session = (SocketSessionImpl) key.attachment();
-
- synchronized (writeLock)
- {
- if (key.isValid() && key.isWritable() && session.getTrafficMask().isWritable())
- {
-
- // Clear OP_WRITE
- key.interestOps(key.interestOps() & (~SelectionKey.OP_WRITE));
-
- synchronized (flushingSessionsSet)
- {
- flushingSessions.offer(session);
- }
- }
- }
- }
-
- selectedKeys.clear();
- }
-
- private void read(SocketSessionImpl session)
- {
-
- //if (_loggerWrite.isDebugEnabled())
- {
- //System.out.println("WriteDebug:"+"Starting read for Session:" + System.identityHashCode(session));
- }
-
- int totalReadBytes = 0;
-
- while (totalReadBytes <= MAX_READ_BYTES_PER_SESSION)
- {
- ByteBuffer buf = ByteBuffer.allocate(session.getReadBufferSize());
- SocketChannel ch = session.getChannel();
-
- try
- {
- buf.clear();
-
- int readBytes = 0;
- int ret;
-
- try
- {
- while ((ret = ch.read(buf.buf())) > 0)
- {
- readBytes += ret;
- totalReadBytes += ret;
- }
- }
- finally
- {
- buf.flip();
- }
-
-
- if (readBytes > 0)
- {
- session.increaseReadBytes(readBytes);
-
- session.getFilterChain().fireMessageReceived(session, buf);
- buf = null;
- }
-
- if (ret <= 0)
- {
- if (ret == 0)
- {
- if (readBytes == session.getReadBufferSize())
- {
- continue;
- }
- }
- else
- {
- scheduleRemove(session);
- }
-
- break;
- }
- }
- catch (Throwable e)
- {
- if (e instanceof IOException)
- {
- scheduleRemove(session);
- }
- session.getFilterChain().fireExceptionCaught(session, e);
-
- //Stop Reading this session.
- return;
- }
- finally
- {
- if (buf != null)
- {
- buf.release();
- }
- }
- }//for
-
- // if (_loggerWrite.isDebugEnabled())
- {
- //System.out.println("WriteDebug:"+"Read for Session:" + System.identityHashCode(session) + " got: " + totalReadBytes);
- }
- }
-
-
- private void notifyReadIdleness()
- {
- // process idle sessions
- long currentTime = System.currentTimeMillis();
- if ((currentTime - lastIdleReadCheckTime) >= 1000)
- {
- lastIdleReadCheckTime = currentTime;
- Set keys = selector.keys();
- if (keys != null)
- {
- for (Iterator it = keys.iterator(); it.hasNext();)
- {
- SelectionKey key = (SelectionKey) it.next();
- SocketSessionImpl session = (SocketSessionImpl) key.attachment();
- notifyReadIdleness(session, currentTime);
- }
- }
- }
- }
-
- private void notifyWriteIdleness()
- {
- // process idle sessions
- long currentTime = System.currentTimeMillis();
- if ((currentTime - lastIdleWriteCheckTime) >= 1000)
- {
- lastIdleWriteCheckTime = currentTime;
- Set keys = writeSelector.keys();
- if (keys != null)
- {
- for (Iterator it = keys.iterator(); it.hasNext();)
- {
- SelectionKey key = (SelectionKey) it.next();
- SocketSessionImpl session = (SocketSessionImpl) key.attachment();
- notifyWriteIdleness(session, currentTime);
- }
- }
- }
- }
-
- private void notifyReadIdleness(SocketSessionImpl session, long currentTime)
- {
- notifyIdleness0(
- session, currentTime,
- session.getIdleTimeInMillis(IdleStatus.BOTH_IDLE),
- IdleStatus.BOTH_IDLE,
- Math.max(session.getLastIoTime(), session.getLastIdleTime(IdleStatus.BOTH_IDLE)));
- notifyIdleness0(
- session, currentTime,
- session.getIdleTimeInMillis(IdleStatus.READER_IDLE),
- IdleStatus.READER_IDLE,
- Math.max(session.getLastReadTime(), session.getLastIdleTime(IdleStatus.READER_IDLE)));
-
- notifyWriteTimeout(session, currentTime, session
- .getWriteTimeoutInMillis(), session.getLastWriteTime());
- }
-
- private void notifyWriteIdleness(SocketSessionImpl session, long currentTime)
- {
- notifyIdleness0(
- session, currentTime,
- session.getIdleTimeInMillis(IdleStatus.BOTH_IDLE),
- IdleStatus.BOTH_IDLE,
- Math.max(session.getLastIoTime(), session.getLastIdleTime(IdleStatus.BOTH_IDLE)));
- notifyIdleness0(
- session, currentTime,
- session.getIdleTimeInMillis(IdleStatus.WRITER_IDLE),
- IdleStatus.WRITER_IDLE,
- Math.max(session.getLastWriteTime(), session.getLastIdleTime(IdleStatus.WRITER_IDLE)));
-
- notifyWriteTimeout(session, currentTime, session
- .getWriteTimeoutInMillis(), session.getLastWriteTime());
- }
-
- private void notifyIdleness0(SocketSessionImpl session, long currentTime,
- long idleTime, IdleStatus status,
- long lastIoTime)
- {
- if (idleTime > 0 && lastIoTime != 0
- && (currentTime - lastIoTime) >= idleTime)
- {
- session.increaseIdleCount(status);
- session.getFilterChain().fireSessionIdle(session, status);
- }
- }
-
- private void notifyWriteTimeout(SocketSessionImpl session,
- long currentTime,
- long writeTimeout, long lastIoTime)
- {
-
- MultiThreadSocketSessionImpl sesh = (MultiThreadSocketSessionImpl) session;
- SelectionKey key = sesh.getWriteSelectionKey();
-
- synchronized (writeLock)
- {
- if (writeTimeout > 0
- && (currentTime - lastIoTime) >= writeTimeout
- && key != null && key.isValid()
- && (key.interestOps() & SelectionKey.OP_WRITE) != 0)
- {
- session.getFilterChain().fireExceptionCaught(session, new WriteTimeoutException());
- }
- }
- }
-
- private SocketSessionImpl getNextFlushingSession()
- {
- return (SocketSessionImpl) flushingSessions.poll();
- }
-
- private void releaseSession(SocketSessionImpl session)
- {
- synchronized (session.getWriteRequestQueue())
- {
- synchronized (flushingSessionsSet)
- {
- if (session.getScheduledWriteRequests() > 0)
- {
- if (_loggerWrite.isDebugEnabled())
- {
- //System.out.println("WriteDebug:"+"Reflush" + System.identityHashCode(session));
- }
- flushingSessions.offer(session);
- }
- else
- {
- if (_loggerWrite.isDebugEnabled())
- {
- //System.out.println("WriteDebug:"+"Releasing session " + System.identityHashCode(session));
- }
- flushingSessionsSet.remove(session);
- }
- }
- }
- }
-
- private void releaseWriteBuffers(SocketSessionImpl session)
- {
- Queue writeRequestQueue = session.getWriteRequestQueue();
- WriteRequest req;
-
- //Should this be synchronized?
- synchronized (writeRequestQueue)
- {
- while ((req = (WriteRequest) writeRequestQueue.pop()) != null)
- {
- try
- {
- ((ByteBuffer) req.getMessage()).release();
- }
- catch (IllegalStateException e)
- {
- session.getFilterChain().fireExceptionCaught(session, e);
- }
- finally
- {
- req.getFuture().setWritten(false);
- }
- }
- }
- }
-
- private void doFlush()
- {
- MultiThreadSocketSessionImpl session;
-
- while ((session = (MultiThreadSocketSessionImpl) getNextFlushingSession()) != null)
- {
- if (!session.isConnected())
- {
- releaseWriteBuffers(session);
- releaseSession(session);
- continue;
- }
-
- SelectionKey key = session.getWriteSelectionKey();
- // Retry later if session is not yet fully initialized.
- // (In case that Session.write() is called before addSession() is processed)
- if (key == null)
- {
- scheduleFlush(session);
- releaseSession(session);
- continue;
- }
- // skip if channel is already closed
- if (!key.isValid())
- {
- releaseSession(session);
- continue;
- }
-
- try
- {
- if (doFlush(session))
- {
- releaseSession(session);
- }
- }
- catch (IOException e)
- {
- releaseSession(session);
- scheduleRemove(session);
- session.getFilterChain().fireExceptionCaught(session, e);
- }
-
- }
-
- }
-
- private boolean doFlush(SocketSessionImpl sessionParam) throws IOException
- {
- MultiThreadSocketSessionImpl session = (MultiThreadSocketSessionImpl) sessionParam;
- // Clear OP_WRITE
- SelectionKey key = session.getWriteSelectionKey();
- synchronized (writeLock)
- {
- key.interestOps(key.interestOps() & (~SelectionKey.OP_WRITE));
- }
- SocketChannel ch = session.getChannel();
- Queue writeRequestQueue = session.getWriteRequestQueue();
-
- long totalFlushedBytes = 0;
- while (true)
- {
- WriteRequest req;
-
- synchronized (writeRequestQueue)
- {
- req = (WriteRequest) writeRequestQueue.first();
- }
-
- if (req == null)
- {
- break;
- }
-
- ByteBuffer buf = (ByteBuffer) req.getMessage();
- if (buf.remaining() == 0)
- {
- synchronized (writeRequestQueue)
- {
- writeRequestQueue.pop();
- }
-
- session.increaseWrittenMessages();
-
- buf.reset();
- session.getFilterChain().fireMessageSent(session, req);
- continue;
- }
-
-
- int writtenBytes = 0;
-
- // Reported as DIRMINA-362
- //note: todo: fixme: Not sure it is important but if we see NoyYetConnected exceptions or 100% CPU in the kernel then this is it.
- if (key.isWritable())
- {
- writtenBytes = ch.write(buf.buf());
- totalFlushedBytes += writtenBytes;
- }
-
- if (writtenBytes > 0)
- {
- session.increaseWrittenBytes(writtenBytes);
- }
-
- if (buf.hasRemaining() || (totalFlushedBytes <= MAX_FLUSH_BYTES_PER_SESSION))
- {
- // Kernel buffer is full
- synchronized (writeLock)
- {
- key.interestOps(key.interestOps() | SelectionKey.OP_WRITE);
- }
- if (_loggerWrite.isDebugEnabled())
- {
- //System.out.println("WriteDebug:"+"Written BF: " + (session.getWrittenBytes() - totalFlushedBytes) + " bytes");
- }
- return false;
- }
- }
-
- if (_loggerWrite.isDebugEnabled())
- {
- //System.out.println("WriteDebug:"+"Written : " + (session.getWrittenBytes() - totalFlushedBytes) + " bytes");
- }
- return true;
- }
-
- private void doUpdateTrafficMask()
- {
- if (trafficControllingSessions.isEmpty() || trafficMaskUpdateLock.isLocked())
- {
- return;
- }
-
- // Synchronize over entire operation as this method should be called
- // from both read and write thread and we don't want the order of the
- // updates to get changed.
- trafficMaskUpdateLock.lock();
- try
- {
- for (; ;)
- {
- MultiThreadSocketSessionImpl session;
-
- session = (MultiThreadSocketSessionImpl) trafficControllingSessions.pop();
-
- if (session == null)
- {
- break;
- }
-
- SelectionKey key = session.getReadSelectionKey();
- // Retry later if session is not yet fully initialized.
- // (In case that Session.suspend??() or session.resume??() is
- // called before addSession() is processed)
- if (key == null)
- {
- scheduleTrafficControl(session);
- break;
- }
- // skip if channel is already closed
- if (!key.isValid())
- {
- continue;
- }
-
- // The normal is OP_READ and, if there are write requests in the
- // session's write queue, set OP_WRITE to trigger flushing.
-
- //Sset to Read and Write if there is nothing then the cost
- // is one loop through the flusher.
- int ops = SelectionKey.OP_READ;
-
- // Now mask the preferred ops with the mask of the current session
- int mask = session.getTrafficMask().getInterestOps();
- synchronized (readLock)
- {
- key.interestOps(ops & mask);
- }
- //Change key to the WriteSelection Key
- key = session.getWriteSelectionKey();
- if (key != null && key.isValid())
- {
- Queue writeRequestQueue = session.getWriteRequestQueue();
- synchronized (writeRequestQueue)
- {
- if (!writeRequestQueue.isEmpty())
- {
- ops = SelectionKey.OP_WRITE;
- synchronized (writeLock)
- {
- key.interestOps(ops & mask);
- }
- }
- }
- }
- }
- }
- finally
- {
- trafficMaskUpdateLock.unlock();
- }
-
- }
-
- private class WriteWorker implements Runnable
- {
-
- public void run()
- {
- Thread.currentThread().setName(MultiThreadSocketIoProcessor.this.threadName + "Writer");
-
- //System.out.println("WriteDebug:"+"Startup");
- for (; ;)
- {
- try
- {
- int nKeys = writeSelector.select(SELECTOR_TIMEOUT);
-
- doAddNewWrite();
- doUpdateTrafficMask();
-
- if (nKeys > 0)
- {
- //System.out.println("WriteDebug:"+nKeys + " keys from writeselector");
- processWrite(writeSelector.selectedKeys());
- }
- else
- {
- //System.out.println("WriteDebug:"+"No keys from writeselector");
- }
-
- doRemove();
- notifyWriteIdleness();
-
- if (flushingSessionsSet.size() > 0)
- {
- doFlush();
- }
-
- if (writeSelector.keys().isEmpty())
- {
- synchronized (writeLock)
- {
-
- if (writeSelector.keys().isEmpty() && newSessions.isEmpty())
- {
- writeWorker = null;
- try
- {
- writeSelector.close();
- }
- catch (IOException e)
- {
- ExceptionMonitor.getInstance().exceptionCaught(e);
- }
- finally
- {
- writeSelector = null;
- }
-
- break;
- }
- }
- }
-
- }
- catch (Throwable t)
- {
- ExceptionMonitor.getInstance().exceptionCaught(t);
-
- try
- {
- Thread.sleep(1000);
- }
- catch (InterruptedException e1)
- {
- ExceptionMonitor.getInstance().exceptionCaught(e1);
- }
- }
- }
- //System.out.println("WriteDebug:"+"Shutdown");
- }
-
- }
-
- private class ReadWorker implements Runnable
- {
-
- public void run()
- {
- Thread.currentThread().setName(MultiThreadSocketIoProcessor.this.threadName + "Reader");
-
- //System.out.println("ReadDebug:"+"Startup");
- for (; ;)
- {
- try
- {
- int nKeys = selector.select(SELECTOR_TIMEOUT);
-
- doAddNewReader();
- doUpdateTrafficMask();
-
- if (nKeys > 0)
- {
- //System.out.println("ReadDebug:"+nKeys + " keys from selector");
-
- processRead(selector.selectedKeys());
- }
- else
- {
- //System.out.println("ReadDebug:"+"No keys from selector");
- }
-
-
- doRemove();
- notifyReadIdleness();
-
- if (selector.keys().isEmpty())
- {
-
- synchronized (readLock)
- {
- if (selector.keys().isEmpty() && newSessions.isEmpty())
- {
- readWorker = null;
- try
- {
- selector.close();
- }
- catch (IOException e)
- {
- ExceptionMonitor.getInstance().exceptionCaught(e);
- }
- finally
- {
- selector = null;
- }
-
- break;
- }
- }
- }
- }
- catch (Throwable t)
- {
- ExceptionMonitor.getInstance().exceptionCaught(t);
-
- try
- {
- Thread.sleep(1000);
- }
- catch (InterruptedException e1)
- {
- ExceptionMonitor.getInstance().exceptionCaught(e1);
- }
- }
- }
- //System.out.println("ReadDebug:"+"Shutdown");
- }
-
- }
-}
diff --git a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketSessionConfigImpl.java b/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketSessionConfigImpl.java
deleted file mode 100644
index 043d4800b6..0000000000
--- a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketSessionConfigImpl.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.mina.transport.socket.nio;
-
-import org.apache.mina.common.ExceptionMonitor;
-import org.apache.mina.common.IoConnectorConfig;
-import org.apache.mina.common.support.BaseIoSessionConfig;
-
-import java.io.IOException;
-import java.net.Socket;
-import java.net.SocketException;
-
-/**
- * An {@link IoConnectorConfig} for {@link SocketConnector}.
- *
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
- * @version $Rev: 619823 $, $Date: 2008-02-08 10:09:37 +0000 (Fri, 08 Feb 2008) $
- */
-public class MultiThreadSocketSessionConfigImpl extends org.apache.mina.transport.socket.nio.SocketSessionConfigImpl
-{
- private static boolean SET_RECEIVE_BUFFER_SIZE_AVAILABLE = false;
- private static boolean SET_SEND_BUFFER_SIZE_AVAILABLE = false;
- private static boolean GET_TRAFFIC_CLASS_AVAILABLE = false;
- private static boolean SET_TRAFFIC_CLASS_AVAILABLE = false;
-
- private static boolean DEFAULT_REUSE_ADDRESS;
- private static int DEFAULT_RECEIVE_BUFFER_SIZE;
- private static int DEFAULT_SEND_BUFFER_SIZE;
- private static int DEFAULT_TRAFFIC_CLASS;
- private static boolean DEFAULT_KEEP_ALIVE;
- private static boolean DEFAULT_OOB_INLINE;
- private static int DEFAULT_SO_LINGER;
- private static boolean DEFAULT_TCP_NO_DELAY;
-
- static
- {
- initialize();
- }
-
- private static void initialize()
- {
- Socket socket = null;
-
- socket = new Socket();
-
- try
- {
- DEFAULT_REUSE_ADDRESS = socket.getReuseAddress();
- DEFAULT_RECEIVE_BUFFER_SIZE = socket.getReceiveBufferSize();
- DEFAULT_SEND_BUFFER_SIZE = socket.getSendBufferSize();
- DEFAULT_KEEP_ALIVE = socket.getKeepAlive();
- DEFAULT_OOB_INLINE = socket.getOOBInline();
- DEFAULT_SO_LINGER = socket.getSoLinger();
- DEFAULT_TCP_NO_DELAY = socket.getTcpNoDelay();
-
- // Check if setReceiveBufferSize is supported.
- try
- {
- socket.setReceiveBufferSize(DEFAULT_RECEIVE_BUFFER_SIZE);
- SET_RECEIVE_BUFFER_SIZE_AVAILABLE = true;
- }
- catch( SocketException e )
- {
- SET_RECEIVE_BUFFER_SIZE_AVAILABLE = false;
- }
-
- // Check if setSendBufferSize is supported.
- try
- {
- socket.setSendBufferSize(DEFAULT_SEND_BUFFER_SIZE);
- SET_SEND_BUFFER_SIZE_AVAILABLE = true;
- }
- catch( SocketException e )
- {
- SET_SEND_BUFFER_SIZE_AVAILABLE = false;
- }
-
- // Check if getTrafficClass is supported.
- try
- {
- DEFAULT_TRAFFIC_CLASS = socket.getTrafficClass();
- GET_TRAFFIC_CLASS_AVAILABLE = true;
- }
- catch( SocketException e )
- {
- GET_TRAFFIC_CLASS_AVAILABLE = false;
- DEFAULT_TRAFFIC_CLASS = 0;
- }
- }
- catch( SocketException e )
- {
- throw new ExceptionInInitializerError(e);
- }
- finally
- {
- if( socket != null )
- {
- try
- {
- socket.close();
- }
- catch( IOException e )
- {
- ExceptionMonitor.getInstance().exceptionCaught(e);
- }
- }
- }
- }
-
- public static boolean isSetReceiveBufferSizeAvailable() {
- return SET_RECEIVE_BUFFER_SIZE_AVAILABLE;
- }
-
- public static boolean isSetSendBufferSizeAvailable() {
- return SET_SEND_BUFFER_SIZE_AVAILABLE;
- }
-
- public static boolean isGetTrafficClassAvailable() {
- return GET_TRAFFIC_CLASS_AVAILABLE;
- }
-
- public static boolean isSetTrafficClassAvailable() {
- return SET_TRAFFIC_CLASS_AVAILABLE;
- }
-
- private boolean reuseAddress = DEFAULT_REUSE_ADDRESS;
- private int receiveBufferSize = DEFAULT_RECEIVE_BUFFER_SIZE;
- private int sendBufferSize = DEFAULT_SEND_BUFFER_SIZE;
- private int trafficClass = DEFAULT_TRAFFIC_CLASS;
- private boolean keepAlive = DEFAULT_KEEP_ALIVE;
- private boolean oobInline = DEFAULT_OOB_INLINE;
- private int soLinger = DEFAULT_SO_LINGER;
- private boolean tcpNoDelay = DEFAULT_TCP_NO_DELAY;
-
- /**
- * Creates a new instance.
- */
- MultiThreadSocketSessionConfigImpl()
- {
- }
-
- public boolean isReuseAddress()
- {
- return reuseAddress;
- }
-
- public void setReuseAddress( boolean reuseAddress )
- {
- this.reuseAddress = reuseAddress;
- }
-
- public int getReceiveBufferSize()
- {
- return receiveBufferSize;
- }
-
- public void setReceiveBufferSize( int receiveBufferSize )
- {
- this.receiveBufferSize = receiveBufferSize;
- }
-
- public int getSendBufferSize()
- {
- return sendBufferSize;
- }
-
- public void setSendBufferSize( int sendBufferSize )
- {
- this.sendBufferSize = sendBufferSize;
- }
-
- public int getTrafficClass()
- {
- return trafficClass;
- }
-
- public void setTrafficClass( int trafficClass )
- {
- this.trafficClass = trafficClass;
- }
-
- public boolean isKeepAlive()
- {
- return keepAlive;
- }
-
- public void setKeepAlive( boolean keepAlive )
- {
- this.keepAlive = keepAlive;
- }
-
- public boolean isOobInline()
- {
- return oobInline;
- }
-
- public void setOobInline( boolean oobInline )
- {
- this.oobInline = oobInline;
- }
-
- public int getSoLinger()
- {
- return soLinger;
- }
-
- public void setSoLinger( int soLinger )
- {
- this.soLinger = soLinger;
- }
-
- public boolean isTcpNoDelay()
- {
- return tcpNoDelay;
- }
-
- public void setTcpNoDelay( boolean tcpNoDelay )
- {
- this.tcpNoDelay = tcpNoDelay;
- }
-
-
-}
diff --git a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketSessionImpl.java b/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketSessionImpl.java
deleted file mode 100644
index be4a2d289d..0000000000
--- a/java/common/src/main/java/org/apache/mina/transport/socket/nio/MultiThreadSocketSessionImpl.java
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.mina.transport.socket.nio;
-
-import org.apache.mina.common.IoFilter.WriteRequest;
-import org.apache.mina.common.IoFilterChain;
-import org.apache.mina.common.IoHandler;
-import org.apache.mina.common.IoService;
-import org.apache.mina.common.IoServiceConfig;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.common.IoSessionConfig;
-import org.apache.mina.common.RuntimeIOException;
-import org.apache.mina.common.TransportType;
-import org.apache.mina.common.support.BaseIoSessionConfig;
-import org.apache.mina.common.support.IoServiceListenerSupport;
-import org.apache.mina.util.Queue;
-
-import java.net.SocketAddress;
-import java.net.SocketException;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.SocketChannel;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-/**
- * An {@link IoSession} for socket transport (TCP/IP).
- *
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
- * @version $Rev: 619823 $, $Date: 2008-02-08 10:09:37 +0000 (Fri, 08 Feb 2008) $
- */
-class MultiThreadSocketSessionImpl extends SocketSessionImpl
-{
- private final IoService manager;
- private final IoServiceConfig serviceConfig;
- private final SocketSessionConfig config = new SessionConfigImpl();
- private final MultiThreadSocketIoProcessor ioProcessor;
- private final MultiThreadSocketFilterChain filterChain;
- private final SocketChannel ch;
- private final Queue writeRequestQueue;
- private final IoHandler handler;
- private final SocketAddress remoteAddress;
- private final SocketAddress localAddress;
- private final SocketAddress serviceAddress;
- private final IoServiceListenerSupport serviceListeners;
- private SelectionKey readKey, writeKey;
- private int readBufferSize;
- private CountDownLatch registeredReadyLatch = new CountDownLatch(2);
- private AtomicBoolean created = new AtomicBoolean(false);
-
- /**
- * Creates a new instance.
- */
- MultiThreadSocketSessionImpl( IoService manager,
- SocketIoProcessor ioProcessor,
- IoServiceListenerSupport listeners,
- IoServiceConfig serviceConfig,
- SocketChannel ch,
- IoHandler defaultHandler,
- SocketAddress serviceAddress )
- {
- super(manager, ioProcessor, listeners, serviceConfig, ch,defaultHandler,serviceAddress);
- this.manager = manager;
- this.serviceListeners = listeners;
- this.ioProcessor = (MultiThreadSocketIoProcessor) ioProcessor;
- this.filterChain = new MultiThreadSocketFilterChain(this);
- this.ch = ch;
- this.writeRequestQueue = new Queue();
- this.handler = defaultHandler;
- this.remoteAddress = ch.socket().getRemoteSocketAddress();
- this.localAddress = ch.socket().getLocalSocketAddress();
- this.serviceAddress = serviceAddress;
- this.serviceConfig = serviceConfig;
-
- // Apply the initial session settings
- IoSessionConfig sessionConfig = serviceConfig.getSessionConfig();
- if( sessionConfig instanceof SocketSessionConfig )
- {
- SocketSessionConfig cfg = ( SocketSessionConfig ) sessionConfig;
- this.config.setKeepAlive( cfg.isKeepAlive() );
- this.config.setOobInline( cfg.isOobInline() );
- this.config.setReceiveBufferSize( cfg.getReceiveBufferSize() );
- this.readBufferSize = cfg.getReceiveBufferSize();
- this.config.setReuseAddress( cfg.isReuseAddress() );
- this.config.setSendBufferSize( cfg.getSendBufferSize() );
- this.config.setSoLinger( cfg.getSoLinger() );
- this.config.setTcpNoDelay( cfg.isTcpNoDelay() );
-
- if( this.config.getTrafficClass() != cfg.getTrafficClass() )
- {
- this.config.setTrafficClass( cfg.getTrafficClass() );
- }
- }
- }
-
- void awaitRegistration() throws InterruptedException
- {
- registeredReadyLatch.countDown();
-
- registeredReadyLatch.await();
- }
-
- boolean created() throws InterruptedException
- {
- return created.get();
- }
-
- void doneCreation()
- {
- created.getAndSet(true);
- }
-
- public IoService getService()
- {
- return manager;
- }
-
- public IoServiceConfig getServiceConfig()
- {
- return serviceConfig;
- }
-
- public IoSessionConfig getConfig()
- {
- return config;
- }
-
- SocketIoProcessor getIoProcessor()
- {
- return ioProcessor;
- }
-
- public IoFilterChain getFilterChain()
- {
- return filterChain;
- }
-
- SocketChannel getChannel()
- {
- return ch;
- }
-
- IoServiceListenerSupport getServiceListeners()
- {
- return serviceListeners;
- }
-
- SelectionKey getSelectionKey()
- {
- return readKey;
- }
-
- SelectionKey getReadSelectionKey()
- {
- return readKey;
- }
-
- SelectionKey getWriteSelectionKey()
- {
- return writeKey;
- }
-
- void setSelectionKey(SelectionKey key)
- {
- this.readKey = key;
- }
-
- void setWriteSelectionKey(SelectionKey key)
- {
- this.writeKey = key;
- }
-
- public IoHandler getHandler()
- {
- return handler;
- }
-
- protected void close0()
- {
- filterChain.fireFilterClose( this );
- }
-
- Queue getWriteRequestQueue()
- {
- return writeRequestQueue;
- }
-
- /**
- @return int Number of write scheduled write requests
- @deprecated
- */
- public int getScheduledWriteMessages()
- {
- return getScheduledWriteRequests();
- }
-
- public int getScheduledWriteRequests()
- {
- synchronized( writeRequestQueue )
- {
- return writeRequestQueue.size();
- }
- }
-
- public int getScheduledWriteBytes()
- {
- synchronized( writeRequestQueue )
- {
- return writeRequestQueue.byteSize();
- }
- }
-
- protected void write0( WriteRequest writeRequest )
- {
- filterChain.fireFilterWrite( this, writeRequest );
- }
-
- public TransportType getTransportType()
- {
- return TransportType.SOCKET;
- }
-
- public SocketAddress getRemoteAddress()
- {
- //This is what I had previously
-// return ch.socket().getRemoteSocketAddress();
- return remoteAddress;
- }
-
- public SocketAddress getLocalAddress()
- {
- //This is what I had previously
-// return ch.socket().getLocalSocketAddress();
- return localAddress;
- }
-
- public SocketAddress getServiceAddress()
- {
- return serviceAddress;
- }
-
- protected void updateTrafficMask()
- {
- this.ioProcessor.updateTrafficMask( this );
- }
-
- int getReadBufferSize()
- {
- return readBufferSize;
- }
-
- private class SessionConfigImpl extends BaseIoSessionConfig implements SocketSessionConfig
- {
- public boolean isKeepAlive()
- {
- try
- {
- return ch.socket().getKeepAlive();
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public void setKeepAlive( boolean on )
- {
- try
- {
- ch.socket().setKeepAlive( on );
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public boolean isOobInline()
- {
- try
- {
- return ch.socket().getOOBInline();
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public void setOobInline( boolean on )
- {
- try
- {
- ch.socket().setOOBInline( on );
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public boolean isReuseAddress()
- {
- try
- {
- return ch.socket().getReuseAddress();
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public void setReuseAddress( boolean on )
- {
- try
- {
- ch.socket().setReuseAddress( on );
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public int getSoLinger()
- {
- try
- {
- return ch.socket().getSoLinger();
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public void setSoLinger( int linger )
- {
- try
- {
- if( linger < 0 )
- {
- ch.socket().setSoLinger( false, 0 );
- }
- else
- {
- ch.socket().setSoLinger( true, linger );
- }
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public boolean isTcpNoDelay()
- {
- try
- {
- return ch.socket().getTcpNoDelay();
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public void setTcpNoDelay( boolean on )
- {
- try
- {
- ch.socket().setTcpNoDelay( on );
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public int getTrafficClass()
- {
- if( SocketSessionConfigImpl.isGetTrafficClassAvailable() )
- {
- try
- {
- return ch.socket().getTrafficClass();
- }
- catch( SocketException e )
- {
- // Throw an exception only when setTrafficClass is also available.
- if( SocketSessionConfigImpl.isSetTrafficClassAvailable() )
- {
- throw new RuntimeIOException( e );
- }
- }
- }
-
- return 0;
- }
-
- public void setTrafficClass( int tc )
- {
- if( SocketSessionConfigImpl.isSetTrafficClassAvailable() )
- {
- try
- {
- ch.socket().setTrafficClass( tc );
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
- }
-
- public int getSendBufferSize()
- {
- try
- {
- return ch.socket().getSendBufferSize();
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public void setSendBufferSize( int size )
- {
- if( SocketSessionConfigImpl.isSetSendBufferSizeAvailable() )
- {
- try
- {
- ch.socket().setSendBufferSize( size );
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
- }
-
- public int getReceiveBufferSize()
- {
- try
- {
- return ch.socket().getReceiveBufferSize();
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
-
- public void setReceiveBufferSize( int size )
- {
- if( SocketSessionConfigImpl.isSetReceiveBufferSizeAvailable() )
- {
- try
- {
- ch.socket().setReceiveBufferSize( size );
- MultiThreadSocketSessionImpl.this.readBufferSize = size;
- }
- catch( SocketException e )
- {
- throw new RuntimeIOException( e );
- }
- }
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/mina/transport/vmpipe/QpidVmPipeConnector.java b/java/common/src/main/java/org/apache/mina/transport/vmpipe/QpidVmPipeConnector.java
deleted file mode 100644
index a23e546af5..0000000000
--- a/java/common/src/main/java/org/apache/mina/transport/vmpipe/QpidVmPipeConnector.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.mina.transport.vmpipe;
-
-import java.io.IOException;
-import java.net.SocketAddress;
-
-import org.apache.mina.common.ConnectFuture;
-import org.apache.mina.common.ExceptionMonitor;
-import org.apache.mina.common.IoFilterChain;
-import org.apache.mina.common.IoHandler;
-import org.apache.mina.common.IoServiceConfig;
-import org.apache.mina.common.IoSessionConfig;
-import org.apache.mina.common.support.AbstractIoFilterChain;
-import org.apache.mina.common.support.BaseIoConnector;
-import org.apache.mina.common.support.BaseIoConnectorConfig;
-import org.apache.mina.common.support.BaseIoSessionConfig;
-import org.apache.mina.common.support.DefaultConnectFuture;
-import org.apache.mina.transport.vmpipe.support.VmPipe;
-import org.apache.mina.transport.vmpipe.support.VmPipeIdleStatusChecker;
-import org.apache.mina.transport.vmpipe.support.VmPipeSessionImpl;
-import org.apache.mina.util.AnonymousSocketAddress;
-
-/**
- * Connects to {@link IoHandler}s which is bound on the specified
- * {@link VmPipeAddress}.
- *
- * @author The Apache Directory Project (mina-dev@directory.apache.org)
- * @version $Rev: 619823 $, $Date: 2008-02-08 10:09:37 +0000 (Fri, 08 Feb 2008) $
- */
-public class QpidVmPipeConnector extends VmPipeConnector
-{
- private static final IoSessionConfig CONFIG = new BaseIoSessionConfig() {};
- private final IoServiceConfig defaultConfig = new BaseIoConnectorConfig()
- {
- public IoSessionConfig getSessionConfig()
- {
- return CONFIG;
- }
- };
-
- /**
- * Creates a new instance.
- */
- public QpidVmPipeConnector()
- {
- }
-
- public ConnectFuture connect( SocketAddress address, IoHandler handler, IoServiceConfig config )
- {
- return connect( address, null, handler, config );
- }
-
- public ConnectFuture connect( SocketAddress address, SocketAddress localAddress, IoHandler handler, IoServiceConfig config )
- {
- if( address == null )
- throw new NullPointerException( "address" );
- if( handler == null )
- throw new NullPointerException( "handler" );
- if( ! ( address instanceof VmPipeAddress ) )
- throw new IllegalArgumentException(
- "address must be VmPipeAddress." );
-
- if( config == null )
- {
- config = getDefaultConfig();
- }
-
- VmPipe entry = ( VmPipe ) VmPipeAcceptor.boundHandlers.get( address );
- if( entry == null )
- {
- return DefaultConnectFuture.newFailedFuture(
- new IOException( "Endpoint unavailable: " + address ) );
- }
-
- DefaultConnectFuture future = new DefaultConnectFuture();
- VmPipeSessionImpl localSession =
- new VmPipeSessionImpl(
- this,
- config,
- getListeners(),
- new Object(), // lock
- new AnonymousSocketAddress(),
- handler,
- entry );
-
- // initialize acceptor session
- VmPipeSessionImpl remoteSession = localSession.getRemoteSession();
- try
- {
- IoFilterChain filterChain = remoteSession.getFilterChain();
- entry.getAcceptor().getFilterChainBuilder().buildFilterChain( filterChain );
- entry.getConfig().getFilterChainBuilder().buildFilterChain( filterChain );
- entry.getConfig().getThreadModel().buildFilterChain( filterChain );
-
- // The following sentences don't throw any exceptions.
- entry.getListeners().fireSessionCreated( remoteSession );
- VmPipeIdleStatusChecker.getInstance().addSession( remoteSession );
- }
- catch( Throwable t )
- {
- ExceptionMonitor.getInstance().exceptionCaught( t );
- remoteSession.close();
- }
-
-
- // initialize connector session
- try
- {
- IoFilterChain filterChain = localSession.getFilterChain();
- this.getFilterChainBuilder().buildFilterChain( filterChain );
- config.getFilterChainBuilder().buildFilterChain( filterChain );
- config.getThreadModel().buildFilterChain( filterChain );
-
- // The following sentences don't throw any exceptions.
- localSession.setAttribute( AbstractIoFilterChain.CONNECT_FUTURE, future );
- getListeners().fireSessionCreated( localSession );
- VmPipeIdleStatusChecker.getInstance().addSession( localSession);
- }
- catch( Throwable t )
- {
- future.setException( t );
- }
-
-
-
- return future;
- }
-
- public IoServiceConfig getDefaultConfig()
- {
- return defaultConfig;
- }
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/AMQChannelClosedException.java b/java/common/src/main/java/org/apache/qpid/AMQChannelClosedException.java
deleted file mode 100644
index 1b2eabdc86..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQChannelClosedException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * AMQChannelClosedException indicates that an operation cannot be performed becauase a channel has been closed.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents a failed operation on a closed channel.
- * </table>
- *
- * @todo Does this duplicate AMQChannelException?
- */
-public class AMQChannelClosedException extends AMQException
-{
- public AMQChannelClosedException(AMQConstant errorCode, String msg, Throwable cause)
- {
- super(errorCode, msg, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQChannelException.java b/java/common/src/main/java/org/apache/qpid/AMQChannelException.java
deleted file mode 100644
index ef9420ba87..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQChannelException.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import org.apache.qpid.framing.*;
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * AMQChannelException indicates that an error that requires the channel to be closed has occurred.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents an error that rquires the channel to be closed.
- * </table>
- *
- * @todo Does this duplicate AMQChannelClosedException?
- */
-public class AMQChannelException extends AMQException
-{
- private final int _classId;
- private final int _methodId;
- /* AMQP version for which exception ocurred */
- private final byte major;
- private final byte minor;
-
- public AMQChannelException(AMQConstant errorCode, String msg, int classId, int methodId, byte major, byte minor,
- Throwable cause)
- {
- super(errorCode, msg, cause);
- _classId = classId;
- _methodId = methodId;
- this.major = major;
- this.minor = minor;
- }
-
- public AMQFrame getCloseFrame(int channel)
- {
- MethodRegistry reg = MethodRegistry.getMethodRegistry(new ProtocolVersion(major,minor));
- return new AMQFrame(channel, reg.createChannelCloseBody(getErrorCode() == null ? AMQConstant.INTERNAL_ERROR.getCode() : getErrorCode().getCode(), new AMQShortString(getMessage()),_classId,_methodId));
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQConnectionClosedException.java b/java/common/src/main/java/org/apache/qpid/AMQConnectionClosedException.java
deleted file mode 100644
index b2ce3c1b32..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQConnectionClosedException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * AMQConnectionClosedException indicates that a connection has been closed.
- *
- * <p/>This exception is really used as an event, in order that the method handler that raises it creates an event
- * which is propagated to the io handler, in order to notify it of the connection closure.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents a the closure of a connection.
- * </table>
- *
- * @todo Should review where exceptions-as-events
- */
-public class AMQConnectionClosedException extends AMQException
-{
- public AMQConnectionClosedException(AMQConstant errorCode, String msg, Throwable cause)
- {
- super(errorCode, msg, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQConnectionException.java b/java/common/src/main/java/org/apache/qpid/AMQConnectionException.java
deleted file mode 100644
index 8ef6facef1..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQConnectionException.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid;
-
-import org.apache.qpid.framing.*;
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * AMQConnectionException indicates that an error that requires the channel to be closed has occurred.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents an error that rquires the channel to be closed.
- * </table>
- *
- * @todo Does this duplicate AMQChannelClosedException?
- */
-public class AMQConnectionException extends AMQException
-{
- private final int _classId;
- private final int _methodId;
-
- /** AMQP version for which exception ocurred, major code. */
- private final byte major;
-
- /** AMQP version for which exception ocurred, minor code. */
- private final byte minor;
-
- boolean _closeConnetion;
-
- public AMQConnectionException(AMQConstant errorCode, String msg, int classId, int methodId, byte major, byte minor,
- Throwable cause)
- {
- super(errorCode, msg, cause);
- _classId = classId;
- _methodId = methodId;
- this.major = major;
- this.minor = minor;
- }
-
- public AMQFrame getCloseFrame(int channel)
- {
- MethodRegistry reg = MethodRegistry.getMethodRegistry(new ProtocolVersion(major,minor));
- return new AMQFrame(0,
- reg.createConnectionCloseBody(getErrorCode().getCode(),
- new AMQShortString(getMessage()),
- _classId,
- _methodId));
-
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQConnectionFailureException.java b/java/common/src/main/java/org/apache/qpid/AMQConnectionFailureException.java
deleted file mode 100644
index f2503e549f..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQConnectionFailureException.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import java.util.Collection;
-
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * AMQConnectionFailureException indicates that a connection to a broker could not be formed.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents failure to connect to a broker.
- * </table>
- *
- * @todo Not an AMQP exception as no status code.
- */
-public class AMQConnectionFailureException extends AMQException
-{
- Collection<Exception> _exceptions;
-
- public AMQConnectionFailureException(String message, Throwable cause)
- {
- super(cause instanceof AMQException ? ((AMQException) cause).getErrorCode() : null, message, cause);
- }
-
- public AMQConnectionFailureException(AMQConstant errorCode, String message, Throwable cause)
- {
- super(errorCode, message, cause);
- }
-
- public AMQConnectionFailureException(String message, Collection<Exception> exceptions)
- {
- // Blah, I hate ? but java won't let super() be anything other than the first thing, sorry...
- super (null, message, exceptions.isEmpty() ? null : exceptions.iterator().next());
- this._exceptions = exceptions;
- }
-
- public Collection<Exception> getLinkedExceptions()
- {
- return _exceptions;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQDisconnectedException.java b/java/common/src/main/java/org/apache/qpid/AMQDisconnectedException.java
deleted file mode 100644
index 5ec5c42ab9..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQDisconnectedException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-/**
- * AMQDisconnectedException indicates that a broker disconnected without failover.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents disconnection without failover by the broker.
- * </table>
- *
- * @todo Not an AMQP exception as no status code.
- */
-public class AMQDisconnectedException extends AMQException
-{
- public AMQDisconnectedException(String msg, Throwable cause)
- {
- super(null, msg, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQException.java b/java/common/src/main/java/org/apache/qpid/AMQException.java
deleted file mode 100644
index b0c6fccc9e..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQException.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * AMQException forms the root exception of all exceptions relating to the AMQ protocol. It provides space to associate
- * a required AMQ error code with the exception, which is a numeric value, with a meaning defined by the protocol.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents an exception condition associated with an AMQ protocol status code.
- * </table>
- *
- * @todo This exception class is also used as a generic exception throughout Qpid code. This usage may not be strictly
- * correct if this is to signify a protocol exception. Should review.
- */
-public class AMQException extends Exception
-{
- /** Holds the AMQ error code constant associated with this exception. */
- private AMQConstant _errorCode;
-
- /**
- * Creates an exception with an optional error code, optional message and optional underlying cause.
- *
- * @param errorCode The error code. May be null if not to be set.
- * @param msg The exception message. May be null if not to be set.
- * @param cause The underlying cause of the exception. May be null if not to be set.
- */
- public AMQException(AMQConstant errorCode, String msg, Throwable cause)
- {
- super(((msg == null) ? "" : msg), cause);
- _errorCode = errorCode;
- }
-
- /*
- * Deprecated constructors brought from M2.1
- */
- @Deprecated
- public AMQException(String msg)
- {
- this(null, (msg == null) ? "" : msg);
- }
-
- @Deprecated
- public AMQException(AMQConstant errorCode, String msg)
- {
- this(errorCode, (msg == null) ? "" : msg, null);
- }
-
- @Deprecated
- public AMQException(String msg, Throwable cause)
- {
- this(null, msg, cause);
- }
-
- @Override
- public String toString()
- {
- return getClass().getName() + ": " + getMessage() + (_errorCode == null ? "" : " [error code " + _errorCode + "]");
- }
-
- /**
- * Gets the AMQ protocol exception code associated with this exception.
- *
- * @return The AMQ protocol exception code associated with this exception.
- */
- public AMQConstant getErrorCode()
- {
- return _errorCode;
- }
-
- public boolean isHardError()
- {
- return true;
- }
-
- /**
- * Rethrown this exception as a new exception.
- *
- * Attempt to create a new exception of the same class if they have the default constructor of:
- * {AMQConstant.class, String.class, Throwable.class}
- * <p>
- * Individual subclasses may override as requried to create a new instance.
- */
- public AMQException cloneForCurrentThread()
- {
- Class amqeClass = this.getClass();
- Class<?>[] paramClasses = {AMQConstant.class, String.class, Throwable.class};
- Object[] params = {getErrorCode(), getMessage(), this};
-
- AMQException newAMQE;
-
- try
- {
- newAMQE = (AMQException) amqeClass.getConstructor(paramClasses).newInstance(params);
- }
- catch (Exception creationException)
- {
- newAMQE = new AMQException(getErrorCode(), getMessage(), this);
- }
-
- return newAMQE;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQInternalException.java b/java/common/src/main/java/org/apache/qpid/AMQInternalException.java
deleted file mode 100644
index 59dc800c0e..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQInternalException.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * InternalException encapsulates error code 541, or {@link AMQConstant#INTERNAL_ERROR} exceptions relating to the
- * AMQ protocol. It is used to report internal failures and errors that occur within the broker.
- */
-public class AMQInternalException extends AMQException
-{
- /** serialVersionUID */
- private static final long serialVersionUID = 2544449432843381112L;
-
- /**
- * Creates an exception with an optional message and optional underlying cause.
- *
- * @param msg The exception message. May be null if not to be set.
- * @param cause The underlying cause of the exception. May be null if not to be set.
- */
- public AMQInternalException(String msg, Throwable cause)
- {
- super(AMQConstant.INTERNAL_ERROR, ((msg == null) ? "Internal error" : msg), cause);
- }
-
- public AMQInternalException(String msg)
- {
- this(msg, null);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQInvalidArgumentException.java b/java/common/src/main/java/org/apache/qpid/AMQInvalidArgumentException.java
deleted file mode 100644
index baca2a4773..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQInvalidArgumentException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-package org.apache.qpid;
-
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * AMQInvalidArgumentException indicates that an invalid argument has been passed to an AMQP method.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents an error due to an invalid argument being passed to an AMQP method.
- * </table>
- */
-public class AMQInvalidArgumentException extends AMQException
-{
- public AMQInvalidArgumentException(String message, Throwable cause)
- {
- super(AMQConstant.INVALID_ARGUMENT, message, cause);
- }
-
- public boolean isHardError()
- {
- return false;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQInvalidRoutingKeyException.java b/java/common/src/main/java/org/apache/qpid/AMQInvalidRoutingKeyException.java
deleted file mode 100644
index c117968a29..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQInvalidRoutingKeyException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-package org.apache.qpid;
-
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * AMQInvalidRoutingKeyException indicates an error with a routing key having an invalid format.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents a format error in a routing key.
- * </table>
- */
-public class AMQInvalidRoutingKeyException extends AMQException
-{
- public AMQInvalidRoutingKeyException(String message, Throwable cause)
- {
- super(AMQConstant.INVALID_ROUTING_KEY, message, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQPInvalidClassException.java b/java/common/src/main/java/org/apache/qpid/AMQPInvalidClassException.java
deleted file mode 100644
index ab5141be9d..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQPInvalidClassException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-package org.apache.qpid;
-
-/**
- * AMQPInvalidClassException indicates an error when trying to store an illegally typed argument in a field table.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents illegal argument type for field table values.
- * </table>
- *
- * @todo Could just re-use an exising exception like IllegalArgumentException or ClassCastException.
- */
-public class AMQPInvalidClassException extends RuntimeException
-{
- /** Error message text when trying to store an unsupported class or null object */
- public static final String INVALID_OBJECT_MSG = "Only Primitive objects allowed. Object is: ";
-
- public AMQPInvalidClassException(String s)
- {
- super(s);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQProtocolException.java b/java/common/src/main/java/org/apache/qpid/AMQProtocolException.java
deleted file mode 100644
index bbc569839a..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQProtocolException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.apache.qpid;
-
-import org.apache.qpid.protocol.AMQConstant;
-
-/* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*/
-
-public class AMQProtocolException extends AMQException
-{
- /**
- * Constructor for a Protocol Exception
- * <p> This is the only provided constructor and the parameters have to be
- * set to null when they are unknown.
- *
- * @param msg A description of the reason of this exception .
- * @param errorCode A string specifyin the error code of this exception.
- * @param cause The linked Execption.
- */
- public AMQProtocolException(AMQConstant errorCode, String msg, Throwable cause)
- {
- super(errorCode, msg, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQSecurityException.java b/java/common/src/main/java/org/apache/qpid/AMQSecurityException.java
deleted file mode 100644
index d145d2c21d..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQSecurityException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * SecurityException encapsulates error code 403, or {@link AMQConstant#ACCESS_REFUSED} exceptions relating to the
- * AMQ protocol. It is used to report authorisation failures and security errors.
- */
-public class AMQSecurityException extends AMQException
-{
- /** serialVersionUID */
- private static final long serialVersionUID = 8862069852716968394L;
-
- /**
- * Creates an exception with an optional message and optional underlying cause.
- *
- * @param msg The exception message. May be null if not to be set.
- * @param cause The underlying cause of the exception. May be null if not to be set.
- */
- public AMQSecurityException(String msg, Throwable cause)
- {
- super(AMQConstant.ACCESS_REFUSED, ((msg == null) ? "Permission denied" : msg), cause);
- }
-
- public AMQSecurityException(String msg)
- {
- this(msg, null);
- }
-
- public AMQSecurityException()
- {
- this(null);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQStoreException.java b/java/common/src/main/java/org/apache/qpid/AMQStoreException.java
deleted file mode 100644
index 8389fe5efa..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQStoreException.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import java.sql.SQLException;
-
-/**
- * StoreException is a specific type of internal error relating to errors in the message store, such as {@link SQLException}.
- */
-public class AMQStoreException extends AMQInternalException
-{
- /** serialVersionUID */
- private static final long serialVersionUID = 2859681947490637496L;
-
- /**
- * Creates an exception with an optional message and optional underlying cause.
- *
- * @param msg The exception message. May be null if not to be set.
- * @param cause The underlying cause of the exception. May be null if not to be set.
- */
- public AMQStoreException(String msg, Throwable cause)
- {
- super(((msg == null) ? "Store error" : msg), cause);
- }
-
- public AMQStoreException(String msg)
- {
- this(msg, null);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQTimeoutException.java b/java/common/src/main/java/org/apache/qpid/AMQTimeoutException.java
deleted file mode 100644
index 4ae8282af5..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQTimeoutException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-package org.apache.qpid;
-
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * AMQTimeoutException indicates that an expected response from a broker took too long.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Indicates that an expected response from a broker took too long.
- * </table>
- */
-public class AMQTimeoutException extends AMQException
-{
- public AMQTimeoutException(String message, Throwable cause)
- {
- super(AMQConstant.REQUEST_TIMEOUT, message, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQUndeliveredException.java b/java/common/src/main/java/org/apache/qpid/AMQUndeliveredException.java
deleted file mode 100644
index 01a569b693..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQUndeliveredException.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * AMQUndeliveredException indicates that a message, marked immediate or mandatory, could not be delivered.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents failure to delivery a message that must be delivered.
- * </table>
- */
-public class AMQUndeliveredException extends AMQException
-{
- private Object _bounced;
-
- public AMQUndeliveredException(AMQConstant errorCode, String msg, Object bounced, Throwable cause)
- {
- super(errorCode, msg, cause);
-
- _bounced = bounced;
- }
-
- public Object getUndeliveredMessage()
- {
- return _bounced;
- }
-
- public boolean isHardError()
- {
- return false;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQUnknownExchangeType.java b/java/common/src/main/java/org/apache/qpid/AMQUnknownExchangeType.java
deleted file mode 100644
index 0eefc03016..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQUnknownExchangeType.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid;
-
-/**
- * AMQUnknownExchangeType represents coding error where unknown exchange type requested from exchange factory.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents unknown exchange type request.
- * <tr><td>
- *
- * @todo Not an AMQP exception as no status code.
- *
- * @todo Represent coding error, where unknown exchange type is requested by passing a string parameter. Use a type safe
- * enum for the exchange type, or replace with IllegalArgumentException. Should be runtime.
- */
-public class AMQUnknownExchangeType extends AMQException
-{
- public AMQUnknownExchangeType(String message, Throwable cause)
- {
- super(null, message, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/AMQUnresolvedAddressException.java b/java/common/src/main/java/org/apache/qpid/AMQUnresolvedAddressException.java
deleted file mode 100644
index eee3e6afcf..0000000000
--- a/java/common/src/main/java/org/apache/qpid/AMQUnresolvedAddressException.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-/**
- * AMQUnresolvedAddressException indicates failure to resolve a socket address.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents failre to resolve a socket address.
- * </table>
- *
- * @todo Not an AMQP exception as no status code.
- *
- * @todo Why replace java.nio.UnresolvedAddressException with this? This is checked, which may explain why, but it
- * doesn't wrap the underlying exception.
- */
-public class AMQUnresolvedAddressException extends AMQException
-{
- String _broker;
-
- public AMQUnresolvedAddressException(String message, String broker, Throwable cause)
- {
- super(null, message, cause);
- _broker = broker;
- }
-
- public String toString()
- {
- return super.toString() + " Broker, \"" + _broker + "\"";
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/ConsoleOutput.java b/java/common/src/main/java/org/apache/qpid/ConsoleOutput.java
deleted file mode 100644
index 00ad5cf08a..0000000000
--- a/java/common/src/main/java/org/apache/qpid/ConsoleOutput.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import static org.apache.qpid.transport.util.Functions.str;
-
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.transport.Sender;
-
-
-/**
- * ConsoleOutput
- *
- * @author Rafael H. Schloming
- */
-
-public class ConsoleOutput implements Sender<ByteBuffer>
-{
-
- public void send(ByteBuffer buf)
- {
- System.out.println(str(buf));
- }
-
- public void flush()
- {
- // pass
- }
-
- public void close()
- {
- System.out.println("CLOSED");
- }
-
- public void setIdleTimeout(int i)
- {
- // TODO Auto-generated method stub
-
- }
-
-
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/QpidConfig.java b/java/common/src/main/java/org/apache/qpid/QpidConfig.java
deleted file mode 100644
index b4cad44130..0000000000
--- a/java/common/src/main/java/org/apache/qpid/QpidConfig.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package org.apache.qpid;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-/**
- * API to configure the Security parameters of the client.
- * The user can choose to pick the config from any source
- * and set it using this class.
- *
- */
-public class QpidConfig
-{
- private static QpidConfig _instance = new QpidConfig();
-
- private SecurityMechanism[] securityMechanisms =
- new SecurityMechanism[]{new SecurityMechanism("PLAIN","org.apache.qpid.security.UsernamePasswordCallbackHandler"),
- new SecurityMechanism("CRAM_MD5","org.apache.qpid.security.UsernamePasswordCallbackHandler")};
-
- private SaslClientFactory[] saslClientFactories =
- new SaslClientFactory[]{new SaslClientFactory("AMQPLAIN","org.apache.qpid.security.amqplain.AmqPlainSaslClientFactory")};
-
- private QpidConfig(){}
-
- public static QpidConfig get()
- {
- return _instance;
- }
-
- public void setSecurityMechanisms(SecurityMechanism... securityMechanisms)
- {
- this.securityMechanisms = securityMechanisms;
- }
-
- public SecurityMechanism[] getSecurityMechanisms()
- {
- return securityMechanisms;
- }
-
- public void setSaslClientFactories(SaslClientFactory... saslClientFactories)
- {
- this.saslClientFactories = saslClientFactories;
- }
-
- public SaslClientFactory[] getSaslClientFactories()
- {
- return saslClientFactories;
- }
-
- public static class SecurityMechanism
- {
- String type;
- String handler;
-
- SecurityMechanism(String type,String handler)
- {
- this.type = type;
- this.handler = handler;
- }
-
- public String getHandler()
- {
- return handler;
- }
-
- public String getType()
- {
- return type;
- }
- }
-
- public static class SaslClientFactory
- {
- String type;
- String factoryClass;
-
- SaslClientFactory(String type,String factoryClass)
- {
- this.type = type;
- this.factoryClass = factoryClass;
- }
-
- public String getFactoryClass()
- {
- return factoryClass;
- }
-
- public String getType()
- {
- return type;
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/SerialException.java b/java/common/src/main/java/org/apache/qpid/SerialException.java
deleted file mode 100644
index c59a6af779..0000000000
--- a/java/common/src/main/java/org/apache/qpid/SerialException.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.apache.qpid;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-/**
- * This exception is used by the serial class (imp RFC 1982)
- *
- */
-public class SerialException extends ArithmeticException
-{
- /**
- * Constructs an <code>SerialException</code> with the specified
- * detail message.
- *
- * @param message The exception message.
- */
- public SerialException(String message)
- {
- super(message);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/ToyBroker.java b/java/common/src/main/java/org/apache/qpid/ToyBroker.java
deleted file mode 100644
index 5423bbb68f..0000000000
--- a/java/common/src/main/java/org/apache/qpid/ToyBroker.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import org.apache.qpid.transport.*;
-import org.apache.qpid.transport.network.mina.MinaHandler;
-
-import static org.apache.qpid.transport.util.Functions.str;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.LinkedBlockingQueue;
-
-
-/**
- * ToyBroker
- *
- * @author Rafael H. Schloming
- */
-
-class ToyBroker extends SessionDelegate
-{
-
- private ToyExchange exchange;
- private Map<String,Consumer> consumers = new ConcurrentHashMap<String,Consumer>();
-
- public ToyBroker(ToyExchange exchange)
- {
- this.exchange = exchange;
- }
-
- public void messageAcquire(Session context, MessageAcquire struct)
- {
- System.out.println("\n==================> messageAcquire " );
- context.executionResult((int) struct.getId(), new Acquired(struct.getTransfers()));
- }
-
- @Override public void queueDeclare(Session ssn, QueueDeclare qd)
- {
- exchange.createQueue(qd.getQueue());
- System.out.println("\n==================> declared queue: " + qd.getQueue() + "\n");
- }
-
- @Override public void exchangeBind(Session ssn, ExchangeBind qb)
- {
- exchange.bindQueue(qb.getExchange(), qb.getBindingKey(),qb.getQueue());
- System.out.println("\n==================> bound queue: " + qb.getQueue() + " with binding key " + qb.getBindingKey() + "\n");
- }
-
- @Override public void queueQuery(Session ssn, QueueQuery qq)
- {
- QueueQueryResult result = new QueueQueryResult().queue(qq.getQueue());
- ssn.executionResult((int) qq.getId(), result);
- }
-
- @Override public void messageSubscribe(Session ssn, MessageSubscribe ms)
- {
- Consumer c = new Consumer();
- c._queueName = ms.getQueue();
- consumers.put(ms.getDestination(),c);
- System.out.println("\n==================> message subscribe : " + ms.getDestination() + " queue: " + ms.getQueue() + "\n");
- }
-
- @Override public void messageFlow(Session ssn,MessageFlow struct)
- {
- Consumer c = consumers.get(struct.getDestination());
- c._credit = struct.getValue();
- System.out.println("\n==================> message flow : " + struct.getDestination() + " credit: " + struct.getValue() + "\n");
- }
-
- @Override public void messageFlush(Session ssn,MessageFlush struct)
- {
- System.out.println("\n==================> message flush for consumer : " + struct.getDestination() + "\n");
- checkAndSendMessagesToConsumer(ssn,struct.getDestination());
- }
-
- @Override public void messageTransfer(Session ssn, MessageTransfer xfr)
- {
- String dest = xfr.getDestination();
- System.out.println("received transfer " + dest);
- Header header = xfr.getHeader();
- DeliveryProperties props = header.get(DeliveryProperties.class);
- if (props != null)
- {
- System.out.println("received headers routing_key " + props.getRoutingKey());
- }
-
- MessageProperties mp = header.get(MessageProperties.class);
- System.out.println("MP: " + mp);
- if (mp != null)
- {
- System.out.println(mp.getApplicationHeaders());
- }
-
- if (exchange.route(dest,props == null ? null : props.getRoutingKey(),xfr))
- {
- System.out.println("queued " + xfr);
- dispatchMessages(ssn);
- }
- else
- {
-
- if (props == null || !props.getDiscardUnroutable())
- {
- RangeSet ranges = new RangeSet();
- ranges.add(xfr.getId());
- ssn.messageReject(ranges, MessageRejectCode.UNROUTABLE,
- "no such destination");
- }
- }
- ssn.processed(xfr);
- }
-
- private void transferMessageToPeer(Session ssn,String dest, MessageTransfer m)
- {
- System.out.println("\n==================> Transfering message to: " +dest + "\n");
- ssn.messageTransfer(m.getDestination(), MessageAcceptMode.EXPLICIT,
- MessageAcquireMode.PRE_ACQUIRED,
- m.getHeader(), m.getBody());
- }
-
- private void dispatchMessages(Session ssn)
- {
- for (String dest: consumers.keySet())
- {
- checkAndSendMessagesToConsumer(ssn,dest);
- }
- }
-
- private void checkAndSendMessagesToConsumer(Session ssn,String dest)
- {
- Consumer c = consumers.get(dest);
- LinkedBlockingQueue<MessageTransfer> queue = exchange.getQueue(c._queueName);
- MessageTransfer m = queue.poll();
- while (m != null && c._credit>0)
- {
- transferMessageToPeer(ssn,dest,m);
- c._credit--;
- m = queue.poll();
- }
- }
-
- // ugly, but who cares :)
- // assumes unit is always no of messages, not bytes
- // assumes it's credit mode and not window
- private static class Consumer
- {
- long _credit;
- String _queueName;
- }
-
- private static final class ToyBrokerSession extends Session
- {
-
- public ToyBrokerSession(Connection connection, Binary name, long expiry, ToyExchange exchange)
- {
- super(connection, new ToyBroker(exchange), name, expiry);
- }
- }
-
- public static final void main(String[] args) throws IOException
- {
- final ToyExchange exchange = new ToyExchange();
- ConnectionDelegate delegate = new ServerDelegate()
- {
- @Override
- public void init(Connection conn, ProtocolHeader hdr)
- {
- conn.setSessionFactory(new Connection.SessionFactory()
- {
- public Session newSession(Connection conn, Binary name, long expiry)
- {
- return new ToyBrokerSession(conn, name, expiry, exchange);
- }
- });
-
- super.init(conn, hdr); //To change body of overridden methods use File | Settings | File Templates.
- }
-
- };
-
- MinaHandler.accept("0.0.0.0", 5672, delegate);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/ToyClient.java b/java/common/src/main/java/org/apache/qpid/ToyClient.java
deleted file mode 100644
index 5b2db10613..0000000000
--- a/java/common/src/main/java/org/apache/qpid/ToyClient.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import java.nio.*;
-import java.util.*;
-
-import org.apache.qpid.transport.*;
-import org.apache.qpid.transport.network.mina.MinaHandler;
-
-
-/**
- * ToyClient
- *
- * @author Rafael H. Schloming
- */
-
-class ToyClient implements SessionListener
-{
- public void opened(Session ssn) {}
-
- public void resumed(Session ssn) {}
-
- public void exception(Session ssn, SessionException exc)
- {
- exc.printStackTrace();
- }
-
- public void message(Session ssn, MessageTransfer xfr)
- {
- System.out.println("msg: " + xfr);
- }
-
- public void closed(Session ssn) {}
-
- public static final void main(String[] args)
- {
- Connection conn = new Connection();
- conn.connect("0.0.0.0", 5672, null, "guest", "guest", false);
- Session ssn = conn.createSession();
- ssn.setSessionListener(new ToyClient());
-
- ssn.queueDeclare("asdf", null, null);
- ssn.sync();
-
- Map<String,Object> nested = new LinkedHashMap<String,Object>();
- nested.put("list", Arrays.asList("one", "two", "three"));
- Map<String,Object> map = new LinkedHashMap<String,Object>();
-
- map.put("str", "this is a string");
-
- map.put("+int", 3);
- map.put("-int", -3);
- map.put("maxint", Integer.MAX_VALUE);
- map.put("minint", Integer.MIN_VALUE);
-
- map.put("+short", (short) 1);
- map.put("-short", (short) -1);
- map.put("maxshort", (short) Short.MAX_VALUE);
- map.put("minshort", (short) Short.MIN_VALUE);
-
- map.put("float", (float) 3.3);
- map.put("double", 4.9);
- map.put("char", 'c');
-
- map.put("table", nested);
- map.put("list", Arrays.asList(1, 2, 3));
- map.put("binary", new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
-
- ssn.messageTransfer("asdf", MessageAcceptMode.EXPLICIT,
- MessageAcquireMode.PRE_ACQUIRED,
- new Header(new DeliveryProperties(),
- new MessageProperties()
- .setApplicationHeaders(map)),
- "this is the data");
-
- ssn.messageTransfer("fdsa", MessageAcceptMode.EXPLICIT,
- MessageAcquireMode.PRE_ACQUIRED,
- null,
- "this should be rejected");
- ssn.sync();
-
- Future<QueueQueryResult> future = ssn.queueQuery("asdf");
- System.out.println(future.get().getQueue());
- ssn.sync();
- ssn.close();
- conn.close();
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/ToyExchange.java b/java/common/src/main/java/org/apache/qpid/ToyExchange.java
deleted file mode 100644
index da6aed9629..0000000000
--- a/java/common/src/main/java/org/apache/qpid/ToyExchange.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package org.apache.qpid;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.qpid.transport.MessageTransfer;
-
-
-public class ToyExchange
-{
- final static String DIRECT = "amq.direct";
- final static String TOPIC = "amq.topic";
-
- private Map<String,List<LinkedBlockingQueue<MessageTransfer>>> directEx = new HashMap<String,List<LinkedBlockingQueue<MessageTransfer>>>();
- private Map<String,List<LinkedBlockingQueue<MessageTransfer>>> topicEx = new HashMap<String,List<LinkedBlockingQueue<MessageTransfer>>>();
- private Map<String,LinkedBlockingQueue<MessageTransfer>> queues = new HashMap<String,LinkedBlockingQueue<MessageTransfer>>();
-
- public void createQueue(String name)
- {
- queues.put(name, new LinkedBlockingQueue<MessageTransfer>());
- }
-
- public LinkedBlockingQueue<MessageTransfer> getQueue(String name)
- {
- return queues.get(name);
- }
-
- public void bindQueue(String type,String binding,String queueName)
- {
- LinkedBlockingQueue<MessageTransfer> queue = queues.get(queueName);
- binding = normalizeKey(binding);
- if(DIRECT.equals(type))
- {
-
- if (directEx.containsKey(binding))
- {
- List<LinkedBlockingQueue<MessageTransfer>> list = directEx.get(binding);
- list.add(queue);
- }
- else
- {
- List<LinkedBlockingQueue<MessageTransfer>> list = new LinkedList<LinkedBlockingQueue<MessageTransfer>>();
- list.add(queue);
- directEx.put(binding,list);
- }
- }
- else
- {
- if (topicEx.containsKey(binding))
- {
- List<LinkedBlockingQueue<MessageTransfer>> list = topicEx.get(binding);
- list.add(queue);
- }
- else
- {
- List<LinkedBlockingQueue<MessageTransfer>> list = new LinkedList<LinkedBlockingQueue<MessageTransfer>>();
- list.add(queue);
- topicEx.put(binding,list);
- }
- }
- }
-
- public boolean route(String dest, String routingKey, MessageTransfer msg)
- {
- List<LinkedBlockingQueue<MessageTransfer>> queues;
- if(DIRECT.equals(dest))
- {
- queues = directEx.get(routingKey);
- }
- else
- {
- queues = matchWildCard(routingKey);
- }
- if(queues != null && queues.size()>0)
- {
- System.out.println("Message stored in " + queues.size() + " queues");
- storeMessage(msg,queues);
- return true;
- }
- else
- {
- System.out.println("Message unroutable " + msg);
- return false;
- }
- }
-
- private String normalizeKey(String routingKey)
- {
- if(routingKey.indexOf(".*")>1)
- {
- return routingKey.substring(0,routingKey.indexOf(".*"));
- }
- else
- {
- return routingKey;
- }
- }
-
- private List<LinkedBlockingQueue<MessageTransfer>> matchWildCard(String routingKey)
- {
- List<LinkedBlockingQueue<MessageTransfer>> selected = new ArrayList<LinkedBlockingQueue<MessageTransfer>>();
-
- for(String key: topicEx.keySet())
- {
- Pattern p = Pattern.compile(key);
- Matcher m = p.matcher(routingKey);
- if (m.find())
- {
- for(LinkedBlockingQueue<MessageTransfer> queue : topicEx.get(key))
- {
- selected.add(queue);
- }
- }
- }
-
- return selected;
- }
-
- private void storeMessage(MessageTransfer msg,List<LinkedBlockingQueue<MessageTransfer>> selected)
- {
- for(LinkedBlockingQueue<MessageTransfer> queue : selected)
- {
- queue.offer(msg);
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/api/Message.java b/java/common/src/main/java/org/apache/qpid/api/Message.java
deleted file mode 100644
index df6f279026..0000000000
--- a/java/common/src/main/java/org/apache/qpid/api/Message.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package org.apache.qpid.api;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.transport.MessageProperties;
-import org.apache.qpid.transport.DeliveryProperties;
-import org.apache.qpid.transport.Header;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-public interface Message
-{
- public Header getHeader();
-
- public void setHeader(Header header);
-
- public MessageProperties getMessageProperties();
-
- public DeliveryProperties getDeliveryProperties();
-
- /**
- * This will abstract the underlying message data.
- * The Message implementation may not hold all message
- * data in memory (especially in the case of large messages)
- *
- * The appendData function might write data to
- * <ul>
- * <li> Memory (Ex: ByteBuffer)
- * <li> To Disk
- * <li> To Socket (Stream)
- * </ul>
- * @param src - the data to append
- */
- public void appendData(byte[] src) throws IOException;
-
-
- /**
- * This will abstract the underlying message data.
- * The Message implementation may not hold all message
- * data in memory (especially in the case of large messages)
- *
- * The appendData function might write data to
- * <ul>
- * <li> Memory (Ex: ByteBuffer)
- * <li> To Disk
- * <li> To Socket (Stream)
- * </ul>
- * @param src - the data to append
- */
- public void appendData(ByteBuffer src) throws IOException;
-
- /**
- * This will abstract the underlying message data.
- * The Message implementation may not hold all message
- * data in memory (especially in the case of large messages)
- *
- * The read function might copy data from
- * <ul>
- * <li> From memory (Ex: ByteBuffer)
- * <li> From Disk
- * <li> From Socket as and when it gets streamed
- * </ul>
- * @param target The target byte[] which the data gets copied to
- */
- public void readData(byte[] target) throws IOException;
-
- /**
- * * This will abstract the underlying message data.
- * The Message implementation may not hold all message
- * data in memory (especially in the case of large messages)
- *
- * The read function might copy data from
- * <ul>
- * <li> From memory (Ex: ByteBuffer)
- * <li> From Disk
- * <li> From Socket as and when it gets streamed
- * </ul>
- *
- * @return A ByteBuffer containing data
- * @throws IOException
- */
- public ByteBuffer readData() throws IOException;
-
- /**
- * This should clear the body of the message.
- */
- public void clearData();
-
- /**
- * The provides access to the command Id assigned to the
- * message transfer.
- * This id is useful when you do
- * <ul>
- * <li>For message acquiring - If the transfer happend in no-acquire mode
- * you could use this id to accquire it.
- * <li>For releasing a message. You can use this id to release an acquired
- * message
- * <li>For Acknowledging a message - You need to pass this ID, in order to
- * acknowledge the message
- * <li>For Rejecting a message - You need to pass this ID, in order to reject
- * the message.
- * </ul>
- *
- * @return the message transfer id.
- */
- public int getMessageTransferId();
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java b/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java
deleted file mode 100644
index 591dbd085b..0000000000
--- a/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.codec;
-
-import org.apache.mina.filter.codec.ProtocolCodecFactory;
-import org.apache.mina.filter.codec.ProtocolDecoder;
-import org.apache.mina.filter.codec.ProtocolEncoder;
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-
-/**
- * AMQCodecFactory is a Mina codec factory. It supplies the encoders and decoders need to read and write the bytes to
- * the wire.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations.
- * <tr><td> Supply the protocol encoder. <td> {@link AMQEncoder}
- * <tr><td> Supply the protocol decoder. <td> {@link AMQDecoder}
- * </table>
- */
-public class AMQCodecFactory implements ProtocolCodecFactory
-{
- /** Holds the protocol encoder. */
- private final AMQEncoder _encoder = new AMQEncoder();
-
- /** Holds the protocol decoder. */
- private final AMQDecoder _frameDecoder;
-
- /**
- * Creates a new codec factory, specifiying whether it is expected that the first frame of data should be an
- * initiation. This is the case for the broker, which always expects to received the protocol initiation on a newly
- * connected client.
- *
- * @param expectProtocolInitiation <tt>true</tt> if the first frame received is going to be a protocol initiation
- * frame, <tt>false</tt> if it is going to be a standard AMQ data block.
- */
- public AMQCodecFactory(boolean expectProtocolInitiation, AMQVersionAwareProtocolSession session)
- {
- _frameDecoder = new AMQDecoder(expectProtocolInitiation, session);
- }
-
- /**
- * Gets the AMQP encoder.
- *
- * @return The AMQP encoder.
- */
- public ProtocolEncoder getEncoder()
- {
- return _encoder;
- }
-
- /**
- * Gets the AMQP decoder.
- *
- * @return The AMQP decoder.
- */
- public AMQDecoder getDecoder()
- {
- return _frameDecoder;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java b/java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java
deleted file mode 100644
index 281c0761d9..0000000000
--- a/java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.codec;
-
-import java.util.ArrayList;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.common.SimpleByteBufferAllocator;
-import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-
-import org.apache.qpid.framing.AMQDataBlock;
-import org.apache.qpid.framing.AMQDataBlockDecoder;
-import org.apache.qpid.framing.AMQFrameDecodingException;
-import org.apache.qpid.framing.AMQMethodBodyFactory;
-import org.apache.qpid.framing.AMQProtocolVersionException;
-import org.apache.qpid.framing.ProtocolInitiation;
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-
-/**
- * AMQDecoder delegates the decoding of AMQP either to a data block decoder, or in the case of new connections, to a
- * protocol initiation decoder. It is a cumulative decoder, which means that it can accumulate data to decode in the
- * buffer until there is enough data to decode.
- *
- * <p/>One instance of this class is created per session, so any changes or configuration done at run time to the
- * decoder will only affect decoding of the protocol session data to which is it bound.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Delegate protocol initiation to its decoder. <td> {@link ProtocolInitiation.Decoder}
- * <tr><td> Delegate AMQP data to its decoder. <td> {@link AMQDataBlockDecoder}
- * <tr><td> Accept notification that protocol initiation has completed.
- * </table>
- *
- * @todo If protocol initiation decoder not needed, then don't create it. Probably not a big deal, but it adds to the
- * per-session overhead.
- */
-public class AMQDecoder extends CumulativeProtocolDecoder
-{
-
- private static final String BUFFER = AMQDecoder.class.getName() + ".Buffer";
-
- /** Holds the 'normal' AMQP data decoder. */
- private AMQDataBlockDecoder _dataBlockDecoder = new AMQDataBlockDecoder();
-
- /** Holds the protocol initiation decoder. */
- private ProtocolInitiation.Decoder _piDecoder = new ProtocolInitiation.Decoder();
-
- /** Flag to indicate whether this decoder needs to handle protocol initiation. */
- private boolean _expectProtocolInitiation;
- private boolean firstDecode = true;
-
- private AMQMethodBodyFactory _bodyFactory;
-
- private ByteBuffer _remainingBuf;
-
- /**
- * Creates a new AMQP decoder.
- *
- * @param expectProtocolInitiation <tt>true</tt> if this decoder needs to handle protocol initiation.
- */
- public AMQDecoder(boolean expectProtocolInitiation, AMQVersionAwareProtocolSession session)
- {
- _expectProtocolInitiation = expectProtocolInitiation;
- _bodyFactory = new AMQMethodBodyFactory(session);
- }
-
- /**
- * Delegates decoding AMQP from the data buffer that Mina has retrieved from the wire, to the data or protocol
- * intiation decoders.
- *
- * @param session The Mina session.
- * @param in The raw byte buffer.
- * @param out The Mina object output gatherer to write decoded objects to.
- *
- * @return <tt>true</tt> if the data was decoded, <tt>false<tt> if more is needed and the data should accumulate.
- *
- * @throws Exception If the data cannot be decoded for any reason.
- */
- protected boolean doDecode(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) throws Exception
- {
-
- boolean decoded;
- if (_expectProtocolInitiation
- || (firstDecode
- && (in.remaining() > 0)
- && (in.get(in.position()) == (byte)'A')))
- {
- decoded = doDecodePI(session, in, out);
- }
- else
- {
- decoded = doDecodeDataBlock(session, in, out);
- }
- if(firstDecode && decoded)
- {
- firstDecode = false;
- }
- return decoded;
- }
-
- /**
- * Decodes AMQP data, delegating the decoding to an {@link AMQDataBlockDecoder}.
- *
- * @param session The Mina session.
- * @param in The raw byte buffer.
- * @param out The Mina object output gatherer to write decoded objects to.
- *
- * @return <tt>true</tt> if the data was decoded, <tt>false<tt> if more is needed and the data should accumulate.
- *
- * @throws Exception If the data cannot be decoded for any reason.
- */
- protected boolean doDecodeDataBlock(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) throws Exception
- {
- int pos = in.position();
- boolean enoughData = _dataBlockDecoder.decodable(in.buf());
- in.position(pos);
- if (!enoughData)
- {
- // returning false means it will leave the contents in the buffer and
- // call us again when more data has been read
- return false;
- }
- else
- {
- _dataBlockDecoder.decode(session, in, out);
-
- return true;
- }
- }
-
- /**
- * Decodes an AMQP initiation, delegating the decoding to a {@link ProtocolInitiation.Decoder}.
- *
- * @param session The Mina session.
- * @param in The raw byte buffer.
- * @param out The Mina object output gatherer to write decoded objects to.
- *
- * @return <tt>true</tt> if the data was decoded, <tt>false<tt> if more is needed and the data should accumulate.
- *
- * @throws Exception If the data cannot be decoded for any reason.
- */
- private boolean doDecodePI(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) throws Exception
- {
- boolean enoughData = _piDecoder.decodable(in.buf());
- if (!enoughData)
- {
- // returning false means it will leave the contents in the buffer and
- // call us again when more data has been read
- return false;
- }
- else
- {
- ProtocolInitiation pi = new ProtocolInitiation(in.buf());
- out.write(pi);
-
- return true;
- }
- }
-
- /**
- * Sets the protocol initation flag, that determines whether decoding is handled by the data decoder of the protocol
- * initation decoder. This method is expected to be called with <tt>false</tt> once protocol initation completes.
- *
- * @param expectProtocolInitiation <tt>true</tt> to use the protocol initiation decoder, <tt>false</tt> to use the
- * data decoder.
- */
- public void setExpectProtocolInitiation(boolean expectProtocolInitiation)
- {
- _expectProtocolInitiation = expectProtocolInitiation;
- }
-
-
- /**
- * Cumulates content of <tt>in</tt> into internal buffer and forwards
- * decoding request to {@link #doDecode(IoSession, ByteBuffer, ProtocolDecoderOutput)}.
- * <tt>doDecode()</tt> is invoked repeatedly until it returns <tt>false</tt>
- * and the cumulative buffer is compacted after decoding ends.
- *
- * @throws IllegalStateException if your <tt>doDecode()</tt> returned
- * <tt>true</tt> not consuming the cumulative buffer.
- */
- public void decode( IoSession session, ByteBuffer in,
- ProtocolDecoderOutput out ) throws Exception
- {
- ByteBuffer buf = ( ByteBuffer ) session.getAttribute( BUFFER );
- // if we have a session buffer, append data to that otherwise
- // use the buffer read from the network directly
- if( buf != null )
- {
- buf.put( in );
- buf.flip();
- }
- else
- {
- buf = in;
- }
-
- for( ;; )
- {
- int oldPos = buf.position();
- boolean decoded = doDecode( session, buf, out );
- if( decoded )
- {
- if( buf.position() == oldPos )
- {
- throw new IllegalStateException(
- "doDecode() can't return true when buffer is not consumed." );
- }
-
- if( !buf.hasRemaining() )
- {
- break;
- }
- }
- else
- {
- break;
- }
- }
-
- // if there is any data left that cannot be decoded, we store
- // it in a buffer in the session and next time this decoder is
- // invoked the session buffer gets appended to
- if ( buf.hasRemaining() )
- {
- storeRemainingInSession( buf, session );
- }
- else
- {
- removeSessionBuffer( session );
- }
- }
-
- /**
- * Releases the cumulative buffer used by the specified <tt>session</tt>.
- * Please don't forget to call <tt>super.dispose( session )</tt> when
- * you override this method.
- */
- public void dispose( IoSession session ) throws Exception
- {
- removeSessionBuffer( session );
- }
-
- private void removeSessionBuffer(IoSession session)
- {
- ByteBuffer buf = ( ByteBuffer ) session.getAttribute( BUFFER );
- if( buf != null )
- {
- buf.release();
- session.removeAttribute( BUFFER );
- }
- }
-
- private static final SimpleByteBufferAllocator SIMPLE_BYTE_BUFFER_ALLOCATOR = new SimpleByteBufferAllocator();
-
- private void storeRemainingInSession(ByteBuffer buf, IoSession session)
- {
- ByteBuffer remainingBuf = SIMPLE_BYTE_BUFFER_ALLOCATOR.allocate( buf.remaining(), false );
- remainingBuf.setAutoExpand( true );
- remainingBuf.put( buf );
- session.setAttribute( BUFFER, remainingBuf );
- }
-
- public ArrayList<AMQDataBlock> decodeBuffer(java.nio.ByteBuffer buf) throws AMQFrameDecodingException, AMQProtocolVersionException
- {
-
- // get prior remaining data from accumulator
- ArrayList<AMQDataBlock> dataBlocks = new ArrayList<AMQDataBlock>();
- ByteBuffer msg;
- // if we have a session buffer, append data to that otherwise
- // use the buffer read from the network directly
- if( _remainingBuf != null )
- {
- _remainingBuf.put(buf);
- _remainingBuf.flip();
- msg = _remainingBuf;
- }
- else
- {
- msg = ByteBuffer.wrap(buf);
- }
-
- if (_expectProtocolInitiation
- || (firstDecode
- && (msg.remaining() > 0)
- && (msg.get(msg.position()) == (byte)'A')))
- {
- if (_piDecoder.decodable(msg.buf()))
- {
- dataBlocks.add(new ProtocolInitiation(msg.buf()));
- }
- }
- else
- {
- boolean enoughData = true;
- while (enoughData)
- {
- int pos = msg.position();
-
- enoughData = _dataBlockDecoder.decodable(msg);
- msg.position(pos);
- if (enoughData)
- {
- dataBlocks.add(_dataBlockDecoder.createAndPopulateFrame(_bodyFactory, msg));
- }
- else
- {
- _remainingBuf = SIMPLE_BYTE_BUFFER_ALLOCATOR.allocate(msg.remaining(), false);
- _remainingBuf.setAutoExpand(true);
- _remainingBuf.put(msg);
- }
- }
- }
- if(firstDecode && dataBlocks.size() > 0)
- {
- firstDecode = false;
- }
- return dataBlocks;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/codec/AMQEncoder.java b/java/common/src/main/java/org/apache/qpid/codec/AMQEncoder.java
deleted file mode 100644
index 53f48ae1c8..0000000000
--- a/java/common/src/main/java/org/apache/qpid/codec/AMQEncoder.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.codec;
-
-import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoder;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-
-import org.apache.qpid.framing.AMQDataBlockEncoder;
-
-/**
- * AMQEncoder delegates encoding of AMQP to a data encoder.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Delegate AMQP encoding. <td> {@link AMQDataBlockEncoder}
- * </table>
- *
- * @todo This class just delegates to another, so seems to be pointless. Unless it is going to handle some
- * responsibilities in the future, then drop it.
- */
-public class AMQEncoder implements ProtocolEncoder
-{
- /** The data encoder that is delegated to. */
- private AMQDataBlockEncoder _dataBlockEncoder = new AMQDataBlockEncoder();
-
- /**
- * Encodes AMQP.
- *
- * @param session The Mina session.
- * @param message The data object to encode.
- * @param out The Mina writer to output the raw byte data to.
- *
- * @throws Exception If the data cannot be encoded for any reason.
- */
- public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception
- {
- _dataBlockEncoder.encode(session, message, out);
- }
-
- /**
- * Does nothing. Called by Mina to allow this to clean up resources when it is no longer needed.
- *
- * @param session The Mina session.
- */
- public void dispose(IoSession session)
- { }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/common/AMQPFilterTypes.java b/java/common/src/main/java/org/apache/qpid/common/AMQPFilterTypes.java
deleted file mode 100644
index 9ed915cc35..0000000000
--- a/java/common/src/main/java/org/apache/qpid/common/AMQPFilterTypes.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-package org.apache.qpid.common;
-
-import org.apache.qpid.framing.AMQShortString;
-
-/**
- * Specifies the different filter types for consumers that filter their messages.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represent different consumer filter types.
- * </table>
- */
-public enum AMQPFilterTypes
-{
- JMS_SELECTOR("x-filter-jms-selector"),
- NO_CONSUME("x-filter-no-consume"),
- AUTO_CLOSE("x-filter-auto-close");
-
- /** The identifying string for the filter type. */
- private final AMQShortString _value;
-
- /**
- * Creates a new filter type from its identifying string.
- *
- * @param value The identifying string.
- */
- AMQPFilterTypes(String value)
- {
- _value = new AMQShortString(value);
- }
-
- /**
- * Gets the identifying string of the filter type.
- *
- * @return The identifying string of the filter type.
- */
- public AMQShortString getValue()
- {
- return _value;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/common/ClientProperties.java b/java/common/src/main/java/org/apache/qpid/common/ClientProperties.java
deleted file mode 100644
index 7371c12519..0000000000
--- a/java/common/src/main/java/org/apache/qpid/common/ClientProperties.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-package org.apache.qpid.common;
-
-import org.apache.qpid.framing.AMQShortString;
-
-/**
- * Specifies the available client property types that different clients can use to identify themselves with.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Specify the available client property types.
- * </table>
- */
-public enum ClientProperties
-{
- instance("instance"),
- product("product"),
- version("version"),
- platform("platform");
-
- private final AMQShortString _amqShortString;
-
- private ClientProperties(String name)
- {
- _amqShortString = new AMQShortString(name);
- }
-
-
- public AMQShortString toAMQShortString()
- {
- return _amqShortString;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/common/Closeable.java b/java/common/src/main/java/org/apache/qpid/common/Closeable.java
deleted file mode 100644
index 45a98b5843..0000000000
--- a/java/common/src/main/java/org/apache/qpid/common/Closeable.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.common;
-
-
-public interface Closeable
-{
- public void close();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/common/QpidProperties.java b/java/common/src/main/java/org/apache/qpid/common/QpidProperties.java
deleted file mode 100644
index 2c783aeaa4..0000000000
--- a/java/common/src/main/java/org/apache/qpid/common/QpidProperties.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-package org.apache.qpid.common;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.Properties;
-
-/**
- * QpidProperties captures the project name, version number, and source code repository revision number from a properties
- * file which is generated as part of the build process. Normally, the name and version number are pulled from the module
- * name and version number of the Maven build POM, but could come from other sources if the build system is changed. The
- * idea behind this, is that every build has these values incorporated directly into its jar file, so that code in the
- * wild can be identified, should its origination be forgotten.
- *
- * <p/>To get the build version of any Qpid code call the {@link #main} method. This version string is usually also
- * printed to the console on broker start up.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><td>Load build versioning information into the runtime, for code identification purposes.
- * </table>
- *
- * @todo Code to locate/load/log properties can be factored into a reusable properties utils class. Avoid having this
- * same snippet of loading code scattered in many places.
- *
- * @todo Could also add a build number property for a sequential build number assigned by an automated build system, for
- * build reproducability purposes.
- */
-public class QpidProperties
-{
- /** Used for debugging purposes. */
- private static final Logger _logger = LoggerFactory.getLogger(QpidProperties.class);
-
- /** The name of the version properties file to load from the class path. */
- public static final String VERSION_RESOURCE = "qpidversion.properties";
-
- /** Defines the name of the product property. */
- public static final String PRODUCT_NAME_PROPERTY = "qpid.name";
-
- /** Defines the name of the version property. */
- public static final String RELEASE_VERSION_PROPERTY = "qpid.version";
-
- /** Defines the name of the source code revision property. */
- public static final String BUILD_VERSION_PROPERTY = "qpid.svnversion";
-
- /** Defines the default value for all properties that cannot be loaded. */
- private static final String DEFAULT = "unknown";
-
- /** Holds the product name. */
- private static String productName = DEFAULT;
-
- /** Holds the product version. */
- private static String releaseVersion = DEFAULT;
-
- /** Holds the source code revision. */
- private static String buildVersion = DEFAULT;
-
- // Loads the values from the version properties file.
- static
- {
- Properties props = new Properties();
-
- try
- {
- InputStream propertyStream = QpidProperties.class.getClassLoader().getResourceAsStream(VERSION_RESOURCE);
- if (propertyStream == null)
- {
- _logger.warn("Unable to find resource " + VERSION_RESOURCE + " from classloader");
- }
- else
- {
- props.load(propertyStream);
-
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Dumping QpidProperties");
- for (Map.Entry<Object, Object> entry : props.entrySet())
- {
- _logger.debug("Property: " + entry.getKey() + " Value: " + entry.getValue());
- }
-
- _logger.debug("End of property dump");
- }
-
- productName = readPropertyValue(props, PRODUCT_NAME_PROPERTY);
- releaseVersion = readPropertyValue(props, RELEASE_VERSION_PROPERTY);
- buildVersion = readPropertyValue(props, BUILD_VERSION_PROPERTY);
- }
- }
- catch (IOException e)
- {
- // Log a warning about this and leave the values initialized to unknown.
- _logger.error("Could not load version.properties resource: " + e, e);
- }
- }
-
- /**
- * Gets the product name.
- *
- * @return The product name.
- */
- public static String getProductName()
- {
- return productName;
- }
-
- /**
- * Gets the product version.
- *
- * @return The product version.
- */
- public static String getReleaseVersion()
- {
- return releaseVersion;
- }
-
- /**
- * Gets the source code revision.
- *
- * @return The source code revision.
- */
- public static String getBuildVersion()
- {
- return buildVersion;
- }
-
- /**
- * Extracts all of the version information as a printable string.
- *
- * @return All of the version information as a printable string.
- */
- public static String getVersionString()
- {
- return getProductName() + " - " + getReleaseVersion() + " build: " + getBuildVersion();
- }
-
- /**
- * Helper method to extract a named property from properties.
- *
- * @param props The properties.
- * @param propertyName The named property to extract.
- *
- * @return The extracted property or a default value if the properties do not contain the named property.
- *
- * @todo A bit pointless.
- */
- private static String readPropertyValue(Properties props, String propertyName)
- {
- String retVal = (String) props.get(propertyName);
- if (retVal == null)
- {
- retVal = DEFAULT;
- }
-
- return retVal;
- }
-
- /**
- * Prints the versioning information to the console. This is extremely usefull for identifying Qpid code in the
- * wild, where the origination of the code has been forgotten.
- *
- * @param args Does not require any arguments.
- */
- public static void main(String[] args)
- {
- System.out.println(getVersionString());
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java b/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java
deleted file mode 100644
index dc5b69dc89..0000000000
--- a/java/common/src/main/java/org/apache/qpid/configuration/Accessor.java
+++ /dev/null
@@ -1,273 +0,0 @@
-package org.apache.qpid.configuration;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-public interface Accessor
-{
- public Boolean getBoolean(String name);
- public Integer getInt(String name);
- public Long getLong(String name);
- public String getString(String name);
-
- static class SystemPropertyAccessor implements Accessor
- {
- public Boolean getBoolean(String name)
- {
- return Boolean.getBoolean(name);
- }
-
- public Integer getInt(String name)
- {
- return Integer.getInteger(name);
- }
-
- public Long getLong(String name)
- {
- return Long.getLong(name);
- }
-
- public String getString(String name)
- {
- return System.getProperty(name);
- }
- }
-
- static class MapAccessor implements Accessor
- {
- protected Map<Object,Object> source;
-
- public MapAccessor(Map<Object,Object> map)
- {
- source = map;
- }
-
- public Boolean getBoolean(String name)
- {
- if (source != null && source.containsKey(name))
- {
- if (source.get(name) instanceof Boolean)
- {
- return (Boolean)source.get(name);
- }
- else
- {
- return Boolean.parseBoolean((String)source.get(name));
- }
- }
- else
- {
- return null;
- }
- }
-
- public Integer getInt(String name)
- {
- if (source != null && source.containsKey(name))
- {
- if (source.get(name) instanceof Integer)
- {
- return (Integer)source.get(name);
- }
- else
- {
- return Integer.parseInt((String)source.get(name));
- }
- }
- else
- {
- return null;
- }
- }
-
- public Long getLong(String name)
- {
- if (source != null && source.containsKey(name))
- {
- if (source.get(name) instanceof Long)
- {
- return (Long)source.get(name);
- }
- else
- {
- return Long.parseLong((String)source.get(name));
- }
- }
- else
- {
- return null;
- }
- }
-
- public String getString(String name)
- {
- if (source != null && source.containsKey(name))
- {
- if (source.get(name) instanceof String)
- {
- return (String)source.get(name);
- }
- else
- {
- return String.valueOf(source.get(name));
- }
- }
- else
- {
- return null;
- }
- }
- }
-
- static class PropertyFileAccessor extends MapAccessor
- {
- public PropertyFileAccessor(String fileName) throws FileNotFoundException, IOException
- {
- super(null);
- Properties props = new Properties();
- FileInputStream inStream = new FileInputStream(fileName);
- try
- {
- props.load(inStream);
- }
- finally
- {
- inStream.close();
- }
- source = props;
- }
- }
-
- static class CombinedAccessor implements Accessor
- {
- private List<Accessor> accessors;
-
- public CombinedAccessor(Accessor...accessors)
- {
- this.accessors = Arrays.asList(accessors);
- }
-
- public Boolean getBoolean(String name)
- {
- for (Accessor accessor: accessors)
- {
- if (accessor.getBoolean(name) != null)
- {
- return accessor.getBoolean(name);
- }
- }
- return null;
- }
-
- public Integer getInt(String name)
- {
- for (Accessor accessor: accessors)
- {
- if (accessor.getBoolean(name) != null)
- {
- return accessor.getInt(name);
- }
- }
- return null;
- }
-
- public Long getLong(String name)
- {
- for (Accessor accessor: accessors)
- {
- if (accessor.getBoolean(name) != null)
- {
- return accessor.getLong(name);
- }
- }
- return null;
- }
-
- public String getString(String name)
- {
- for (Accessor accessor: accessors)
- {
- if (accessor.getBoolean(name) != null)
- {
- return accessor.getString(name);
- }
- }
- return null;
- }
- }
-
- static class ValidationAccessor implements Accessor
- {
- private List<Validator> validators;
- private Accessor delegate;
-
- public ValidationAccessor(Accessor delegate,Validator...validators)
- {
- this.validators = Arrays.asList(validators);
- this.delegate = delegate;
- }
-
- public Boolean getBoolean(String name)
- {
- // there is nothing to validate in a boolean
- return delegate.getBoolean(name);
- }
-
- public Integer getInt(String name)
- {
- Integer v = delegate.getInt(name);
- for (Validator validator: validators)
- {
- validator.validate(v);
- }
- return v;
- }
-
- public Long getLong(String name)
- {
- Long v = delegate.getLong(name);
- for (Validator validator: validators)
- {
- validator.validate(v);
- }
- return v;
- }
-
- public String getString(String name)
- {
- String v = delegate.getString(name);
- for (Validator validator: validators)
- {
- validator.validate(v);
- }
- return v;
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/configuration/ClientProperties.java b/java/common/src/main/java/org/apache/qpid/configuration/ClientProperties.java
deleted file mode 100644
index 0dd21238a7..0000000000
--- a/java/common/src/main/java/org/apache/qpid/configuration/ClientProperties.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.qpid.configuration;
-
-/**
- * This class centralized the Qpid client properties.
- */
-public class ClientProperties
-{
-
- /**
- * Currently with Qpid it is not possible to change the client ID.
- * If one is not specified upon connection construction, an id is generated automatically.
- * Therefore an exception is always thrown unless this property is set to true.
- * type: boolean
- */
- public static final String IGNORE_SET_CLIENTID_PROP_NAME = "ignore_setclientID";
-
- /**
- * This property is currently used within the 0.10 code path only
- * The maximum number of pre-fetched messages per destination
- * This property is used for all the connection unless it is overwritten by the connectionURL
- * type: long
- */
- public static final String MAX_PREFETCH_PROP_NAME = "max_prefetch";
- public static final String MAX_PREFETCH_DEFAULT = "500";
-
- /**
- * When true a sync command is sent after every persistent messages.
- * type: boolean
- */
- public static final String SYNC_PERSISTENT_PROP_NAME = "sync_persistence";
-
- /**
- * When true a sync command is sent after sending a message ack.
- * type: boolean
- */
- public static final String SYNC_ACK_PROP_NAME = "sync_ack";
-
- /**
- * sync_publish property - {persistent|all}
- * If set to 'persistent',then persistent messages will be publish synchronously
- * If set to 'all', then all messages regardless of the delivery mode will be
- * published synchronously.
- */
- public static final String SYNC_PUBLISH_PROP_NAME = "sync_publish";
-
- /**
- * This value will be used in the following settings
- * To calculate the SO_TIMEOUT option of the socket (2*idle_timeout)
- * If this values is between the max and min values specified for heartbeat
- * by the broker in TuneOK it will be used as the heartbeat interval.
- * If not a warning will be printed and the max value specified for
- * heartbeat in TuneOK will be used
- *
- * The default idle timeout is set to 120 secs
- */
- public static final String IDLE_TIMEOUT_PROP_NAME = "idle_timeout";
- public static final long DEFAULT_IDLE_TIMEOUT = 120000;
-
- public static final String HEARTBEAT = "qpid.heartbeat";
- public static final int HEARTBEAT_DEFAULT = 120;
-
- /**
- * This value will be used to determine the default destination syntax type.
- * Currently the two types are Binding URL (java only) and the Addressing format (used by
- * all clients).
- */
- public static final String DEST_SYNTAX = "qpid.dest_syntax";
-
- public static final String USE_LEGACY_MAP_MESSAGE_FORMAT = "qpid.use_legacy_map_message";
-
- /**
- * ==========================================================
- * Those properties are used when the io size should be bounded
- * ==========================================================
- */
-
- /**
- * When set to true the io layer throttle down producers and consumers
- * when written or read messages are accumulating and exceeding a certain size.
- * This is especially useful when a the producer rate is greater than the network
- * speed.
- * type: boolean
- */
- public static final String PROTECTIO_PROP_NAME = "protectio";
-
- //=== The following properties are only used when the previous one is true.
- /**
- * Max size of read messages that can be stored within the MINA layer
- * type: int
- */
- public static final String READ_BUFFER_LIMIT_PROP_NAME = "qpid.read.buffer.limit";
- public static final String READ_BUFFER_LIMIT_DEFAULT = "262144";
- /**
- * Max size of written messages that can be stored within the MINA layer
- * type: int
- */
- public static final String WRITE_BUFFER_LIMIT_PROP_NAME = "qpid.read.buffer.limit";
- public static final String WRITE_BUFFER_LIMIT_DEFAULT = "262144";
-
- public static final String AMQP_VERSION = "qpid.amqp.version";
-
- private static ClientProperties _instance = new ClientProperties();
-
- /*
- public static final QpidProperty<Boolean> IGNORE_SET_CLIENTID_PROP_NAME =
- QpidProperty.booleanProperty(false,"qpid.ignore_set_client_id","ignore_setclientID");
-
- public static final QpidProperty<Boolean> SYNC_PERSISTENT_PROP_NAME =
- QpidProperty.booleanProperty(false,"qpid.sync_persistence","sync_persistence");
-
-
- public static final QpidProperty<Integer> MAX_PREFETCH_PROP_NAME =
- QpidProperty.intProperty(500,"qpid.max_prefetch","max_prefetch"); */
-
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/configuration/Configured.java b/java/common/src/main/java/org/apache/qpid/configuration/Configured.java
deleted file mode 100644
index 22903888fe..0000000000
--- a/java/common/src/main/java/org/apache/qpid/configuration/Configured.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.configuration;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Marks a field as having a "configured" value injected into it by a configurator.
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.FIELD)
-public @interface Configured
-{
- /**
- * The Commons Configuration path to the configuration element
- */
- String path();
-
- /**
- * The default value to use should the path not be found in the configuration source
- */
- String defaultValue();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/configuration/PropertyException.java b/java/common/src/main/java/org/apache/qpid/configuration/PropertyException.java
deleted file mode 100644
index 73a336321c..0000000000
--- a/java/common/src/main/java/org/apache/qpid/configuration/PropertyException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.configuration;
-
-import org.apache.qpid.AMQException;
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * Indicates a failure to parse a property expansion. See {@link PropertyUtils} for the code that does property
- * expansions.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaboration
- * <tr><td> Represent failure to expand a property name into a value.
- * </table>
- *
- * @todo Not an AMQP exception as no status code.
- */
-public class PropertyException extends AMQException
-{
- public PropertyException(String message, Throwable cause)
- {
- super(null, message, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/configuration/PropertyUtils.java b/java/common/src/main/java/org/apache/qpid/configuration/PropertyUtils.java
deleted file mode 100644
index 6e2b25fb2c..0000000000
--- a/java/common/src/main/java/org/apache/qpid/configuration/PropertyUtils.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.configuration;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-/**
- * PropertyUtils provides helper methods for dealing with Java properties.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Expand system properties into strings with named expansions.
- * </table>
- *
- * @todo Make the lookup method generic by passing in the properties to use for the expansion, rather than hard coding
- * as system properties. The expansion code has greater potential for re-use that way.
- *
- * @todo Some more property related code could be added to this utils class, which might more appropriately reside under
- * org.apache.qpid.util. For example standardised code to load properties from a resource name, currently found in
- * QpidProperties and possibly other places could be moved here.
- */
-public class PropertyUtils
-{
- /**
- * Given a string that contains substrings of the form <code>${xxx}</code>, looks up the valuea of 'xxx' as a
- * system properties and substitutes tham back into the original string, to provide a property value expanded
- * string.
- *
- * @param value The string to be scanned for property references. May be <code>null</code>, in which case this
- * method returns immediately with no effect.
- *
- * @return The original string with the properties replaced, or <code>null</code> if the original string is
- * <code>null</code>.
- *
- * @throws PropertyException If the string contains an opening <code>${</code> without a balancing <code>}</code>,
- * or if the property to expand does not exist as a system property.
- */
- public static String replaceProperties(String value) throws PropertyException
- {
- if (value == null)
- {
- return null;
- }
-
- ArrayList<String> fragments = new ArrayList<String>();
- ArrayList<String> propertyRefs = new ArrayList<String>();
- parsePropertyString(value, fragments, propertyRefs);
-
- StringBuffer sb = new StringBuffer();
- Iterator j = propertyRefs.iterator();
-
- for (String fragment : fragments)
- {
- if (fragment == null)
- {
- String propertyName = (String) j.next();
-
- // try to get it from the project or keys
- // Backward compatibility
- String replacement = System.getProperty(propertyName);
-
- if (replacement == null)
- {
- throw new PropertyException("Property ${" + propertyName + "} has not been set", null);
- }
-
- fragment = replacement;
- }
-
- sb.append(fragment);
- }
-
- return sb.toString();
- }
-
- /**
- * Parses the supplied value for properties which are specified using ${foo} syntax. $X is left as is, and $$
- * specifies a single $.
- *
- * @param value The property string to parse.
- * @param fragments Is populated with the string fragments. A null means "insert a property value here. The number
- * of nulls in the list when populated is equal to the size of the propertyRefs list.
- * @param propertyRefs Populated with the property names to be added into the final string.
- */
- private static void parsePropertyString(String value, ArrayList<String> fragments, ArrayList<String> propertyRefs)
- throws PropertyException
- {
- int prev = 0;
- int pos;
- // search for the next instance of $ from the 'prev' position
- while ((pos = value.indexOf("$", prev)) >= 0)
- {
-
- // if there was any text before this, add it as a fragment
- if (pos > 0)
- {
- fragments.add(value.substring(prev, pos));
- }
- // if we are at the end of the string, we tack on a $
- // then move past it
- if (pos == (value.length() - 1))
- {
- fragments.add("$");
- prev = pos + 1;
- }
- else if (value.charAt(pos + 1) != '{')
- {
- // peek ahead to see if the next char is a property or not
- // not a property: insert the char as a literal
- if (value.charAt(pos + 1) == '$')
- {
- // two $ map to one $
- fragments.add("$");
- prev = pos + 2;
- }
- else
- {
- // $X maps to $X for all values of X!='$'
- fragments.add(value.substring(pos, pos + 2));
- prev = pos + 2;
- }
- }
- else
- {
- // property found, extract its name or bail on a typo
- int endName = value.indexOf('}', pos);
- if (endName < 0)
- {
- throw new PropertyException("Syntax error in property: " + value, null);
- }
-
- String propertyName = value.substring(pos + 2, endName);
- fragments.add(null);
- propertyRefs.add(propertyName);
- prev = endName + 1;
- }
- }
- // no more $ signs found
- // if there is any tail to the file, append it
- if (prev < value.length())
- {
- fragments.add(value.substring(prev));
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/configuration/QpidProperty.java b/java/common/src/main/java/org/apache/qpid/configuration/QpidProperty.java
deleted file mode 100644
index 9c0aaaec89..0000000000
--- a/java/common/src/main/java/org/apache/qpid/configuration/QpidProperty.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.qpid.configuration;
-
-import org.apache.qpid.configuration.Accessor.SystemPropertyAccessor;
-
-abstract class QpidProperty<T>
-{
- private T defValue;
- private String[] names;
- protected Accessor accessor;
-
- QpidProperty(T defValue, String... names)
- {
- this(new SystemPropertyAccessor(),defValue,names);
- }
-
- QpidProperty(Accessor accessor,T defValue, String... names)
- {
- this.accessor = accessor;
- this.defValue = defValue;
- this.names = names;
- }
-
- T get()
- {
- for (String name : names)
- {
- T obj = getByName(name);
- if (obj != null)
- {
- return obj;
- }
- }
-
- return defValue;
- }
-
- protected abstract T getByName(String name);
-
- public static QpidProperty<Boolean> booleanProperty(Boolean defaultValue,
- String... names)
- {
- return new QpidBooleanProperty(defaultValue, names);
- }
-
- public static QpidProperty<Boolean> booleanProperty(Accessor accessor,
- Boolean defaultValue,String... names)
- {
- return new QpidBooleanProperty(accessor,defaultValue, names);
- }
-
- public static QpidProperty<Integer> intProperty(Integer defaultValue,
- String... names)
- {
- return new QpidIntProperty(defaultValue, names);
- }
-
- public static QpidProperty<Integer> intProperty(Accessor accessor,
- Integer defaultValue, String... names)
- {
- return new QpidIntProperty(accessor,defaultValue, names);
- }
-
- public static QpidProperty<Long> longProperty(Long defaultValue,
- String... names)
- {
- return new QpidLongProperty(defaultValue, names);
- }
-
- public static QpidProperty<Long> longProperty(Accessor accessor,
- Long defaultValue, String... names)
- {
- return new QpidLongProperty(accessor,defaultValue, names);
- }
-
- public static QpidProperty<String> stringProperty(String defaultValue,
- String... names)
- {
- return new QpidStringProperty(defaultValue, names);
- }
-
- public static QpidProperty<String> stringProperty(Accessor accessor,
- String defaultValue,String... names)
- {
- return new QpidStringProperty(accessor,defaultValue, names);
- }
-
- static class QpidBooleanProperty extends QpidProperty<Boolean>
- {
- QpidBooleanProperty(Boolean defValue, String... names)
- {
- super(defValue, names);
- }
-
- QpidBooleanProperty(Accessor accessor,Boolean defValue, String... names)
- {
- super(accessor,defValue, names);
- }
-
- @Override
- protected Boolean getByName(String name)
- {
- return accessor.getBoolean(name);
- }
- }
-
- static class QpidIntProperty extends QpidProperty<Integer>
- {
- QpidIntProperty(Integer defValue, String... names)
- {
- super(defValue, names);
- }
-
- QpidIntProperty(Accessor accessor,Integer defValue, String... names)
- {
- super(accessor,defValue, names);
- }
-
- @Override
- protected Integer getByName(String name)
- {
- return accessor.getInt(name);
- }
- }
-
- static class QpidLongProperty extends QpidProperty<Long>
- {
- QpidLongProperty(Long defValue, String... names)
- {
- super(defValue, names);
- }
-
- QpidLongProperty(Accessor accessor,Long defValue, String... names)
- {
- super(accessor,defValue, names);
- }
-
- @Override
- protected Long getByName(String name)
- {
- return accessor.getLong(name);
- }
- }
-
- static class QpidStringProperty extends QpidProperty<String>
- {
- QpidStringProperty(String defValue, String... names)
- {
- super(defValue, names);
- }
-
- QpidStringProperty(Accessor accessor,String defValue, String... names)
- {
- super(accessor,defValue, names);
- }
-
- @Override
- protected String getByName(String name)
- {
- return accessor.getString(name);
- }
- }
-
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/configuration/Validator.java b/java/common/src/main/java/org/apache/qpid/configuration/Validator.java
deleted file mode 100644
index 13f7954bbc..0000000000
--- a/java/common/src/main/java/org/apache/qpid/configuration/Validator.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.qpid.configuration;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-public interface Validator
-{
- public void validate(Integer value);
-
- public void validate(Long value);
-
- public void validate(String value);
-}
diff --git a/java/common/src/main/java/org/apache/qpid/dtx/XidImpl.java b/java/common/src/main/java/org/apache/qpid/dtx/XidImpl.java
deleted file mode 100644
index 69457ca4a9..0000000000
--- a/java/common/src/main/java/org/apache/qpid/dtx/XidImpl.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.qpid.dtx;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.qpid.AMQInvalidArgumentException;
-
-import javax.transaction.xa.Xid;
-
-import java.io.*;
-import java.util.Arrays;
-
-/**
- * Implements javax.transaction.dtx.Xid
- */
-public class XidImpl implements Xid
-{
- /**
- * this session's logger
- */
- private static final Logger _logger = LoggerFactory.getLogger(XidImpl.class);
-
- /**
- * the transaction branch identifier part of XID as an array of bytes
- */
- private byte[] _branchQualifier;
-
- /**
- * the format identifier part of the XID.
- */
- private int _formatID;
-
- /**
- * the global transaction identifier part of XID as an array of bytes.
- */
- private byte[] _globalTransactionID;
-
- //--- Constructors
-
- /**
- * Create new Xid.
- * this is an empty constructor.
- */
- public XidImpl()
- {
-
- }
-
- /**
- * Create a new XidImpl from an existing Xid.
- * <p> Usefull for casting external Xids
- *
- * @param xid Foreign Xid.
- */
- public XidImpl(Xid xid)
- {
- _branchQualifier = xid.getBranchQualifier();
- _formatID = xid.getFormatId();
- _globalTransactionID = xid.getGlobalTransactionId();
- }
-
- /**
- * Create a new Xid.
- *
- * @param branchQualifier The transaction branch identifier part of XID as an array of bytes.
- * @param format The format identifier part of the XID.
- * @param globalTransactionID The global transaction identifier part of XID as an array of bytes.
- */
- public XidImpl(byte[] branchQualifier, int format, byte[] globalTransactionID)
- {
- _branchQualifier = branchQualifier;
- _formatID = format;
- _globalTransactionID = globalTransactionID;
- }
-
- /**
- * Create a new Xid form its String form
- * 4 1 1 g b
- * +---+---+---+---+---+---+---+- -+---+---+- -+---+
- * | format_id | g | b | txn-id | br-id |
- * +---+---+---+---+---+---+---+- -+---+---+- -+---+
- * 0 4 5 6 6+g 6+g+b
- * format_id: an implementation specific format identifier
- * <p/>
- * gtrid_length: how many bytes of this form the transaction id
- * <p/>
- * bqual_length: how many bytes of this form the branch id
- * <p/>
- * data: a sequence of octets of at most 128 bytes containing the txn id and the
- * branch id
- * <p/>
- * Note - The sum of the two lengths must equal the length of the data field.
- *
- * @param xid an XID STring Form
- * @throws AMQInvalidArgumentException If the string does not represent a valid Xid
- */
- public XidImpl(String xid) throws AMQInvalidArgumentException
- {
- if (_logger.isDebugEnabled())
- {
- _logger.debug("converting string " + xid + " into XidImpl");
- }
- try
- {
- DataInputStream input = new DataInputStream(new ByteArrayInputStream(xid.getBytes()));
- _formatID = (int) input.readLong();
- int g = input.readByte();
- int b = input.readByte();
- _globalTransactionID = new byte[g];
- _branchQualifier = new byte[b];
- if (input.read(_globalTransactionID, 0, g) != g)
- {
- throw new AMQInvalidArgumentException("Cannot convert the string " + xid + " into an Xid", null);
- }
- if (input.read(_branchQualifier, 0, b) != b)
- {
- throw new AMQInvalidArgumentException("Cannot convert the string " + xid + " into an Xid", null);
- }
- }
- catch (IOException e)
- {
- throw new AMQInvalidArgumentException("cannot convert the string " + xid + " into an Xid", e);
- }
- }
-
- //--- Xid interface implementation
-
- /**
- * Format identifier. O means the OSI CCR format.
- *
- * @return Global transaction identifier.
- */
- public byte[] getGlobalTransactionId()
- {
- return _globalTransactionID;
- }
-
- /**
- * Obtain the transaction branch identifier part of XID as an array of bytes.
- *
- * @return Branch identifier part of XID.
- */
- public byte[] getBranchQualifier()
- {
- return _branchQualifier;
- }
-
- /**
- * Obtain the format identifier part of the XID.
- *
- * @return Format identifier. O means the OSI CCR format.
- */
- public int getFormatId()
- {
- return _formatID;
- }
-
- //--- Object operations
-
- /**
- * Indicates whether some other Xid is "equal to" this one.
- * <p> Two Xids are equal if and only if their three elementary parts are equal
- *
- * @param o the object to compare this <code>XidImpl</code> against.
- * @return true if the <code>XidImpl</code> are equal, false otherwise.
- */
- public boolean equals(Object o)
- {
- if (this == o)
- {
- return true;
- }
- if (o instanceof XidImpl)
- {
- XidImpl other = (XidImpl) o;
- if (_formatID == other.getFormatId())
- {
- if (_branchQualifier.length == other.getBranchQualifier().length)
- {
- for (int i = 0; i < _branchQualifier.length; i++)
- {
- if (_branchQualifier[i] != other.getBranchQualifier()[i])
- {
- return false;
- }
- }
- if (_globalTransactionID.length == other.getGlobalTransactionId().length)
- {
- for (int i = 0; i < _globalTransactionID.length; i++)
- {
- if (_globalTransactionID[i] != other.getGlobalTransactionId()[i])
- {
- return false;
- }
- }
- // everithing is equal
- return true;
- }
- }
- }
- }
- return false;
- }
-
- @Override
- public int hashCode()
- {
- int result = _branchQualifier != null ? Arrays.hashCode(_branchQualifier) : 0;
- result = 31 * result + _formatID;
- result = 31 * result + (_globalTransactionID != null ? Arrays.hashCode(_globalTransactionID) : 0);
- return result;
- }
-
- //-- Static helper method
- /**
- * Convert an Xid into the AMQP String format.
- *
- * 4 1 1 g b
- * +---+---+---+---+---+---+---+- -+---+---+- -+---+
- * | format_id | g | b | txn-id | br-id |
- * +---+---+---+---+---+---+---+- -+---+---+- -+---+
- * 0 4 5 6 6+g 6+g+b
- * format_id: an implementation specific format identifier
- * <p/>
- * gtrid_length: how many bytes of this form the transaction id
- * <p/>
- * bqual_length: how many bytes of this form the branch id
- * <p/>
- * data: a sequence of octets of at most 128 bytes containing the txn id and the
- * branch id
- * <p/>
- * Note - The sum of the two lengths must equal the length of the data field.
- *
- * @param xid an Xid to convert.
- * @return The String representation of this Xid
- */
- public static org.apache.qpid.transport.Xid convert(Xid xid)
- {
- return new org.apache.qpid.transport.Xid(xid.getFormatId(),
- xid.getGlobalTransactionId(),
- xid.getBranchQualifier());
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/exchange/ExchangeDefaults.java b/java/common/src/main/java/org/apache/qpid/exchange/ExchangeDefaults.java
deleted file mode 100644
index 1989ade4ac..0000000000
--- a/java/common/src/main/java/org/apache/qpid/exchange/ExchangeDefaults.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.exchange;
-
-import org.apache.qpid.framing.AMQShortString;
-
-/**
- * Defines the names of the standard AMQP exchanges that every AMQP broker should provide. These exchange names
- * and type are given in the specification.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Defines the standard AMQP exchange names.
- * <tr><td> Defines the standard AMQP exchange types.
- * </table>
- *
- * @todo A type safe enum, might be more appropriate for the exchange types.
- */
-public class ExchangeDefaults
-{
- /** The default direct exchange, which is a special internal exchange that cannot be explicitly bound to. */
- public static final AMQShortString DEFAULT_EXCHANGE_NAME = new AMQShortString("<<default>>");
-
- /** The pre-defined topic exchange, the broker SHOULD provide this. */
- public static final AMQShortString TOPIC_EXCHANGE_NAME = new AMQShortString("amq.topic");
-
- /** Defines the identifying type name of topic exchanges. */
- public static final AMQShortString TOPIC_EXCHANGE_CLASS = new AMQShortString("topic");
-
- /** The pre-defined direct exchange, the broker MUST provide this. */
- public static final AMQShortString DIRECT_EXCHANGE_NAME = new AMQShortString("amq.direct");
-
- /** Defines the identifying type name of direct exchanges. */
- public static final AMQShortString DIRECT_EXCHANGE_CLASS = new AMQShortString("direct");
-
- /** The pre-defined headers exchange, the specification does not say this needs to be provided. */
- public static final AMQShortString HEADERS_EXCHANGE_NAME = new AMQShortString("amq.match");
-
- /** Defines the identifying type name of headers exchanges. */
- public static final AMQShortString HEADERS_EXCHANGE_CLASS = new AMQShortString("headers");
-
- /** The pre-defined fanout exchange, the boker MUST provide this. */
- public static final AMQShortString FANOUT_EXCHANGE_NAME = new AMQShortString("amq.fanout");
-
- /** Defines the identifying type name of fanout exchanges. */
- public static final AMQShortString FANOUT_EXCHANGE_CLASS = new AMQShortString("fanout");
-
- public static final AMQShortString WILDCARD_ANY = new AMQShortString("*");
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQBody.java b/java/common/src/main/java/org/apache/qpid/framing/AMQBody.java
deleted file mode 100644
index fe04155bb8..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQBody.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-import org.apache.qpid.AMQException;
-
-public interface AMQBody
-{
- public byte getFrameType();
-
- /**
- * Get the size of the body
- * @return unsigned short
- */
- public abstract int getSize();
-
- public void writePayload(ByteBuffer buffer);
-
- void handle(final int channelId, final AMQVersionAwareProtocolSession amqMinaProtocolSession) throws AMQException;
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java b/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java
deleted file mode 100644
index a2fc3a03ef..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-/**
- * A data block represents something that has a size in bytes and the ability to write itself to a byte
- * buffer (similar to a byte array).
- */
-public abstract class AMQDataBlock implements EncodableAMQDataBlock
-{
- /**
- * Get the size of buffer needed to store the byte representation of this
- * frame.
- * @return unsigned integer
- */
- public abstract long getSize();
-
- /**
- * Writes the datablock to the specified buffer.
- * @param buffer
- */
- public abstract void writePayload(ByteBuffer buffer);
-
- public ByteBuffer toByteBuffer()
- {
- final ByteBuffer buffer = ByteBuffer.allocate((int)getSize());
-
- writePayload(buffer);
- buffer.flip();
- return buffer;
- }
-
- public java.nio.ByteBuffer toNioByteBuffer()
- {
- final java.nio.ByteBuffer buffer = java.nio.ByteBuffer.allocate((int) getSize());
-
- ByteBuffer buf = ByteBuffer.wrap(buffer);
- writePayload(buf);
- buffer.flip();
- return buffer;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java b/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java
deleted file mode 100644
index 228867b2b0..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AMQDataBlockDecoder
-{
- private static final String SESSION_METHOD_BODY_FACTORY = "QPID_SESSION_METHOD_BODY_FACTORY";
-
- private static final BodyFactory[] _bodiesSupported = new BodyFactory[Byte.MAX_VALUE];
-
- static
- {
- _bodiesSupported[ContentHeaderBody.TYPE] = ContentHeaderBodyFactory.getInstance();
- _bodiesSupported[ContentBody.TYPE] = ContentBodyFactory.getInstance();
- _bodiesSupported[HeartbeatBody.TYPE] = new HeartbeatBodyFactory();
- }
-
- Logger _logger = LoggerFactory.getLogger(AMQDataBlockDecoder.class);
-
- public AMQDataBlockDecoder()
- { }
-
- public boolean decodable(java.nio.ByteBuffer in) throws AMQFrameDecodingException
- {
- final int remainingAfterAttributes = in.remaining() - (1 + 2 + 4 + 1);
- // type, channel, body length and end byte
- if (remainingAfterAttributes < 0)
- {
- return false;
- }
-
- in.position(in.position() + 1 + 2);
- // Get an unsigned int, lifted from MINA ByteBuffer getUnsignedInt()
- final long bodySize = in.getInt() & 0xffffffffL;
-
- return (remainingAfterAttributes >= bodySize);
-
- }
-
- public AMQFrame createAndPopulateFrame(AMQMethodBodyFactory methodBodyFactory, ByteBuffer in)
- throws AMQFrameDecodingException, AMQProtocolVersionException
- {
- final byte type = in.get();
-
- BodyFactory bodyFactory;
- if (type == AMQMethodBody.TYPE)
- {
- bodyFactory = methodBodyFactory;
- }
- else
- {
- bodyFactory = _bodiesSupported[type];
- }
-
- if (bodyFactory == null)
- {
- throw new AMQFrameDecodingException(null, "Unsupported frame type: " + type, null);
- }
-
- final int channel = in.getUnsignedShort();
- final long bodySize = in.getUnsignedInt();
-
- // bodySize can be zero
- if ((channel < 0) || (bodySize < 0))
- {
- throw new AMQFrameDecodingException(null, "Undecodable frame: type = " + type + " channel = " + channel
- + " bodySize = " + bodySize, null);
- }
-
- AMQFrame frame = new AMQFrame(in, channel, bodySize, bodyFactory);
-
- byte marker = in.get();
- if ((marker & 0xFF) != 0xCE)
- {
- throw new AMQFrameDecodingException(null, "End of frame marker not found. Read " + marker + " length=" + bodySize
- + " type=" + type, null);
- }
-
- return frame;
- }
-
- public void decode(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) throws Exception
- {
- AMQMethodBodyFactory bodyFactory = (AMQMethodBodyFactory) session.getAttribute(SESSION_METHOD_BODY_FACTORY);
- if (bodyFactory == null)
- {
- AMQVersionAwareProtocolSession protocolSession = (AMQVersionAwareProtocolSession) session.getAttachment();
- bodyFactory = new AMQMethodBodyFactory(protocolSession);
- session.setAttribute(SESSION_METHOD_BODY_FACTORY, bodyFactory);
- }
-
- out.write(createAndPopulateFrame(bodyFactory, in));
- }
-
- public boolean decodable(ByteBuffer msg) throws AMQFrameDecodingException
- {
- return decodable(msg.buf());
- }
-
- public AMQDataBlock createAndPopulateFrame(AMQMethodBodyFactory factory, java.nio.ByteBuffer msg) throws AMQProtocolVersionException, AMQFrameDecodingException
- {
- return createAndPopulateFrame(factory, ByteBuffer.wrap(msg));
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java b/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java
deleted file mode 100644
index 374644b4f2..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.filter.codec.ProtocolEncoderOutput;
-import org.apache.mina.filter.codec.demux.MessageEncoder;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Collections;
-import java.util.Set;
-
-public final class AMQDataBlockEncoder implements MessageEncoder
-{
- private static final Logger _logger = LoggerFactory.getLogger(AMQDataBlockEncoder.class);
-
- private final Set _messageTypes = Collections.singleton(EncodableAMQDataBlock.class);
-
- public AMQDataBlockEncoder()
- { }
-
- public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception
- {
- final AMQDataBlock frame = (AMQDataBlock) message;
-
- final ByteBuffer buffer = frame.toByteBuffer();
-
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Encoded frame byte-buffer is '" + EncodingUtils.convertToHexString(buffer) + "'");
- }
-
- out.write(buffer);
- }
-
- public Set getMessageTypes()
- {
- return _messageTypes;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQFrame.java b/java/common/src/main/java/org/apache/qpid/framing/AMQFrame.java
deleted file mode 100644
index 02a46f3748..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQFrame.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-public class AMQFrame extends AMQDataBlock implements EncodableAMQDataBlock
-{
- private final int _channel;
-
- private final AMQBody _bodyFrame;
- public static final byte FRAME_END_BYTE = (byte) 0xCE;
-
-
- public AMQFrame(final int channel, final AMQBody bodyFrame)
- {
- _channel = channel;
- _bodyFrame = bodyFrame;
- }
-
- public AMQFrame(final ByteBuffer in, final int channel, final long bodySize, final BodyFactory bodyFactory) throws AMQFrameDecodingException
- {
- this._channel = channel;
- this._bodyFrame = bodyFactory.createBody(in,bodySize);
- }
-
- public long getSize()
- {
- return 1 + 2 + 4 + _bodyFrame.getSize() + 1;
- }
-
- public static final int getFrameOverhead()
- {
- return 1 + 2 + 4 + 1;
- }
-
-
- public void writePayload(ByteBuffer buffer)
- {
- buffer.put(_bodyFrame.getFrameType());
- EncodingUtils.writeUnsignedShort(buffer, _channel);
- EncodingUtils.writeUnsignedInteger(buffer, _bodyFrame.getSize());
- _bodyFrame.writePayload(buffer);
- buffer.put(FRAME_END_BYTE);
- }
-
- public final int getChannel()
- {
- return _channel;
- }
-
- public final AMQBody getBodyFrame()
- {
- return _bodyFrame;
- }
-
- public String toString()
- {
- return "Frame channelId: " + _channel + ", bodyFrame: " + String.valueOf(_bodyFrame);
- }
-
- public static void writeFrame(ByteBuffer buffer, final int channel, AMQBody body)
- {
- buffer.put(body.getFrameType());
- EncodingUtils.writeUnsignedShort(buffer, channel);
- EncodingUtils.writeUnsignedInteger(buffer, body.getSize());
- body.writePayload(buffer);
- buffer.put(FRAME_END_BYTE);
-
- }
-
- public static void writeFrames(ByteBuffer buffer, final int channel, AMQBody body1, AMQBody body2)
- {
- buffer.put(body1.getFrameType());
- EncodingUtils.writeUnsignedShort(buffer, channel);
- EncodingUtils.writeUnsignedInteger(buffer, body1.getSize());
- body1.writePayload(buffer);
- buffer.put(FRAME_END_BYTE);
- buffer.put(body2.getFrameType());
- EncodingUtils.writeUnsignedShort(buffer, channel);
- EncodingUtils.writeUnsignedInteger(buffer, body2.getSize());
- body2.writePayload(buffer);
- buffer.put(FRAME_END_BYTE);
-
- }
-
- public static void writeFrames(ByteBuffer buffer, final int channel, AMQBody body1, AMQBody body2, AMQBody body3)
- {
- buffer.put(body1.getFrameType());
- EncodingUtils.writeUnsignedShort(buffer, channel);
- EncodingUtils.writeUnsignedInteger(buffer, body1.getSize());
- body1.writePayload(buffer);
- buffer.put(FRAME_END_BYTE);
- buffer.put(body2.getFrameType());
- EncodingUtils.writeUnsignedShort(buffer, channel);
- EncodingUtils.writeUnsignedInteger(buffer, body2.getSize());
- body2.writePayload(buffer);
- buffer.put(FRAME_END_BYTE);
- buffer.put(body3.getFrameType());
- EncodingUtils.writeUnsignedShort(buffer, channel);
- EncodingUtils.writeUnsignedInteger(buffer, body3.getSize());
- body3.writePayload(buffer);
- buffer.put(FRAME_END_BYTE);
-
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQFrameDecodingException.java b/java/common/src/main/java/org/apache/qpid/framing/AMQFrameDecodingException.java
deleted file mode 100644
index 2373edb478..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQFrameDecodingException.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.qpid.AMQException;
-import org.apache.qpid.protocol.AMQConstant;
-
-/**
- * AMQFrameDecodingException indicates that an AMQP frame cannot be decoded because it does not have the correct
- * format as defined by the protocol.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represents a format error in a protocol frame.
- * </table>
- */
-public class AMQFrameDecodingException extends AMQException
-{
- public AMQFrameDecodingException(AMQConstant errorCode, String message, Throwable cause)
- {
- super(errorCode, message, cause);
- }
-
- public AMQFrameDecodingException(AMQConstant errorCode, String message)
- {
- super(errorCode, message, null);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBody.java b/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBody.java
deleted file mode 100644
index 4763b22290..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBody.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.qpid.AMQChannelException;
-import org.apache.qpid.AMQConnectionException;
-import org.apache.qpid.AMQException;
-import org.apache.qpid.protocol.AMQConstant;
-
-public interface AMQMethodBody extends AMQBody
-{
- public static final byte TYPE = 1;
-
- /** AMQP version */
- public byte getMajor();
-
- public byte getMinor();
-
-
-
- /** @return unsigned short */
- public int getClazz();
-
- /** @return unsigned short */
- public int getMethod();
-
- public void writeMethodPayload(ByteBuffer buffer);
-
-
- public int getSize();
-
- public void writePayload(ByteBuffer buffer);
-
- //public abstract void populateMethodBodyFromBuffer(ByteBuffer buffer) throws AMQFrameDecodingException;
-
- //public void populateFromBuffer(ByteBuffer buffer, long size) throws AMQFrameDecodingException;
-
- public AMQFrame generateFrame(int channelId);
-
- public String toString();
-
-
-
- /**
- * Convenience Method to create a channel not found exception
- *
- * @param channelId The channel id that is not found
- *
- * @return new AMQChannelException
- */
- public AMQChannelException getChannelNotFoundException(int channelId);
-
- public AMQChannelException getChannelException(AMQConstant code, String message);
-
- public AMQChannelException getChannelException(AMQConstant code, String message, Throwable cause);
-
- public AMQConnectionException getConnectionException(AMQConstant code, String message);
-
-
- public AMQConnectionException getConnectionException(AMQConstant code, String message, Throwable cause);
-
-
- public boolean execute(MethodDispatcher methodDispatcher, int channelId) throws AMQException;
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyFactory.java b/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyFactory.java
deleted file mode 100644
index 1a7022c11b..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AMQMethodBodyFactory implements BodyFactory
-{
- private static final Logger _log = LoggerFactory.getLogger(AMQMethodBodyFactory.class);
-
- private final AMQVersionAwareProtocolSession _protocolSession;
-
- public AMQMethodBodyFactory(AMQVersionAwareProtocolSession protocolSession)
- {
- _protocolSession = protocolSession;
- }
-
- public AMQBody createBody(ByteBuffer in, long bodySize) throws AMQFrameDecodingException
- {
- return _protocolSession.getMethodRegistry().convertToBody(in, bodySize);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyImpl.java b/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyImpl.java
deleted file mode 100644
index cd3d721065..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyImpl.java
+++ /dev/null
@@ -1,258 +0,0 @@
-package org.apache.qpid.framing;
-
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.qpid.AMQChannelException;
-import org.apache.qpid.AMQConnectionException;
-import org.apache.qpid.AMQException;
-import org.apache.qpid.protocol.AMQConstant;
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-
-public abstract class AMQMethodBodyImpl implements AMQMethodBody
-{
- public static final byte TYPE = 1;
-
- public AMQMethodBodyImpl()
- {
- }
-
- public byte getFrameType()
- {
- return TYPE;
- }
-
-
- /** unsigned short */
- abstract protected int getBodySize();
-
-
- public AMQFrame generateFrame(int channelId)
- {
- return new AMQFrame(channelId, this);
- }
-
- /**
- * Creates an AMQChannelException for the corresponding body type (a channel exception should include the class and
- * method ids of the body it resulted from).
- */
-
- /**
- * Convenience Method to create a channel not found exception
- *
- * @param channelId The channel id that is not found
- *
- * @return new AMQChannelException
- */
- public AMQChannelException getChannelNotFoundException(int channelId)
- {
- return getChannelException(AMQConstant.NOT_FOUND, "Channel not found for id:" + channelId);
- }
-
- public AMQChannelException getChannelException(AMQConstant code, String message)
- {
- return new AMQChannelException(code, message, getClazz(), getMethod(), getMajor(), getMinor(), null);
- }
-
- public AMQChannelException getChannelException(AMQConstant code, String message, Throwable cause)
- {
- return new AMQChannelException(code, message, getClazz(), getMethod(), getMajor(), getMinor(), cause);
- }
-
- public AMQConnectionException getConnectionException(AMQConstant code, String message)
- {
- return new AMQConnectionException(code, message, getClazz(), getMethod(), getMajor(), getMinor(), null);
- }
-
- public AMQConnectionException getConnectionException(AMQConstant code, String message, Throwable cause)
- {
- return new AMQConnectionException(code, message, getClazz(), getMethod(), getMajor(), getMinor(), cause);
- }
-
- public void handle(final int channelId, final AMQVersionAwareProtocolSession session) throws AMQException
- {
- session.methodFrameReceived(channelId, this);
- }
-
- public int getSize()
- {
- return 2 + 2 + getBodySize();
- }
-
- public void writePayload(ByteBuffer buffer)
- {
- EncodingUtils.writeUnsignedShort(buffer, getClazz());
- EncodingUtils.writeUnsignedShort(buffer, getMethod());
- writeMethodPayload(buffer);
- }
-
-
- protected byte readByte(ByteBuffer buffer)
- {
- return buffer.get();
- }
-
- protected AMQShortString readAMQShortString(ByteBuffer buffer)
- {
- return EncodingUtils.readAMQShortString(buffer);
- }
-
- protected int getSizeOf(AMQShortString string)
- {
- return EncodingUtils.encodedShortStringLength(string);
- }
-
- protected void writeByte(ByteBuffer buffer, byte b)
- {
- buffer.put(b);
- }
-
- protected void writeAMQShortString(ByteBuffer buffer, AMQShortString string)
- {
- EncodingUtils.writeShortStringBytes(buffer, string);
- }
-
- protected int readInt(ByteBuffer buffer)
- {
- return buffer.getInt();
- }
-
- protected void writeInt(ByteBuffer buffer, int i)
- {
- buffer.putInt(i);
- }
-
- protected FieldTable readFieldTable(ByteBuffer buffer) throws AMQFrameDecodingException
- {
- return EncodingUtils.readFieldTable(buffer);
- }
-
- protected int getSizeOf(FieldTable table)
- {
- return EncodingUtils.encodedFieldTableLength(table); //To change body of created methods use File | Settings | File Templates.
- }
-
- protected void writeFieldTable(ByteBuffer buffer, FieldTable table)
- {
- EncodingUtils.writeFieldTableBytes(buffer, table);
- }
-
- protected long readLong(ByteBuffer buffer)
- {
- return buffer.getLong();
- }
-
- protected void writeLong(ByteBuffer buffer, long l)
- {
- buffer.putLong(l);
- }
-
- protected int getSizeOf(byte[] response)
- {
- return (response == null) ? 4 : response.length + 4;
- }
-
- protected void writeBytes(ByteBuffer buffer, byte[] data)
- {
- EncodingUtils.writeBytes(buffer,data);
- }
-
- protected byte[] readBytes(ByteBuffer buffer)
- {
- return EncodingUtils.readBytes(buffer);
- }
-
- protected short readShort(ByteBuffer buffer)
- {
- return EncodingUtils.readShort(buffer);
- }
-
- protected void writeShort(ByteBuffer buffer, short s)
- {
- EncodingUtils.writeShort(buffer, s);
- }
-
- protected Content readContent(ByteBuffer buffer)
- {
- return null; //To change body of created methods use File | Settings | File Templates.
- }
-
- protected int getSizeOf(Content body)
- {
- return 0; //To change body of created methods use File | Settings | File Templates.
- }
-
- protected void writeContent(ByteBuffer buffer, Content body)
- {
- //To change body of created methods use File | Settings | File Templates.
- }
-
- protected byte readBitfield(ByteBuffer buffer)
- {
- return readByte(buffer); //To change body of created methods use File | Settings | File Templates.
- }
-
- protected int readUnsignedShort(ByteBuffer buffer)
- {
- return buffer.getUnsignedShort(); //To change body of created methods use File | Settings | File Templates.
- }
-
- protected void writeBitfield(ByteBuffer buffer, byte bitfield0)
- {
- buffer.put(bitfield0);
- }
-
- protected void writeUnsignedShort(ByteBuffer buffer, int s)
- {
- EncodingUtils.writeUnsignedShort(buffer, s);
- }
-
- protected long readUnsignedInteger(ByteBuffer buffer)
- {
- return buffer.getUnsignedInt();
- }
- protected void writeUnsignedInteger(ByteBuffer buffer, long i)
- {
- EncodingUtils.writeUnsignedInteger(buffer, i);
- }
-
-
- protected short readUnsignedByte(ByteBuffer buffer)
- {
- return buffer.getUnsigned();
- }
-
- protected void writeUnsignedByte(ByteBuffer buffer, short unsignedByte)
- {
- EncodingUtils.writeUnsignedByte(buffer, unsignedByte);
- }
-
- protected long readTimestamp(ByteBuffer buffer)
- {
- return EncodingUtils.readTimestamp(buffer);
- }
-
- protected void writeTimestamp(ByteBuffer buffer, long t)
- {
- EncodingUtils.writeTimestamp(buffer, t);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyInstanceFactory.java b/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyInstanceFactory.java
deleted file mode 100644
index 0c61d9db3c..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyInstanceFactory.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-
-public abstract interface AMQMethodBodyInstanceFactory
-{
- public AMQMethodBody newInstance(ByteBuffer buffer, long size) throws AMQFrameDecodingException;
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQMethodFactory.java b/java/common/src/main/java/org/apache/qpid/framing/AMQMethodFactory.java
deleted file mode 100644
index bfcc38ad60..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQMethodFactory.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-
-public interface AMQMethodFactory
-{
-
- // Connection Methods
-
- ConnectionCloseBody createConnectionClose();
-
- // Access Methods
-
- AccessRequestBody createAccessRequest(boolean active, boolean exclusive, boolean passive, boolean read, AMQShortString realm, boolean write);
-
-
- // Tx Methods
-
- TxSelectBody createTxSelect();
-
- TxCommitBody createTxCommit();
-
- TxRollbackBody createTxRollback();
-
- // Channel Methods
-
- ChannelOpenBody createChannelOpen();
-
- ChannelCloseBody createChannelClose(int replyCode, AMQShortString replyText);
-
- ChannelFlowBody createChannelFlow(boolean active);
-
-
- // Exchange Methods
-
-
- ExchangeBoundBody createExchangeBound(AMQShortString exchangeName,
- AMQShortString queueName,
- AMQShortString routingKey);
-
- ExchangeDeclareBody createExchangeDeclare(AMQShortString name, AMQShortString type, int ticket);
-
-
- // Queue Methods
-
- QueueDeclareBody createQueueDeclare(AMQShortString name, FieldTable arguments, boolean autoDelete, boolean durable, boolean exclusive, boolean passive, int ticket);
-
- QueueBindBody createQueueBind(AMQShortString queueName, AMQShortString exchangeName, AMQShortString routingKey, FieldTable arguments, int ticket);
-
- QueueDeleteBody createQueueDelete(AMQShortString queueName, boolean ifEmpty, boolean ifUnused, int ticket);
-
-
- // Message Methods
-
- // In different versions of the protocol we change the class used for message transfer
- // abstract this out so the appropriate methods are created
- AMQMethodBody createRecover(boolean requeue);
-
- AMQMethodBody createConsumer(AMQShortString tag, AMQShortString queueName, FieldTable arguments, boolean noAck, boolean exclusive, boolean noLocal, int ticket);
-
- AMQMethodBody createConsumerCancel(AMQShortString consumerTag);
-
- AMQMethodBody createAcknowledge(long deliveryTag, boolean multiple);
-
- AMQMethodBody createRejectBody(long deliveryTag, boolean requeue);
-
- AMQMethodBody createMessageQos(int prefetchCount, int prefetchSize);
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolClassException.java b/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolClassException.java
deleted file mode 100644
index ab09c1de6d..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolClassException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-/**
- * AMQProtocolInstanceException indicates that the protocol class is incorrect in a header.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represent incorrect protocol class in frame header.
- * </table>
- *
- * @todo Not an AMQP exception as no status code.
- */
-public class AMQProtocolClassException extends AMQProtocolHeaderException
-{
- public AMQProtocolClassException(String message, Throwable cause)
- {
- super(message, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolHeaderException.java b/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolHeaderException.java
deleted file mode 100644
index 6b819364da..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolHeaderException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.qpid.AMQException;
-
-/**
- * AMQProtocolHeaderException indicates a format error in an AMQP frame header.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represent format error in frame header.
- * </table>
- *
- * @todo Not an AMQP exception as no status code.
- */
-public class AMQProtocolHeaderException extends AMQException
-{
- public AMQProtocolHeaderException(String message, Throwable cause)
- {
- super(null, message, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolInstanceException.java b/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolInstanceException.java
deleted file mode 100644
index 3165c373a9..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolInstanceException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-/**
- * AMQProtocolInstanceException indicates that the protocol instance is incorrect in a header.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represent incorrect protocol instance in frame header.
- * </table>
- *
- * @todo Not an AMQP exception as no status code.
- */
-public class AMQProtocolInstanceException extends AMQProtocolHeaderException
-{
- public AMQProtocolInstanceException(String message, Throwable cause)
- {
- super(message, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolVersionException.java b/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolVersionException.java
deleted file mode 100644
index c9b0973ea6..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQProtocolVersionException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-/**
- * AMQProtocolInstanceException indicates that the client and server differ on expected protocol version in a header.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Represent incorrect protocol version in frame header.
- * </table>
- *
- * @todo Not an AMQP exception as no status code.
- */
-public class AMQProtocolVersionException extends AMQProtocolHeaderException
-{
- public AMQProtocolVersionException(String message, Throwable cause)
- {
- super(message, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java b/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
deleted file mode 100644
index 39a9beb9e8..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
+++ /dev/null
@@ -1,779 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
-import java.lang.ref.WeakReference;
-
-/**
- * A short string is a representation of an AMQ Short String
- * Short strings differ from the Java String class by being limited to on ASCII characters (0-127)
- * and thus can be held more effectively in a byte buffer.
- *
- */
-public final class AMQShortString implements CharSequence, Comparable<AMQShortString>
-{
- private static final byte MINUS = (byte)'-';
- private static final byte ZERO = (byte) '0';
-
- private final class TokenizerImpl implements AMQShortStringTokenizer
- {
- private final byte _delim;
- private int _count = -1;
- private int _pos = 0;
-
- public TokenizerImpl(final byte delim)
- {
- _delim = delim;
- }
-
- public int countTokens()
- {
- if(_count == -1)
- {
- _count = 1 + AMQShortString.this.occurences(_delim);
- }
- return _count;
- }
-
- public AMQShortString nextToken()
- {
- if(_pos <= AMQShortString.this.length())
- {
- int nextDelim = AMQShortString.this.indexOf(_delim, _pos);
- if(nextDelim == -1)
- {
- nextDelim = AMQShortString.this.length();
- }
-
- AMQShortString nextToken = AMQShortString.this.substring(_pos, nextDelim++);
- _pos = nextDelim;
- return nextToken;
- }
- else
- {
- return null;
- }
- }
-
- public boolean hasMoreTokens()
- {
- return _pos <= AMQShortString.this.length();
- }
- }
-
- private AMQShortString substring(final int from, final int to)
- {
- return new AMQShortString(_data, from+_offset, to+_offset);
- }
-
-
- private static final ThreadLocal<Map<AMQShortString, WeakReference<AMQShortString>>> _localInternMap =
- new ThreadLocal<Map<AMQShortString, WeakReference<AMQShortString>>>()
- {
- protected Map<AMQShortString, WeakReference<AMQShortString>> initialValue()
- {
- return new WeakHashMap<AMQShortString, WeakReference<AMQShortString>>();
- };
- };
-
- private static final Map<AMQShortString, WeakReference<AMQShortString>> _globalInternMap =
- new WeakHashMap<AMQShortString, WeakReference<AMQShortString>>();
-
- private static final Logger _logger = LoggerFactory.getLogger(AMQShortString.class);
-
- private final byte[] _data;
- private final int _offset;
- private int _hashCode;
- private String _asString = null;
-
- private final int _length;
- private static final char[] EMPTY_CHAR_ARRAY = new char[0];
-
- public static final AMQShortString EMPTY_STRING = new AMQShortString((String)null);
-
- public AMQShortString(byte[] data)
- {
-
- _data = data.clone();
- _length = data.length;
- _offset = 0;
- }
-
- public AMQShortString(byte[] data, int pos)
- {
- final int size = data[pos++];
- final byte[] dataCopy = new byte[size];
- System.arraycopy(data,pos,dataCopy,0,size);
- _length = size;
- _data = dataCopy;
- _offset = 0;
- }
-
- public AMQShortString(String data)
- {
- this((data == null) ? EMPTY_CHAR_ARRAY : data.toCharArray());
- _asString = data;
- }
-
- public AMQShortString(char[] data)
- {
- if (data == null)
- {
- throw new NullPointerException("Cannot create AMQShortString with null char[]");
- }
-
- final int length = data.length;
- final byte[] stringBytes = new byte[length];
- int hash = 0;
- for (int i = 0; i < length; i++)
- {
- stringBytes[i] = (byte) (0xFF & data[i]);
- hash = (31 * hash) + stringBytes[i];
- }
- _hashCode = hash;
- _data = stringBytes;
-
- _length = length;
- _offset = 0;
-
- }
-
- public AMQShortString(CharSequence charSequence)
- {
- final int length = charSequence.length();
- final byte[] stringBytes = new byte[length];
- int hash = 0;
- for (int i = 0; i < length; i++)
- {
- stringBytes[i] = ((byte) (0xFF & charSequence.charAt(i)));
- hash = (31 * hash) + stringBytes[i];
-
- }
-
- _data = stringBytes;
- _hashCode = hash;
- _length = length;
- _offset = 0;
-
- }
-
- private AMQShortString(ByteBuffer data, final int length)
- {
- if(data.isDirect() || data.isReadOnly())
- {
- byte[] dataBytes = new byte[length];
- data.get(dataBytes);
- _data = dataBytes;
- _offset = 0;
- }
- else
- {
-
- _data = data.array();
- _offset = data.arrayOffset() + data.position();
- data.skip(length);
-
- }
- _length = length;
-
- }
-
- private AMQShortString(final byte[] data, final int from, final int to)
- {
- _offset = from;
- _length = to - from;
- _data = data;
- }
-
- public AMQShortString shrink()
- {
- if(_data.length != _length)
- {
- byte[] dataBytes = new byte[_length];
- System.arraycopy(_data,_offset,dataBytes,0,_length);
- return new AMQShortString(dataBytes,0,_length);
- }
- else
- {
- return this;
- }
- }
-
- /**
- * Get the length of the short string
- * @return length of the underlying byte array
- */
- public int length()
- {
- return _length;
- }
-
- public char charAt(int index)
- {
-
- return (char) _data[_offset + index];
-
- }
-
- public CharSequence subSequence(int start, int end)
- {
- return new CharSubSequence(start, end);
- }
-
- public int writeToByteArray(byte[] encoding, int pos)
- {
- final int size = length();
- encoding[pos++] = (byte) size;
- System.arraycopy(_data,_offset,encoding,pos,size);
- return pos+size;
- }
-
- public static AMQShortString readFromByteArray(byte[] byteEncodedDestination, int pos)
- {
-
-
- final AMQShortString shortString = new AMQShortString(byteEncodedDestination, pos);
- if(shortString.length() == 0)
- {
- return null;
- }
- else
- {
- return shortString;
- }
- }
-
- public static AMQShortString readFromBuffer(ByteBuffer buffer)
- {
- final short length = buffer.getUnsigned();
- if (length == 0)
- {
- return null;
- }
- else
- {
-
- return new AMQShortString(buffer, length);
- }
- }
-
- public byte[] getBytes()
- {
- if(_offset == 0 && _length == _data.length)
- {
- return _data.clone();
- }
- else
- {
- byte[] data = new byte[_length];
- System.arraycopy(_data,_offset,data,0,_length);
- return data;
- }
- }
-
- public void writeToBuffer(ByteBuffer buffer)
- {
-
- final int size = length();
- //buffer.setAutoExpand(true);
- buffer.put((byte) size);
- buffer.put(_data, _offset, size);
-
- }
-
- public boolean endsWith(String s)
- {
- return endsWith(new AMQShortString(s));
- }
-
-
- public boolean endsWith(AMQShortString otherString)
- {
-
- if (otherString.length() > length())
- {
- return false;
- }
-
-
- int thisLength = length();
- int otherLength = otherString.length();
-
- for (int i = 1; i <= otherLength; i++)
- {
- if (charAt(thisLength - i) != otherString.charAt(otherLength - i))
- {
- return false;
- }
- }
- return true;
- }
-
- public boolean startsWith(String s)
- {
- return startsWith(new AMQShortString(s));
- }
-
- public boolean startsWith(AMQShortString otherString)
- {
-
- if (otherString.length() > length())
- {
- return false;
- }
-
- for (int i = 0; i < otherString.length(); i++)
- {
- if (charAt(i) != otherString.charAt(i))
- {
- return false;
- }
- }
-
- return true;
-
- }
-
- public boolean startsWith(CharSequence otherString)
- {
- if (otherString.length() > length())
- {
- return false;
- }
-
- for (int i = 0; i < otherString.length(); i++)
- {
- if (charAt(i) != otherString.charAt(i))
- {
- return false;
- }
- }
-
- return true;
- }
-
-
- private final class CharSubSequence implements CharSequence
- {
- private final int _sequenceOffset;
- private final int _end;
-
- public CharSubSequence(final int offset, final int end)
- {
- _sequenceOffset = offset;
- _end = end;
- }
-
- public int length()
- {
- return _end - _sequenceOffset;
- }
-
- public char charAt(int index)
- {
- return AMQShortString.this.charAt(index + _sequenceOffset);
- }
-
- public CharSequence subSequence(int start, int end)
- {
- return new CharSubSequence(start + _sequenceOffset, end + _sequenceOffset);
- }
- }
-
- public char[] asChars()
- {
- final int size = length();
- final char[] chars = new char[size];
-
- for (int i = 0; i < size; i++)
- {
- chars[i] = (char) _data[i + _offset];
- }
-
- return chars;
- }
-
-
- public String asString()
- {
- if (_asString == null)
- {
- _asString = new String(asChars());
- }
- return _asString;
- }
-
- public boolean equals(Object o)
- {
-
-
- if(o instanceof AMQShortString)
- {
- return equals((AMQShortString)o);
- }
- if(o instanceof CharSequence)
- {
- return equals((CharSequence)o);
- }
-
- if (o == null)
- {
- return false;
- }
-
- if (o == this)
- {
- return true;
- }
-
-
- return false;
-
- }
-
- public boolean equals(final AMQShortString otherString)
- {
- if (otherString == this)
- {
- return true;
- }
-
- if (otherString == null)
- {
- return false;
- }
-
- final int hashCode = _hashCode;
-
- final int otherHashCode = otherString._hashCode;
-
- if ((hashCode != 0) && (otherHashCode != 0) && (hashCode != otherHashCode))
- {
- return false;
- }
-
- final int length = _length;
-
- if(length != otherString._length)
- {
- return false;
- }
-
-
- final byte[] data = _data;
-
- final byte[] otherData = otherString._data;
-
- final int offset = _offset;
-
- final int otherOffset = otherString._offset;
-
- if(offset == 0 && otherOffset == 0 && length == data.length && length == otherData.length)
- {
- return Arrays.equals(data, otherData);
- }
- else
- {
- int thisIdx = offset;
- int otherIdx = otherOffset;
- for(int i = length; i-- != 0; )
- {
- if(!(data[thisIdx++] == otherData[otherIdx++]))
- {
- return false;
- }
- }
- }
-
- return true;
-
- }
-
- public boolean equals(CharSequence s)
- {
- if(s instanceof AMQShortString)
- {
- return equals((AMQShortString)s);
- }
-
- if (s == null)
- {
- return false;
- }
-
- if (s.length() != length())
- {
- return false;
- }
-
- for (int i = 0; i < length(); i++)
- {
- if (charAt(i) != s.charAt(i))
- {
- return false;
- }
- }
-
- return true;
- }
-
- public int hashCode()
- {
- int hash = _hashCode;
- if (hash == 0)
- {
- final int size = length();
-
- for (int i = 0; i < size; i++)
- {
- hash = (31 * hash) + _data[i+_offset];
- }
-
- _hashCode = hash;
- }
-
- return hash;
- }
-
- public void setDirty()
- {
- _hashCode = 0;
- }
-
- public String toString()
- {
- return asString();
- }
-
- public int compareTo(AMQShortString name)
- {
- if (name == null)
- {
- return 1;
- }
- else
- {
-
- if (name.length() < length())
- {
- return -name.compareTo(this);
- }
-
- for (int i = 0; i < length(); i++)
- {
- final byte d = _data[i+_offset];
- final byte n = name._data[i+name._offset];
- if (d < n)
- {
- return -1;
- }
-
- if (d > n)
- {
- return 1;
- }
- }
-
- return (length() == name.length()) ? 0 : -1;
- }
- }
-
-
- public AMQShortStringTokenizer tokenize(byte delim)
- {
- return new TokenizerImpl(delim);
- }
-
-
- public AMQShortString intern()
- {
-
- hashCode();
-
- Map<AMQShortString, WeakReference<AMQShortString>> localMap =
- _localInternMap.get();
-
- WeakReference<AMQShortString> ref = localMap.get(this);
- AMQShortString internString;
-
- if(ref != null)
- {
- internString = ref.get();
- if(internString != null)
- {
- return internString;
- }
- }
-
-
- synchronized(_globalInternMap)
- {
-
- ref = _globalInternMap.get(this);
- if((ref == null) || ((internString = ref.get()) == null))
- {
- internString = shrink();
- ref = new WeakReference(internString);
- _globalInternMap.put(internString, ref);
- }
-
- }
- localMap.put(internString, ref);
- return internString;
-
- }
-
- private int occurences(final byte delim)
- {
- int count = 0;
- final int end = _offset + _length;
- for(int i = _offset ; i < end ; i++ )
- {
- if(_data[i] == delim)
- {
- count++;
- }
- }
- return count;
- }
-
- private int indexOf(final byte val, final int pos)
- {
-
- for(int i = pos; i < length(); i++)
- {
- if(_data[_offset+i] == val)
- {
- return i;
- }
- }
- return -1;
- }
-
-
- public static AMQShortString join(final Collection<AMQShortString> terms,
- final AMQShortString delim)
- {
- if(terms.size() == 0)
- {
- return EMPTY_STRING;
- }
-
- int size = delim.length() * (terms.size() - 1);
- for(AMQShortString term : terms)
- {
- size += term.length();
- }
-
- byte[] data = new byte[size];
- int pos = 0;
- final byte[] delimData = delim._data;
- final int delimOffset = delim._offset;
- final int delimLength = delim._length;
-
-
- for(AMQShortString term : terms)
- {
-
- if(pos!=0)
- {
- System.arraycopy(delimData, delimOffset,data,pos, delimLength);
- pos+=delimLength;
- }
- System.arraycopy(term._data,term._offset,data,pos,term._length);
- pos+=term._length;
- }
-
-
-
- return new AMQShortString(data,0,size);
- }
-
- public int toIntValue()
- {
- int pos = _offset;
- int val = 0;
-
-
- boolean isNegative = (_data[pos] == MINUS);
- if(isNegative)
- {
- pos++;
- }
-
- final int end = _length + _offset;
-
- while(pos < end)
- {
- int digit = (int) (_data[pos++] - ZERO);
- if((digit < 0) || (digit > 9))
- {
- throw new NumberFormatException("\""+toString()+"\" is not a valid number");
- }
- val = val * 10;
- val += digit;
- }
- if(isNegative)
- {
- val = val * -1;
- }
- return val;
- }
-
- public boolean contains(final byte b)
- {
- final int end = _length + _offset;
- for(int i = _offset; i < end; i++)
- {
- if(_data[i] == b)
- {
- return true;
- }
- }
- return false; //To change body of created methods use File | Settings | File Templates.
- }
-
- public static AMQShortString valueOf(Object obj)
- {
- return obj == null ? null : new AMQShortString(String.valueOf(obj));
- }
-
-
- public static void main(String args[])
- {
- AMQShortString s = new AMQShortString("a.b.c.d.e.f.g.h.i.j.k");
- AMQShortString s2 = s.substring(2, 7);
-
- AMQShortStringTokenizer t = s2.tokenize((byte) '.');
- while(t.hasMoreTokens())
- {
- System.err.println(t.nextToken());
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQShortStringTokenizer.java b/java/common/src/main/java/org/apache/qpid/framing/AMQShortStringTokenizer.java
deleted file mode 100644
index e2db8906a1..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQShortStringTokenizer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.apache.qpid.framing;
-
-/*
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*
-*/
-public interface AMQShortStringTokenizer
-{
-
- public int countTokens();
-
- public AMQShortString nextToken();
-
- boolean hasMoreTokens();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQType.java b/java/common/src/main/java/org/apache/qpid/framing/AMQType.java
deleted file mode 100644
index 14fb63da03..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQType.java
+++ /dev/null
@@ -1,795 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import java.math.BigDecimal;
-
-/**
- * AMQType is a type that represents the different possible AMQP field table types. It provides operations for each
- * of the types to perform tasks such as calculating the size of an instance of the type, converting types between AMQP
- * and Java native types, and reading and writing instances of AMQP types in binary formats to and from byte buffers.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Get the equivalent one byte identifier for a type.
- * <tr><td> Calculate the size of an instance of an AMQP parameter type. <td> {@link EncodingUtils}
- * <tr><td> Convert an instance of an AMQP parameter into a compatable Java object tagged with its AMQP type.
- * <td> {@link AMQTypedValue}
- * <tr><td> Write an instance of an AMQP parameter type to a byte buffer. <td> {@link EncodingUtils}
- * <tr><td> Read an instance of an AMQP parameter from a byte buffer. <td> {@link EncodingUtils}
- * </table>
- */
-public enum AMQType
-{
- LONG_STRING('S')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedLongStringLength((String) value);
- }
-
- public String toNativeValue(Object value)
- {
- if (value != null)
- {
- return value.toString();
- }
- else
- {
- throw new NullPointerException("Cannot convert: null to String.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeLongStringBytes(buffer, (String) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readLongString(buffer);
- }
- },
-
- INTEGER('i')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.unsignedIntegerLength();
- }
-
- public Long toNativeValue(Object value)
- {
- if (value instanceof Long)
- {
- return (Long) value;
- }
- else if (value instanceof Integer)
- {
- return ((Integer) value).longValue();
- }
- else if (value instanceof Short)
- {
- return ((Short) value).longValue();
- }
- else if (value instanceof Byte)
- {
- return ((Byte) value).longValue();
- }
- else if ((value instanceof String) || (value == null))
- {
- return Long.valueOf((String) value);
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName() + ") to int.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeUnsignedInteger(buffer, (Long) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readUnsignedInteger(buffer);
- }
- },
-
- DECIMAL('D')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedByteLength() + EncodingUtils.encodedIntegerLength();
- }
-
- public Object toNativeValue(Object value)
- {
- if (value instanceof BigDecimal)
- {
- return (BigDecimal) value;
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName()
- + ") to BigDecimal.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- BigDecimal bd = (BigDecimal) value;
-
- byte places = new Integer(bd.scale()).byteValue();
-
- int unscaled = bd.intValue();
-
- EncodingUtils.writeByte(buffer, places);
-
- EncodingUtils.writeInteger(buffer, unscaled);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- byte places = EncodingUtils.readByte(buffer);
-
- int unscaled = EncodingUtils.readInteger(buffer);
-
- BigDecimal bd = new BigDecimal(unscaled);
-
- return bd.setScale(places);
- }
- },
-
- TIMESTAMP('T')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedLongLength();
- }
-
- public Object toNativeValue(Object value)
- {
- if (value instanceof Long)
- {
- return (Long) value;
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName()
- + ") to timestamp.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeLong(buffer, (Long) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readLong(buffer);
- }
- },
-
- /**
- * Implements the field table type. The native value of a field table type will be an instance of
- * {@link FieldTable}, which itself may contain name/value pairs encoded as {@link AMQTypedValue}s.
- */
- FIELD_TABLE('F')
- {
- /**
- * Calculates the size of an instance of the type in bytes.
- *
- * @param value An instance of the type.
- *
- * @return The size of the instance of the type in bytes.
- */
- public int getEncodingSize(Object value)
- {
- // Ensure that the value is a FieldTable.
- if (!(value instanceof FieldTable))
- {
- throw new IllegalArgumentException("Value is not a FieldTable.");
- }
-
- FieldTable ftValue = (FieldTable) value;
-
- // Loop over all name/value pairs adding up size of each. FieldTable itself keeps track of its encoded
- // size as entries are added, so no need to loop over all explicitly.
- // EncodingUtils calculation of the encoded field table lenth, will include 4 bytes for its 'size' field.
- return EncodingUtils.encodedFieldTableLength(ftValue);
- }
-
- /**
- * Converts an instance of the type to an equivalent Java native representation.
- *
- * @param value An instance of the type.
- *
- * @return An equivalent Java native representation.
- */
- public Object toNativeValue(Object value)
- {
- // Ensure that the value is a FieldTable.
- if (!(value instanceof FieldTable))
- {
- throw new IllegalArgumentException("Value is not a FieldTable.");
- }
-
- return (FieldTable) value;
- }
-
- /**
- * Writes an instance of the type to a specified byte buffer.
- *
- * @param value An instance of the type.
- * @param buffer The byte buffer to write it to.
- */
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- // Ensure that the value is a FieldTable.
- if (!(value instanceof FieldTable))
- {
- throw new IllegalArgumentException("Value is not a FieldTable.");
- }
-
- FieldTable ftValue = (FieldTable) value;
-
- // Loop over all name/values writing out into buffer.
- ftValue.writeToBuffer(buffer);
- }
-
- /**
- * Reads an instance of the type from a specified byte buffer.
- *
- * @param buffer The byte buffer to write it to.
- *
- * @return An instance of the type.
- */
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- try
- {
- // Read size of field table then all name/value pairs.
- return EncodingUtils.readFieldTable(buffer);
- }
- catch (AMQFrameDecodingException e)
- {
- throw new IllegalArgumentException("Unable to read field table from buffer.", e);
- }
- }
- },
-
- VOID('V')
- {
- public int getEncodingSize(Object value)
- {
- return 0;
- }
-
- public Object toNativeValue(Object value)
- {
- if (value == null)
- {
- return null;
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName()
- + ") to null String.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- { }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return null;
- }
- },
-
- BINARY('x')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedLongstrLength((byte[]) value);
- }
-
- public Object toNativeValue(Object value)
- {
- if ((value instanceof byte[]) || (value == null))
- {
- return value;
- }
- else
- {
- throw new IllegalArgumentException("Value: " + value + " (" + value.getClass().getName()
- + ") cannot be converted to byte[]");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeLongstr(buffer, (byte[]) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readLongstr(buffer);
- }
- },
-
- ASCII_STRING('c')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedLongStringLength((String) value);
- }
-
- public String toNativeValue(Object value)
- {
- if (value != null)
- {
- return value.toString();
- }
- else
- {
- throw new NullPointerException("Cannot convert: null to String.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeLongStringBytes(buffer, (String) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readLongString(buffer);
- }
- },
-
- WIDE_STRING('C')
- {
- public int getEncodingSize(Object value)
- {
- // FIXME: use proper charset encoder
- return EncodingUtils.encodedLongStringLength((String) value);
- }
-
- public String toNativeValue(Object value)
- {
- if (value != null)
- {
- return value.toString();
- }
- else
- {
- throw new NullPointerException("Cannot convert: null to String.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeLongStringBytes(buffer, (String) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readLongString(buffer);
- }
- },
-
- BOOLEAN('t')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedBooleanLength();
- }
-
- public Object toNativeValue(Object value)
- {
- if (value instanceof Boolean)
- {
- return (Boolean) value;
- }
- else if ((value instanceof String) || (value == null))
- {
- return Boolean.valueOf((String) value);
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName()
- + ") to boolean.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeBoolean(buffer, (Boolean) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readBoolean(buffer);
- }
- },
-
- ASCII_CHARACTER('k')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedCharLength();
- }
-
- public Character toNativeValue(Object value)
- {
- if (value instanceof Character)
- {
- return (Character) value;
- }
- else if (value == null)
- {
- throw new NullPointerException("Cannot convert null into char");
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName()
- + ") to char.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeChar(buffer, (Character) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readChar(buffer);
- }
- },
-
- BYTE('b')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedByteLength();
- }
-
- public Byte toNativeValue(Object value)
- {
- if (value instanceof Byte)
- {
- return (Byte) value;
- }
- else if ((value instanceof String) || (value == null))
- {
- return Byte.valueOf((String) value);
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName()
- + ") to byte.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeByte(buffer, (Byte) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readByte(buffer);
- }
- },
-
- SHORT('s')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedShortLength();
- }
-
- public Short toNativeValue(Object value)
- {
- if (value instanceof Short)
- {
- return (Short) value;
- }
- else if (value instanceof Byte)
- {
- return ((Byte) value).shortValue();
- }
- else if ((value instanceof String) || (value == null))
- {
- return Short.valueOf((String) value);
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName()
- + ") to short.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeShort(buffer, (Short) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readShort(buffer);
- }
- },
-
- INT('I')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedIntegerLength();
- }
-
- public Integer toNativeValue(Object value)
- {
- if (value instanceof Integer)
- {
- return (Integer) value;
- }
- else if (value instanceof Short)
- {
- return ((Short) value).intValue();
- }
- else if (value instanceof Byte)
- {
- return ((Byte) value).intValue();
- }
- else if ((value instanceof String) || (value == null))
- {
- return Integer.valueOf((String) value);
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName() + ") to int.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeInteger(buffer, (Integer) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readInteger(buffer);
- }
- },
-
- LONG('l')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedLongLength();
- }
-
- public Object toNativeValue(Object value)
- {
- if (value instanceof Long)
- {
- return (Long) value;
- }
- else if (value instanceof Integer)
- {
- return ((Integer) value).longValue();
- }
- else if (value instanceof Short)
- {
- return ((Short) value).longValue();
- }
- else if (value instanceof Byte)
- {
- return ((Byte) value).longValue();
- }
- else if ((value instanceof String) || (value == null))
- {
- return Long.valueOf((String) value);
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName()
- + ") to long.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeLong(buffer, (Long) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readLong(buffer);
- }
- },
-
- FLOAT('f')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedFloatLength();
- }
-
- public Float toNativeValue(Object value)
- {
- if (value instanceof Float)
- {
- return (Float) value;
- }
- else if ((value instanceof String) || (value == null))
- {
- return Float.valueOf((String) value);
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName()
- + ") to float.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeFloat(buffer, (Float) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readFloat(buffer);
- }
- },
-
- DOUBLE('d')
- {
- public int getEncodingSize(Object value)
- {
- return EncodingUtils.encodedDoubleLength();
- }
-
- public Double toNativeValue(Object value)
- {
- if (value instanceof Double)
- {
- return (Double) value;
- }
- else if (value instanceof Float)
- {
- return ((Float) value).doubleValue();
- }
- else if ((value instanceof String) || (value == null))
- {
- return Double.valueOf((String) value);
- }
- else
- {
- throw new NumberFormatException("Cannot convert: " + value + "(" + value.getClass().getName()
- + ") to double.");
- }
- }
-
- public void writeValueImpl(Object value, ByteBuffer buffer)
- {
- EncodingUtils.writeDouble(buffer, (Double) value);
- }
-
- public Object readValueFromBuffer(ByteBuffer buffer)
- {
- return EncodingUtils.readDouble(buffer);
- }
- };
-
- /** Holds the defined one byte identifier for the type. */
- private final byte _identifier;
-
- /**
- * Creates an instance of an AMQP type from its defined one byte identifier.
- *
- * @param identifier The one byte identifier for the type.
- */
- AMQType(char identifier)
- {
- _identifier = (byte) identifier;
- }
-
- /**
- * Extracts the byte identifier for the typ.
- *
- * @return The byte identifier for the typ.
- */
- public final byte identifier()
- {
- return _identifier;
- }
-
- /**
- * Calculates the size of an instance of the type in bytes.
- *
- * @param value An instance of the type.
- *
- * @return The size of the instance of the type in bytes.
- */
- public abstract int getEncodingSize(Object value);
-
- /**
- * Converts an instance of the type to an equivalent Java native representation.
- *
- * @param value An instance of the type.
- *
- * @return An equivalent Java native representation.
- */
- public abstract Object toNativeValue(Object value);
-
- /**
- * Converts an instance of the type to an equivalent Java native representation, packaged as an
- * {@link AMQTypedValue} tagged with its AMQP type.
- *
- * @param value An instance of the type.
- *
- * @return An equivalent Java native representation, tagged with its AMQP type.
- */
- public AMQTypedValue asTypedValue(Object value)
- {
- return new AMQTypedValue(this, toNativeValue(value));
- }
-
- /**
- * Writes an instance of the type to a specified byte buffer, preceded by its one byte identifier. As the type and
- * value are both written, this provides a fully encoded description of a parameters type and value.
- *
- * @param value An instance of the type.
- * @param buffer The byte buffer to write it to.
- */
- public void writeToBuffer(Object value, ByteBuffer buffer)
- {
- buffer.put(identifier());
- writeValueImpl(value, buffer);
- }
-
- /**
- * Writes an instance of the type to a specified byte buffer.
- *
- * @param value An instance of the type.
- * @param buffer The byte buffer to write it to.
- */
- abstract void writeValueImpl(Object value, ByteBuffer buffer);
-
- /**
- * Reads an instance of the type from a specified byte buffer.
- *
- * @param buffer The byte buffer to write it to.
- *
- * @return An instance of the type.
- */
- abstract Object readValueFromBuffer(ByteBuffer buffer);
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQTypeMap.java b/java/common/src/main/java/org/apache/qpid/framing/AMQTypeMap.java
deleted file mode 100644
index a07fd78c8c..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQTypeMap.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class AMQTypeMap
-{
- public static final Map<Byte, AMQType> _reverseTypeMap = new HashMap<Byte, AMQType>();
-
- static
- {
- for(AMQType type : AMQType.values())
- {
- _reverseTypeMap.put(type.identifier(), type);
- }
- }
-
- public static AMQType getType(Byte identifier)
- {
- AMQType result = _reverseTypeMap.get(identifier);
- if (result == null) {
- throw new IllegalArgumentException
- ("no such type code: " + Integer.toHexString(identifier.intValue()));
- }
- return result;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQTypedValue.java b/java/common/src/main/java/org/apache/qpid/framing/AMQTypedValue.java
deleted file mode 100644
index 647d531476..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQTypedValue.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import java.util.Date;
-import java.util.Map;
-import java.math.BigDecimal;
-
-/**
- * AMQTypedValue combines together a native Java Object value, and an {@link AMQType}, as a fully typed AMQP parameter
- * value. It provides the ability to read and write fully typed parameters to and from byte buffers. It also provides
- * the ability to create such parameters from Java native value and a type tag or to extract the native value and type
- * from one.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Create a fully typed AMQP value from a native type and a type tag. <td> {@link AMQType}
- * <tr><td> Create a fully typed AMQP value from a binary representation in a byte buffer. <td> {@link AMQType}
- * <tr><td> Write a fully typed AMQP value to a binary representation in a byte buffer. <td> {@link AMQType}
- * <tr><td> Extract the type from a fully typed AMQP value.
- * <tr><td> Extract the value from a fully typed AMQP value.
- * </table>
- */
-public class AMQTypedValue
-{
- /** The type of the value. */
- private final AMQType _type;
-
- /** The Java native representation of the AMQP typed value. */
- private final Object _value;
-
- public AMQTypedValue(AMQType type, Object value)
- {
- if (type == null)
- {
- throw new NullPointerException("Cannot create a typed value with null type");
- }
-
- _type = type;
- _value = type.toNativeValue(value);
- }
-
- private AMQTypedValue(AMQType type, ByteBuffer buffer)
- {
- _type = type;
- _value = type.readValueFromBuffer(buffer);
- }
-
- public AMQType getType()
- {
- return _type;
- }
-
- public Object getValue()
- {
- return _value;
- }
-
- public void writeToBuffer(ByteBuffer buffer)
- {
- _type.writeToBuffer(_value, buffer);
- }
-
- public int getEncodingSize()
- {
- return _type.getEncodingSize(_value);
- }
-
- public static AMQTypedValue readFromBuffer(ByteBuffer buffer)
- {
- AMQType type = AMQTypeMap.getType(buffer.get());
-
- return new AMQTypedValue(type, buffer);
- }
-
- public String toString()
- {
- return "[" + getType() + ": " + getValue() + "]";
- }
-
-
- public boolean equals(Object o)
- {
- if(o instanceof AMQTypedValue)
- {
- AMQTypedValue other = (AMQTypedValue) o;
- return _type == other._type && (_value == null ? other._value == null : _value.equals(other._value));
- }
- else
- {
- return false;
- }
- }
-
- public int hashCode()
- {
- return _type.hashCode() ^ (_value == null ? 0 : _value.hashCode());
- }
-
-
- public static AMQTypedValue toTypedValue(Object val)
- {
- if(val == null)
- {
- return AMQType.VOID.asTypedValue(null);
- }
-
- Class klass = val.getClass();
- if(klass == String.class)
- {
- return AMQType.ASCII_STRING.asTypedValue(val);
- }
- else if(klass == Character.class)
- {
- return AMQType.ASCII_CHARACTER.asTypedValue(val);
- }
- else if(klass == Integer.class)
- {
- return AMQType.INT.asTypedValue(val);
- }
- else if(klass == Long.class)
- {
- return AMQType.LONG.asTypedValue(val);
- }
- else if(klass == Float.class)
- {
- return AMQType.FLOAT.asTypedValue(val);
- }
- else if(klass == Double.class)
- {
- return AMQType.DOUBLE.asTypedValue(val);
- }
- else if(klass == Date.class)
- {
- return AMQType.TIMESTAMP.asTypedValue(val);
- }
- else if(klass == Byte.class)
- {
- return AMQType.BYTE.asTypedValue(val);
- }
- else if(klass == Boolean.class)
- {
- return AMQType.BOOLEAN.asTypedValue(val);
- }
- else if(klass == byte[].class)
- {
- return AMQType.BINARY.asTypedValue(val);
- }
- else if(klass == BigDecimal.class)
- {
- return AMQType.DECIMAL.asTypedValue(val);
- }
- else if(val instanceof Map)
- {
- return AMQType.FIELD_TABLE.asTypedValue(FieldTable.convertToFieldTable((Map)val));
- }
- return null;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java b/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java
deleted file mode 100644
index c7d89a9927..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java
+++ /dev/null
@@ -1,838 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class BasicContentHeaderProperties implements CommonContentHeaderProperties
-{
- //persistent & non-persistent constants, values as per JMS DeliveryMode
- public static final int NON_PERSISTENT = 1;
- public static final int PERSISTENT = 2;
-
- private static final Logger _logger = LoggerFactory.getLogger(BasicContentHeaderProperties.class);
-
- private static final AMQShortString ZERO_STRING = null;
-
- /**
- * We store the encoded form when we decode the content header so that if we need to write it out without modifying
- * it we can do so without incurring the expense of reencoding it
- */
- private byte[] _encodedForm;
-
- /** Flag indicating whether the entire content header has been decoded yet */
- private boolean _decoded = true;
-
- /**
- * We have some optimisations for partial decoding for maximum performance. The headers are used in the broker for
- * routing in some cases so we can decode that separately.
- */
- private boolean _decodedHeaders = true;
-
- /**
- * We have some optimisations for partial decoding for maximum performance. The content type is used by all clients
- * to determine the message type
- */
- private boolean _decodedContentType = true;
-
- private AMQShortString _contentType;
-
- private AMQShortString _encoding;
-
- private FieldTable _headers;
-
- private byte _deliveryMode;
-
- private byte _priority;
-
- private AMQShortString _correlationId;
-
- private AMQShortString _replyTo;
-
- private long _expiration;
-
- private AMQShortString _messageId;
-
- private long _timestamp;
-
- private AMQShortString _type;
-
- private AMQShortString _userId;
-
- private AMQShortString _appId;
-
- private AMQShortString _clusterId;
-
- private int _propertyFlags = 0;
- private static final int CONTENT_TYPE_MASK = 1 << 15;
- private static final int ENCONDING_MASK = 1 << 14;
- private static final int HEADERS_MASK = 1 << 13;
- private static final int DELIVERY_MODE_MASK = 1 << 12;
- private static final int PROPRITY_MASK = 1 << 11;
- private static final int CORRELATION_ID_MASK = 1 << 10;
- private static final int REPLY_TO_MASK = 1 << 9;
- private static final int EXPIRATION_MASK = 1 << 8;
- private static final int MESSAGE_ID_MASK = 1 << 7;
- private static final int TIMESTAMP_MASK = 1 << 6;
- private static final int TYPE_MASK = 1 << 5;
- private static final int USER_ID_MASK = 1 << 4;
- private static final int APPLICATION_ID_MASK = 1 << 3;
- private static final int CLUSTER_ID_MASK = 1 << 2;
-
-
- /**
- * This is 0_10 specific. We use this property to check if some message properties have been changed.
- */
- private boolean _hasBeenUpdated = false;
-
- public boolean reset()
- {
- boolean result = _hasBeenUpdated;
- _hasBeenUpdated = false;
- return result;
- }
-
- public void updated()
- {
- _hasBeenUpdated = true;
- }
-
- public BasicContentHeaderProperties()
- { }
-
- public int getPropertyListSize()
- {
- if (_encodedForm != null)
- {
- return _encodedForm.length;
- }
- else
- {
- int size = 0;
-
- if ((_propertyFlags & (CONTENT_TYPE_MASK)) > 0)
- {
- size += EncodingUtils.encodedShortStringLength(_contentType);
- }
-
- if ((_propertyFlags & ENCONDING_MASK) > 0)
- {
- size += EncodingUtils.encodedShortStringLength(_encoding);
- }
-
- if ((_propertyFlags & HEADERS_MASK) > 0)
- {
- size += EncodingUtils.encodedFieldTableLength(_headers);
- }
-
- if ((_propertyFlags & DELIVERY_MODE_MASK) > 0)
- {
- size += 1;
- }
-
- if ((_propertyFlags & PROPRITY_MASK) > 0)
- {
- size += 1;
- }
-
- if ((_propertyFlags & CORRELATION_ID_MASK) > 0)
- {
- size += EncodingUtils.encodedShortStringLength(_correlationId);
- }
-
- if ((_propertyFlags & REPLY_TO_MASK) > 0)
- {
- size += EncodingUtils.encodedShortStringLength(_replyTo);
- }
-
- if ((_propertyFlags & EXPIRATION_MASK) > 0)
- {
- if (_expiration == 0L)
- {
- size += EncodingUtils.encodedShortStringLength(ZERO_STRING);
- }
- else
- {
- size += EncodingUtils.encodedShortStringLength(_expiration);
- }
- }
-
- if ((_propertyFlags & MESSAGE_ID_MASK) > 0)
- {
- size += EncodingUtils.encodedShortStringLength(_messageId);
- }
-
- if ((_propertyFlags & TIMESTAMP_MASK) > 0)
- {
- size += 8;
- }
-
- if ((_propertyFlags & TYPE_MASK) > 0)
- {
- size += EncodingUtils.encodedShortStringLength(_type);
- }
-
- if ((_propertyFlags & USER_ID_MASK) > 0)
- {
- size += EncodingUtils.encodedShortStringLength(_userId);
- }
-
- if ((_propertyFlags & APPLICATION_ID_MASK) > 0)
- {
- size += EncodingUtils.encodedShortStringLength(_appId);
- }
-
- if ((_propertyFlags & CLUSTER_ID_MASK) > 0)
- {
- size += EncodingUtils.encodedShortStringLength(_clusterId);
- }
-
- return size;
- }
- }
-
- private void clearEncodedForm()
- {
- if (!_decoded && (_encodedForm != null))
- {
- // decode();
- }
-
- _encodedForm = null;
- }
-
- public void setPropertyFlags(int propertyFlags)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags = propertyFlags;
- }
-
- public int getPropertyFlags()
- {
- return _propertyFlags;
- }
-
- public void writePropertyListPayload(ByteBuffer buffer)
- {
- if (_encodedForm != null)
- {
- buffer.put(_encodedForm);
- }
- else
- {
- if ((_propertyFlags & (CONTENT_TYPE_MASK)) != 0)
- {
- EncodingUtils.writeShortStringBytes(buffer, _contentType);
- }
-
- if ((_propertyFlags & ENCONDING_MASK) != 0)
- {
- EncodingUtils.writeShortStringBytes(buffer, _encoding);
- }
-
- if ((_propertyFlags & HEADERS_MASK) != 0)
- {
- EncodingUtils.writeFieldTableBytes(buffer, _headers);
- }
-
- if ((_propertyFlags & DELIVERY_MODE_MASK) != 0)
- {
- buffer.put(_deliveryMode);
- }
-
- if ((_propertyFlags & PROPRITY_MASK) != 0)
- {
- buffer.put(_priority);
- }
-
- if ((_propertyFlags & CORRELATION_ID_MASK) != 0)
- {
- EncodingUtils.writeShortStringBytes(buffer, _correlationId);
- }
-
- if ((_propertyFlags & REPLY_TO_MASK) != 0)
- {
- EncodingUtils.writeShortStringBytes(buffer, _replyTo);
- }
-
- if ((_propertyFlags & EXPIRATION_MASK) != 0)
- {
- if (_expiration == 0L)
- {
- EncodingUtils.writeShortStringBytes(buffer, ZERO_STRING);
- }
- else
- {
- EncodingUtils.writeShortStringBytes(buffer, String.valueOf(_expiration));
- }
- }
-
- if ((_propertyFlags & MESSAGE_ID_MASK) != 0)
- {
- EncodingUtils.writeShortStringBytes(buffer, _messageId);
- }
-
- if ((_propertyFlags & TIMESTAMP_MASK) != 0)
- {
- EncodingUtils.writeTimestamp(buffer, _timestamp);
- }
-
- if ((_propertyFlags & TYPE_MASK) != 0)
- {
- EncodingUtils.writeShortStringBytes(buffer, _type);
- }
-
- if ((_propertyFlags & USER_ID_MASK) != 0)
- {
- EncodingUtils.writeShortStringBytes(buffer, _userId);
- }
-
- if ((_propertyFlags & APPLICATION_ID_MASK) != 0)
- {
- EncodingUtils.writeShortStringBytes(buffer, _appId);
- }
-
- if ((_propertyFlags & CLUSTER_ID_MASK) != 0)
- {
- EncodingUtils.writeShortStringBytes(buffer, _clusterId);
- }
- }
- }
-
- public void populatePropertiesFromBuffer(ByteBuffer buffer, int propertyFlags, int size) throws AMQFrameDecodingException
- {
- _propertyFlags = propertyFlags;
-
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Property flags: " + _propertyFlags);
- }
-
- decode(buffer);
- /*_encodedForm = new byte[size];
- buffer.get(_encodedForm, 0, size);
- _decoded = false;
- _decodedHeaders = false;
- _decodedContentType = false;*/
- }
-
- private void decode(ByteBuffer buffer)
- {
- // ByteBuffer buffer = ByteBuffer.wrap(_encodedForm);
- int pos = buffer.position();
- try
- {
- if ((_propertyFlags & (CONTENT_TYPE_MASK)) != 0)
- {
- _contentType = EncodingUtils.readAMQShortString(buffer);
- }
-
- if ((_propertyFlags & ENCONDING_MASK) != 0)
- {
- _encoding = EncodingUtils.readAMQShortString(buffer);
- }
-
- if ((_propertyFlags & HEADERS_MASK) != 0)
- {
- _headers = EncodingUtils.readFieldTable(buffer);
- }
-
- if ((_propertyFlags & DELIVERY_MODE_MASK) != 0)
- {
- _deliveryMode = buffer.get();
- }
-
- if ((_propertyFlags & PROPRITY_MASK) != 0)
- {
- _priority = buffer.get();
- }
-
- if ((_propertyFlags & CORRELATION_ID_MASK) != 0)
- {
- _correlationId = EncodingUtils.readAMQShortString(buffer);
- }
-
- if ((_propertyFlags & REPLY_TO_MASK) != 0)
- {
- _replyTo = EncodingUtils.readAMQShortString(buffer);
- }
-
- if ((_propertyFlags & EXPIRATION_MASK) != 0)
- {
- _expiration = EncodingUtils.readLongAsShortString(buffer);
- }
-
- if ((_propertyFlags & MESSAGE_ID_MASK) != 0)
- {
- _messageId = EncodingUtils.readAMQShortString(buffer);
- }
-
- if ((_propertyFlags & TIMESTAMP_MASK) != 0)
- {
- _timestamp = EncodingUtils.readTimestamp(buffer);
- }
-
- if ((_propertyFlags & TYPE_MASK) != 0)
- {
- _type = EncodingUtils.readAMQShortString(buffer);
- }
-
- if ((_propertyFlags & USER_ID_MASK) != 0)
- {
- _userId = EncodingUtils.readAMQShortString(buffer);
- }
-
- if ((_propertyFlags & APPLICATION_ID_MASK) != 0)
- {
- _appId = EncodingUtils.readAMQShortString(buffer);
- }
-
- if ((_propertyFlags & CLUSTER_ID_MASK) != 0)
- {
- _clusterId = EncodingUtils.readAMQShortString(buffer);
- }
- }
- catch (AMQFrameDecodingException e)
- {
- throw new RuntimeException("Error in content header data: " + e, e);
- }
-
- final int endPos = buffer.position();
- buffer.position(pos);
- final int len = endPos - pos;
- _encodedForm = new byte[len];
- final int limit = buffer.limit();
- buffer.limit(endPos);
- buffer.get(_encodedForm, 0, len);
- buffer.limit(limit);
- buffer.position(endPos);
- _decoded = true;
- }
-
- private void decodeUpToHeaders()
- {
- ByteBuffer buffer = ByteBuffer.wrap(_encodedForm);
- try
- {
- if ((_propertyFlags & (CONTENT_TYPE_MASK)) != 0)
- {
- byte length = buffer.get();
- buffer.skip(length);
- }
-
- if ((_propertyFlags & ENCONDING_MASK) != 0)
- {
- byte length = buffer.get();
- buffer.skip(length);
- }
-
- if ((_propertyFlags & HEADERS_MASK) != 0)
- {
- _headers = EncodingUtils.readFieldTable(buffer);
-
- }
-
- _decodedHeaders = true;
- }
- catch (AMQFrameDecodingException e)
- {
- throw new RuntimeException("Error in content header data: " + e, e);
- }
- }
-
- private void decodeUpToContentType()
- {
- ByteBuffer buffer = ByteBuffer.wrap(_encodedForm);
-
- if ((_propertyFlags & (CONTENT_TYPE_MASK)) != 0)
- {
- _contentType = EncodingUtils.readAMQShortString(buffer);
- }
-
- _decodedContentType = true;
- }
-
- private void decodeIfNecessary()
- {
- if (!_decoded)
- {
- // decode();
- }
- }
-
- private void decodeHeadersIfNecessary()
- {
- if (!_decoded && !_decodedHeaders)
- {
- decodeUpToHeaders();
- }
- }
-
- private void decodeContentTypeIfNecessary()
- {
- if (!_decoded && !_decodedContentType)
- {
- decodeUpToContentType();
- }
- }
-
- public AMQShortString getContentType()
- {
- decodeContentTypeIfNecessary();
-
- return _contentType;
- }
-
- public String getContentTypeAsString()
- {
- decodeContentTypeIfNecessary();
-
- return (_contentType == null) ? null : _contentType.toString();
- }
-
- public void setContentType(AMQShortString contentType)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= (CONTENT_TYPE_MASK);
- _contentType = contentType;
- }
-
- public void setContentType(String contentType)
- {
- _hasBeenUpdated = true;
- setContentType((contentType == null) ? null : new AMQShortString(contentType));
- }
-
- public String getEncodingAsString()
- {
-
- return (getEncoding() == null) ? null : getEncoding().toString();
- }
-
- public AMQShortString getEncoding()
- {
- decodeIfNecessary();
-
- return _encoding;
- }
-
- public void setEncoding(String encoding)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= ENCONDING_MASK;
- _encoding = (encoding == null) ? null : new AMQShortString(encoding);
- }
-
- public void setEncoding(AMQShortString encoding)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= ENCONDING_MASK;
- _encoding = encoding;
- }
-
- public FieldTable getHeaders()
- {
- decodeHeadersIfNecessary();
-
- if (_headers == null)
- {
- setHeaders(FieldTableFactory.newFieldTable());
- }
-
- return _headers;
- }
-
- public void setHeaders(FieldTable headers)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= HEADERS_MASK;
- _headers = headers;
- }
-
- public byte getDeliveryMode()
- {
- decodeIfNecessary();
-
- return _deliveryMode;
- }
-
- public void setDeliveryMode(byte deliveryMode)
- {
- clearEncodedForm();
- _propertyFlags |= DELIVERY_MODE_MASK;
- _deliveryMode = deliveryMode;
- }
-
- public byte getPriority()
- {
- decodeIfNecessary();
-
- return _priority;
- }
-
- public void setPriority(byte priority)
- {
- clearEncodedForm();
- _propertyFlags |= PROPRITY_MASK;
- _priority = priority;
- }
-
- public AMQShortString getCorrelationId()
- {
- decodeIfNecessary();
-
- return _correlationId;
- }
-
- public String getCorrelationIdAsString()
- {
- decodeIfNecessary();
-
- return (_correlationId == null) ? null : _correlationId.toString();
- }
-
- public void setCorrelationId(String correlationId)
- {
- _hasBeenUpdated = true;
- setCorrelationId((correlationId == null) ? null : new AMQShortString(correlationId));
- }
-
- public void setCorrelationId(AMQShortString correlationId)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= CORRELATION_ID_MASK;
- _correlationId = correlationId;
- }
-
- public String getReplyToAsString()
- {
- decodeIfNecessary();
-
- return (_replyTo == null) ? null : _replyTo.toString();
- }
-
- public AMQShortString getReplyTo()
- {
- decodeIfNecessary();
-
- return _replyTo;
- }
-
- public void setReplyTo(String replyTo)
- {
- _hasBeenUpdated = true;
- setReplyTo((replyTo == null) ? null : new AMQShortString(replyTo));
- }
-
- public void setReplyTo(AMQShortString replyTo)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= REPLY_TO_MASK;
- _replyTo = replyTo;
- }
-
- public long getExpiration()
- {
- decodeIfNecessary();
- return _expiration;
- }
-
- public void setExpiration(long expiration)
- {
- clearEncodedForm();
- _propertyFlags |= EXPIRATION_MASK;
- _expiration = expiration;
- }
-
- public AMQShortString getMessageId()
- {
- decodeIfNecessary();
-
- return _messageId;
- }
-
- public String getMessageIdAsString()
- {
- decodeIfNecessary();
-
- return (_messageId == null) ? null : _messageId.toString();
- }
-
- public void setMessageId(String messageId)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= MESSAGE_ID_MASK;
- _messageId = (messageId == null) ? null : new AMQShortString(messageId);
- }
-
- public void setMessageId(AMQShortString messageId)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= MESSAGE_ID_MASK;
- _messageId = messageId;
- }
-
- public long getTimestamp()
- {
- decodeIfNecessary();
- return _timestamp;
- }
-
- public void setTimestamp(long timestamp)
- {
- clearEncodedForm();
- _propertyFlags |= TIMESTAMP_MASK;
- _timestamp = timestamp;
- }
-
- public String getTypeAsString()
- {
- decodeIfNecessary();
-
- return (_type == null) ? null : _type.toString();
- }
-
- public AMQShortString getType()
- {
- decodeIfNecessary();
-
- return _type;
- }
-
- public void setType(String type)
- {
- _hasBeenUpdated = true;
- setType((type == null) ? null : new AMQShortString(type));
- }
-
- public void setType(AMQShortString type)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= TYPE_MASK;
- _type = type;
- }
-
- public String getUserIdAsString()
- {
- decodeIfNecessary();
-
- return (_userId == null) ? null : _userId.toString();
- }
-
- public AMQShortString getUserId()
- {
- decodeIfNecessary();
-
- return _userId;
- }
-
- public void setUserId(String userId)
- {
- setUserId((userId == null) ? null : new AMQShortString(userId));
- }
-
- public void setUserId(AMQShortString userId)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= USER_ID_MASK;
- _userId = userId;
- }
-
- public String getAppIdAsString()
- {
- decodeIfNecessary();
-
- return (_appId == null) ? null : _appId.toString();
- }
-
- public AMQShortString getAppId()
- {
- decodeIfNecessary();
-
- return _appId;
- }
-
- public void setAppId(String appId)
- {
- _hasBeenUpdated = true;
- setAppId((appId == null) ? null : new AMQShortString(appId));
- }
-
- public void setAppId(AMQShortString appId)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= APPLICATION_ID_MASK;
- _appId = appId;
- _hasBeenUpdated = true;
- }
-
- public String getClusterIdAsString()
- {
- _hasBeenUpdated = true;
- decodeIfNecessary();
- return (_clusterId == null) ? null : _clusterId.toString();
- }
-
- public AMQShortString getClusterId()
- {
- _hasBeenUpdated = true;
- decodeIfNecessary();
- return _clusterId;
- }
-
- public void setClusterId(String clusterId)
- {
- _hasBeenUpdated = true;
- setClusterId((clusterId == null) ? null : new AMQShortString(clusterId));
- }
-
- public void setClusterId(AMQShortString clusterId)
- {
- _hasBeenUpdated = true;
- clearEncodedForm();
- _propertyFlags |= CLUSTER_ID_MASK;
- _clusterId = clusterId;
- }
-
- public String toString()
- {
- return "reply-to = " + _replyTo + ",propertyFlags = " + _propertyFlags + ",ApplicationID = " + _appId
- + ",ClusterID = " + _clusterId + ",UserId = " + _userId + ",JMSMessageID = " + _messageId
- + ",JMSCorrelationID = " + _correlationId + ",JMSDeliveryMode = " + _deliveryMode + ",JMSExpiration = "
- + _expiration + ",JMSPriority = " + _priority + ",JMSTimestamp = " + _timestamp + ",JMSType = " + _type;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/BodyFactory.java b/java/common/src/main/java/org/apache/qpid/framing/BodyFactory.java
deleted file mode 100644
index 59646577e1..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/BodyFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-/**
- * Any class that is capable of turning a stream of bytes into an AMQ structure must implement this interface.
- */
-public interface BodyFactory
-{
- AMQBody createBody(ByteBuffer in, long bodySize) throws AMQFrameDecodingException;
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/CommonContentHeaderProperties.java b/java/common/src/main/java/org/apache/qpid/framing/CommonContentHeaderProperties.java
deleted file mode 100644
index 7162c37062..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/CommonContentHeaderProperties.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing;
-
-public interface CommonContentHeaderProperties extends ContentHeaderProperties
-{
- AMQShortString getContentType();
-
- void setContentType(AMQShortString contentType);
-
- FieldTable getHeaders();
-
- void setHeaders(FieldTable headers);
-
- byte getDeliveryMode();
-
- void setDeliveryMode(byte deliveryMode);
-
- byte getPriority();
-
- void setPriority(byte priority);
-
- AMQShortString getCorrelationId();
-
- void setCorrelationId(AMQShortString correlationId);
-
- AMQShortString getReplyTo();
-
- void setReplyTo(AMQShortString replyTo);
-
- long getExpiration();
-
- void setExpiration(long expiration);
-
- AMQShortString getMessageId();
-
- void setMessageId(AMQShortString messageId);
-
- long getTimestamp();
-
- void setTimestamp(long timestamp);
-
- AMQShortString getType();
-
- void setType(AMQShortString type);
-
- AMQShortString getUserId();
-
- void setUserId(AMQShortString userId);
-
- AMQShortString getAppId();
-
- void setAppId(AMQShortString appId);
-
- AMQShortString getClusterId();
-
- void setClusterId(AMQShortString clusterId);
-
- AMQShortString getEncoding();
-
- void setEncoding(AMQShortString encoding);
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/CompositeAMQDataBlock.java b/java/common/src/main/java/org/apache/qpid/framing/CompositeAMQDataBlock.java
deleted file mode 100644
index 94030f383e..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/CompositeAMQDataBlock.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-public class CompositeAMQDataBlock extends AMQDataBlock implements EncodableAMQDataBlock
-{
-
- private AMQDataBlock[] _blocks;
-
- public CompositeAMQDataBlock(AMQDataBlock[] blocks)
- {
- _blocks = blocks;
- }
-
-
- public AMQDataBlock[] getBlocks()
- {
- return _blocks;
- }
-
-
- public long getSize()
- {
- long frameSize = 0;
- for (int i = 0; i < _blocks.length; i++)
- {
- frameSize += _blocks[i].getSize();
- }
- return frameSize;
- }
-
- public void writePayload(ByteBuffer buffer)
- {
- for (int i = 0; i < _blocks.length; i++)
- {
- _blocks[i].writePayload(buffer);
- }
- }
-
- public String toString()
- {
- if (_blocks == null)
- {
- return "No blocks contained in composite frame";
- }
- else
- {
- StringBuilder buf = new StringBuilder(this.getClass().getName());
- buf.append("{");
- for (int i = 0 ; i < _blocks.length; i++)
- {
- buf.append(" ").append(i).append("=[").append(_blocks[i].toString()).append("]");
- }
- buf.append("}");
- return buf.toString();
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/Content.java b/java/common/src/main/java/org/apache/qpid/framing/Content.java
deleted file mode 100644
index e5feeec2a4..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/Content.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-public interface Content
-{
- // TODO: New Content class required for AMQP 0-9.
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/ContentBody.java b/java/common/src/main/java/org/apache/qpid/framing/ContentBody.java
deleted file mode 100644
index 9d39f8aa86..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/ContentBody.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-import org.apache.qpid.AMQException;
-
-public class ContentBody implements AMQBody
-{
- public static final byte TYPE = 3;
-
- public ByteBuffer payload;
-
- public ContentBody()
- {
- }
-
- public ContentBody(ByteBuffer buffer, long size) throws AMQFrameDecodingException
- {
- if (size > 0)
- {
- payload = buffer.slice();
- payload.limit((int) size);
- buffer.skip((int) size);
- }
-
- }
-
-
- public ContentBody(ByteBuffer payload)
- {
- this.payload = payload;
- }
-
- public byte getFrameType()
- {
- return TYPE;
- }
-
- public int getSize()
- {
- return (payload == null ? 0 : payload.limit());
- }
-
- public void writePayload(ByteBuffer buffer)
- {
- if (payload != null)
- {
- if(payload.isDirect() || payload.isReadOnly())
- {
- ByteBuffer copy = payload.duplicate();
- buffer.put(copy.rewind());
- }
- else
- {
- buffer.put(payload.array(),payload.arrayOffset(),payload.limit());
- }
- }
- }
-
- public void handle(final int channelId, final AMQVersionAwareProtocolSession session)
- throws AMQException
- {
- session.contentBodyReceived(channelId, this);
- }
-
- protected void populateFromBuffer(ByteBuffer buffer, long size) throws AMQFrameDecodingException
- {
- if (size > 0)
- {
- payload = buffer.slice();
- payload.limit((int) size);
- buffer.skip((int) size);
- }
-
- }
-
- public void reduceBufferToFit()
- {
- if (payload != null && (payload.remaining() < payload.capacity() / 2))
- {
- int size = payload.limit();
- ByteBuffer newPayload = ByteBuffer.allocate(size);
-
- newPayload.put(payload);
- newPayload.flip();
-
- //reduce reference count on payload
- payload.release();
-
- payload = newPayload;
- }
- }
-
-
-
- public static AMQFrame createAMQFrame(int channelId, ContentBody body)
- {
- final AMQFrame frame = new AMQFrame(channelId, body);
- return frame;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/ContentBodyFactory.java b/java/common/src/main/java/org/apache/qpid/framing/ContentBodyFactory.java
deleted file mode 100644
index c42995d148..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/ContentBodyFactory.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ContentBodyFactory implements BodyFactory
-{
- private static final Logger _log = LoggerFactory.getLogger(AMQMethodBodyFactory.class);
-
- private static final ContentBodyFactory _instance = new ContentBodyFactory();
-
- public static ContentBodyFactory getInstance()
- {
- return _instance;
- }
-
- private ContentBodyFactory()
- {
- _log.debug("Creating content body factory");
- }
-
- public AMQBody createBody(ByteBuffer in, long bodySize) throws AMQFrameDecodingException
- {
- return new ContentBody(in, bodySize);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java b/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java
deleted file mode 100644
index 30db3b8be7..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-import org.apache.qpid.AMQException;
-
-public class ContentHeaderBody implements AMQBody
-{
- public static final byte TYPE = 2;
-
- public int classId;
-
- public int weight;
-
- /** unsigned long but java can't handle that anyway when allocating byte array */
- public long bodySize;
-
- /** must never be null */
- private ContentHeaderProperties properties;
-
- public ContentHeaderBody()
- {
- }
-
- public ContentHeaderBody(ByteBuffer buffer, long size) throws AMQFrameDecodingException
- {
- classId = buffer.getUnsignedShort();
- weight = buffer.getUnsignedShort();
- bodySize = buffer.getLong();
- int propertyFlags = buffer.getUnsignedShort();
- ContentHeaderPropertiesFactory factory = ContentHeaderPropertiesFactory.getInstance();
- properties = factory.createContentHeaderProperties(classId, propertyFlags, buffer, (int)size - 14);
-
- }
-
-
- public ContentHeaderBody(ContentHeaderProperties props, int classId)
- {
- properties = props;
- this.classId = classId;
- }
-
- public ContentHeaderBody(int classId, int weight, ContentHeaderProperties props, long bodySize)
- {
- this(props, classId);
- this.weight = weight;
- this.bodySize = bodySize;
- }
-
- public byte getFrameType()
- {
- return TYPE;
- }
-
- protected void populateFromBuffer(ByteBuffer buffer, long size)
- throws AMQFrameDecodingException, AMQProtocolVersionException
- {
- classId = buffer.getUnsignedShort();
- weight = buffer.getUnsignedShort();
- bodySize = buffer.getLong();
- int propertyFlags = buffer.getUnsignedShort();
- ContentHeaderPropertiesFactory factory = ContentHeaderPropertiesFactory.getInstance();
- properties = factory.createContentHeaderProperties(classId, propertyFlags, buffer, (int)size - 14);
- }
-
- /**
- * Helper method that is used currently by the persistence layer (by BDB at the moment).
- * @param buffer
- * @param size
- * @return
- * @throws AMQFrameDecodingException
- */
- public static ContentHeaderBody createFromBuffer(ByteBuffer buffer, long size)
- throws AMQFrameDecodingException, AMQProtocolVersionException
- {
- ContentHeaderBody body = new ContentHeaderBody(buffer, size);
-
- return body;
- }
-
- public int getSize()
- {
- return 2 + 2 + 8 + 2 + properties.getPropertyListSize();
- }
-
- public void writePayload(ByteBuffer buffer)
- {
- EncodingUtils.writeUnsignedShort(buffer, classId);
- EncodingUtils.writeUnsignedShort(buffer, weight);
- buffer.putLong(bodySize);
- EncodingUtils.writeUnsignedShort(buffer, properties.getPropertyFlags());
- properties.writePropertyListPayload(buffer);
- }
-
- public void handle(final int channelId, final AMQVersionAwareProtocolSession session)
- throws AMQException
- {
- session.contentHeaderReceived(channelId, this);
- }
-
- public static AMQFrame createAMQFrame(int channelId, int classId, int weight, BasicContentHeaderProperties properties,
- long bodySize)
- {
- return new AMQFrame(channelId, new ContentHeaderBody(classId, weight, properties, bodySize));
- }
-
- public static AMQFrame createAMQFrame(int channelId, ContentHeaderBody body)
- {
- return new AMQFrame(channelId, body);
- }
-
- public ContentHeaderProperties getProperties()
- {
- return properties;
- }
-
- public void setProperties(ContentHeaderProperties props)
- {
- properties = props;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBodyFactory.java b/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBodyFactory.java
deleted file mode 100644
index 8d5e2f9fb4..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBodyFactory.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ContentHeaderBodyFactory implements BodyFactory
-{
- private static final Logger _log = LoggerFactory.getLogger(AMQMethodBodyFactory.class);
-
- private static final ContentHeaderBodyFactory _instance = new ContentHeaderBodyFactory();
-
- public static ContentHeaderBodyFactory getInstance()
- {
- return _instance;
- }
-
- private ContentHeaderBodyFactory()
- {
- _log.debug("Creating content header body factory");
- }
-
- public AMQBody createBody(ByteBuffer in, long bodySize) throws AMQFrameDecodingException
- {
- // all content headers are the same - it is only the properties that differ.
- // the content header body further delegates construction of properties
- return new ContentHeaderBody(in, bodySize);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderProperties.java b/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderProperties.java
deleted file mode 100644
index 7ef538cfdc..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderProperties.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-/**
- * There will be an implementation of this interface for each content type. All content types have associated
- * header properties and this provides a way to encode and decode them.
- */
-public interface ContentHeaderProperties
-{
- /**
- * Writes the property list to the buffer, in a suitably encoded form.
- * @param buffer The buffer to write to
- */
- void writePropertyListPayload(ByteBuffer buffer);
-
- /**
- * Populates the properties from buffer.
- * @param buffer The buffer to read from.
- * @param propertyFlags he property flags.
- * @throws AMQFrameDecodingException when the buffer does not contain valid data
- */
- void populatePropertiesFromBuffer(ByteBuffer buffer, int propertyFlags, int size)
- throws AMQFrameDecodingException;
-
- /**
- * @return the size of the encoded property list in bytes.
- */
- int getPropertyListSize();
-
- /**
- * Gets the property flags. Property flags indicate which properties are set in the list. The
- * position and meaning of each flag is defined in the protocol specification for the particular
- * content type with which these properties are associated.
- * @return flags
- */
- int getPropertyFlags();
-
- void updated();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderPropertiesFactory.java b/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderPropertiesFactory.java
deleted file mode 100644
index 46189b63d7..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderPropertiesFactory.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.apache.qpid.framing.amqp_8_0.BasicConsumeBodyImpl;
-
-public class ContentHeaderPropertiesFactory
-{
- private static final ContentHeaderPropertiesFactory _instance = new ContentHeaderPropertiesFactory();
-
- public static ContentHeaderPropertiesFactory getInstance()
- {
- return _instance;
- }
-
- private ContentHeaderPropertiesFactory()
- {
- }
-
- public ContentHeaderProperties createContentHeaderProperties(int classId, int propertyFlags,
- ByteBuffer buffer, int size)
- throws AMQFrameDecodingException
- {
- ContentHeaderProperties properties;
- // AMQP version change: "Hardwired" version to major=8, minor=0
- // TODO: Change so that the actual version is obtained from
- // the ProtocolInitiation object for this session.
- if (classId == BasicConsumeBodyImpl.CLASS_ID)
- {
- properties = new BasicContentHeaderProperties();
- }
- else
- {
- throw new AMQFrameDecodingException(null, "Unsupport content header class id: " + classId, null);
- }
- properties.populatePropertiesFromBuffer(buffer, propertyFlags, size);
- return properties;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/DeferredDataBlock.java b/java/common/src/main/java/org/apache/qpid/framing/DeferredDataBlock.java
deleted file mode 100644
index f6795ff200..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/DeferredDataBlock.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-/*
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*
-*/
-public abstract class DeferredDataBlock extends AMQDataBlock
-{
- private AMQDataBlock _underlyingDataBlock;
-
-
- public long getSize()
- {
- if(_underlyingDataBlock == null)
- {
- _underlyingDataBlock = createAMQDataBlock();
- }
- return _underlyingDataBlock.getSize();
- }
-
- public void writePayload(ByteBuffer buffer)
- {
- if(_underlyingDataBlock == null)
- {
- _underlyingDataBlock = createAMQDataBlock();
- }
- _underlyingDataBlock.writePayload(buffer);
- }
-
- abstract protected AMQDataBlock createAMQDataBlock();
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/EncodableAMQDataBlock.java b/java/common/src/main/java/org/apache/qpid/framing/EncodableAMQDataBlock.java
deleted file mode 100644
index 9cf96e698c..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/EncodableAMQDataBlock.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-/**
- * Marker interface to indicate to MINA that a data block should be encoded with the
- * single encoder/decoder that we have defined.
- *
- * Note that due to a bug in MINA all classes must directly implement this interface, even if
- * a superclass implements it.
- * TODO: fix MINA so that this is not necessary
- *
- */
-public interface EncodableAMQDataBlock
-{
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java b/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java
deleted file mode 100644
index 6425f8c591..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java
+++ /dev/null
@@ -1,1033 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.nio.charset.Charset;
-
-public class EncodingUtils
-{
- private static final Logger _logger = LoggerFactory.getLogger(EncodingUtils.class);
-
- private static final String STRING_ENCODING = "iso8859-15";
-
- private static final Charset _charset = Charset.forName("iso8859-15");
-
- public static final int SIZEOF_UNSIGNED_SHORT = 2;
- public static final int SIZEOF_UNSIGNED_INT = 4;
- private static final boolean[] ALL_FALSE_ARRAY = new boolean[8];
-
- public static int encodedShortStringLength(String s)
- {
- if (s == null)
- {
- return 1;
- }
- else
- {
- return (short) (1 + s.length());
- }
- }
-
- public static int encodedShortStringLength(short s)
- {
- if (s == 0)
- {
- return 1 + 1;
- }
-
- int len = 0;
- if (s < 0)
- {
- len = 1;
- // sloppy - doesn't work of Integer.MIN_VALUE
- s = (short) -s;
- }
-
- if (s > 9999)
- {
- return 1 + 5;
- }
- else if (s > 999)
- {
- return 1 + 4;
- }
- else if (s > 99)
- {
- return 1 + 3;
- }
- else if (s > 9)
- {
- return 1 + 2;
- }
- else
- {
- return 1 + 1;
- }
-
- }
-
- public static int encodedShortStringLength(int i)
- {
- if (i == 0)
- {
- return 1 + 1;
- }
-
- int len = 0;
- if (i < 0)
- {
- len = 1;
- // sloppy - doesn't work of Integer.MIN_VALUE
- i = -i;
- }
-
- // range is now 1 - 2147483647
- if (i < Short.MAX_VALUE)
- {
- return len + encodedShortStringLength((short) i);
- }
- else if (i > 999999)
- {
- return len + 6 + encodedShortStringLength((short) (i / 1000000));
- }
- else // if (i > 99999)
- {
- return len + 5 + encodedShortStringLength((short) (i / 100000));
- }
-
- }
-
- public static int encodedShortStringLength(long l)
- {
- if (l == 0)
- {
- return 1 + 1;
- }
-
- int len = 0;
- if (l < 0)
- {
- len = 1;
- // sloppy - doesn't work of Long.MIN_VALUE
- l = -l;
- }
-
- if (l < Integer.MAX_VALUE)
- {
- return len + encodedShortStringLength((int) l);
- }
- else if (l > 9999999999L)
- {
- return len + 10 + encodedShortStringLength((int) (l / 10000000000L));
- }
- else
- {
- return len + 1 + encodedShortStringLength((int) (l / 10L));
- }
-
- }
-
- public static int encodedShortStringLength(AMQShortString s)
- {
- if (s == null)
- {
- return 1;
- }
- else
- {
- return (1 + s.length());
- }
- }
-
- public static int encodedLongStringLength(String s)
- {
- if (s == null)
- {
- return 4;
- }
- else
- {
- return 4 + s.length();
- }
- }
-
- public static int encodedLongStringLength(char[] s)
- {
- if (s == null)
- {
- return 4;
- }
- else
- {
- return 4 + s.length;
- }
- }
-
- public static int encodedLongstrLength(byte[] bytes)
- {
- if (bytes == null)
- {
- return 4;
- }
- else
- {
- return 4 + bytes.length;
- }
- }
-
- public static int encodedFieldTableLength(FieldTable table)
- {
- if (table == null)
- {
- // length is encoded as 4 octets
- return 4;
- }
- else
- {
- // length of the table plus 4 octets for the length
- return (int) table.getEncodedSize() + 4;
- }
- }
-
- public static int encodedContentLength(Content table)
- {
- // TODO: New Content class required for AMQP 0-9.
- return 0;
- }
-
- public static void writeShortStringBytes(ByteBuffer buffer, String s)
- {
- if (s != null)
- {
- byte[] encodedString = new byte[s.length()];
- char[] cha = s.toCharArray();
- for (int i = 0; i < cha.length; i++)
- {
- encodedString[i] = (byte) cha[i];
- }
-
- // TODO: check length fits in an unsigned byte
- writeUnsignedByte(buffer, (short)encodedString.length);
- buffer.put(encodedString);
-
-
- }
- else
- {
- // really writing out unsigned byte
- buffer.put((byte) 0);
- }
- }
-
- public static void writeShortStringBytes(ByteBuffer buffer, AMQShortString s)
- {
- if (s != null)
- {
-
- s.writeToBuffer(buffer);
- }
- else
- {
- // really writing out unsigned byte
- buffer.put((byte) 0);
- }
- }
-
- public static void writeLongStringBytes(ByteBuffer buffer, String s)
- {
- assert (s == null) || (s.length() <= 0xFFFE);
- if (s != null)
- {
- int len = s.length();
- writeUnsignedInteger(buffer, s.length());
- byte[] encodedString = new byte[len];
- char[] cha = s.toCharArray();
- for (int i = 0; i < cha.length; i++)
- {
- encodedString[i] = (byte) cha[i];
- }
-
- buffer.put(encodedString);
- }
- else
- {
- writeUnsignedInteger(buffer, 0);
- }
- }
-
- public static void writeLongStringBytes(ByteBuffer buffer, char[] s)
- {
- assert (s == null) || (s.length <= 0xFFFE);
- if (s != null)
- {
- int len = s.length;
- writeUnsignedInteger(buffer, s.length);
- byte[] encodedString = new byte[len];
- for (int i = 0; i < s.length; i++)
- {
- encodedString[i] = (byte) s[i];
- }
-
- buffer.put(encodedString);
- }
- else
- {
- writeUnsignedInteger(buffer, 0);
- }
- }
-
- public static void writeLongStringBytes(ByteBuffer buffer, byte[] bytes)
- {
- assert (bytes == null) || (bytes.length <= 0xFFFE);
- if (bytes != null)
- {
- writeUnsignedInteger(buffer, bytes.length);
- buffer.put(bytes);
- }
- else
- {
- writeUnsignedInteger(buffer, 0);
- }
- }
-
- public static void writeUnsignedByte(ByteBuffer buffer, short b)
- {
- byte bv = (byte) b;
- buffer.put(bv);
- }
-
- public static void writeUnsignedShort(ByteBuffer buffer, int s)
- {
- // TODO: Is this comparison safe? Do I need to cast RHS to long?
- if (s < Short.MAX_VALUE)
- {
- buffer.putShort((short) s);
- }
- else
- {
- short sv = (short) s;
- buffer.put((byte) (0xFF & (sv >> 8)));
- buffer.put((byte) (0xFF & sv));
- }
- }
-
- public static int unsignedIntegerLength()
- {
- return 4;
- }
-
- public static void writeUnsignedInteger(ByteBuffer buffer, long l)
- {
- // TODO: Is this comparison safe? Do I need to cast RHS to long?
- if (l < Integer.MAX_VALUE)
- {
- buffer.putInt((int) l);
- }
- else
- {
- int iv = (int) l;
-
- // FIXME: This *may* go faster if we build this into a local 4-byte array and then
- // put the array in a single call.
- buffer.put((byte) (0xFF & (iv >> 24)));
- buffer.put((byte) (0xFF & (iv >> 16)));
- buffer.put((byte) (0xFF & (iv >> 8)));
- buffer.put((byte) (0xFF & iv));
- }
- }
-
- public static void writeFieldTableBytes(ByteBuffer buffer, FieldTable table)
- {
- if (table != null)
- {
- table.writeToBuffer(buffer);
- }
- else
- {
- EncodingUtils.writeUnsignedInteger(buffer, 0);
- }
- }
-
- public static void writeContentBytes(ByteBuffer buffer, Content content)
- {
- // TODO: New Content class required for AMQP 0-9.
- }
-
- public static void writeBooleans(ByteBuffer buffer, boolean[] values)
- {
- byte packedValue = 0;
- for (int i = 0; i < values.length; i++)
- {
- if (values[i])
- {
- packedValue = (byte) (packedValue | (1 << i));
- }
- }
-
- buffer.put(packedValue);
- }
-
- public static void writeBooleans(ByteBuffer buffer, boolean value)
- {
-
- buffer.put(value ? (byte) 1 : (byte) 0);
- }
-
- public static void writeBooleans(ByteBuffer buffer, boolean value0, boolean value1)
- {
- byte packedValue = value0 ? (byte) 1 : (byte) 0;
-
- if (value1)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 1));
- }
-
- buffer.put(packedValue);
- }
-
- public static void writeBooleans(ByteBuffer buffer, boolean value0, boolean value1, boolean value2)
- {
- byte packedValue = value0 ? (byte) 1 : (byte) 0;
-
- if (value1)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 1));
- }
-
- if (value2)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 2));
- }
-
- buffer.put(packedValue);
- }
-
- public static void writeBooleans(ByteBuffer buffer, boolean value0, boolean value1, boolean value2, boolean value3)
- {
- byte packedValue = value0 ? (byte) 1 : (byte) 0;
-
- if (value1)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 1));
- }
-
- if (value2)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 2));
- }
-
- if (value3)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 3));
- }
-
- buffer.put(packedValue);
- }
-
- public static void writeBooleans(ByteBuffer buffer, boolean value0, boolean value1, boolean value2, boolean value3,
- boolean value4)
- {
- byte packedValue = value0 ? (byte) 1 : (byte) 0;
-
- if (value1)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 1));
- }
-
- if (value2)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 2));
- }
-
- if (value3)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 3));
- }
-
- if (value4)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 4));
- }
-
- buffer.put(packedValue);
- }
-
- public static void writeBooleans(ByteBuffer buffer, boolean value0, boolean value1, boolean value2, boolean value3,
- boolean value4, boolean value5)
- {
- byte packedValue = value0 ? (byte) 1 : (byte) 0;
-
- if (value1)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 1));
- }
-
- if (value2)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 2));
- }
-
- if (value3)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 3));
- }
-
- if (value4)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 4));
- }
-
- if (value5)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 5));
- }
-
- buffer.put(packedValue);
- }
-
- public static void writeBooleans(ByteBuffer buffer, boolean value0, boolean value1, boolean value2, boolean value3,
- boolean value4, boolean value5, boolean value6)
- {
- byte packedValue = value0 ? (byte) 1 : (byte) 0;
-
- if (value1)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 1));
- }
-
- if (value2)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 2));
- }
-
- if (value3)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 3));
- }
-
- if (value4)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 4));
- }
-
- if (value5)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 5));
- }
-
- if (value6)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 6));
- }
-
- buffer.put(packedValue);
- }
-
- public static void writeBooleans(ByteBuffer buffer, boolean value0, boolean value1, boolean value2, boolean value3,
- boolean value4, boolean value5, boolean value6, boolean value7)
- {
- byte packedValue = value0 ? (byte) 1 : (byte) 0;
-
- if (value1)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 1));
- }
-
- if (value2)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 2));
- }
-
- if (value3)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 3));
- }
-
- if (value4)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 4));
- }
-
- if (value5)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 5));
- }
-
- if (value6)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 6));
- }
-
- if (value7)
- {
- packedValue = (byte) (packedValue | (byte) (1 << 7));
- }
-
- buffer.put(packedValue);
- }
-
- /**
- * This is used for writing longstrs.
- *
- * @param buffer
- * @param data
- */
- public static void writeLongstr(ByteBuffer buffer, byte[] data)
- {
- if (data != null)
- {
- writeUnsignedInteger(buffer, data.length);
- buffer.put(data);
- }
- else
- {
- writeUnsignedInteger(buffer, 0);
- }
- }
-
- public static void writeTimestamp(ByteBuffer buffer, long timestamp)
- {
- writeLong(buffer, timestamp);
- }
-
- public static boolean[] readBooleans(ByteBuffer buffer)
- {
- final byte packedValue = buffer.get();
- if (packedValue == 0)
- {
- return ALL_FALSE_ARRAY;
- }
-
- final boolean[] result = new boolean[8];
-
- result[0] = ((packedValue & 1) != 0);
- result[1] = ((packedValue & (1 << 1)) != 0);
- result[2] = ((packedValue & (1 << 2)) != 0);
- result[3] = ((packedValue & (1 << 3)) != 0);
- if ((packedValue & 0xF0) == 0)
- {
- result[0] = ((packedValue & 1) != 0);
- }
-
- result[4] = ((packedValue & (1 << 4)) != 0);
- result[5] = ((packedValue & (1 << 5)) != 0);
- result[6] = ((packedValue & (1 << 6)) != 0);
- result[7] = ((packedValue & (1 << 7)) != 0);
-
- return result;
- }
-
- public static FieldTable readFieldTable(ByteBuffer buffer) throws AMQFrameDecodingException
- {
- long length = buffer.getUnsignedInt();
- if (length == 0)
- {
- return null;
- }
- else
- {
- return FieldTableFactory.newFieldTable(buffer, length);
- }
- }
-
- public static Content readContent(ByteBuffer buffer) throws AMQFrameDecodingException
- {
- // TODO: New Content class required for AMQP 0-9.
- return null;
- }
-
- public static AMQShortString readAMQShortString(ByteBuffer buffer)
- {
- return AMQShortString.readFromBuffer(buffer);
-
- }
-
- public static String readShortString(ByteBuffer buffer)
- {
- short length = buffer.getUnsigned();
- if (length == 0)
- {
- return null;
- }
- else
- {
- // this may seem rather odd to declare two array but testing has shown
- // that constructing a string from a byte array is 5 (five) times slower
- // than constructing one from a char array.
- // this approach here is valid since we know that all the chars are
- // ASCII (0-127)
- byte[] stringBytes = new byte[length];
- buffer.get(stringBytes, 0, length);
- char[] stringChars = new char[length];
- for (int i = 0; i < stringChars.length; i++)
- {
- stringChars[i] = (char) stringBytes[i];
- }
-
- return new String(stringChars);
- }
- }
-
- public static String readLongString(ByteBuffer buffer)
- {
- long length = buffer.getUnsignedInt();
- if (length == 0)
- {
- return "";
- }
- else
- {
- // this may seem rather odd to declare two array but testing has shown
- // that constructing a string from a byte array is 5 (five) times slower
- // than constructing one from a char array.
- // this approach here is valid since we know that all the chars are
- // ASCII (0-127)
- byte[] stringBytes = new byte[(int) length];
- buffer.get(stringBytes, 0, (int) length);
- char[] stringChars = new char[(int) length];
- for (int i = 0; i < stringChars.length; i++)
- {
- stringChars[i] = (char) stringBytes[i];
- }
-
- return new String(stringChars);
- }
- }
-
- public static byte[] readLongstr(ByteBuffer buffer)
- {
- long length = buffer.getUnsignedInt();
- if (length == 0)
- {
- return null;
- }
- else
- {
- byte[] result = new byte[(int) length];
- buffer.get(result);
-
- return result;
- }
- }
-
- public static long readTimestamp(ByteBuffer buffer)
- {
- // Discard msb from AMQ timestamp
- // buffer.getUnsignedInt();
- return buffer.getLong();
- }
-
- static byte[] hexToByteArray(String id)
- {
- // Should check param for null, long enough for this check, upper-case and trailing char
- String s = (id.charAt(1) == 'x') ? id.substring(2) : id; // strip 0x
-
- int len = s.length();
- int byte_len = len / 2;
- byte[] b = new byte[byte_len];
-
- for (int i = 0; i < byte_len; i++)
- {
- // fixme: refine these repetitive subscript calcs.
- int ch = i * 2;
-
- byte b1 = Byte.parseByte(s.substring(ch, ch + 1), 16);
- byte b2 = Byte.parseByte(s.substring(ch + 1, ch + 2), 16);
-
- b[i] = (byte) ((b1 * 16) + b2);
- }
-
- return (b);
- }
-
- public static char[] convertToHexCharArray(byte[] from)
- {
- int length = from.length;
- char[] result_buff = new char[(length * 2) + 2];
-
- result_buff[0] = '0';
- result_buff[1] = 'x';
-
- int bite;
- int dest = 2;
-
- for (int i = 0; i < length; i++)
- {
- bite = from[i];
-
- if (bite < 0)
- {
- bite += 256;
- }
-
- result_buff[dest++] = hex_chars[bite >> 4];
- result_buff[dest++] = hex_chars[bite & 0x0f];
- }
-
- return (result_buff);
- }
-
- public static String convertToHexString(byte[] from)
- {
- return (new String(convertToHexCharArray(from)));
- }
-
- public static String convertToHexString(ByteBuffer bb)
- {
- int size = bb.limit();
-
- byte[] from = new byte[size];
-
- // Is this not the same.
- // bb.get(from, 0, length);
- for (int i = 0; i < size; i++)
- {
- from[i] = bb.get(i);
- }
-
- return (new String(convertToHexCharArray(from)));
- }
-
- private static char[] hex_chars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
-
- // **** new methods
-
- // AMQP_BOOLEAN_PROPERTY_PREFIX
-
- public static void writeBoolean(ByteBuffer buffer, Boolean aBoolean)
- {
- buffer.put((byte) (aBoolean ? 1 : 0));
- }
-
- public static boolean readBoolean(ByteBuffer buffer)
- {
- byte packedValue = buffer.get();
-
- return (packedValue == 1);
- }
-
- public static int encodedBooleanLength()
- {
- return 1;
- }
-
- // AMQP_BYTE_PROPERTY_PREFIX
- public static void writeByte(ByteBuffer buffer, Byte aByte)
- {
- buffer.put(aByte);
- }
-
- public static byte readByte(ByteBuffer buffer)
- {
- return buffer.get();
- }
-
- public static int encodedByteLength()
- {
- return 1;
- }
-
- // AMQP_SHORT_PROPERTY_PREFIX
- public static void writeShort(ByteBuffer buffer, Short aShort)
- {
- buffer.putShort(aShort);
- }
-
- public static short readShort(ByteBuffer buffer)
- {
- return buffer.getShort();
- }
-
- public static int encodedShortLength()
- {
- return 2;
- }
-
- // INTEGER_PROPERTY_PREFIX
- public static void writeInteger(ByteBuffer buffer, Integer aInteger)
- {
- buffer.putInt(aInteger);
- }
-
- public static int readInteger(ByteBuffer buffer)
- {
- return buffer.getInt();
- }
-
- public static int encodedIntegerLength()
- {
- return 4;
- }
-
- // AMQP_LONG_PROPERTY_PREFIX
- public static void writeLong(ByteBuffer buffer, Long aLong)
- {
- buffer.putLong(aLong);
- }
-
- public static long readLong(ByteBuffer buffer)
- {
- return buffer.getLong();
- }
-
- public static int encodedLongLength()
- {
- return 8;
- }
-
- // Float_PROPERTY_PREFIX
- public static void writeFloat(ByteBuffer buffer, Float aFloat)
- {
- buffer.putFloat(aFloat);
- }
-
- public static float readFloat(ByteBuffer buffer)
- {
- return buffer.getFloat();
- }
-
- public static int encodedFloatLength()
- {
- return 4;
- }
-
- // Double_PROPERTY_PREFIX
- public static void writeDouble(ByteBuffer buffer, Double aDouble)
- {
- buffer.putDouble(aDouble);
- }
-
- public static double readDouble(ByteBuffer buffer)
- {
- return buffer.getDouble();
- }
-
- public static int encodedDoubleLength()
- {
- return 8;
- }
-
- public static byte[] readBytes(ByteBuffer buffer)
- {
- long length = buffer.getUnsignedInt();
- if (length == 0)
- {
- return null;
- }
- else
- {
- byte[] dataBytes = new byte[(int)length];
- buffer.get(dataBytes, 0, (int)length);
-
- return dataBytes;
- }
- }
-
- public static void writeBytes(ByteBuffer buffer, byte[] data)
- {
- if (data != null)
- {
- // TODO: check length fits in an unsigned byte
- writeUnsignedInteger(buffer, (long)data.length);
- buffer.put(data);
- }
- else
- {
- // really writing out unsigned byte
- //buffer.put((byte) 0);
- writeUnsignedInteger(buffer, 0L);
- }
- }
-
- // CHAR_PROPERTY
- public static int encodedCharLength()
- {
- return encodedByteLength();
- }
-
- public static char readChar(ByteBuffer buffer)
- {
- // This is valid as we know that the Character is ASCII 0..127
- return (char) buffer.get();
- }
-
- public static void writeChar(ByteBuffer buffer, char character)
- {
- // This is valid as we know that the Character is ASCII 0..127
- writeByte(buffer, (byte) character);
- }
-
- public static long readLongAsShortString(ByteBuffer buffer)
- {
- short length = buffer.getUnsigned();
- short pos = 0;
- if (length == 0)
- {
- return 0L;
- }
-
- byte digit = buffer.get();
- boolean isNegative;
- long result = 0;
- if (digit == (byte) '-')
- {
- isNegative = true;
- pos++;
- digit = buffer.get();
- }
- else
- {
- isNegative = false;
- }
-
- result = digit - (byte) '0';
- pos++;
-
- while (pos < length)
- {
- pos++;
- digit = buffer.get();
- result = (result << 3) + (result << 1);
- result += digit - (byte) '0';
- }
-
- return result;
- }
-
- public static long readUnsignedInteger(ByteBuffer buffer)
- {
- long l = 0xFF & buffer.get();
- l <<= 8;
- l = l | (0xFF & buffer.get());
- l <<= 8;
- l = l | (0xFF & buffer.get());
- l <<= 8;
- l = l | (0xFF & buffer.get());
-
- return l;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java b/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java
deleted file mode 100644
index 22205d49f8..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java
+++ /dev/null
@@ -1,1246 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.qpid.AMQPInvalidClassException;
-
-import java.math.BigDecimal;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
-// extends FieldTable
-public class FieldTable
-{
- private static final Logger _logger = LoggerFactory.getLogger(FieldTable.class);
- private static final String STRICT_AMQP = "STRICT_AMQP";
- private final boolean _strictAMQP = Boolean.valueOf(System.getProperty(STRICT_AMQP, "false"));
-
- private ByteBuffer _encodedForm;
- private LinkedHashMap<AMQShortString, AMQTypedValue> _properties;
- private long _encodedSize;
- private static final int INITIAL_HASHMAP_CAPACITY = 16;
- private static final int INITIAL_ENCODED_FORM_SIZE = 256;
-
- public FieldTable()
- {
- super();
- // _encodedForm = ByteBuffer.allocate(INITIAL_ENCODED_FORM_SIZE);
- // _encodedForm.setAutoExpand(true);
- // _encodedForm.limit(0);
- }
-
- /**
- * Construct a new field table.
- *
- * @param buffer the buffer from which to read data. The length byte must be read already
- * @param length the length of the field table. Must be > 0.
- */
- public FieldTable(ByteBuffer buffer, long length)
- {
- this();
- ByteBuffer encodedForm = buffer.slice();
- encodedForm.limit((int) length);
- _encodedForm = ByteBuffer.allocate((int)length);
- _encodedForm.put(encodedForm);
- _encodedForm.flip();
- _encodedSize = length;
- buffer.skip((int) length);
- }
-
- public AMQTypedValue getProperty(AMQShortString string)
- {
- checkPropertyName(string);
-
- synchronized (this)
- {
- if (_properties == null)
- {
- if (_encodedForm == null)
- {
- return null;
- }
- else
- {
- populateFromBuffer();
- }
- }
- }
-
- if (_properties == null)
- {
- return null;
- }
- else
- {
- return _properties.get(string);
- }
- }
-
- private void populateFromBuffer()
- {
- try
- {
- setFromBuffer(_encodedForm, _encodedSize);
- }
- catch (AMQFrameDecodingException e)
- {
- _logger.error("Error decoding FieldTable in deferred decoding mode ", e);
- throw new IllegalArgumentException(e);
- }
- }
-
- private AMQTypedValue setProperty(AMQShortString key, AMQTypedValue val)
- {
- checkPropertyName(key);
- initMapIfNecessary();
- if (_properties.containsKey(key))
- {
- _encodedForm = null;
-
- if (val == null)
- {
- return removeKey(key);
- }
- }
- else if ((_encodedForm != null) && (val != null))
- {
- // We have updated data to store in the buffer
- // So clear the _encodedForm to allow it to be rebuilt later
- // this is safer than simply appending to any existing buffer.
- _encodedForm = null;
- }
- else if (val == null)
- {
- return null;
- }
-
- AMQTypedValue oldVal = _properties.put(key, val);
- if (oldVal != null)
- {
- _encodedSize -= oldVal.getEncodingSize();
- }
- else
- {
- _encodedSize += EncodingUtils.encodedShortStringLength(key) + 1;
- }
-
- _encodedSize += val.getEncodingSize();
-
- return oldVal;
- }
-
- private void initMapIfNecessary()
- {
- synchronized (this)
- {
- if (_properties == null)
- {
- if ((_encodedForm == null) || (_encodedSize == 0))
- {
- _properties = new LinkedHashMap<AMQShortString, AMQTypedValue>();
- }
- else
- {
- populateFromBuffer();
- }
- }
-
- }
- }
-
- public Boolean getBoolean(String string)
- {
- return getBoolean(new AMQShortString(string));
- }
-
- public Boolean getBoolean(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
- if ((value != null) && (value.getType() == AMQType.BOOLEAN))
- {
- return (Boolean) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- public Byte getByte(String string)
- {
- return getByte(new AMQShortString(string));
- }
-
- public Byte getByte(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
- if ((value != null) && (value.getType() == AMQType.BYTE))
- {
- return (Byte) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- public Short getShort(String string)
- {
- return getShort(new AMQShortString(string));
- }
-
- public Short getShort(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
- if ((value != null) && (value.getType() == AMQType.SHORT))
- {
- return (Short) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- public Integer getInteger(String string)
- {
- return getInteger(new AMQShortString(string));
- }
-
- public Integer getInteger(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
- if ((value != null) && (value.getType() == AMQType.INT))
- {
- return (Integer) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- public Long getLong(String string)
- {
- return getLong(new AMQShortString(string));
- }
-
- public Long getLong(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
- if ((value != null) && (value.getType() == AMQType.LONG))
- {
- return (Long) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- public Float getFloat(String string)
- {
- return getFloat(new AMQShortString(string));
- }
-
- public Float getFloat(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
- if ((value != null) && (value.getType() == AMQType.FLOAT))
- {
- return (Float) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- public Double getDouble(String string)
- {
- return getDouble(new AMQShortString(string));
- }
-
- public Double getDouble(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
- if ((value != null) && (value.getType() == AMQType.DOUBLE))
- {
- return (Double) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- public String getString(String string)
- {
- return getString(new AMQShortString(string));
- }
-
- public String getString(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
- if ((value != null) && ((value.getType() == AMQType.WIDE_STRING) || (value.getType() == AMQType.ASCII_STRING)))
- {
- return (String) value.getValue();
- }
- else if ((value != null) && (value.getValue() != null) && !(value.getValue() instanceof byte[]))
- {
- return String.valueOf(value.getValue());
- }
- else
- {
- return null;
- }
-
- }
-
- public Character getCharacter(String string)
- {
- return getCharacter(new AMQShortString(string));
- }
-
- public Character getCharacter(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
- if ((value != null) && (value.getType() == AMQType.ASCII_CHARACTER))
- {
- return (Character) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- public byte[] getBytes(String string)
- {
- return getBytes(new AMQShortString(string));
- }
-
- public byte[] getBytes(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
- if ((value != null) && (value.getType() == AMQType.BINARY))
- {
- return (byte[]) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- /**
- * Extracts a value from the field table that is itself a FieldTable associated with the specified parameter name.
- *
- * @param string The name of the parameter to get the associated FieldTable value for.
- *
- * @return The associated FieldTable value, or <tt>null</tt> if the associated value is not of FieldTable type or
- * not present in the field table at all.
- */
- public FieldTable getFieldTable(String string)
- {
- return getFieldTable(new AMQShortString(string));
- }
-
- /**
- * Extracts a value from the field table that is itself a FieldTable associated with the specified parameter name.
- *
- * @param string The name of the parameter to get the associated FieldTable value for.
- *
- * @return The associated FieldTable value, or <tt>null</tt> if the associated value is not of FieldTable type or
- * not present in the field table at all.
- */
- public FieldTable getFieldTable(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
-
- if ((value != null) && (value.getType() == AMQType.FIELD_TABLE))
- {
- return (FieldTable) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- public Object getObject(String string)
- {
- return getObject(new AMQShortString(string));
- }
-
- public Object getObject(AMQShortString string)
- {
- AMQTypedValue value = getProperty(string);
- if (value != null)
- {
- return value.getValue();
- }
- else
- {
- return value;
- }
-
- }
-
- public Long getTimestamp(AMQShortString name)
- {
- AMQTypedValue value = getProperty(name);
- if ((value != null) && (value.getType() == AMQType.TIMESTAMP))
- {
- return (Long) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- public BigDecimal getDecimal(AMQShortString propertyName)
- {
- AMQTypedValue value = getProperty(propertyName);
- if ((value != null) && (value.getType() == AMQType.DECIMAL))
- {
- return (BigDecimal) value.getValue();
- }
- else
- {
- return null;
- }
- }
-
- // ************ Setters
- public Object setBoolean(String string, Boolean b)
- {
- return setBoolean(new AMQShortString(string), b);
- }
-
- public Object setBoolean(AMQShortString string, Boolean b)
- {
- return setProperty(string, AMQType.BOOLEAN.asTypedValue(b));
- }
-
- public Object setByte(String string, Byte b)
- {
- return setByte(new AMQShortString(string), b);
- }
-
- public Object setByte(AMQShortString string, Byte b)
- {
- return setProperty(string, AMQType.BYTE.asTypedValue(b));
- }
-
- public Object setShort(String string, Short i)
- {
- return setShort(new AMQShortString(string), i);
- }
-
- public Object setShort(AMQShortString string, Short i)
- {
- return setProperty(string, AMQType.SHORT.asTypedValue(i));
- }
-
- public Object setInteger(String string, Integer i)
- {
- return setInteger(new AMQShortString(string), i);
- }
-
- public Object setInteger(AMQShortString string, Integer i)
- {
- return setProperty(string, AMQType.INT.asTypedValue(i));
- }
-
- public Object setLong(String string, Long l)
- {
- return setLong(new AMQShortString(string), l);
- }
-
- public Object setLong(AMQShortString string, Long l)
- {
- return setProperty(string, AMQType.LONG.asTypedValue(l));
- }
-
- public Object setFloat(String string, Float f)
- {
- return setFloat(new AMQShortString(string), f);
- }
-
- public Object setFloat(AMQShortString string, Float v)
- {
- return setProperty(string, AMQType.FLOAT.asTypedValue(v));
- }
-
- public Object setDouble(String string, Double d)
- {
- return setDouble(new AMQShortString(string), d);
- }
-
- public Object setDouble(AMQShortString string, Double v)
- {
- return setProperty(string, AMQType.DOUBLE.asTypedValue(v));
- }
-
- public Object setString(String string, String s)
- {
- return setString(new AMQShortString(string), s);
- }
-
- public Object setAsciiString(AMQShortString string, String value)
- {
- if (value == null)
- {
- return setProperty(string, AMQType.VOID.asTypedValue(null));
- }
- else
- {
- return setProperty(string, AMQType.ASCII_STRING.asTypedValue(value));
- }
- }
-
- public Object setString(AMQShortString string, String value)
- {
- if (value == null)
- {
- return setProperty(string, AMQType.VOID.asTypedValue(null));
- }
- else
- {
- return setProperty(string, AMQType.LONG_STRING.asTypedValue(value));
- }
- }
-
- public Object setChar(String string, char c)
- {
- return setChar(new AMQShortString(string), c);
- }
-
- public Object setChar(AMQShortString string, char c)
- {
- return setProperty(string, AMQType.ASCII_CHARACTER.asTypedValue(c));
- }
-
- public Object setBytes(String string, byte[] b)
- {
- return setBytes(new AMQShortString(string), b);
- }
-
- public Object setBytes(AMQShortString string, byte[] bytes)
- {
- return setProperty(string, AMQType.BINARY.asTypedValue(bytes));
- }
-
- public Object setBytes(String string, byte[] bytes, int start, int length)
- {
- return setBytes(new AMQShortString(string), bytes, start, length);
- }
-
- public Object setBytes(AMQShortString string, byte[] bytes, int start, int length)
- {
- byte[] newBytes = new byte[length];
- System.arraycopy(bytes, start, newBytes, 0, length);
-
- return setBytes(string, bytes);
- }
-
- public Object setObject(String string, Object o)
- {
- return setObject(new AMQShortString(string), o);
- }
-
- public Object setTimestamp(AMQShortString string, long datetime)
- {
- return setProperty(string, AMQType.TIMESTAMP.asTypedValue(datetime));
- }
-
- public Object setDecimal(AMQShortString string, BigDecimal decimal)
- {
- if (decimal.longValue() > Integer.MAX_VALUE)
- {
- throw new UnsupportedOperationException("AMQP doesnot support decimals larger than " + Integer.MAX_VALUE);
- }
-
- if (decimal.scale() > Byte.MAX_VALUE)
- {
- throw new UnsupportedOperationException("AMQP doesnot support decimal scales larger than " + Byte.MAX_VALUE);
- }
-
- return setProperty(string, AMQType.DECIMAL.asTypedValue(decimal));
- }
-
- public Object setVoid(AMQShortString string)
- {
- return setProperty(string, AMQType.VOID.asTypedValue(null));
- }
-
- /**
- * Associates a nested field table with the specified parameter name.
- *
- * @param string The name of the parameter to store in the table.
- * @param ftValue The field table value to associate with the parameter name.
- *
- * @return The stored value.
- */
- public Object setFieldTable(String string, FieldTable ftValue)
- {
- return setFieldTable(new AMQShortString(string), ftValue);
- }
-
- /**
- * Associates a nested field table with the specified parameter name.
- *
- * @param string The name of the parameter to store in the table.
- * @param ftValue The field table value to associate with the parameter name.
- *
- * @return The stored value.
- */
- public Object setFieldTable(AMQShortString string, FieldTable ftValue)
- {
- return setProperty(string, AMQType.FIELD_TABLE.asTypedValue(ftValue));
- }
-
- public Object setObject(AMQShortString string, Object object)
- {
- if (object instanceof Boolean)
- {
- return setBoolean(string, (Boolean) object);
- }
- else if (object instanceof Byte)
- {
- return setByte(string, (Byte) object);
- }
- else if (object instanceof Short)
- {
- return setShort(string, (Short) object);
- }
- else if (object instanceof Integer)
- {
- return setInteger(string, (Integer) object);
- }
- else if (object instanceof Long)
- {
- return setLong(string, (Long) object);
- }
- else if (object instanceof Float)
- {
- return setFloat(string, (Float) object);
- }
- else if (object instanceof Double)
- {
- return setDouble(string, (Double) object);
- }
- else if (object instanceof String)
- {
- return setString(string, (String) object);
- }
- else if (object instanceof Character)
- {
- return setChar(string, (Character) object);
- }
- else if (object instanceof byte[])
- {
- return setBytes(string, (byte[]) object);
- }
-
- throw new AMQPInvalidClassException(AMQPInvalidClassException.INVALID_OBJECT_MSG + (object == null ? "null" : object.getClass()));
- }
-
- public boolean isNullStringValue(String name)
- {
- AMQTypedValue value = getProperty(new AMQShortString(name));
-
- return (value != null) && (value.getType() == AMQType.VOID);
- }
-
- // ***** Methods
-
- public Enumeration getPropertyNames()
- {
- return Collections.enumeration(keys());
- }
-
- public boolean propertyExists(AMQShortString propertyName)
- {
- return itemExists(propertyName);
- }
-
- public boolean propertyExists(String propertyName)
- {
- return itemExists(propertyName);
- }
-
- public boolean itemExists(AMQShortString propertyName)
- {
- checkPropertyName(propertyName);
- initMapIfNecessary();
-
- return _properties.containsKey(propertyName);
- }
-
- public boolean itemExists(String string)
- {
- return itemExists(new AMQShortString(string));
- }
-
- public String toString()
- {
- initMapIfNecessary();
-
- return _properties.toString();
- }
-
- private void checkPropertyName(AMQShortString propertyName)
- {
- if (propertyName == null)
- {
- throw new IllegalArgumentException("Property name must not be null");
- }
- else if (propertyName.length() == 0)
- {
- throw new IllegalArgumentException("Property name must not be the empty string");
- }
-
- if (_strictAMQP)
- {
- checkIdentiferFormat(propertyName);
- }
- }
-
- protected static void checkIdentiferFormat(AMQShortString propertyName)
- {
- // AMQP Spec: 4.2.5.5 Field Tables
- // Guidelines for implementers:
- // * Field names MUST start with a letter, '$' or '#' and may continue with
- // letters, '$' or '#', digits, or underlines, to a maximum length of 128
- // characters.
- // * The server SHOULD validate field names and upon receiving an invalid
- // field name, it SHOULD signal a connection exception with reply code
- // 503 (syntax error). Conformance test: amq_wlp_table_01.
- // * A peer MUST handle duplicate fields by using only the first instance.
-
- // AMQP length limit
- if (propertyName.length() > 128)
- {
- throw new IllegalArgumentException("AMQP limits property names to 128 characters");
- }
-
- // AMQ start character
- if (!(Character.isLetter(propertyName.charAt(0)) || (propertyName.charAt(0) == '$')
- || (propertyName.charAt(0) == '#') || (propertyName.charAt(0) == '_'))) // Not official AMQP added for JMS.
- {
- throw new IllegalArgumentException("Identifier '" + propertyName
- + "' does not start with a valid AMQP start character");
- }
- }
-
- // ************************* Byte Buffer Processing
-
- public void writeToBuffer(ByteBuffer buffer)
- {
- final boolean trace = _logger.isDebugEnabled();
-
- if (trace)
- {
- _logger.debug("FieldTable::writeToBuffer: Writing encoded length of " + getEncodedSize() + "...");
- if (_properties != null)
- {
- _logger.debug(_properties.toString());
- }
- }
-
- EncodingUtils.writeUnsignedInteger(buffer, getEncodedSize());
-
- putDataInBuffer(buffer);
- }
-
- public byte[] getDataAsBytes()
- {
- final int encodedSize = (int) getEncodedSize();
- final ByteBuffer buffer = ByteBuffer.allocate(encodedSize); // FIXME XXX: Is cast a problem?
-
- putDataInBuffer(buffer);
-
- final byte[] result = new byte[encodedSize];
- buffer.flip();
- buffer.get(result);
- buffer.release();
-
- return result;
- }
-
- public long getEncodedSize()
- {
- return _encodedSize;
- }
-
- private void recalculateEncodedSize()
- {
-
- int encodedSize = 0;
- if (_properties != null)
- {
- for (Map.Entry<AMQShortString, AMQTypedValue> e : _properties.entrySet())
- {
- encodedSize += EncodingUtils.encodedShortStringLength(e.getKey());
- encodedSize++; // the byte for the encoding Type
- encodedSize += e.getValue().getEncodingSize();
-
- }
- }
-
- _encodedSize = encodedSize;
- }
-
- public void addAll(FieldTable fieldTable)
- {
- initMapIfNecessary();
- _encodedForm = null;
- _properties.putAll(fieldTable._properties);
- recalculateEncodedSize();
- }
-
- public static Map<String, Object> convertToMap(final FieldTable fieldTable)
- {
- final Map<String, Object> map = new HashMap<String, Object>();
-
- if(fieldTable != null)
- {
- fieldTable.processOverElements(
- new FieldTableElementProcessor()
- {
-
- public boolean processElement(String propertyName, AMQTypedValue value)
- {
- Object val = value.getValue();
- if(val instanceof AMQShortString)
- {
- val = val.toString();
- }
- map.put(propertyName, val);
- return true;
- }
-
- public Object getResult()
- {
- return map;
- }
- });
- }
- return map;
- }
-
-
- public static interface FieldTableElementProcessor
- {
- public boolean processElement(String propertyName, AMQTypedValue value);
-
- public Object getResult();
- }
-
- public Object processOverElements(FieldTableElementProcessor processor)
- {
- initMapIfNecessary();
- if (_properties != null)
- {
- for (Map.Entry<AMQShortString, AMQTypedValue> e : _properties.entrySet())
- {
- boolean result = processor.processElement(e.getKey().toString(), e.getValue());
- if (!result)
- {
- break;
- }
- }
- }
-
- return processor.getResult();
-
- }
-
- public int size()
- {
- initMapIfNecessary();
-
- return _properties.size();
-
- }
-
- public boolean isEmpty()
- {
- return size() == 0;
- }
-
- public boolean containsKey(AMQShortString key)
- {
- initMapIfNecessary();
-
- return _properties.containsKey(key);
- }
-
- public boolean containsKey(String key)
- {
- return containsKey(new AMQShortString(key));
- }
-
- public Set<String> keys()
- {
- initMapIfNecessary();
- Set<String> keys = new LinkedHashSet<String>();
- for (AMQShortString key : _properties.keySet())
- {
- keys.add(key.toString());
- }
-
- return keys;
- }
-
- public Iterator<Map.Entry<AMQShortString, AMQTypedValue>> iterator()
- {
- if(_encodedForm != null)
- {
- return new FieldTableIterator(_encodedForm.duplicate().rewind(),(int)_encodedSize);
- }
- else
- {
- initMapIfNecessary();
- return _properties.entrySet().iterator();
- }
- }
-
- public Object get(String key)
- {
- return get(new AMQShortString(key));
- }
-
- public Object get(AMQShortString key)
- {
- return getObject(key);
- }
-
- public Object put(AMQShortString key, Object value)
- {
- return setObject(key, value);
- }
-
- public Object remove(String key)
- {
-
- return remove(new AMQShortString(key));
-
- }
-
- public Object remove(AMQShortString key)
- {
- AMQTypedValue val = removeKey(key);
-
- return (val == null) ? null : val.getValue();
-
- }
-
- public AMQTypedValue removeKey(AMQShortString key)
- {
- initMapIfNecessary();
- _encodedForm = null;
- AMQTypedValue value = _properties.remove(key);
- if (value == null)
- {
- return null;
- }
- else
- {
- _encodedSize -= EncodingUtils.encodedShortStringLength(key);
- _encodedSize--;
- _encodedSize -= value.getEncodingSize();
-
- return value;
- }
-
- }
-
- public void clear()
- {
- initMapIfNecessary();
- _encodedForm = null;
- _properties.clear();
- _encodedSize = 0;
- }
-
- public Set<AMQShortString> keySet()
- {
- initMapIfNecessary();
-
- return _properties.keySet();
- }
-
- private void putDataInBuffer(ByteBuffer buffer)
- {
-
- if (_encodedForm != null)
- {
- if(buffer.isDirect() || buffer.isReadOnly())
- {
- ByteBuffer encodedForm = _encodedForm.duplicate();
-
- if (encodedForm.position() != 0)
- {
- encodedForm.flip();
- }
-
- buffer.put(encodedForm);
- }
- else
- {
- buffer.put(_encodedForm.array(),_encodedForm.arrayOffset(),(int)_encodedSize);
- }
- }
- else if (_properties != null)
- {
- final Iterator<Map.Entry<AMQShortString, AMQTypedValue>> it = _properties.entrySet().iterator();
-
- // If there are values then write out the encoded Size... could check _encodedSize != 0
- // write out the total length, which we have kept up to date as data is added
-
- while (it.hasNext())
- {
- final Map.Entry<AMQShortString, AMQTypedValue> me = it.next();
- try
- {
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Writing Property:" + me.getKey() + " Type:" + me.getValue().getType() + " Value:"
- + me.getValue().getValue());
- _logger.debug("Buffer Position:" + buffer.position() + " Remaining:" + buffer.remaining());
- }
-
- // Write the actual parameter name
- EncodingUtils.writeShortStringBytes(buffer, me.getKey());
- me.getValue().writeToBuffer(buffer);
- }
- catch (Exception e)
- {
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Exception thrown:" + e);
- _logger.debug("Writing Property:" + me.getKey() + " Type:" + me.getValue().getType() + " Value:"
- + me.getValue().getValue());
- _logger.debug("Buffer Position:" + buffer.position() + " Remaining:" + buffer.remaining());
- }
-
- throw new RuntimeException(e);
- }
- }
- }
- }
-
- private void setFromBuffer(ByteBuffer buffer, long length) throws AMQFrameDecodingException
- {
-
- final boolean trace = _logger.isDebugEnabled();
- if (length > 0)
- {
-
- final int expectedRemaining = buffer.remaining() - (int) length;
-
- _properties = new LinkedHashMap<AMQShortString, AMQTypedValue>(INITIAL_HASHMAP_CAPACITY);
-
- do
- {
-
- final AMQShortString key = EncodingUtils.readAMQShortString(buffer);
-
- _logger.debug("FieldTable::PropFieldTable(buffer," + length + "): Read key '" + key);
-
- AMQTypedValue value = AMQTypedValue.readFromBuffer(buffer);
-
- if (trace)
- {
- _logger.debug("FieldTable::PropFieldTable(buffer," + length + "): Read type '" + value.getType()
- + "', key '" + key + "', value '" + value.getValue() + "'");
- }
-
- _properties.put(key, value);
-
- }
- while (buffer.remaining() > expectedRemaining);
-
- }
-
- _encodedSize = length;
-
- if (trace)
- {
- _logger.debug("FieldTable::FieldTable(buffer," + length + "): Done.");
- }
- }
-
- private static final class FieldTableEntry implements Map.Entry<AMQShortString, AMQTypedValue>
- {
- private final AMQTypedValue _value;
- private final AMQShortString _key;
-
- public FieldTableEntry(final AMQShortString key, final AMQTypedValue value)
- {
- _key = key;
- _value = value;
- }
-
- public AMQShortString getKey()
- {
- return _key;
- }
-
- public AMQTypedValue getValue()
- {
- return _value;
- }
-
- public AMQTypedValue setValue(final AMQTypedValue value)
- {
- throw new UnsupportedOperationException();
- }
-
- public boolean equals(Object o)
- {
- if(o instanceof FieldTableEntry)
- {
- FieldTableEntry other = (FieldTableEntry) o;
- return (_key == null ? other._key == null : _key.equals(other._key))
- && (_value == null ? other._value == null : _value.equals(other._value));
- }
- else
- {
- return false;
- }
- }
-
- public int hashCode()
- {
- return (getKey()==null ? 0 : getKey().hashCode())
- ^ (getValue()==null ? 0 : getValue().hashCode());
- }
-
- }
-
-
- private static final class FieldTableIterator implements Iterator<Map.Entry<AMQShortString, AMQTypedValue>>
- {
-
- private final ByteBuffer _buffer;
- private int _expectedRemaining;
-
- public FieldTableIterator(ByteBuffer buffer, int length)
- {
- _buffer = buffer;
- _expectedRemaining = buffer.remaining() - length;
- }
-
- public boolean hasNext()
- {
- return (_buffer.remaining() > _expectedRemaining);
- }
-
- public Map.Entry<AMQShortString, AMQTypedValue> next()
- {
- if(hasNext())
- {
- final AMQShortString key = EncodingUtils.readAMQShortString(_buffer);
- AMQTypedValue value = AMQTypedValue.readFromBuffer(_buffer);
- return new FieldTableEntry(key, value);
- }
- else
- {
- return null;
- }
- }
-
- public void remove()
- {
- throw new UnsupportedOperationException();
- }
- }
-
-
-
-
- public int hashCode()
- {
- initMapIfNecessary();
-
- return _properties.hashCode();
- }
-
- public boolean equals(Object o)
- {
- if (o == this)
- {
- return true;
- }
-
- if (o == null)
- {
- return false;
- }
-
- if (!(o instanceof FieldTable))
- {
- return false;
- }
-
- initMapIfNecessary();
-
- FieldTable f = (FieldTable) o;
- f.initMapIfNecessary();
-
- return _properties.equals(f._properties);
- }
-
- public static FieldTable convertToFieldTable(Map<String, Object> map)
- {
- if (map != null)
- {
- FieldTable table = new FieldTable();
- for(Map.Entry<String,Object> entry : map.entrySet())
- {
- table.put(new AMQShortString(entry.getKey()), entry.getValue());
- }
-
- return table;
- }
- else
- {
- return null;
- }
- }
-
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/FieldTableFactory.java b/java/common/src/main/java/org/apache/qpid/framing/FieldTableFactory.java
deleted file mode 100644
index e9d75137ef..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/FieldTableFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-public class FieldTableFactory
-{
- public static FieldTable newFieldTable()
- {
- return new FieldTable();
- }
-
- public static FieldTable newFieldTable(ByteBuffer byteBuffer, long length) throws AMQFrameDecodingException
- {
- return new FieldTable(byteBuffer, length);
- }
-
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/HeartbeatBody.java b/java/common/src/main/java/org/apache/qpid/framing/HeartbeatBody.java
deleted file mode 100644
index 18ab05ffa1..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/HeartbeatBody.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-import org.apache.qpid.AMQException;
-
-public class HeartbeatBody implements AMQBody
-{
- public static final byte TYPE = 8;
- public static final AMQFrame FRAME = new HeartbeatBody().toFrame();
-
- public HeartbeatBody()
- {
-
- }
-
- public HeartbeatBody(ByteBuffer buffer, long size)
- {
- if(size > 0)
- {
- //allow other implementations to have a payload, but ignore it:
- buffer.skip((int) size);
- }
- }
-
- public byte getFrameType()
- {
- return TYPE;
- }
-
- public int getSize()
- {
- return 0;//heartbeats we generate have no payload
- }
-
- public void writePayload(ByteBuffer buffer)
- {
- }
-
- public void handle(final int channelId, final AMQVersionAwareProtocolSession session)
- throws AMQException
- {
- session.heartbeatBodyReceived(channelId, this);
- }
-
- protected void populateFromBuffer(ByteBuffer buffer, long size) throws AMQFrameDecodingException
- {
- if(size > 0)
- {
- //allow other implementations to have a payload, but ignore it:
- buffer.skip((int) size);
- }
- }
-
- public AMQFrame toFrame()
- {
- return new AMQFrame(0, this);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/HeartbeatBodyFactory.java b/java/common/src/main/java/org/apache/qpid/framing/HeartbeatBodyFactory.java
deleted file mode 100644
index c7ada708dc..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/HeartbeatBodyFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-public class HeartbeatBodyFactory implements BodyFactory
-{
- public AMQBody createBody(ByteBuffer in, long bodySize) throws AMQFrameDecodingException
- {
- return new HeartbeatBody();
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/ProtocolInitiation.java b/java/common/src/main/java/org/apache/qpid/framing/ProtocolInitiation.java
deleted file mode 100644
index fb3dd89717..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/ProtocolInitiation.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.qpid.AMQException;
-
-import java.io.UnsupportedEncodingException;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-
-public class ProtocolInitiation extends AMQDataBlock implements EncodableAMQDataBlock
-{
-
- // TODO: generate these constants automatically from the xml protocol spec file
- private static final byte[] AMQP_HEADER = new byte[]{(byte)'A',(byte)'M',(byte)'Q',(byte)'P'};
-
- private static final byte CURRENT_PROTOCOL_CLASS = 1;
- private static final byte TCP_PROTOCOL_INSTANCE = 1;
-
- public final byte[] _protocolHeader;
- public final byte _protocolClass;
- public final byte _protocolInstance;
- public final byte _protocolMajor;
- public final byte _protocolMinor;
-
-
-// public ProtocolInitiation() {}
-
- public ProtocolInitiation(byte[] protocolHeader, byte protocolClass, byte protocolInstance, byte protocolMajor, byte protocolMinor)
- {
- _protocolHeader = protocolHeader;
- _protocolClass = protocolClass;
- _protocolInstance = protocolInstance;
- _protocolMajor = protocolMajor;
- _protocolMinor = protocolMinor;
- }
-
- public ProtocolInitiation(ProtocolVersion pv)
- {
- this(AMQP_HEADER,
- pv.equals(ProtocolVersion.v0_91) ? 0 : CURRENT_PROTOCOL_CLASS,
- pv.equals(ProtocolVersion.v0_91) ? 0 : TCP_PROTOCOL_INSTANCE,
- pv.equals(ProtocolVersion.v0_91) ? 9 : pv.getMajorVersion(),
- pv.equals(ProtocolVersion.v0_91) ? 1 : pv.getMinorVersion());
- }
-
- public ProtocolInitiation(ByteBuffer in)
- {
- _protocolHeader = new byte[4];
- in.get(_protocolHeader);
-
- _protocolClass = in.get();
- _protocolInstance = in.get();
- _protocolMajor = in.get();
- _protocolMinor = in.get();
- }
-
- public void writePayload(org.apache.mina.common.ByteBuffer buffer)
- {
- writePayload(buffer.buf());
- }
-
- public long getSize()
- {
- return 4 + 1 + 1 + 1 + 1;
- }
-
- public void writePayload(ByteBuffer buffer)
- {
-
- buffer.put(_protocolHeader);
- buffer.put(_protocolClass);
- buffer.put(_protocolInstance);
- buffer.put(_protocolMajor);
- buffer.put(_protocolMinor);
- }
-
- public boolean equals(Object o)
- {
- if (!(o instanceof ProtocolInitiation))
- {
- return false;
- }
-
- ProtocolInitiation pi = (ProtocolInitiation) o;
- if (pi._protocolHeader == null)
- {
- return false;
- }
-
- if (_protocolHeader.length != pi._protocolHeader.length)
- {
- return false;
- }
-
- for (int i = 0; i < _protocolHeader.length; i++)
- {
- if (_protocolHeader[i] != pi._protocolHeader[i])
- {
- return false;
- }
- }
-
- return (_protocolClass == pi._protocolClass &&
- _protocolInstance == pi._protocolInstance &&
- _protocolMajor == pi._protocolMajor &&
- _protocolMinor == pi._protocolMinor);
- }
-
- @Override
- public int hashCode()
- {
- int result = _protocolHeader != null ? Arrays.hashCode(_protocolHeader) : 0;
- result = 31 * result + (int) _protocolClass;
- result = 31 * result + (int) _protocolInstance;
- result = 31 * result + (int) _protocolMajor;
- result = 31 * result + (int) _protocolMinor;
- return result;
- }
-
- public static class Decoder //implements MessageDecoder
- {
- /**
- *
- * @param in input buffer
- * @return true if we have enough data to decode the PI frame fully, false if more
- * data is required
- */
- public boolean decodable(ByteBuffer in)
- {
- return (in.remaining() >= 8);
- }
-
- }
-
- public ProtocolVersion checkVersion() throws AMQException
- {
-
- if(_protocolHeader.length != 4)
- {
- throw new AMQProtocolHeaderException("Protocol header should have exactly four octets", null);
- }
- for(int i = 0; i < 4; i++)
- {
- if(_protocolHeader[i] != AMQP_HEADER[i])
- {
- try
- {
- throw new AMQProtocolHeaderException("Protocol header is not correct: Got " + new String(_protocolHeader,"ISO-8859-1") + " should be: " + new String(AMQP_HEADER, "ISO-8859-1"), null);
- }
- catch (UnsupportedEncodingException e)
- {
-
- }
- }
- }
-
- ProtocolVersion pv;
-
- // Hack for 0-9-1 which changed how the header was defined
- if(_protocolInstance == 0 && _protocolMajor == 9 && _protocolMinor == 1)
- {
- pv = ProtocolVersion.v0_91;
- if (_protocolClass != 0)
- {
- throw new AMQProtocolClassException("Protocol class " + 0 + " was expected; received " +
- _protocolClass, null);
- }
- }
- else if (_protocolClass != CURRENT_PROTOCOL_CLASS)
- {
- throw new AMQProtocolClassException("Protocol class " + CURRENT_PROTOCOL_CLASS + " was expected; received " +
- _protocolClass, null);
- }
- else if (_protocolInstance != TCP_PROTOCOL_INSTANCE)
- {
- throw new AMQProtocolInstanceException("Protocol instance " + TCP_PROTOCOL_INSTANCE + " was expected; received " +
- _protocolInstance, null);
- }
- else
- {
- pv = new ProtocolVersion(_protocolMajor, _protocolMinor);
- }
-
-
- if (!pv.isSupported())
- {
- // TODO: add list of available versions in list to msg...
- throw new AMQProtocolVersionException("Protocol version " +
- _protocolMajor + "." + _protocolMinor + " not suppoerted by this version of the Qpid broker.", null);
- }
- return pv;
- }
-
- public String toString()
- {
- StringBuffer buffer = new StringBuffer(new String(_protocolHeader));
- buffer.append(Integer.toHexString(_protocolClass));
- buffer.append(Integer.toHexString(_protocolInstance));
- buffer.append(Integer.toHexString(_protocolMajor));
- buffer.append(Integer.toHexString(_protocolMinor));
- return buffer.toString();
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/SmallCompositeAMQDataBlock.java b/java/common/src/main/java/org/apache/qpid/framing/SmallCompositeAMQDataBlock.java
deleted file mode 100644
index bd763599b0..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/SmallCompositeAMQDataBlock.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-public class SmallCompositeAMQDataBlock extends AMQDataBlock implements EncodableAMQDataBlock
-{
- private AMQDataBlock _firstFrame;
-
- private AMQDataBlock _block;
-
- public SmallCompositeAMQDataBlock(AMQDataBlock block)
- {
- _block = block;
- }
-
- /**
- * The encoded block will be logically first before the AMQDataBlocks which are encoded
- * into the buffer afterwards.
- * @param encodedBlock already-encoded data
- * @param block a block to be encoded.
- */
- public SmallCompositeAMQDataBlock(AMQDataBlock encodedBlock, AMQDataBlock block)
- {
- this(block);
- _firstFrame = encodedBlock;
- }
-
- public AMQDataBlock getBlock()
- {
- return _block;
- }
-
- public AMQDataBlock getFirstFrame()
- {
- return _firstFrame;
- }
-
- public long getSize()
- {
- long frameSize = _block.getSize();
-
- if (_firstFrame != null)
- {
-
- frameSize += _firstFrame.getSize();
- }
- return frameSize;
- }
-
- public void writePayload(ByteBuffer buffer)
- {
- if (_firstFrame != null)
- {
- _firstFrame.writePayload(buffer);
- }
- _block.writePayload(buffer);
-
- }
-
- public String toString()
- {
- if (_block == null)
- {
- return "No blocks contained in composite frame";
- }
- else
- {
- StringBuilder buf = new StringBuilder(this.getClass().getName());
- buf.append("{encodedBlock=").append(_firstFrame);
-
- buf.append(" _block=[").append(_block.toString()).append("]");
-
- buf.append("}");
- return buf.toString();
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/VersionSpecificRegistry.java b/java/common/src/main/java/org/apache/qpid/framing/VersionSpecificRegistry.java
deleted file mode 100644
index 76c154581d..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/VersionSpecificRegistry.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class VersionSpecificRegistry
-{
- private static final Logger _log = LoggerFactory.getLogger(VersionSpecificRegistry.class);
-
- private final byte _protocolMajorVersion;
- private final byte _protocolMinorVersion;
-
- private static final int DEFAULT_MAX_CLASS_ID = 200;
- private static final int DEFAULT_MAX_METHOD_ID = 50;
-
- private AMQMethodBodyInstanceFactory[][] _registry = new AMQMethodBodyInstanceFactory[DEFAULT_MAX_CLASS_ID][];
-
- private ProtocolVersionMethodConverter _protocolVersionConverter;
-
- public VersionSpecificRegistry(byte major, byte minor)
- {
- _protocolMajorVersion = major;
- _protocolMinorVersion = minor;
-
- _protocolVersionConverter = loadProtocolVersionConverters(major, minor);
- }
-
- private static ProtocolVersionMethodConverter loadProtocolVersionConverters(byte protocolMajorVersion,
- byte protocolMinorVersion)
- {
- try
- {
- Class<ProtocolVersionMethodConverter> versionMethodConverterClass =
- (Class<ProtocolVersionMethodConverter>) Class.forName("org.apache.qpid.framing.MethodConverter_"
- + protocolMajorVersion + "_" + protocolMinorVersion);
-
- return versionMethodConverterClass.newInstance();
-
- }
- catch (ClassNotFoundException e)
- {
- _log.warn("Could not find protocol conversion classes for " + protocolMajorVersion + "-" + protocolMinorVersion);
- if (protocolMinorVersion != 0)
- {
- protocolMinorVersion--;
-
- return loadProtocolVersionConverters(protocolMajorVersion, protocolMinorVersion);
- }
- else if (protocolMajorVersion != 0)
- {
- protocolMajorVersion--;
-
- return loadProtocolVersionConverters(protocolMajorVersion, protocolMinorVersion);
- }
- else
- {
- return null;
- }
-
- }
- catch (IllegalAccessException e)
- {
- throw new IllegalStateException("Unable to load protocol version converter: ", e);
- }
- catch (InstantiationException e)
- {
- throw new IllegalStateException("Unable to load protocol version converter: ", e);
- }
- }
-
- public byte getProtocolMajorVersion()
- {
- return _protocolMajorVersion;
- }
-
- public byte getProtocolMinorVersion()
- {
- return _protocolMinorVersion;
- }
-
- public AMQMethodBodyInstanceFactory getMethodBody(final short classID, final short methodID)
- {
- try
- {
- return _registry[classID][methodID];
- }
- catch (IndexOutOfBoundsException e)
- {
- return null;
- }
- catch (NullPointerException e)
- {
- return null;
- }
- }
-
- public void registerMethod(final short classID, final short methodID, final AMQMethodBodyInstanceFactory instanceFactory)
- {
- if (_registry.length <= classID)
- {
- AMQMethodBodyInstanceFactory[][] oldRegistry = _registry;
- _registry = new AMQMethodBodyInstanceFactory[classID + 1][];
- System.arraycopy(oldRegistry, 0, _registry, 0, oldRegistry.length);
- }
-
- if (_registry[classID] == null)
- {
- _registry[classID] =
- new AMQMethodBodyInstanceFactory[(methodID > DEFAULT_MAX_METHOD_ID) ? (methodID + 1)
- : (DEFAULT_MAX_METHOD_ID + 1)];
- }
- else if (_registry[classID].length <= methodID)
- {
- AMQMethodBodyInstanceFactory[] oldMethods = _registry[classID];
- _registry[classID] = new AMQMethodBodyInstanceFactory[methodID + 1];
- System.arraycopy(oldMethods, 0, _registry[classID], 0, oldMethods.length);
- }
-
- _registry[classID][methodID] = instanceFactory;
-
- }
-
- public AMQMethodBody get(short classID, short methodID, ByteBuffer in, long size) throws AMQFrameDecodingException
- {
- AMQMethodBodyInstanceFactory bodyFactory;
- try
- {
- bodyFactory = _registry[classID][methodID];
- }
- catch (NullPointerException e)
- {
- throw new AMQFrameDecodingException(null, "Class " + classID + " unknown in AMQP version "
- + _protocolMajorVersion + "-" + _protocolMinorVersion + " (while trying to decode class " + classID
- + " method " + methodID + ".", e);
- }
- catch (IndexOutOfBoundsException e)
- {
- if (classID >= _registry.length)
- {
- throw new AMQFrameDecodingException(null, "Class " + classID + " unknown in AMQP version "
- + _protocolMajorVersion + "-" + _protocolMinorVersion + " (while trying to decode class " + classID
- + " method " + methodID + ".", e);
-
- }
- else
- {
- throw new AMQFrameDecodingException(null, "Method " + methodID + " unknown in AMQP version "
- + _protocolMajorVersion + "-" + _protocolMinorVersion + " (while trying to decode class " + classID
- + " method " + methodID + ".", e);
-
- }
- }
-
- if (bodyFactory == null)
- {
- throw new AMQFrameDecodingException(null, "Method " + methodID + " unknown in AMQP version "
- + _protocolMajorVersion + "-" + _protocolMinorVersion + " (while trying to decode class " + classID
- + " method " + methodID + ".", null);
- }
-
- return bodyFactory.newInstance( in, size);
-
- }
-
- public ProtocolVersionMethodConverter getProtocolVersionMethodConverter()
- {
- return _protocolVersionConverter;
- }
-
- public void configure()
- {
- _protocolVersionConverter.configure();
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/abstraction/AbstractMethodConverter.java b/java/common/src/main/java/org/apache/qpid/framing/abstraction/AbstractMethodConverter.java
deleted file mode 100644
index 1d7c05e9cc..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/abstraction/AbstractMethodConverter.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing.abstraction;
-
-public abstract class AbstractMethodConverter implements ProtocolVersionMethodConverter
-{
- private final byte _protocolMajorVersion;
-
-
- private final byte _protocolMinorVersion;
-
- public AbstractMethodConverter(byte major, byte minor)
- {
- _protocolMajorVersion = major;
- _protocolMinorVersion = minor;
- }
-
-
- public final byte getProtocolMajorVersion()
- {
- return _protocolMajorVersion;
- }
-
- public final byte getProtocolMinorVersion()
- {
- return _protocolMinorVersion;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/abstraction/ContentChunk.java b/java/common/src/main/java/org/apache/qpid/framing/abstraction/ContentChunk.java
deleted file mode 100644
index 0695349f76..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/abstraction/ContentChunk.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing.abstraction;
-
-import org.apache.mina.common.ByteBuffer;
-
-public interface ContentChunk
-{
- int getSize();
- ByteBuffer getData();
-
- void reduceToFit();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfo.java b/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfo.java
deleted file mode 100644
index a96bdcc171..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfo.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing.abstraction;
-
-import org.apache.qpid.framing.AMQShortString;
-
-public interface MessagePublishInfo
-{
-
- public AMQShortString getExchange();
-
- public void setExchange(AMQShortString exchange);
-
- public boolean isImmediate();
-
- public boolean isMandatory();
-
- public AMQShortString getRoutingKey();
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfoConverter.java b/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfoConverter.java
deleted file mode 100644
index 01d1a8a17b..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfoConverter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing.abstraction;
-
-import org.apache.qpid.framing.AMQMethodBody;
-
-
-public interface MessagePublishInfoConverter
-{
- public MessagePublishInfo convertToInfo(AMQMethodBody body);
- public AMQMethodBody convertToBody(MessagePublishInfo info);
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfoImpl.java b/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfoImpl.java
deleted file mode 100644
index e3d5da73da..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/abstraction/MessagePublishInfoImpl.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing.abstraction;
-
-import org.apache.qpid.framing.abstraction.MessagePublishInfo;
-import org.apache.qpid.framing.AMQShortString;
-
-public class MessagePublishInfoImpl implements MessagePublishInfo
-{
- private AMQShortString _exchange;
- private boolean _immediate;
- private boolean _mandatory;
- private AMQShortString _routingKey;
-
- public MessagePublishInfoImpl()
- {
- }
-
- public MessagePublishInfoImpl(AMQShortString exchange, boolean immediate, boolean mandatory,
- AMQShortString routingKey)
- {
- _exchange = exchange;
- _immediate = immediate;
- _mandatory = mandatory;
- _routingKey = routingKey;
- }
-
- public AMQShortString getExchange()
- {
- return _exchange;
- }
-
- public void setExchange(AMQShortString exchange)
- {
- _exchange = exchange;
- }
-
- public boolean isImmediate()
- {
- return _immediate;
- }
-
- public void setImmediate(boolean immedate)
- {
- _immediate = immedate;
- }
-
- public boolean isMandatory()
- {
- return _mandatory;
- }
-
- public void setMandatory(boolean mandatory)
- {
- _mandatory = mandatory;
- }
-
- public AMQShortString getRoutingKey()
- {
- return _routingKey;
- }
-
- public void setRoutingKey(AMQShortString routingKey)
- {
- _routingKey = routingKey;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/abstraction/ProtocolVersionMethodConverter.java b/java/common/src/main/java/org/apache/qpid/framing/abstraction/ProtocolVersionMethodConverter.java
deleted file mode 100644
index 7544d9b7e7..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/abstraction/ProtocolVersionMethodConverter.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing.abstraction;
-
-import org.apache.qpid.framing.AMQBody;
-
-import java.nio.ByteBuffer;
-
-public interface ProtocolVersionMethodConverter extends MessagePublishInfoConverter
-{
- AMQBody convertToBody(ContentChunk contentBody);
- ContentChunk convertToContentChunk(AMQBody body);
-
- void configure();
-
- AMQBody convertToBody(ByteBuffer buf);
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/AMQMethodBody_0_9.java b/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/AMQMethodBody_0_9.java
deleted file mode 100644
index 8d51343507..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/AMQMethodBody_0_9.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing.amqp_0_9;
-
-public abstract class AMQMethodBody_0_9 extends org.apache.qpid.framing.AMQMethodBodyImpl
-{
-
- public byte getMajor()
- {
- return 0;
- }
-
- public byte getMinor()
- {
- return 9;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java b/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java
deleted file mode 100644
index 1c4a29b106..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/amqp_0_9/MethodConverter_0_9.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing.amqp_0_9;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.apache.qpid.framing.abstraction.AbstractMethodConverter;
-import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter;
-import org.apache.qpid.framing.abstraction.ContentChunk;
-import org.apache.qpid.framing.abstraction.MessagePublishInfo;
-import org.apache.qpid.framing.abstraction.MessagePublishInfoImpl;
-import org.apache.qpid.framing.*;
-import org.apache.qpid.framing.amqp_0_9.*;
-import org.apache.qpid.framing.amqp_0_9.BasicPublishBodyImpl;
-
-public class MethodConverter_0_9 extends AbstractMethodConverter implements ProtocolVersionMethodConverter
-{
- private int _basicPublishClassId;
- private int _basicPublishMethodId;
-
- public MethodConverter_0_9()
- {
- super((byte)0,(byte)9);
-
-
- }
-
- public AMQBody convertToBody(ContentChunk contentChunk)
- {
- if(contentChunk instanceof ContentChunk_0_9)
- {
- return ((ContentChunk_0_9)contentChunk).toBody();
- }
- else
- {
- return new ContentBody(contentChunk.getData());
- }
- }
-
- public ContentChunk convertToContentChunk(AMQBody body)
- {
- final ContentBody contentBodyChunk = (ContentBody) body;
-
- return new ContentChunk_0_9(contentBodyChunk);
-
- }
-
- public void configure()
- {
-
- _basicPublishClassId = org.apache.qpid.framing.amqp_0_9.BasicPublishBodyImpl.CLASS_ID;
- _basicPublishMethodId = BasicPublishBodyImpl.METHOD_ID;
-
- }
-
- public AMQBody convertToBody(java.nio.ByteBuffer buf)
- {
- return new ContentBody(ByteBuffer.wrap(buf));
- }
-
- public MessagePublishInfo convertToInfo(AMQMethodBody methodBody)
- {
- final BasicPublishBody publishBody = ((BasicPublishBody) methodBody);
-
- final AMQShortString exchange = publishBody.getExchange();
- final AMQShortString routingKey = publishBody.getRoutingKey();
-
- return new MessagePublishInfoImpl(exchange,
- publishBody.getImmediate(),
- publishBody.getMandatory(),
- routingKey);
-
- }
-
- public AMQMethodBody convertToBody(MessagePublishInfo info)
- {
-
- return new BasicPublishBodyImpl(0,
- info.getExchange(),
- info.getRoutingKey(),
- info.isMandatory(),
- info.isImmediate()) ;
-
- }
-
- private static class ContentChunk_0_9 implements ContentChunk
- {
- private final ContentBody _contentBodyChunk;
-
- public ContentChunk_0_9(final ContentBody contentBodyChunk)
- {
- _contentBodyChunk = contentBodyChunk;
- }
-
- public int getSize()
- {
- return _contentBodyChunk.getSize();
- }
-
- public ByteBuffer getData()
- {
- return _contentBodyChunk.payload;
- }
-
- public void reduceToFit()
- {
- _contentBodyChunk.reduceBufferToFit();
- }
-
- public AMQBody toBody()
- {
- return _contentBodyChunk;
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/AMQMethodBody_0_91.java b/java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/AMQMethodBody_0_91.java
deleted file mode 100644
index 60b8a7e1a6..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/AMQMethodBody_0_91.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing.amqp_0_91;
-
-public abstract class AMQMethodBody_0_91 extends org.apache.qpid.framing.AMQMethodBodyImpl
-{
-
- public byte getMajor()
- {
- return 0;
- }
-
- public byte getMinor()
- {
- return 91;
- }
-
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/MethodConverter_0_91.java b/java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/MethodConverter_0_91.java
deleted file mode 100644
index 6e330574bc..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/amqp_0_91/MethodConverter_0_91.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing.amqp_0_91;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.apache.qpid.framing.abstraction.AbstractMethodConverter;
-import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter;
-import org.apache.qpid.framing.abstraction.ContentChunk;
-import org.apache.qpid.framing.abstraction.MessagePublishInfo;
-import org.apache.qpid.framing.abstraction.MessagePublishInfoImpl;
-import org.apache.qpid.framing.*;
-
-public class MethodConverter_0_91 extends AbstractMethodConverter implements ProtocolVersionMethodConverter
-{
- private int _basicPublishClassId;
- private int _basicPublishMethodId;
-
- public MethodConverter_0_91()
- {
- super((byte)0,(byte)9);
-
-
- }
-
- public AMQBody convertToBody(ContentChunk contentChunk)
- {
- if(contentChunk instanceof ContentChunk_0_9)
- {
- return ((ContentChunk_0_9)contentChunk).toBody();
- }
- else
- {
- return new ContentBody(contentChunk.getData());
- }
- }
-
- public ContentChunk convertToContentChunk(AMQBody body)
- {
- final ContentBody contentBodyChunk = (ContentBody) body;
-
- return new ContentChunk_0_9(contentBodyChunk);
-
- }
-
- public void configure()
- {
-
- _basicPublishClassId = BasicPublishBodyImpl.CLASS_ID;
- _basicPublishMethodId = BasicPublishBodyImpl.METHOD_ID;
-
- }
-
- public AMQBody convertToBody(java.nio.ByteBuffer buf)
- {
- return new ContentBody(ByteBuffer.wrap(buf));
- }
-
- public MessagePublishInfo convertToInfo(AMQMethodBody methodBody)
- {
- final BasicPublishBody publishBody = ((BasicPublishBody) methodBody);
-
- final AMQShortString exchange = publishBody.getExchange();
- final AMQShortString routingKey = publishBody.getRoutingKey();
-
- return new MessagePublishInfoImpl(exchange,
- publishBody.getImmediate(),
- publishBody.getMandatory(),
- routingKey);
-
- }
-
- public AMQMethodBody convertToBody(MessagePublishInfo info)
- {
-
- return new BasicPublishBodyImpl(0,
- info.getExchange(),
- info.getRoutingKey(),
- info.isMandatory(),
- info.isImmediate()) ;
-
- }
-
- private static class ContentChunk_0_9 implements ContentChunk
- {
- private final ContentBody _contentBodyChunk;
-
- public ContentChunk_0_9(final ContentBody contentBodyChunk)
- {
- _contentBodyChunk = contentBodyChunk;
- }
-
- public int getSize()
- {
- return _contentBodyChunk.getSize();
- }
-
- public ByteBuffer getData()
- {
- return _contentBodyChunk.payload;
- }
-
- public void reduceToFit()
- {
- _contentBodyChunk.reduceBufferToFit();
- }
-
- public AMQBody toBody()
- {
- return _contentBodyChunk;
- }
- }
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/AMQMethodBody_8_0.java b/java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/AMQMethodBody_8_0.java
deleted file mode 100644
index 35645854c0..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/AMQMethodBody_8_0.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing.amqp_8_0;
-
-public abstract class AMQMethodBody_8_0 extends org.apache.qpid.framing.AMQMethodBodyImpl
-{
-
- public byte getMajor()
- {
- return 8;
- }
-
- public byte getMinor()
- {
- return 0;
- }
-
-
-
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/MethodConverter_8_0.java b/java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/MethodConverter_8_0.java
deleted file mode 100644
index c87820b9b2..0000000000
--- a/java/common/src/main/java/org/apache/qpid/framing/amqp_8_0/MethodConverter_8_0.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing.amqp_8_0;
-
-import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter;
-import org.apache.qpid.framing.abstraction.ContentChunk;
-import org.apache.qpid.framing.abstraction.MessagePublishInfo;
-import org.apache.qpid.framing.abstraction.AbstractMethodConverter;
-import org.apache.qpid.framing.abstraction.MessagePublishInfoImpl;
-import org.apache.qpid.framing.amqp_8_0.BasicPublishBodyImpl;
-import org.apache.qpid.framing.*;
-
-import org.apache.mina.common.ByteBuffer;
-
-public class MethodConverter_8_0 extends AbstractMethodConverter implements ProtocolVersionMethodConverter
-{
- private int _basicPublishClassId;
- private int _basicPublishMethodId;
-
- public MethodConverter_8_0()
- {
- super((byte)8,(byte)0);
-
-
- }
-
- public AMQBody convertToBody(ContentChunk contentChunk)
- {
- return new ContentBody(contentChunk.getData());
- }
-
- public ContentChunk convertToContentChunk(AMQBody body)
- {
- final ContentBody contentBodyChunk = (ContentBody) body;
-
- return new ContentChunk()
- {
-
- public int getSize()
- {
- return contentBodyChunk.getSize();
- }
-
- public ByteBuffer getData()
- {
- return contentBodyChunk.payload;
- }
-
- public void reduceToFit()
- {
- contentBodyChunk.reduceBufferToFit();
- }
- };
-
- }
-
- public void configure()
- {
-
- _basicPublishClassId = BasicPublishBodyImpl.CLASS_ID;
- _basicPublishMethodId = BasicPublishBodyImpl.METHOD_ID;
-
- }
-
- public AMQBody convertToBody(java.nio.ByteBuffer buf)
- {
- return new ContentBody(ByteBuffer.wrap(buf));
- }
-
- public MessagePublishInfo convertToInfo(AMQMethodBody methodBody)
- {
- final BasicPublishBody publishBody = ((BasicPublishBody) methodBody);
-
- final AMQShortString exchange = publishBody.getExchange();
- final AMQShortString routingKey = publishBody.getRoutingKey();
-
- return new MessagePublishInfoImpl(exchange == null ? null : exchange.intern(),
- publishBody.getImmediate(),
- publishBody.getMandatory(),
- routingKey == null ? null : routingKey.intern());
-
- }
-
- public AMQMethodBody convertToBody(MessagePublishInfo info)
- {
-
- return new BasicPublishBodyImpl(0,
- info.getExchange(),
- info.getRoutingKey(),
- info.isMandatory(),
- info.isImmediate()) ;
-
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/messaging/Address.java b/java/common/src/main/java/org/apache/qpid/messaging/Address.java
deleted file mode 100644
index 2c7fe7b8ed..0000000000
--- a/java/common/src/main/java/org/apache/qpid/messaging/Address.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.messaging;
-
-import java.util.Map;
-
-import org.apache.qpid.messaging.util.AddressParser;
-
-import static org.apache.qpid.messaging.util.PyPrint.pprint;
-
-
-/**
- * Address
- *
- */
-
-public class Address
-{
-
- public static Address parse(String address)
- {
- return new AddressParser(address).parse();
- }
-
- private String name;
- private String subject;
- private Map options;
-
- public Address(String name, String subject, Map options)
- {
- this.name = name;
- this.subject = subject;
- this.options = options;
- }
-
- public String getName()
- {
- return name;
- }
-
- public String getSubject()
- {
- return subject;
- }
-
- public Map getOptions()
- {
- return options;
- }
-
- public String toString()
- {
- return String.format("%s/%s; %s", pprint(name), pprint(subject),
- pprint(options));
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/messaging/util/AddressParser.java b/java/common/src/main/java/org/apache/qpid/messaging/util/AddressParser.java
deleted file mode 100644
index 7b31436ba0..0000000000
--- a/java/common/src/main/java/org/apache/qpid/messaging/util/AddressParser.java
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.messaging.util;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.qpid.messaging.Address;
-
-
-/**
- * AddressParser
- *
- */
-
-public class AddressParser extends Parser
-{
-
- private static Lexicon lxi = new Lexicon();
-
- private static Token.Type LBRACE = lxi.define("LBRACE", "\\{");
- private static Token.Type RBRACE = lxi.define("RBRACE", "\\}");
- private static Token.Type LBRACK = lxi.define("LBRACK", "\\[");
- private static Token.Type RBRACK = lxi.define("RBRACK", "\\]");
- private static Token.Type COLON = lxi.define("COLON", ":");
- private static Token.Type SEMI = lxi.define("SEMI", ";");
- private static Token.Type SLASH = lxi.define("SLASH", "/");
- private static Token.Type COMMA = lxi.define("COMMA", ",");
- private static Token.Type NUMBER = lxi.define("NUMBER", "[+-]?[0-9]*\\.?[0-9]+");
- private static Token.Type TRUE = lxi.define("TRUE", "True");
- private static Token.Type FALSE = lxi.define("FALSE", "False");
- private static Token.Type ID = lxi.define("ID", "[a-zA-Z_](?:[a-zA-Z0-9_-]*[a-zA-Z0-9_])?");
- private static Token.Type STRING = lxi.define("STRING", "\"(?:[^\\\"]|\\.)*\"|'(?:[^\\']|\\.)*'");
- private static Token.Type ESC = lxi.define("ESC", "\\\\[^ux]|\\\\x[0-9a-fA-F][0-9a-fA-F]|\\\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]");
- private static Token.Type SYM = lxi.define("SYM", "[.#*%@$^!+-]");
- private static Token.Type WSPACE = lxi.define("WSPACE", "[\\s]+");
- private static Token.Type EOF = lxi.eof("EOF");
-
- private static Lexer LEXER = lxi.compile();
-
- public static List<Token> lex(String input)
- {
- return LEXER.lex(input);
- }
-
- static List<Token> wlex(String input)
- {
- List<Token> tokens = new ArrayList<Token>();
- for (Token t : lex(input))
- {
- if (t.getType() != WSPACE)
- {
- tokens.add(t);
- }
- }
- return tokens;
- }
-
- static String unquote(String st, Token tok)
- {
- StringBuilder result = new StringBuilder();
- for (int i = 1; i < st.length() - 1; i++)
- {
- char ch = st.charAt(i);
- if (ch == '\\')
- {
- char code = st.charAt(i+1);
- switch (code)
- {
- case '\n':
- break;
- case '\\':
- result.append('\\');
- break;
- case '\'':
- result.append('\'');
- break;
- case '"':
- result.append('"');
- break;
- case 'a':
- result.append((char) 0x07);
- break;
- case 'b':
- result.append((char) 0x08);
- break;
- case 'f':
- result.append('\f');
- break;
- case 'n':
- result.append('\n');
- break;
- case 'r':
- result.append('\r');
- break;
- case 't':
- result.append('\t');
- break;
- case 'u':
- result.append(decode(st.substring(i+2, i+6)));
- i += 4;
- break;
- case 'v':
- result.append((char) 0x0b);
- break;
- case 'o':
- result.append(decode(st.substring(i+2, i+4), 8));
- i += 2;
- break;
- case 'x':
- result.append(decode(st.substring(i+2, i+4)));
- i += 2;
- break;
- default:
- throw new ParseError(tok);
- }
- i += 1;
- }
- else
- {
- result.append(ch);
- }
- }
-
- return result.toString();
- }
-
- static char[] decode(String hex)
- {
- return decode(hex, 16);
- }
-
- static char[] decode(String code, int radix)
- {
- return Character.toChars(Integer.parseInt(code, radix));
- }
-
- static String tok2str(Token tok)
- {
- Token.Type type = tok.getType();
- String value = tok.getValue();
-
- if (type == STRING)
- {
- return unquote(value, tok);
- }
- else if (type == ESC)
- {
- if (value.charAt(1) == 'x' || value.charAt(1) == 'u')
- {
- return new String(decode(value.substring(2)));
- }
- else
- {
- return value.substring(1);
- }
- }
- else
- {
- return value;
- }
- }
-
- static Object tok2obj(Token tok)
- {
- Token.Type type = tok.getType();
- String value = tok.getValue();
- if (type == STRING)
- {
- return unquote(value, tok);
- }
- else if (type == NUMBER)
- {
- if (value.indexOf('.') >= 0)
- {
- return Double.valueOf(value);
- }
- else
- {
- return Integer.decode(value);
- }
- }
- else if (type == TRUE)
- {
- return true;
- }
- else if (type == FALSE)
- {
- return false;
- }
- else
- {
- return value;
- }
- }
-
- static String toks2str(List<Token> toks)
- {
- if (toks.size() > 0)
- {
- StringBuilder result = new StringBuilder();
- for (Token t : toks)
- {
- result.append(tok2str(t));
- }
- return result.toString();
- }
- else
- {
- return null;
- }
- }
-
- public AddressParser(String input)
- {
- super(wlex(input));
- }
-
- public Address parse()
- {
- Address result = address();
- eat(EOF);
- return result;
- }
-
- public Address address()
- {
- String name = toks2str(eat_until(SLASH, SEMI, EOF));
-
- if (name == null)
- {
- throw new ParseError(next());
- }
-
- String subject;
- if (matches(SLASH))
- {
- eat(SLASH);
- subject = toks2str(eat_until(SEMI, EOF));
- }
- else
- {
- subject = null;
- }
-
- Map options;
- if (matches(SEMI))
- {
- eat(SEMI);
- options = map();
- }
- else
- {
- options = null;
- }
-
- return new Address(name, subject, options);
- }
-
- public Map<Object,Object> map()
- {
- eat(LBRACE);
-
- Map<Object,Object> result = new HashMap<Object,Object>();
- while (true)
- {
- if (matches(NUMBER, STRING, ID, LBRACE, LBRACK))
- {
- keyval(result);
- if (matches(COMMA))
- {
- eat(COMMA);
- }
- else if (matches(RBRACE))
- {
- break;
- }
- else
- {
- throw new ParseError(next(), COMMA, RBRACE);
- }
- }
- else if (matches(RBRACE))
- {
- break;
- }
- else
- {
- throw new ParseError(next(), NUMBER, STRING, ID, LBRACE, LBRACK,
- RBRACE);
- }
- }
-
- eat(RBRACE);
- return result;
- }
-
- void keyval(Map<Object,Object> map)
- {
- Object key = value();
- eat(COLON);
- Object val = value();
- map.put(key, val);
- }
-
- Object value()
- {
- if (matches(NUMBER, STRING, ID, TRUE, FALSE))
- {
- return tok2obj(eat());
- }
- else if (matches(LBRACE))
- {
- return map();
- }
- else if (matches(LBRACK))
- {
- return list();
- }
- else
- {
- throw new ParseError(next(), NUMBER, STRING, ID, LBRACE, LBRACK);
- }
- }
-
- List<Object> list()
- {
- eat(LBRACK);
-
- List<Object> result = new ArrayList<Object>();
-
- while (true)
- {
- if (matches(RBRACK))
- {
- break;
- }
- else
- {
- result.add(value());
- if (matches(COMMA))
- {
- eat(COMMA);
- }
- else if (matches(RBRACK))
- {
- break;
- }
- else
- {
- throw new ParseError(next(), COMMA, RBRACK);
- }
- }
- }
-
- eat(RBRACK);
- return result;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/messaging/util/JAddr.java b/java/common/src/main/java/org/apache/qpid/messaging/util/JAddr.java
deleted file mode 100644
index 93df052af1..0000000000
--- a/java/common/src/main/java/org/apache/qpid/messaging/util/JAddr.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.messaging.util;
-
-import java.io.InputStreamReader;
-
-import java.util.List;
-
-import org.apache.qpid.messaging.Address;
-import org.apache.qpid.messaging.util.ParseError;
-import org.apache.qpid.messaging.util.Token;
-
-import static org.apache.qpid.messaging.util.PyPrint.pprint;
-
-
-/**
- * JAddr
- *
- */
-
-public class JAddr
-{
-
- public static final void main(String[] args) throws Exception
- {
- StringBuilder addr = new StringBuilder();
- InputStreamReader reader = new InputStreamReader(System.in);
-
- char[] buf = new char[1024];
- while (true)
- {
- int n = reader.read(buf, 0, buf.length);
- if (n < 0)
- {
- break;
- }
- addr.append(buf, 0, n);
- }
-
- if ("parse".equals(args[0]))
- {
- try
- {
- Address address = Address.parse(addr.toString());
- System.out.println(pprint_address(address));
- }
- catch (ParseError e)
- {
- System.out.println(String.format("ERROR: %s", e.getMessage()));
- }
- }
- else
- {
- List<Token> tokens = AddressParser.lex(addr.toString());
- for (Token t : tokens)
- {
- String value = t.getValue();
- if (value != null)
- {
- value = value.replace("\\", "\\\\").replace("\n", "\\n");
- System.out.println(String.format("%s:%s:%s", t.getType(), t.getPosition(), value));
- }
- else
- {
- System.out.println(String.format("%s:%s", t.getType(), t.getPosition()));
- }
- }
- }
- }
-
- private static String pprint_address(Address addr)
- {
- return String.format("NAME: %s\nSUBJECT: %s\nOPTIONS: %s",
- pprint(addr.getName()),
- pprint(addr.getSubject()),
- pprint(addr.getOptions()));
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/messaging/util/LexError.java b/java/common/src/main/java/org/apache/qpid/messaging/util/LexError.java
deleted file mode 100644
index b8d346dca4..0000000000
--- a/java/common/src/main/java/org/apache/qpid/messaging/util/LexError.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.messaging.util;
-
-
-/**
- * LexError
- *
- */
-
-public class LexError extends RuntimeException
-{
-
- public LexError(String msg)
- {
- super(msg);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/messaging/util/Lexer.java b/java/common/src/main/java/org/apache/qpid/messaging/util/Lexer.java
deleted file mode 100644
index 8226cc77cb..0000000000
--- a/java/common/src/main/java/org/apache/qpid/messaging/util/Lexer.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.messaging.util;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-
-/**
- * Lexer
- *
- */
-
-public class Lexer
-{
-
- private List<Token.Type> types;
- private Token.Type eof;
- private Pattern rexp;
-
- public Lexer(List<Token.Type> types, Token.Type eof, Pattern rexp)
- {
- this.types = types;
- this.eof = eof;
- this.rexp = rexp;
- }
-
- public List<Token> lex(final String st)
- {
- List<Token> tokens = new ArrayList<Token>();
-
- int position = 0;
- Matcher m = rexp.matcher(st);
- OUTER: while (position < st.length())
- {
- m.region(position, st.length());
- if (m.lookingAt())
- {
- for (int i = 1; i <= m.groupCount(); i++)
- {
- String value = m.group(i);
- if (value != null)
- {
- tokens.add(new Token(types.get(i-1), value, st, m.start(i)));
- position = m.end(i);
- continue OUTER;
- }
- }
- throw new RuntimeException("no group matched");
- }
- else
- {
- throw new LexError("unrecognized characters line:" + LineInfo.get(st, position));
- }
- }
-
- tokens.add(new Token(eof, null, st, position));
-
- return tokens;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/messaging/util/Lexicon.java b/java/common/src/main/java/org/apache/qpid/messaging/util/Lexicon.java
deleted file mode 100644
index 9ab610f37a..0000000000
--- a/java/common/src/main/java/org/apache/qpid/messaging/util/Lexicon.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.messaging.util;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Pattern;
-
-
-/**
- * Lexicon
- *
- */
-
-public class Lexicon
-{
-
- private List<Token.Type> types;
- private Token.Type eof;
-
- public Lexicon()
- {
- this.types = new ArrayList<Token.Type>();
- this.eof = null;
- }
-
- public Token.Type define(String name, String pattern)
- {
- Token.Type t = new Token.Type(name, pattern);
- types.add(t);
- return t;
- }
-
- public Token.Type eof(String name)
- {
- Token.Type t = new Token.Type(name, null);
- eof = t;
- return t;
- }
-
- public Lexer compile()
- {
- StringBuilder joined = new StringBuilder();
- for (Token.Type t : types)
- {
- if (joined.length() > 0)
- {
- joined.append('|');
- }
- joined.append('(').append(t.getPattern()).append(')');
- }
- Pattern rexp = Pattern.compile(joined.toString());
- return new Lexer(new ArrayList<Token.Type>(types), eof, rexp);
- }
-
- public static final void main(String[] args)
- {
- StringBuilder input = new StringBuilder();
- for (String a : args)
- {
- if (input.length() > 0)
- {
- input.append(" ");
- }
-
- input.append(a);
- }
-
- Lexicon lxi = new Lexicon();
- lxi.define("FOR", "for");
- lxi.define("IF", "if");
- lxi.define("LPAREN", "\\(");
- lxi.define("RPAREN", "\\)");
- lxi.define("ID", "[\\S]+");
- lxi.define("WSPACE", "[\\s]+");
- lxi.eof("EOF");
- Lexer lx = lxi.compile();
-
- for (Token t : lx.lex(input.toString()))
- {
- System.out.println(t);
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/messaging/util/LineInfo.java b/java/common/src/main/java/org/apache/qpid/messaging/util/LineInfo.java
deleted file mode 100644
index 4952fc38a3..0000000000
--- a/java/common/src/main/java/org/apache/qpid/messaging/util/LineInfo.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.messaging.util;
-
-
-/**
- * LineInfo
- *
- */
-
-public class LineInfo
-{
-
- public static LineInfo get(String st, int position)
- {
- int idx = 0;
- int line = 1;
- int column = 0;
- int line_pos = 0;
- while (idx < position)
- {
- if (st.charAt(idx) == '\n')
- {
- line += 1;
- column = 0;
- line_pos = idx;
- }
-
- column += 1;
- idx += 1;
- }
-
- int end = st.indexOf('\n', line_pos);
- if (end < 0)
- {
- end = st.length();
- }
-
- String text = st.substring(line_pos, end);
-
- return new LineInfo(line, column, text);
- }
-
- private int line;
- private int column;
- private String text;
-
- public LineInfo(int line, int column, String text)
- {
- this.line = line;
- this.column = column;
- this.text = text;
- }
-
- public int getLine()
- {
- return line;
- }
-
- public int getColumn()
- {
- return column;
- }
-
- public String getText()
- {
- return text;
- }
-
- public String toString()
- {
- return String.format("%s,%s:%s", line, column, text);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/messaging/util/ParseError.java b/java/common/src/main/java/org/apache/qpid/messaging/util/ParseError.java
deleted file mode 100644
index ce758e15fa..0000000000
--- a/java/common/src/main/java/org/apache/qpid/messaging/util/ParseError.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.messaging.util;
-
-import org.apache.qpid.util.Strings;
-
-
-/**
- * ParseError
- *
- */
-
-public class ParseError extends RuntimeException
-{
-
- private static String msg(Token token, Token.Type ... expected)
- {
- LineInfo li = token.getLineInfo();
- String exp = Strings.join(", ", expected);
- if (expected.length > 1)
- {
- exp = String.format("(%s)", exp);
- }
-
- if (expected.length > 0)
- {
- return String.format("expecting %s, got %s line:%s", exp, token, li);
- }
- else
- {
- return String.format("unexpected token %s line:%s", token, li);
- }
- }
-
- public ParseError(Token token, Token.Type ... expected)
- {
- super(msg(token, expected));
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/messaging/util/Parser.java b/java/common/src/main/java/org/apache/qpid/messaging/util/Parser.java
deleted file mode 100644
index 2e983f5165..0000000000
--- a/java/common/src/main/java/org/apache/qpid/messaging/util/Parser.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.messaging.util;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-/**
- * Parser
- *
- */
-
-class Parser
-{
-
- private List<Token> tokens;
- private int idx = 0;
-
- Parser(List<Token> tokens)
- {
- this.tokens = tokens;
- this.idx = 0;
- }
-
- Token next()
- {
- return tokens.get(idx);
- }
-
- boolean matches(Token.Type ... types)
- {
- for (Token.Type t : types)
- {
- if (next().getType() == t)
- {
- return true;
- }
- }
- return false;
- }
-
- Token eat(Token.Type ... types)
- {
- if (types.length > 0 && !matches(types))
- {
- throw new ParseError(next(), types);
- }
- else
- {
- Token t = next();
- idx += 1;
- return t;
- }
- }
-
- List<Token> eat_until(Token.Type ... types)
- {
- List<Token> result = new ArrayList();
- while (!matches(types))
- {
- result.add(eat());
- }
- return result;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/messaging/util/PyPrint.java b/java/common/src/main/java/org/apache/qpid/messaging/util/PyPrint.java
deleted file mode 100644
index ef6c724371..0000000000
--- a/java/common/src/main/java/org/apache/qpid/messaging/util/PyPrint.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.messaging.util;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * PyPrint
- *
- */
-
-public class PyPrint
-{
-
- public static String pprint(Object obj)
- {
- if (obj instanceof Map)
- {
- return pprint_map((Map) obj);
- }
- else if (obj instanceof List)
- {
- return pprint_list((List) obj);
- }
- else if (obj instanceof String)
- {
- return pprint_string((String) obj);
- }
- else if (obj instanceof Boolean)
- {
- return ((Boolean) obj).booleanValue() ? "True" : "False";
- }
- else if (obj == null)
- {
- return "None";
- }
- else
- {
- return obj.toString();
- }
- }
-
- private static String indent(String st)
- {
- return " " + st.replace("\n", "\n ");
- }
-
- private static String pprint_map(Map<Object,Object> map)
- {
- List<String> items = new ArrayList<String>();
- for (Map.Entry me : map.entrySet())
- {
- items.add(String.format("%s: %s", pprint(me.getKey()),
- pprint(me.getValue())));
- }
- Collections.sort(items);
- return pprint_items("{", items, "}");
- }
-
- private static String pprint_list(List list)
- {
- List<String> items = new ArrayList<String>();
- for (Object o : list)
- {
- items.add(pprint(o));
- }
- return pprint_items("[", items, "]");
- }
-
- private static String pprint_items(String start, List<String> items,
- String end)
- {
- StringBuilder result = new StringBuilder();
- for (String item : items)
- {
- if (result.length() > 0)
- {
- result.append(",\n");
- }
- result.append(indent(item));
- }
-
- if (result.length() > 0)
- {
- return String.format("%s\n%s\n%s", start, result, end);
- }
- else
- {
- return String.format("%s%s", start, end);
- }
- }
-
- private static String pprint_string(String st)
- {
- StringBuilder result = new StringBuilder();
- result.append('\'');
- for (int i = 0; i < st.length(); i++)
- {
- char c = st.charAt(i);
- switch (c)
- {
- case '\'':
- result.append("\\'");
- break;
- case '\n':
- result.append("\\n");
- break;
- default:
- if (c >= 0x80)
- {
- result.append(String.format("\\u%04x", (int)c));
- }
- else
- {
- result.append(c);
- }
- break;
- }
- }
- result.append('\'');
- return result.toString();
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/messaging/util/Token.java b/java/common/src/main/java/org/apache/qpid/messaging/util/Token.java
deleted file mode 100644
index b9458d7997..0000000000
--- a/java/common/src/main/java/org/apache/qpid/messaging/util/Token.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.messaging.util;
-
-
-/**
- * Token
- *
- */
-
-public class Token
-{
-
- public static class Type
- {
-
- private String name;
- private String pattern;
-
- Type(String name, String pattern)
- {
- this.name = name;
- this.pattern = pattern;
- }
-
- public String getName()
- {
- return name;
- }
-
- public String getPattern()
- {
- return pattern;
- }
-
- public String toString()
- {
- return name;
- }
-
- }
-
- private Type type;
- private String value;
- private String input;
- private int position;
-
- Token(Type type, String value, String input, int position)
- {
- this.type = type;
- this.value = value;
- this.input = input;
- this.position = position;
- }
-
- public Type getType()
- {
- return type;
- }
-
- public String getValue()
- {
- return value;
- }
-
- public int getPosition()
- {
- return position;
- }
-
- public LineInfo getLineInfo()
- {
- return LineInfo.get(input, position);
- }
-
- public String toString()
- {
- if (value == null)
- {
- return type.toString();
- }
- else
- {
- return String.format("%s(%s)", type, value);
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/pool/Job.java b/java/common/src/main/java/org/apache/qpid/pool/Job.java
deleted file mode 100644
index 82b600de88..0000000000
--- a/java/common/src/main/java/org/apache/qpid/pool/Job.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.pool;
-
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A Job is a continuation that batches together other continuations, specifically {@link Event}s, into one continuation.
- * The {@link Event}s themselves provide methods to process themselves, so processing a job simply consists of sequentially
- * processing all of its aggregated events.
- *
- * The constructor accepts a maximum number of events for the job, and only runs up to that maximum number when
- * processing the job, but the add method does not enforce this maximum. In other words, not all the enqueued events
- * may be processed in each run of the job, several runs may be required to clear the queue.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Aggregate many coninuations together into a single continuation.
- * <tr><td> Sequentially process aggregated continuations. <td> {@link Event}
- * <tr><td> Provide running and completion status of the aggregate continuation.
- * <tr><td> Execute a terminal continuation upon job completion. <td> {@link JobCompletionHandler}
- * </table>
- *
- * @todo Could make Job implement Runnable, FutureTask, or a custom Continuation interface, to clarify its status as a
- * continuation. Job is a continuation that aggregates other continuations and as such is a usefull re-usable
- * piece of code. There may be other palces than the mina filter chain where continuation batching is used within
- * qpid, so abstracting this out could provide a usefull building block. This also opens the way to different
- * kinds of job with a common interface, e.g. parallel or sequential jobs etc.
- *
- * @todo For better re-usability could make the completion handler optional. Only run it when one is set.
- */
-public class Job implements ReadWriteRunnable
-{
-
- /** Defines the maximum number of events that will be batched into a single job. */
- public static final int MAX_JOB_EVENTS = Integer.getInteger("amqj.server.read_write_pool.max_events", 10);
-
- /** The maximum number of events to process per run of the job. More events than this may be queued in the job. */
- private final int _maxEvents;
-
- /** Holds the queue of events that make up the job. */
- private final java.util.Queue<Runnable> _eventQueue = new ConcurrentLinkedQueue<Runnable>();
-
- /** Holds a status flag, that indicates when the job is actively running. */
- private final AtomicBoolean _active = new AtomicBoolean();
-
- private final boolean _readJob;
-
- private ReferenceCountingExecutorService _poolReference;
-
- private final static Logger _logger = LoggerFactory.getLogger(Job.class);
-
- public Job(ReferenceCountingExecutorService poolReference, int maxEvents, boolean readJob)
- {
- _poolReference = poolReference;
- _maxEvents = maxEvents;
- _readJob = readJob;
- }
-
- /**
- * Enqueus a continuation for sequential processing by this job.
- *
- * @param evt The continuation to enqueue.
- */
- public void add(Runnable evt)
- {
- _eventQueue.add(evt);
- }
-
- /**
- * Sequentially processes, up to the maximum number per job, the aggregated continuations in enqueued in this job.
- */
- boolean processAll()
- {
- // limit the number of events processed in one run
- int i = _maxEvents;
- while( --i != 0 )
- {
- Runnable e = _eventQueue.poll();
- if (e == null)
- {
- return true;
- }
- else
- {
- e.run();
- }
- }
- return false;
- }
-
- /**
- * Tests if there are no more enqueued continuations to process.
- *
- * @return <tt>true</tt> if there are no enqueued continuations in this job, <tt>false</tt> otherwise.
- */
- public boolean isComplete()
- {
- return _eventQueue.peek() == null;
- }
-
- /**
- * Marks this job as active if it is inactive. This method is thread safe.
- *
- * @return <tt>true</tt> if this job was inactive and has now been marked as active, <tt>false</tt> otherwise.
- */
- public boolean activate()
- {
- return _active.compareAndSet(false, true);
- }
-
- /**
- * Marks this job as inactive. This method is thread safe.
- */
- public void deactivate()
- {
- _active.set(false);
- }
-
- /**
- * Processes a batch of aggregated continuations, marks this job as inactive and call the terminal continuation.
- */
- public void run()
- {
- if(processAll())
- {
- deactivate();
- completed();
- }
- else
- {
- notCompleted();
- }
- }
-
- public boolean isRead()
- {
- return _readJob;
- }
-
- /**
- * Adds an {@link Event} to a {@link Job}, triggering the execution of the job if it is not already running.
- *
- * @param job The job.
- * @param event The event to hand off asynchronously.
- */
- public static void fireAsynchEvent(ExecutorService pool, Job job, Runnable event)
- {
-
- job.add(event);
-
-
- if(pool == null)
- {
- return;
- }
-
- // rather than perform additional checks on pool to check that it hasn't shutdown.
- // catch the RejectedExecutionException that will result from executing on a shutdown pool
- if (job.activate())
- {
- try
- {
- pool.execute(job);
- }
- catch(RejectedExecutionException e)
- {
- _logger.warn("Thread pool shutdown while tasks still outstanding");
- }
- }
-
- }
-
- /**
- * Implements a terminal continuation for the {@link Job} for this filter. Whenever the Job completes its processing
- * of a batch of events this is called. This method simply re-activates the job, if it has more events to process.
- *
- * @param session The Mina session to work in.
- * @param job The job that completed.
- */
- public void completed()
- {
- if (!isComplete())
- {
- final ExecutorService pool = _poolReference.getPool();
-
- if(pool == null)
- {
- return;
- }
-
-
- // ritchiem : 2006-12-13 Do we need to perform the additional checks here?
- // Can the pool be shutdown at this point?
- if (activate())
- {
- try
- {
- pool.execute(this);
- }
- catch(RejectedExecutionException e)
- {
- _logger.warn("Thread pool shutdown while tasks still outstanding");
- }
-
- }
- }
- }
-
- public void notCompleted()
- {
- final ExecutorService pool = _poolReference.getPool();
-
- if(pool == null)
- {
- return;
- }
-
- try
- {
- pool.execute(this);
- }
- catch(RejectedExecutionException e)
- {
- _logger.warn("Thread pool shutdown while tasks still outstanding");
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/pool/ReadWriteJobQueue.java b/java/common/src/main/java/org/apache/qpid/pool/ReadWriteJobQueue.java
deleted file mode 100644
index 8de0f93ce9..0000000000
--- a/java/common/src/main/java/org/apache/qpid/pool/ReadWriteJobQueue.java
+++ /dev/null
@@ -1,432 +0,0 @@
-package org.apache.qpid.pool;
-
-import java.util.AbstractQueue;
-import java.util.Iterator;
-import java.util.Collection;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/*
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*
-*/
-public class ReadWriteJobQueue extends AbstractQueue<Runnable> implements BlockingQueue<Runnable>
-{
-
- private final AtomicInteger _count = new AtomicInteger(0);
-
- private final ReentrantLock _takeLock = new ReentrantLock();
-
- private final Condition _notEmpty = _takeLock.newCondition();
-
- private final ReentrantLock _putLock = new ReentrantLock();
-
- private final ConcurrentLinkedQueue<ReadWriteRunnable> _readJobQueue = new ConcurrentLinkedQueue<ReadWriteRunnable>();
-
- private final ConcurrentLinkedQueue<ReadWriteRunnable> _writeJobQueue = new ConcurrentLinkedQueue<ReadWriteRunnable>();
-
-
- private class ReadWriteJobIterator implements Iterator<Runnable>
- {
-
- private boolean _onReads;
- private Iterator<ReadWriteRunnable> _iter = _writeJobQueue.iterator();
-
- public boolean hasNext()
- {
- if(!_iter.hasNext())
- {
- if(_onReads)
- {
- _iter = _readJobQueue.iterator();
- _onReads = true;
- return _iter.hasNext();
- }
- else
- {
- return false;
- }
- }
- else
- {
- return true;
- }
- }
-
- public Runnable next()
- {
- if(_iter.hasNext())
- {
- return _iter.next();
- }
- else
- {
- return null;
- }
- }
-
- public void remove()
- {
- _takeLock.lock();
- try
- {
- _iter.remove();
- _count.decrementAndGet();
- }
- finally
- {
- _takeLock.unlock();
- }
- }
- }
-
- public Iterator<Runnable> iterator()
- {
- return new ReadWriteJobIterator();
- }
-
- public int size()
- {
- return _count.get();
- }
-
- public boolean offer(final Runnable runnable)
- {
- final ReadWriteRunnable job = (ReadWriteRunnable) runnable;
- final ReentrantLock putLock = _putLock;
- putLock.lock();
- try
- {
- if(job.isRead())
- {
- _readJobQueue.offer(job);
- }
- else
- {
- _writeJobQueue.offer(job);
- }
- if(_count.getAndIncrement() == 0)
- {
- _takeLock.lock();
- try
- {
- _notEmpty.signal();
- }
- finally
- {
- _takeLock.unlock();
- }
- }
- return true;
- }
- finally
- {
- putLock.unlock();
- }
- }
-
- public void put(final Runnable runnable) throws InterruptedException
- {
- final ReadWriteRunnable job = (ReadWriteRunnable) runnable;
- final ReentrantLock putLock = _putLock;
- putLock.lock();
-
- try
- {
- if(job.isRead())
- {
- _readJobQueue.offer(job);
- }
- else
- {
- _writeJobQueue.offer(job);
- }
- if(_count.getAndIncrement() == 0)
- {
- _takeLock.lock();
- try
- {
- _notEmpty.signal();
- }
- finally
- {
- _takeLock.unlock();
- }
- }
-
- }
- finally
- {
- putLock.unlock();
- }
- }
-
-
-
- public boolean offer(final Runnable runnable, final long timeout, final TimeUnit unit) throws InterruptedException
- {
- final ReadWriteRunnable job = (ReadWriteRunnable) runnable;
- final ReentrantLock putLock = _putLock;
- putLock.lock();
-
- try
- {
- if(job.isRead())
- {
- _readJobQueue.offer(job);
- }
- else
- {
- _writeJobQueue.offer(job);
- }
- if(_count.getAndIncrement() == 0)
- {
- _takeLock.lock();
- try
- {
- _notEmpty.signal();
- }
- finally
- {
- _takeLock.unlock();
- }
- }
-
- return true;
- }
- finally
- {
- putLock.unlock();
- }
-
- }
-
- public Runnable take() throws InterruptedException
- {
- final ReentrantLock takeLock = _takeLock;
- takeLock.lockInterruptibly();
- try
- {
- try
- {
- while (_count.get() == 0)
- {
- _notEmpty.await();
- }
- }
- catch (InterruptedException ie)
- {
- _notEmpty.signal();
- throw ie;
- }
-
- ReadWriteRunnable job = _writeJobQueue.poll();
- if(job == null)
- {
- job = _readJobQueue.poll();
- }
- int c = _count.getAndDecrement();
- if (c > 1)
- {
- _notEmpty.signal();
- }
- return job;
- }
- finally
- {
- takeLock.unlock();
- }
-
-
- }
-
- public Runnable poll(final long timeout, final TimeUnit unit) throws InterruptedException
- {
- final ReentrantLock takeLock = _takeLock;
- final AtomicInteger count = _count;
- long nanos = unit.toNanos(timeout);
- takeLock.lockInterruptibly();
- ReadWriteRunnable job = null;
- try
- {
-
- for (;;)
- {
- if (count.get() > 0)
- {
- job = _writeJobQueue.poll();
- if(job == null)
- {
- job = _readJobQueue.poll();
- }
- int c = count.getAndDecrement();
- if (c > 1)
- {
- _notEmpty.signal();
- }
- break;
- }
- if (nanos <= 0)
- {
- return null;
- }
- try
- {
- nanos = _notEmpty.awaitNanos(nanos);
- }
- catch (InterruptedException ie)
- {
- _notEmpty.signal();
- throw ie;
- }
- }
- }
- finally
- {
- takeLock.unlock();
- }
-
- return job;
- }
-
- public int remainingCapacity()
- {
- return Integer.MAX_VALUE;
- }
-
- public int drainTo(final Collection<? super Runnable> c)
- {
- int total = 0;
-
- _putLock.lock();
- _takeLock.lock();
- try
- {
- ReadWriteRunnable job;
- while((job = _writeJobQueue.peek())!= null)
- {
- c.add(job);
- _writeJobQueue.poll();
- _count.decrementAndGet();
- total++;
- }
-
- while((job = _readJobQueue.peek())!= null)
- {
- c.add(job);
- _readJobQueue.poll();
- _count.decrementAndGet();
- total++;
- }
-
- }
- finally
- {
- _takeLock.unlock();
- _putLock.unlock();
- }
- return total;
- }
-
- public int drainTo(final Collection<? super Runnable> c, final int maxElements)
- {
- int total = 0;
-
- _putLock.lock();
- _takeLock.lock();
- try
- {
- ReadWriteRunnable job;
- while(total<=maxElements && (job = _writeJobQueue.peek())!= null)
- {
- c.add(job);
- _writeJobQueue.poll();
- _count.decrementAndGet();
- total++;
- }
-
- while(total<=maxElements && (job = _readJobQueue.peek())!= null)
- {
- c.add(job);
- _readJobQueue.poll();
- _count.decrementAndGet();
- total++;
- }
-
- }
- finally
- {
- _takeLock.unlock();
- _putLock.unlock();
- }
- return total;
-
- }
-
- public Runnable poll()
- {
- final ReentrantLock takeLock = _takeLock;
- takeLock.lock();
- try
- {
- if(_count.get() > 0)
- {
- ReadWriteRunnable job = _writeJobQueue.poll();
- if(job == null)
- {
- job = _readJobQueue.poll();
- }
- _count.decrementAndGet();
- return job;
- }
- else
- {
- return null;
- }
- }
- finally
- {
- takeLock.unlock();
- }
-
- }
-
- public Runnable peek()
- {
- final ReentrantLock takeLock = _takeLock;
- takeLock.lock();
- try
- {
- ReadWriteRunnable job = _writeJobQueue.peek();
- if(job == null)
- {
- job = _readJobQueue.peek();
- }
- return job;
- }
- finally
- {
- takeLock.unlock();
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/pool/ReadWriteRunnable.java b/java/common/src/main/java/org/apache/qpid/pool/ReadWriteRunnable.java
deleted file mode 100644
index 140c93ca8d..0000000000
--- a/java/common/src/main/java/org/apache/qpid/pool/ReadWriteRunnable.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.apache.qpid.pool;
-
-/*
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*
-*/
-public interface ReadWriteRunnable extends Runnable
-{
- boolean isRead();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/pool/ReferenceCountingExecutorService.java b/java/common/src/main/java/org/apache/qpid/pool/ReferenceCountingExecutorService.java
deleted file mode 100644
index 8152a1f5e9..0000000000
--- a/java/common/src/main/java/org/apache/qpid/pool/ReferenceCountingExecutorService.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.pool;
-
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.LinkedBlockingQueue;
-
-
-/**
- * ReferenceCountingExecutorService wraps an ExecutorService in order to provide shared reference to it. It counts
- * the references taken, instantiating the service on the first reference, and shutting it down when the last
- * reference is released.
- *
- * <p/>It is important to ensure that an executor service is correctly shut down as failing to do so prevents the JVM
- * from terminating due to the existence of non-daemon threads.
- *
- * <p/><table id="crc><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Provide a shared executor service. <td> {@link Executors}
- * <tr><td> Shutdown the executor service when not needed. <td> {@link ExecutorService}
- * <tr><td> Track references to the executor service.
- * <tr><td> Provide configuration of the executor service.
- * </table>
- *
- * @todo Might be more elegant to make this actually implement ExecutorService, providing better hiding of the
- * implementation details. Also this class introduces a pattern (albeit specific to this usage) that could be
- * generalized to reference count anything. That is, on first instance call a create method, on release of last
- * instance call a destroy method. This could definitely be abstracted out as a re-usable piece of code; a
- * reference counting factory. It could then be re-used to do reference counting in other places (such as
- * messages). Countable objects have a simple create/destroy life cycle, capturable by an interface that the
- * ref counting factory can call to manage the lifecycle.
- *
- * @todo {@link #_poolSize} should be static?
- *
- * @todo The {@link #getPool()} method breaks the encapsulation of the reference counter. Generally when getPool is used
- * further checks are applied to ensure that the executor service has not been shutdown. This passes responsibility
- * for managing the lifecycle of the reference counted object onto the caller rather than neatly encapsulating it
- * here. Could think about adding more state to the lifecycle, to mark ref counted objects as invalid, and have an
- * isValid method, or could make calling code deal with RejectedExecutionException raised by shutdown executors.
- */
-public class ReferenceCountingExecutorService
-{
-
-
- /** Defines the smallest thread pool that will be allocated, irrespective of the number of processors. */
- private static final int MINIMUM_POOL_SIZE = 4;
-
- /** Holds the number of processors on the machine. */
- private static final int NUM_CPUS = Runtime.getRuntime().availableProcessors();
-
- /** Defines the thread pool size to use, which is the larger of the number of CPUs or the minimum size. */
- private static final int DEFAULT_POOL_SIZE = Math.max(NUM_CPUS, MINIMUM_POOL_SIZE);
-
- /**
- * Holds the singleton instance of this reference counter. This is only created once, statically, so the
- * {@link #getInstance()} method does not need to be synchronized.
- */
- private static final ReferenceCountingExecutorService _instance = new ReferenceCountingExecutorService();
-
- /** This lock is used to ensure that reference counts are updated atomically with create/destroy operations. */
- private final Object _lock = new Object();
-
- /** The shared executor service that is reference counted. */
- private ExecutorService _pool;
-
- /** Holds the number of references given out to the executor service. */
- private int _refCount = 0;
-
- /** Holds the number of executor threads to create. */
- private int _poolSize = Integer.getInteger("amqj.read_write_pool_size", DEFAULT_POOL_SIZE);
-
- /** Thread Factory used to create thread of the pool. Uses the default implementation provided by
- * {@link java.util.concurrent.Executors#defaultThreadFactory()} unless reset by the caller.
- */
- private ThreadFactory _threadFactory = Executors.defaultThreadFactory();
-
- private final boolean _useBiasedPool = Boolean.getBoolean("org.apache.qpid.use_write_biased_pool");
-
- /**
- * Retrieves the singleton instance of this reference counter.
- *
- * @return The singleton instance of this reference counter.
- */
- public static ReferenceCountingExecutorService getInstance()
- {
- return _instance;
- }
-
- /**
- * Private constructor to ensure that only a singleton instance can be created.
- */
- private ReferenceCountingExecutorService()
- { }
-
- /**
- * Provides a reference to a shared executor service, incrementing the reference count.
- *
- * @return An executor service.
- */
- public ExecutorService acquireExecutorService()
- {
- synchronized (_lock)
- {
- if (_refCount++ == 0)
- {
- // Use a job queue that biases to writes
- if(_useBiasedPool)
- {
- _pool = new ThreadPoolExecutor(_poolSize, _poolSize,
- 0L, TimeUnit.MILLISECONDS,
- new ReadWriteJobQueue(),
- _threadFactory);
-
- }
- else
- {
- _pool = new ThreadPoolExecutor(_poolSize, _poolSize,
- 0L, TimeUnit.MILLISECONDS,
- new LinkedBlockingQueue<Runnable>(),
- _threadFactory);
- }
-
- }
-
-
- return _pool;
- }
- }
-
- /**
- * Releases a reference to a shared executor service, decrementing the reference count. If the reference count falls
- * to zero, the executor service is shut down.
- */
- public void releaseExecutorService()
- {
- synchronized (_lock)
- {
- if (--_refCount == 0)
- {
- _pool.shutdownNow();
- }
- }
- }
-
- /**
- * Provides access to the executor service, without touching the reference count.
- *
- * @return The shared executor service, or <tt>null</tt> if none has been instantiated yet.
- */
- public ExecutorService getPool()
- {
- return _pool;
- }
-
- /**
- * Return the ReferenceCount to this ExecutorService
- * @return reference count
- */
- public int getReferenceCount()
- {
- return _refCount;
- }
-
- /**
- *
- * Return the thread factory used by the {@link ThreadPoolExecutor} to create new threads.
- *
- * @return thread factory
- */
- public ThreadFactory getThreadFactory()
- {
- return _threadFactory;
- }
-
- /**
- * Sets the thread factory used by the {@link ThreadPoolExecutor} to create new threads.
- * <p>
- * If the pool has been already created, the change will have no effect until
- * {@link #getReferenceCount()} reaches zero and the pool recreated. For this reason,
- * callers must invoke this method <i>before</i> calling {@link #acquireExecutorService()}.
- *
- * @param threadFactory thread factory
- */
- public void setThreadFactory(final ThreadFactory threadFactory)
- {
- if (threadFactory == null)
- {
- throw new NullPointerException("threadFactory cannot be null");
- }
- _threadFactory = threadFactory;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/protocol/AMQConstant.java b/java/common/src/main/java/org/apache/qpid/protocol/AMQConstant.java
deleted file mode 100644
index f0f2652ce3..0000000000
--- a/java/common/src/main/java/org/apache/qpid/protocol/AMQConstant.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.protocol;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.qpid.framing.AMQShortString;
-
-/**
- * Defines constants for AMQP codes and also acts as a factory for creating such constants from the raw codes. Each
- * constant also defines a short human readable description of the constant.
- *
- * @todo Why would a constant be defined that is not in the map? Seems more natural that getConstant should raise an
- * exception for an unknown constant. Or else provide an explanation of why this is so. Also, there is no way for
- * callers to determine the unknown status of a code except by comparing its name to "unknown code", which would
- * seem to render this scheme a little bit pointless?
- *
- * @todo Java has a nice enum construct for doing this sort of thing. Maybe this is done in the old style for Java 1.4
- * backward compatability? Now that is handled through retrotranslater it may be time to use enum.
- *
- * <p/><tabld id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Define the set of AMQP status codes.
- * <tr><td> Provide a factory to lookup constants by their code.
- * <tr><td>
- */
-public final class AMQConstant
-{
- /** Defines a map from codes to constants. */
- private static Map<Integer, AMQConstant> _codeMap = new HashMap<Integer, AMQConstant>();
-
- /** Indicates that the method completed successfully. */
- public static final AMQConstant REPLY_SUCCESS = new AMQConstant(200, "reply success", true);
-
- public static final AMQConstant FRAME_END = new AMQConstant(206, "frame end", true);
-
- /**
- * The client asked for a specific message that is no longer available. The message was delivered to another
- * client, or was purged from the queue for some other reason.
- */
- public static final AMQConstant NOT_DELIVERED = new AMQConstant(310, "not delivered", true);
-
- /**
- * The client attempted to transfer content larger than the server could accept at the present time. The client
- * may retry at a later time.
- */
- public static final AMQConstant MESSAGE_TOO_LARGE = new AMQConstant(311, "message too large", true);
-
- /**
- * When the exchange cannot route the result of a .Publish, most likely due to an invalid routing key. Only when
- * the mandatory flag is set.
- */
- public static final AMQConstant NO_ROUTE = new AMQConstant(312, "no route", true);
-
- /**
- * When the exchange cannot deliver to a consumer when the immediate flag is set. As a result of pending data on
- * the queue or the absence of any consumers of the queue.
- */
- public static final AMQConstant NO_CONSUMERS = new AMQConstant(313, "no consumers", true);
-
- /**
- * An operator intervened to close the connection for some reason. The client may retry at some later date.
- */
- public static final AMQConstant CONTEXT_IN_USE = new AMQConstant(320, "context in use", true);
-
- /** The client tried to work with an unknown virtual host or cluster. */
- public static final AMQConstant INVALID_PATH = new AMQConstant(402, "invalid path", true);
-
- /** The client attempted to work with a server entity to which it has no access due to security settings. */
- public static final AMQConstant ACCESS_REFUSED = new AMQConstant(403, "access refused", true);
-
- /** The client attempted to work with a server entity that does not exist. */
- public static final AMQConstant NOT_FOUND = new AMQConstant(404, "not found", true);
-
- /**
- * The client attempted to work with a server entity to which it has no access because another client is
- * working with it.
- */
- public static final AMQConstant ALREADY_EXISTS = new AMQConstant(405, "Already exists", true);
-
- /** The client requested a method that was not allowed because some precondition failed. */
- public static final AMQConstant IN_USE = new AMQConstant(406, "In use", true);
-
- public static final AMQConstant INVALID_ROUTING_KEY = new AMQConstant(407, "routing key invalid", true);
-
- public static final AMQConstant REQUEST_TIMEOUT = new AMQConstant(408, "Request Timeout", true);
-
- public static final AMQConstant INVALID_ARGUMENT = new AMQConstant(409, "argument invalid", true);
-
- /**
- * The client sent a malformed frame that the server could not decode. This strongly implies a programming error
- * in the client.
- */
- public static final AMQConstant FRAME_ERROR = new AMQConstant(501, "frame error", true);
-
- /**
- * The client sent a frame that contained illegal values for one or more fields. This strongly implies a
- * programming error in the client.
- */
- public static final AMQConstant SYNTAX_ERROR = new AMQConstant(502, "syntax error", true);
-
- /**
- * The client sent an invalid sequence of frames, attempting to perform an operation that was considered invalid
- * by the server. This usually implies a programming error in the client.
- */
- public static final AMQConstant COMMAND_INVALID = new AMQConstant(503, "command invalid", true);
-
- /**
- * The client attempted to work with a channel that had not been correctly opened. This most likely indicates a
- * fault in the client layer.
- */
- public static final AMQConstant CHANNEL_ERROR = new AMQConstant(504, "channel error", true);
-
- /**
- * The server could not complete the method because it lacked sufficient resources. This may be due to the client
- * creating too many of some type of entity.
- */
- public static final AMQConstant RESOURCE_ERROR = new AMQConstant(506, "resource error", true);
-
- /**
- * The client tried to work with some entity in a manner that is prohibited by the server, due to security settings
- * or by some other criteria.
- */
- public static final AMQConstant NOT_ALLOWED = new AMQConstant(530, "not allowed", true);
-
- /** The client tried to use functionality that is not implemented in the server. */
- public static final AMQConstant NOT_IMPLEMENTED = new AMQConstant(540, "not implemented", true);
-
- /**
- * The server could not complete the method because of an internal error. The server may require intervention by
- * an operator in order to resume normal operations.
- */
- public static final AMQConstant INTERNAL_ERROR = new AMQConstant(541, "internal error", true);
-
- public static final AMQConstant FRAME_MIN_SIZE = new AMQConstant(4096, "frame min size", true);
-
- /**
- * The server does not support the protocol version
- */
- public static final AMQConstant UNSUPPORTED_BROKER_PROTOCOL_ERROR = new AMQConstant(542, "broker unsupported protocol", true);
- /**
- * The client imp does not support the protocol version
- */
- public static final AMQConstant UNSUPPORTED_CLIENT_PROTOCOL_ERROR = new AMQConstant(543, "client unsupported protocol", true);
-
- /** The AMQP status code. */
- private int _code;
-
- /** A short description of the status code. */
- private AMQShortString _name;
-
- /**
- * Creates a new AMQP status code.
- *
- * @param code The code.
- * @param name A short description of the code.
- * @param map <tt>true</tt> to register the code as a known code, <tt>false</tt> otherwise.
- */
- private AMQConstant(int code, String name, boolean map)
- {
- _code = code;
- _name = new AMQShortString(name);
- if (map)
- {
- _codeMap.put(Integer.valueOf(code), this);
- }
- }
-
- /**
- * Creates a constant for a status code by looking up the code in the map of known codes. If the code is not known
- * a constant is still created for it, but it is marked as unknown.
- *
- * @param code The AMQP status code.
- *
- * @return The AMQP status code encapsulated as a constant.
- */
- public static AMQConstant getConstant(int code)
- {
- AMQConstant c = _codeMap.get(Integer.valueOf(code));
- if (c == null)
- {
- c = new AMQConstant(code, "unknown code", false);
- }
-
- return c;
- }
-
- /**
- * Gets the underlying AMQP status code.
- *
- * @return The AMQP status code.
- */
- public int getCode()
- {
- return _code;
- }
-
- /**
- * Gets a short description of the status code.
- *
- * @return A short description of the status code.
- */
- public AMQShortString getName()
- {
- return _name;
- }
-
- /**
- * Renders the constant as a string, mainly for debugging purposes.
- *
- * @return The status code and its description.
- */
- public String toString()
- {
- return _code + ": " + _name;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/protocol/AMQMethodEvent.java b/java/common/src/main/java/org/apache/qpid/protocol/AMQMethodEvent.java
deleted file mode 100644
index fd6907a152..0000000000
--- a/java/common/src/main/java/org/apache/qpid/protocol/AMQMethodEvent.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.protocol;
-
-import org.apache.qpid.framing.AMQMethodBody;
-
-/**
- * AMQMethodEvent encapsulates an AMQP method call, and the channel on which that method call occurred.
- *
- * <p/>Supplies the:
- * <ul>
- * <li>channel id</li>
- * <li>protocol method</li>
- * </ul>
- *
- * <p/>As the event contains the context in which it occurred, event listeners do not need to be statefull.
- * to listeners. Events are often handled by {@link AMQMethodListener}s.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Encapsulate an AMQP method call and the channel as the context for the method call.
- * </table>
- */
-public class AMQMethodEvent<M extends AMQMethodBody>
-{
- /** Holds the method call. */
- private final M _method;
-
- /** Holds the channel handle for the method call. */
- private final int _channelId;
-
- /**
- * Creates a method event to encasulate a method call and channel.
- *
- * @param channelId The channel on which the method call occurred.
- * @param method The method call.
- */
- public AMQMethodEvent(int channelId, M method)
- {
- _channelId = channelId;
- _method = method;
- }
-
- /**
- * Gets the method call.
- *
- * @return The method call.
- */
- public M getMethod()
- {
- return _method;
- }
-
- /**
- * Gets the channel handle for the method call.
- *
- * @return The channel handle for the method call.
- */
- public int getChannelId()
- {
- return _channelId;
- }
-
- /**
- * Prints the method call as a string, mainly for debugging purposes.
- *
- * @return The method call as a string, mainly for debugging purposes.
- */
- public String toString()
- {
- StringBuilder buf = new StringBuilder("Method event: ");
- buf.append("\nChannel id: ").append(_channelId);
- buf.append("\nMethod: ").append(_method);
-
- return buf.toString();
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/protocol/AMQMethodListener.java b/java/common/src/main/java/org/apache/qpid/protocol/AMQMethodListener.java
deleted file mode 100644
index 5a7679a972..0000000000
--- a/java/common/src/main/java/org/apache/qpid/protocol/AMQMethodListener.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.protocol;
-
-import org.apache.qpid.framing.AMQMethodBody;
-import org.apache.qpid.AMQException;
-
-/**
- * AMQMethodListener is a listener that receives notifications of AMQP methods. The methods are packaged as events in
- * {@link AMQMethodEvent}.
- *
- * <p/>An event listener may be associated with a particular context, usually an AMQP channel, and in addition to
- * receiving method events will be notified of errors on that context. This enables listeners to perform any clean
- * up that they need to do before the context is closed or retried.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities
- * <tr><td> Accept notification of AMQP method events. <td> {@link AMQMethodEvent}
- * <tr><td> Accept notification of errors on the event context.
- * </table>
- *
- * @todo Document why the exception is passed to the error method. Is it so that the exception can be passed
- * from the event handling thread to another thread and rethown from there? It is unusual to pass exceptions as
- * method arguments, because they have their own mechanism for propagating through the call stack, so some
- * explanation ought to be provided.
- */
-public interface AMQMethodListener
-{
- /**
- * Notifies the listener that an AMQP method event has occurred.
- *
- * @param evt The AMQP method event (contains the method and channel).
- *
- * @return <tt>true</tt> if the handler processes the method frame, <tt>false<tt> otherwise. Note that this does
- * not prohibit the method event being delivered to subsequent listeners but can be used to determine if
- * nobody has dealt with an incoming method frame.
- *
- * @throws Exception if an error has occurred. This exception may be delivered to all registered listeners using
- * the error() method (see below) allowing them to perform cleanup if necessary.
- *
- * @todo Consider narrowing the exception.
- */
- <B extends AMQMethodBody> boolean methodReceived(AMQMethodEvent<B> evt) throws AMQException;
-
- /**
- * Notifies the listener of an error on the event context to which it is listening. The listener should perform
- * any necessary clean-up for the context.
- *
- * @param e The underlying exception that is the source of the error.
- */
- void error(Exception e);
-}
diff --git a/java/common/src/main/java/org/apache/qpid/protocol/AMQProtocolWriter.java b/java/common/src/main/java/org/apache/qpid/protocol/AMQProtocolWriter.java
deleted file mode 100644
index 65884e4950..0000000000
--- a/java/common/src/main/java/org/apache/qpid/protocol/AMQProtocolWriter.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.protocol;
-
-import org.apache.qpid.framing.AMQDataBlock;
-
-/**
- * AMQProtocolWriter provides a method to write a frame of data 'to the wire', in the context of the object
- * that implements the method, usually some sort of session. The block of data, encapsulated by {@link AMQDataBlock},
- * will be encoded as it is written.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities
- * <tr><td> Write an encoded block of data to the write, in the context of a session.
- * </table>
- */
-public interface AMQProtocolWriter
-{
- /**
- * Writes a frame to the wire, encoding it as necessary, for example, into a sequence of bytes.
- *
- * @param frame The frame to be encoded and written.
- */
- public void writeFrame(AMQDataBlock frame);
-}
diff --git a/java/common/src/main/java/org/apache/qpid/protocol/AMQVersionAwareProtocolSession.java b/java/common/src/main/java/org/apache/qpid/protocol/AMQVersionAwareProtocolSession.java
deleted file mode 100644
index b58e7d01dc..0000000000
--- a/java/common/src/main/java/org/apache/qpid/protocol/AMQVersionAwareProtocolSession.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.protocol;
-
-import org.apache.qpid.framing.*;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.AMQException;
-
-import java.nio.ByteBuffer;
-
-
-/**
- * AMQVersionAwareProtocolSession is implemented by all AMQP session classes, that need to provide an awareness to
- * callers of the version of the AMQP protocol that they are able to work with.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities
- * <tr><td> Provide the method registry for a specific version of the AMQP.
- * </table>
- *
- * @todo Why is this a seperate interface to {@link ProtocolVersionAware}, could they be combined into a single
- * interface and one of them eliminated? Move getRegistry method to ProtocolVersionAware, make the sessions
- * implement AMQProtocolWriter directly and drop this interface.
- */
-public interface AMQVersionAwareProtocolSession extends AMQProtocolWriter, ProtocolVersionAware
-{
- /**
- * Gets the method registry for a specific version of the AMQP.
- *
- * @return The method registry for a specific version of the AMQP.
- */
-// public VersionSpecificRegistry getRegistry();
-
- MethodRegistry getMethodRegistry();
-
-
- public void methodFrameReceived(int channelId, AMQMethodBody body) throws AMQException;
- public void contentHeaderReceived(int channelId, ContentHeaderBody body) throws AMQException;
- public void contentBodyReceived(int channelId, ContentBody body) throws AMQException;
- public void heartbeatBodyReceived(int channelId, HeartbeatBody body) throws AMQException;
-
-
- public void setSender(Sender<ByteBuffer> sender);
- public void init();
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/protocol/ProtocolEngine.java b/java/common/src/main/java/org/apache/qpid/protocol/ProtocolEngine.java
deleted file mode 100644
index 31953ea6ab..0000000000
--- a/java/common/src/main/java/org/apache/qpid/protocol/ProtocolEngine.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.protocol;
-
-import java.net.SocketAddress;
-
-import org.apache.qpid.framing.AMQDataBlock;
-import org.apache.qpid.transport.NetworkDriver;
-import org.apache.qpid.transport.Receiver;
-
-/**
- * A ProtocolEngine is a Receiver for java.nio.ByteBuffers. It takes the data passed to it in the received
- * decodes it and then process the result.
- */
-public interface ProtocolEngine extends Receiver<java.nio.ByteBuffer>
-{
- // Sets the network driver providing data for this ProtocolEngine
- void setNetworkDriver (NetworkDriver driver);
-
- // Returns the remote address of the NetworkDriver
- SocketAddress getRemoteAddress();
-
- // Returns the local address of the NetworkDriver
- SocketAddress getLocalAddress();
-
- // Returns number of bytes written
- long getWrittenBytes();
-
- // Returns number of bytes read
- long getReadBytes();
-
- // Called by the NetworkDriver when the socket has been closed for reading
- void closed();
-
- // Called when the NetworkEngine has not written data for the specified period of time (will trigger a
- // heartbeat)
- void writerIdle();
-
- // Called when the NetworkEngine has not read data for the specified period of time (will close the connection)
- void readerIdle();
-
-
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/protocol/ProtocolEngineFactory.java b/java/common/src/main/java/org/apache/qpid/protocol/ProtocolEngineFactory.java
deleted file mode 100644
index 9df84eef90..0000000000
--- a/java/common/src/main/java/org/apache/qpid/protocol/ProtocolEngineFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.protocol;
-
-import org.apache.qpid.transport.NetworkDriver;
-
-public interface ProtocolEngineFactory
-{
-
- // Returns a new instance of a ProtocolEngine
- ProtocolEngine newProtocolEngine(NetworkDriver networkDriver);
-
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/protocol/ProtocolVersionAware.java b/java/common/src/main/java/org/apache/qpid/protocol/ProtocolVersionAware.java
deleted file mode 100644
index 56f950dd85..0000000000
--- a/java/common/src/main/java/org/apache/qpid/protocol/ProtocolVersionAware.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.protocol;
-
-import org.apache.qpid.framing.ProtocolVersion;
-
-/**
- * ProtocolVersionAware is implemented by all AMQP handling classes, that need to provide an awareness to callers of
- * the version of the AMQP protocol that they are able to handle.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities
- * <tr><td> Report the major and minor AMQP version handled.
- * </table>
- */
-public interface ProtocolVersionAware
-{
- /**
- * @deprecated
- * Reports the AMQP minor version, that the implementer can handle.
- *
- * @return The AMQP minor version.
- */
- public byte getProtocolMinorVersion();
-
- /**
- * @deprecated
- * Reports the AMQP major version, that the implementer can handle.
- *
- * @return The AMQP major version.
- */
- public byte getProtocolMajorVersion();
-
- public ProtocolVersion getProtocolVersion();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/security/AMQPCallbackHandler.java b/java/common/src/main/java/org/apache/qpid/security/AMQPCallbackHandler.java
deleted file mode 100644
index a3dad9acdc..0000000000
--- a/java/common/src/main/java/org/apache/qpid/security/AMQPCallbackHandler.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.security;
-
-import javax.security.auth.callback.CallbackHandler;
-
-public interface AMQPCallbackHandler extends CallbackHandler
-{
- void initialise(String username,String password);
-}
diff --git a/java/common/src/main/java/org/apache/qpid/security/UsernamePasswordCallbackHandler.java b/java/common/src/main/java/org/apache/qpid/security/UsernamePasswordCallbackHandler.java
deleted file mode 100644
index 89a63abeab..0000000000
--- a/java/common/src/main/java/org/apache/qpid/security/UsernamePasswordCallbackHandler.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.security;
-
-import java.io.IOException;
-
-import javax.security.auth.callback.Callback;
-import javax.security.auth.callback.NameCallback;
-import javax.security.auth.callback.PasswordCallback;
-import javax.security.auth.callback.UnsupportedCallbackException;
-
-public class UsernamePasswordCallbackHandler implements AMQPCallbackHandler
-{
- private String _username;
- private String _password;
-
- public void initialise(String username,String password)
- {
- _username = username;
- _password = password;
- }
-
- public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
- {
- for (int i = 0; i < callbacks.length; i++)
- {
- Callback cb = callbacks[i];
- if (cb instanceof NameCallback)
- {
- ((NameCallback)cb).setName(_username);
- }
- else if (cb instanceof PasswordCallback)
- {
- ((PasswordCallback)cb).setPassword((_password).toCharArray());
- }
- else
- {
- throw new UnsupportedCallbackException(cb);
- }
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/ssl/SSLContextFactory.java b/java/common/src/main/java/org/apache/qpid/ssl/SSLContextFactory.java
deleted file mode 100644
index 702746b3da..0000000000
--- a/java/common/src/main/java/org/apache/qpid/ssl/SSLContextFactory.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.ssl;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.GeneralSecurityException;
-import java.security.KeyStore;
-
-import javax.net.ssl.KeyManager;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManagerFactory;
-
-import org.apache.qpid.transport.network.security.ssl.SSLUtil;
-
-/**
- * Factory used to create SSLContexts. SSL needs to be configured
- * before this will work.
- *
- */
-public class SSLContextFactory {
-
- /**
- * Path to the Java keystore file
- */
- private String _keyStorePath;
-
- /**
- * Password for the keystore
- */
- private String _keyStorePassword;
-
- /**
- * Cert type to use in keystore
- */
- private String _keyStoreCertType;
-
- /**
- * Path to the Java truststore file
- */
- private String _trustStorePath;
-
- /**
- * Password for the truststore
- */
- private String _trustStorePassword;
-
- /**
- * Cert type to use in truststore
- */
- private String _trustStoreCertType;
-
- private KeyManager customKeyManager;
-
- public SSLContextFactory(String trustStorePath, String trustStorePassword,
- String trustStoreCertType)
- {
- this(trustStorePath,trustStorePassword,trustStoreCertType,
- trustStorePath,trustStorePassword,trustStoreCertType);
- }
-
- /**
- * Create a factory instance
- * @param keystorePath path to the Java keystore file
- * @param keystorePassword password for the Java keystore
- * @param certType certificate type
- */
- public SSLContextFactory(String trustStorePath, String trustStorePassword, String trustStoreCertType,
- String keyStorePath, String keyStorePassword, String keyStoreCertType)
- {
-
- _trustStorePath = trustStorePath;
- _trustStorePassword = trustStorePassword;
-
- if (_trustStorePassword != null && _trustStorePassword.equals("none"))
- {
- _trustStorePassword = null;
- }
- _trustStoreCertType = trustStoreCertType;
-
- _keyStorePath = keyStorePath;
- _keyStorePassword = keyStorePassword;
-
- if (_keyStorePassword != null && _keyStorePassword.equals("none"))
- {
- _keyStorePassword = null;
- }
- _keyStoreCertType = keyStoreCertType;
-
- if (_trustStorePath == null) {
- throw new IllegalArgumentException("A TrustStore path or KeyStore path must be specified");
- }
- if (_trustStoreCertType == null) {
- throw new IllegalArgumentException("Cert type must be specified");
- }
- }
-
- public SSLContextFactory(String trustStorePath, String trustStorePassword, String trustStoreCertType,
- KeyManager customKeyManager)
- {
-
- _trustStorePath = trustStorePath;
- _trustStorePassword = trustStorePassword;
-
- if (_trustStorePassword != null && _trustStorePassword.equals("none"))
- {
- _trustStorePassword = null;
- }
- _trustStoreCertType = trustStoreCertType;
-
- if (_trustStorePath == null) {
- throw new IllegalArgumentException("A TrustStore path or KeyStore path must be specified");
- }
- if (_trustStoreCertType == null) {
- throw new IllegalArgumentException("Cert type must be specified");
- }
-
- this.customKeyManager = customKeyManager;
- }
-
-
- /**
- * Builds a SSLContext appropriate for use with a server
- * @return SSLContext
- * @throws GeneralSecurityException
- * @throws IOException
- */
-
- public SSLContext buildServerContext() throws GeneralSecurityException, IOException
- {
- KeyStore ts = SSLUtil.getInitializedKeyStore(_trustStorePath,_trustStorePassword);
- TrustManagerFactory tmf = TrustManagerFactory.getInstance(_trustStoreCertType);
- tmf.init(ts);
-
- // Initialize the SSLContext to work with our key managers.
- SSLContext sslContext = SSLContext.getInstance("TLS");
-
- if (customKeyManager != null)
- {
- sslContext.init(new KeyManager[]{customKeyManager},
- tmf.getTrustManagers(), null);
-
- }
- else
- {
- // Create keystore
- KeyStore ks = SSLUtil.getInitializedKeyStore(_keyStorePath,_keyStorePassword);
- // Set up key manager factory to use our key store
- KeyManagerFactory kmf = KeyManagerFactory.getInstance(_keyStoreCertType);
- kmf.init(ks, _keyStorePassword.toCharArray());
-
- sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
- }
-
- return sslContext;
- }
-
- /**
- * Creates a SSLContext factory appropriate for use with a client
- * @return SSLContext
- * @throws GeneralSecurityException
- * @throws IOException
- */
- public SSLContext buildClientContext() throws GeneralSecurityException, IOException
- {
- KeyStore ks = SSLUtil.getInitializedKeyStore(_trustStorePath,_trustStorePassword);
- TrustManagerFactory tmf = TrustManagerFactory.getInstance(_trustStoreCertType);
- tmf.init(ks);
- SSLContext context = SSLContext.getInstance("TLS");
- context.init(null, tmf.getTrustManagers(), null);
- return context;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/thread/DefaultThreadFactory.java b/java/common/src/main/java/org/apache/qpid/thread/DefaultThreadFactory.java
deleted file mode 100644
index a96dac4109..0000000000
--- a/java/common/src/main/java/org/apache/qpid/thread/DefaultThreadFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.thread;
-
-
-
-public class DefaultThreadFactory implements ThreadFactory
-{
-
- private final LoggingUncaughtExceptionHandler _loggingUncaughtExceptionHandler = new LoggingUncaughtExceptionHandler();
-
- public Thread createThread(Runnable r)
- {
- Thread t = new Thread(r);
- t.setUncaughtExceptionHandler(_loggingUncaughtExceptionHandler);
- return t;
- }
-
- public Thread createThread(Runnable r, int priority)
- {
- Thread t = createThread(r);
- t.setPriority(priority);
- return t;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/thread/LoggingUncaughtExceptionHandler.java b/java/common/src/main/java/org/apache/qpid/thread/LoggingUncaughtExceptionHandler.java
deleted file mode 100644
index 192675edcd..0000000000
--- a/java/common/src/main/java/org/apache/qpid/thread/LoggingUncaughtExceptionHandler.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.thread;
-
-import java.lang.Thread.UncaughtExceptionHandler;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *
- * An {@link UncaughtExceptionHandler} that writes the exception to the application log via
- * the SLF4J framework. Once registered with {@link Thread#setUncaughtExceptionHandler(UncaughtExceptionHandler)}
- * it will be invoked by the JVM when a thread has been <i>abruptly</i> terminated due to an uncaught exception.
- * Owing to the contract of {@link Runnable#run()}, the only possible exception types which can cause such a termination
- * are instances of {@link RuntimeException} and {@link Error}. These exceptions are catastrophic and the client must
- * restart the JVM.
- * <p>
- * The implementation also invokes {@link ThreadGroup#uncaughtException(Thread, Throwable)}. This
- * is done to retain compatibility with any monitoring solutions (for example, log scraping of
- * standard error) that existing users of older Qpid client libraries may have in place.
- *
- */
-public class LoggingUncaughtExceptionHandler implements UncaughtExceptionHandler
-{
- private static final Logger _logger = LoggerFactory.getLogger(LoggingUncaughtExceptionHandler.class);
-
- @Override
- public void uncaughtException(Thread t, Throwable e)
- {
- try
- {
- _logger.error("Uncaught exception in thread \"{}\"", t.getName(), e);
- }
- finally
- {
- // Invoke the thread group's handler too for compatibility with any
- // existing clients who are already scraping stderr for such conditions.
- t.getThreadGroup().uncaughtException(t, e);
- }
- }
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/thread/QpidThreadExecutor.java b/java/common/src/main/java/org/apache/qpid/thread/QpidThreadExecutor.java
deleted file mode 100644
index 38f60c04fe..0000000000
--- a/java/common/src/main/java/org/apache/qpid/thread/QpidThreadExecutor.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.thread;
-
-import org.apache.qpid.thread.Threading;
-
-import edu.emory.mathcs.backport.java.util.concurrent.Executor;
-
-public class QpidThreadExecutor implements Executor
-{
- public void execute(Runnable command)
- {
- try
- {
- Threading.getThreadFactory().createThread(command).start();
- }
- catch(Exception e)
- {
- throw new RuntimeException("Error creating a thread using Qpid thread factory",e);
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/thread/RealtimeThreadFactory.java b/java/common/src/main/java/org/apache/qpid/thread/RealtimeThreadFactory.java
deleted file mode 100644
index 95a8d192c5..0000000000
--- a/java/common/src/main/java/org/apache/qpid/thread/RealtimeThreadFactory.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.apache.qpid.thread;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.lang.reflect.Constructor;
-
-public class RealtimeThreadFactory implements ThreadFactory
-{
- private final LoggingUncaughtExceptionHandler _loggingUncaughtExceptionHandler = new LoggingUncaughtExceptionHandler();
-
- private Class threadClass;
- private Constructor threadConstructor;
- private Constructor priorityParameterConstructor;
- private int defaultRTThreadPriority = 20;
-
- public RealtimeThreadFactory() throws Exception
- {
- defaultRTThreadPriority = Integer.getInteger("qpid.rt_thread_priority",20);
- threadClass = Class.forName("javax.realtime.RealtimeThread");
-
- Class schedulingParametersClass = Class.forName("javax.realtime.SchedulingParameters");
- Class releaseParametersClass = Class.forName("javax.realtime.ReleaseParameters");
- Class memoryParametersClass = Class.forName("javax.realtime.MemoryParameters");
- Class memoryAreaClass = Class.forName("javax.realtime.MemoryArea");
- Class processingGroupParametersClass = Class.forName("javax.realtime.ProcessingGroupParameters");
-
- Class[] paramTypes = new Class[]{schedulingParametersClass,
- releaseParametersClass,
- memoryParametersClass,
- memoryAreaClass,
- processingGroupParametersClass,
- java.lang.Runnable.class};
-
- threadConstructor = threadClass.getConstructor(paramTypes);
-
- Class priorityParameterClass = Class.forName("javax.realtime.PriorityParameters");
- priorityParameterConstructor = priorityParameterClass.getConstructor(new Class[]{int.class});
- }
-
- public Thread createThread(Runnable r) throws Exception
- {
- return createThread(r,defaultRTThreadPriority);
- }
-
- public Thread createThread(Runnable r, int priority) throws Exception
- {
- Object priorityParams = priorityParameterConstructor.newInstance(priority);
- Thread thread = (Thread)threadConstructor.newInstance(priorityParams,null,null,null,null,r);
- thread.setUncaughtExceptionHandler(_loggingUncaughtExceptionHandler);
- return thread;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/thread/ThreadFactory.java b/java/common/src/main/java/org/apache/qpid/thread/ThreadFactory.java
deleted file mode 100644
index 4b8937acbd..0000000000
--- a/java/common/src/main/java/org/apache/qpid/thread/ThreadFactory.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.apache.qpid.thread;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-public interface ThreadFactory
-{
- public Thread createThread(Runnable r) throws Exception;
- public Thread createThread(Runnable r, int priority) throws Exception;
-}
diff --git a/java/common/src/main/java/org/apache/qpid/thread/Threading.java b/java/common/src/main/java/org/apache/qpid/thread/Threading.java
deleted file mode 100644
index 603e8a7441..0000000000
--- a/java/common/src/main/java/org/apache/qpid/thread/Threading.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.apache.qpid.thread;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-public final class Threading
-{
- private static ThreadFactory threadFactory;
-
- static {
- try
- {
- Class threadFactoryClass =
- Class.forName(System.getProperty("qpid.thread_factory",
- "org.apache.qpid.thread.DefaultThreadFactory"));
-
- threadFactory = (ThreadFactory)threadFactoryClass.newInstance();
- }
- catch(Exception e)
- {
- throw new Error("Error occured while loading thread factory",e);
- }
- }
-
- public static ThreadFactory getThreadFactory()
- {
- return threadFactory;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Binary.java b/java/common/src/main/java/org/apache/qpid/transport/Binary.java
deleted file mode 100644
index 491a7ac218..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Binary.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.nio.ByteBuffer;
-
-import static org.apache.qpid.transport.util.Functions.*;
-
-
-/**
- * Binary
- *
- */
-
-public final class Binary
-{
-
- private byte[] bytes;
- private int offset;
- private int size;
- private int hash = 0;
-
- public Binary(byte[] bytes, int offset, int size)
- {
- if (offset + size > bytes.length)
- {
- throw new ArrayIndexOutOfBoundsException();
- }
-
- this.bytes = bytes;
- this.offset = offset;
- this.size = size;
- }
-
- public Binary(byte[] bytes)
- {
- this(bytes, 0, bytes.length);
- }
-
- public final byte[] getBytes()
- {
- byte[] result = new byte[size];
- System.arraycopy(bytes, offset, result, 0, size);
- return result;
- }
-
- public final byte[] array()
- {
- return bytes;
- }
-
- public final int offset()
- {
- return offset;
- }
-
- public final int size()
- {
- return size;
- }
-
- public final Binary slice(int low, int high)
- {
- int sz;
-
- if (high < 0)
- {
- sz = size + high;
- }
- else
- {
- sz = high - low;
- }
-
- if (sz < 0)
- {
- sz = 0;
- }
-
- return new Binary(bytes, offset + low, sz);
- }
-
- public final int hashCode()
- {
- if (hash == 0)
- {
- int hc = 0;
- for (int i = 0; i < size; i++)
- {
- hc = 31*hc + (0xFF & bytes[offset + i]);
- }
- hash = hc;
- }
-
- return hash;
- }
-
- public final boolean equals(Object o)
- {
- if (!(o instanceof Binary))
- {
- return false;
- }
-
- Binary buf = (Binary) o;
- if (this.size != buf.size)
- {
- return false;
- }
-
- for (int i = 0; i < size; i++)
- {
- if (bytes[offset + i] != buf.bytes[buf.offset + i])
- {
- return false;
- }
- }
-
- return true;
- }
-
- public String toString()
- {
- return str(ByteBuffer.wrap(bytes, offset, size));
- }
-
- public boolean hasExcessCapacity()
- {
- return size != bytes.length;
- }
-
- public Binary copy()
- {
- return new Binary(getBytes());
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Binding.java b/java/common/src/main/java/org/apache/qpid/transport/Binding.java
deleted file mode 100644
index 8418c42189..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Binding.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * Binding
- *
- */
-
-public interface Binding<E,T>
-{
-
- E endpoint(Sender<T> sender);
-
- Receiver<T> receiver(E endpoint);
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java b/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java
deleted file mode 100644
index c8b7ad2a5e..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ClientDelegate.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import org.ietf.jgss.GSSContext;
-import org.ietf.jgss.GSSException;
-import org.ietf.jgss.GSSManager;
-import org.ietf.jgss.GSSName;
-import org.ietf.jgss.Oid;
-
-import org.apache.qpid.security.UsernamePasswordCallbackHandler;
-import static org.apache.qpid.transport.Connection.State.OPEN;
-import static org.apache.qpid.transport.Connection.State.RESUMING;
-import org.apache.qpid.transport.util.Logger;
-
-import javax.security.sasl.Sasl;
-import javax.security.sasl.SaslClient;
-import javax.security.sasl.SaslException;
-import java.lang.management.ManagementFactory;
-import java.lang.management.RuntimeMXBean;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * ClientDelegate
- *
- */
-
-public class ClientDelegate extends ConnectionDelegate
-{
- private static final Logger log = Logger.get(ClientDelegate.class);
-
- private static final String KRB5_OID_STR = "1.2.840.113554.1.2.2";
- protected static final Oid KRB5_OID;
-
- static
- {
- Oid oid;
- try
- {
- oid = new Oid(KRB5_OID_STR);
- }
- catch (GSSException ignore)
- {
- oid = null;
- }
-
- KRB5_OID = oid;
- }
-
- private List<String> clientMechs;
- private ConnectionSettings conSettings;
-
- public ClientDelegate(ConnectionSettings settings)
- {
- this.conSettings = settings;
- this.clientMechs = Arrays.asList(settings.getSaslMechs().split(" "));
- }
-
- public void init(Connection conn, ProtocolHeader hdr)
- {
- if (!(hdr.getMajor() == 0 && hdr.getMinor() == 10))
- {
- conn.exception(new ProtocolVersionException(hdr.getMajor(), hdr.getMinor()));
- }
- }
-
- @Override
- public void connectionStart(Connection conn, ConnectionStart start)
- {
- Map<String,Object> clientProperties = new HashMap<String,Object>();
-
- if(this.conSettings.getClientProperties() != null)
- {
- clientProperties.putAll(this.conSettings.getClientProperties());
- }
-
- clientProperties.put("qpid.session_flow", 1);
- clientProperties.put("qpid.client_pid",getPID());
- clientProperties.put("qpid.client_process",
- System.getProperty("qpid.client_process","Qpid Java Client"));
-
- List<Object> brokerMechs = start.getMechanisms();
- if (brokerMechs == null || brokerMechs.isEmpty())
- {
- conn.connectionStartOk
- (clientProperties, null, null, conn.getLocale());
- return;
- }
-
- List<String> choosenMechs = new ArrayList<String>();
- for (String mech:clientMechs)
- {
- if (brokerMechs.contains(mech))
- {
- choosenMechs.add(mech);
- }
- }
-
- if (choosenMechs.size() == 0)
- {
- conn.exception(new ConnectionException("The following SASL mechanisms " +
- clientMechs.toString() +
- " specified by the client are not supported by the broker"));
- return;
- }
-
- String[] mechs = new String[choosenMechs.size()];
- choosenMechs.toArray(mechs);
-
- conn.setServerProperties(start.getServerProperties());
-
- try
- {
- Map<String,Object> saslProps = new HashMap<String,Object>();
- if (conSettings.isUseSASLEncryption())
- {
- saslProps.put(Sasl.QOP, "auth-conf");
- }
- UsernamePasswordCallbackHandler handler =
- new UsernamePasswordCallbackHandler();
- handler.initialise(conSettings.getUsername(), conSettings.getPassword());
- SaslClient sc = Sasl.createSaslClient
- (mechs, null, conSettings.getSaslProtocol(), conSettings.getSaslServerName(), saslProps, handler);
- conn.setSaslClient(sc);
-
- byte[] response = sc.hasInitialResponse() ?
- sc.evaluateChallenge(new byte[0]) : null;
- conn.connectionStartOk
- (clientProperties, sc.getMechanismName(), response,
- conn.getLocale());
- }
- catch (SaslException e)
- {
- conn.exception(e);
- }
- }
-
- @Override
- public void connectionSecure(Connection conn, ConnectionSecure secure)
- {
- SaslClient sc = conn.getSaslClient();
- try
- {
- byte[] response = sc.evaluateChallenge(secure.getChallenge());
- conn.connectionSecureOk(response);
- }
- catch (SaslException e)
- {
- conn.exception(e);
- }
- }
-
- @Override
- public void connectionTune(Connection conn, ConnectionTune tune)
- {
- int hb_interval = calculateHeartbeatInterval(conSettings.getHeartbeatInterval(),
- tune.getHeartbeatMin(),
- tune.getHeartbeatMax()
- );
- conn.connectionTuneOk(tune.getChannelMax(),
- tune.getMaxFrameSize(),
- hb_interval);
- // The idle timeout is twice the heartbeat amount (in milisecs)
- conn.setIdleTimeout(hb_interval*1000*2);
-
- int channelMax = tune.getChannelMax();
- //0 means no implied limit, except available server resources
- //(or that forced by protocol limitations [0xFFFF])
- conn.setChannelMax(channelMax == 0 ? Connection.MAX_CHANNEL_MAX : channelMax);
-
- conn.connectionOpen(conSettings.getVhost(), null, Option.INSIST);
- }
-
- @Override
- public void connectionOpenOk(Connection conn, ConnectionOpenOk ok)
- {
- SaslClient sc = conn.getSaslClient();
- if (sc != null)
- {
- if (sc.getMechanismName().equals("GSSAPI"))
- {
- String id = getKerberosUser();
- if (id != null)
- {
- conn.setUserID(id);
- }
- }
- else if (sc.getMechanismName().equals("EXTERNAL"))
- {
- if (conn.getSecurityLayer() != null)
- {
- conn.setUserID(conn.getSecurityLayer().getUserID());
- }
- }
- }
-
- if (conn.isConnectionResuming())
- {
- conn.setState(RESUMING);
- }
- else
- {
- conn.setState(OPEN);
- }
- }
-
- @Override
- public void connectionRedirect(Connection conn, ConnectionRedirect redir)
- {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void connectionHeartbeat(Connection conn, ConnectionHeartbeat hearbeat)
- {
- conn.connectionHeartbeat();
- }
-
- /**
- * Currently the spec specified the min and max for heartbeat using secs
- */
- private int calculateHeartbeatInterval(int heartbeat,int min, int max)
- {
- int i = heartbeat;
- if (i == 0)
- {
- log.info("Idle timeout is 0 sec. Heartbeats are disabled.");
- return 0; // heartbeats are disabled.
- }
- else if (i >= min && i <= max)
- {
- return i;
- }
- else
- {
- log.info("The broker does not support the configured connection idle timeout of %s sec," +
- " using the brokers max supported value of %s sec instead.", i,max);
- return max;
- }
- }
-
- private int getPID()
- {
- RuntimeMXBean rtb = ManagementFactory.getRuntimeMXBean();
- String processName = rtb.getName();
- if (processName != null && processName.indexOf('@')>0)
- {
- try
- {
- return Integer.parseInt(processName.substring(0,processName.indexOf('@')));
- }
- catch(Exception e)
- {
- log.warn("Unable to get the client PID due to error",e);
- return -1;
- }
- }
- else
- {
- log.warn("Unable to get the client PID due to unsupported format : " + processName);
- return -1;
- }
-
- }
-
- private String getKerberosUser()
- {
- log.debug("Obtaining userID from kerberos");
- String service = conSettings.getSaslProtocol() + "@" + conSettings.getSaslServerName();
- GSSManager manager = GSSManager.getInstance();
-
- try
- {
- GSSName acceptorName = manager.createName(service,
- GSSName.NT_HOSTBASED_SERVICE, KRB5_OID);
-
- GSSContext secCtx = manager.createContext(acceptorName,
- KRB5_OID,
- null,
- GSSContext.INDEFINITE_LIFETIME);
-
- secCtx.initSecContext(new byte[0], 0, 1);
-
- if (secCtx.getSrcName() != null)
- {
- return secCtx.getSrcName().toString();
- }
-
- }
- catch (GSSException e)
- {
- log.warn("Unable to retrieve userID from Kerberos due to error",e);
- }
-
- return null;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Connection.java b/java/common/src/main/java/org/apache/qpid/transport/Connection.java
deleted file mode 100644
index dc32569ee8..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Connection.java
+++ /dev/null
@@ -1,703 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import static org.apache.qpid.transport.Connection.State.CLOSED;
-import static org.apache.qpid.transport.Connection.State.CLOSING;
-import static org.apache.qpid.transport.Connection.State.NEW;
-import static org.apache.qpid.transport.Connection.State.OPEN;
-import static org.apache.qpid.transport.Connection.State.OPENING;
-import static org.apache.qpid.transport.Connection.State.RESUMING;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicLong;
-
-import javax.security.sasl.SaslClient;
-import javax.security.sasl.SaslServer;
-
-import org.apache.qpid.transport.network.security.SecurityLayer;
-import org.apache.qpid.transport.util.Logger;
-import org.apache.qpid.transport.util.Waiter;
-import org.apache.qpid.util.Strings;
-
-
-/**
- * Connection
- *
- * @author Rafael H. Schloming
- *
- * @todo the channels map should probably be replaced with something
- * more efficient, e.g. an array or a map implementation that can use
- * short instead of Short
- */
-
-public class Connection extends ConnectionInvoker
- implements Receiver<ProtocolEvent>, Sender<ProtocolEvent>
-{
-
- protected static final Logger log = Logger.get(Connection.class);
-
- //Usable channels are numbered 0 to <ChannelMax> - 1
- public static final int MAX_CHANNEL_MAX = 0xFFFF;
- public static final int MIN_USABLE_CHANNEL_NUM = 0;
-
- public enum State { NEW, CLOSED, OPENING, OPEN, CLOSING, CLOSE_RCVD, RESUMING }
-
- static class DefaultConnectionListener implements ConnectionListener
- {
- public void opened(Connection conn) {}
- public void exception(Connection conn, ConnectionException exception)
- {
- log.error(exception, "connection exception");
- }
- public void closed(Connection conn) {}
- }
-
- public static interface SessionFactory
- {
- Session newSession(Connection conn, Binary name, long expiry);
- }
-
- private static final class DefaultSessionFactory implements SessionFactory
- {
-
- public Session newSession(final Connection conn, final Binary name, final long expiry)
- {
- return new Session(conn, name, expiry);
- }
- }
-
- private static final SessionFactory DEFAULT_SESSION_FACTORY = new DefaultSessionFactory();
-
- private SessionFactory _sessionFactory = DEFAULT_SESSION_FACTORY;
-
- private ConnectionDelegate delegate;
- private Sender<ProtocolEvent> sender;
-
- final private Map<Binary,Session> sessions = new HashMap<Binary,Session>();
- final private Map<Integer,Session> channels = new HashMap<Integer,Session>();
-
- private State state = NEW;
- final private Object lock = new Object();
- private long timeout = 60000;
- private List<ConnectionListener> listeners = new ArrayList<ConnectionListener>();
- private ConnectionException error = null;
-
- private int channelMax = 1;
- private String locale;
- private SaslServer saslServer;
- private SaslClient saslClient;
- private int idleTimeout = 0;
- private String _authorizationID;
- private Map<String,Object> _serverProperties;
- private String userID;
- private ConnectionSettings conSettings;
- private SecurityLayer securityLayer;
- private String _clientId;
-
- private static final AtomicLong idGenerator = new AtomicLong(0);
- private final long _connectionId = idGenerator.incrementAndGet();
- private final AtomicBoolean connectionLost = new AtomicBoolean(false);
-
- public Connection() {}
-
- public void setConnectionDelegate(ConnectionDelegate delegate)
- {
- this.delegate = delegate;
- }
-
- public void addConnectionListener(ConnectionListener listener)
- {
- listeners.add(listener);
- }
-
- public Sender<ProtocolEvent> getSender()
- {
- return sender;
- }
-
- public void setSender(Sender<ProtocolEvent> sender)
- {
- this.sender = sender;
- sender.setIdleTimeout(idleTimeout);
- }
-
- protected void setState(State state)
- {
- synchronized (lock)
- {
- this.state = state;
- lock.notifyAll();
- }
- }
-
- public String getClientId()
- {
- return _clientId;
- }
-
- public void setClientId(String id)
- {
- _clientId = id;
- }
-
- void setLocale(String locale)
- {
- this.locale = locale;
- }
-
- String getLocale()
- {
- return locale;
- }
-
- void setSaslServer(SaslServer saslServer)
- {
- this.saslServer = saslServer;
- }
-
- SaslServer getSaslServer()
- {
- return saslServer;
- }
-
- void setSaslClient(SaslClient saslClient)
- {
- this.saslClient = saslClient;
- }
-
- public SaslClient getSaslClient()
- {
- return saslClient;
- }
-
- public void connect(String host, int port, String vhost, String username, String password)
- {
- connect(host, port, vhost, username, password, false);
- }
-
- public void connect(String host, int port, String vhost, String username, String password, boolean ssl)
- {
- connect(host, port, vhost, username, password, ssl,"PLAIN");
- }
-
- public void connect(String host, int port, String vhost, String username, String password, boolean ssl,String saslMechs)
- {
- connect(host, port, vhost, username, password, ssl,saslMechs, Collections.EMPTY_MAP);
- }
-
-
- public void connect(String host, int port, String vhost, String username, String password, boolean ssl,String saslMechs,Map<String,Object> clientProps)
- {
- ConnectionSettings settings = new ConnectionSettings();
- settings.setHost(host);
- settings.setPort(port);
- settings.setVhost(vhost);
- settings.setUsername(username);
- settings.setPassword(password);
- settings.setUseSSL(ssl);
- settings.setSaslMechs(saslMechs);
- settings.setClientProperties(clientProps);
- connect(settings);
- }
-
- public void connect(ConnectionSettings settings)
- {
-
- synchronized (lock)
- {
- conSettings = settings;
- state = OPENING;
- userID = settings.getUsername();
- delegate = new ClientDelegate(settings);
-
- TransportBuilder transport = new TransportBuilder();
- transport.init(this);
- this.sender = transport.buildSenderPipe();
- transport.buildReceiverPipe(this);
- this.securityLayer = transport.getSecurityLayer();
-
- send(new ProtocolHeader(1, 0, 10));
-
- Waiter w = new Waiter(lock, timeout);
- while (w.hasTime() && state == OPENING && error == null)
- {
- w.await();
- }
-
- if (error != null)
- {
- ConnectionException t = error;
- error = null;
- try
- {
- close();
- }
- catch (ConnectionException ce)
- {
- if (!(t instanceof ProtocolVersionException))
- {
- throw ce;
- }
- }
- t.rethrow();
- }
-
- switch (state)
- {
- case OPENING:
- close();
- throw new ConnectionException("connect() timed out");
- case OPEN:
- case RESUMING:
- connectionLost.set(false);
- break;
- case CLOSED:
- throw new ConnectionException("connect() aborted");
- default:
- throw new IllegalStateException(String.valueOf(state));
- }
- }
-
- for (ConnectionListener listener: listeners)
- {
- listener.opened(this);
- }
- }
-
- public Session createSession()
- {
- return createSession(0);
- }
-
- public Session createSession(long expiry)
- {
- return createSession(UUID.randomUUID().toString(), expiry);
- }
-
- public Session createSession(String name)
- {
- return createSession(name, 0);
- }
-
- public Session createSession(String name, long expiry)
- {
- return createSession(Strings.toUTF8(name), expiry);
- }
-
- public Session createSession(byte[] name, long expiry)
- {
- return createSession(new Binary(name), expiry);
- }
-
- public Session createSession(Binary name, long expiry)
- {
- synchronized (lock)
- {
- Waiter w = new Waiter(lock, timeout);
- while (w.hasTime() && state != OPEN && error == null)
- {
- w.await();
- }
-
- if (state != OPEN)
- {
- throw new ConnectionException("Timed out waiting for connection to be ready. Current state is :" + state);
- }
-
- Session ssn = _sessionFactory.newSession(this, name, expiry);
- sessions.put(name, ssn);
- map(ssn);
- ssn.attach();
- return ssn;
- }
- }
-
- void removeSession(Session ssn)
- {
- synchronized (lock)
- {
- sessions.remove(ssn.getName());
- }
- }
-
- public void setSessionFactory(SessionFactory sessionFactory)
- {
- assert sessionFactory != null;
-
- _sessionFactory = sessionFactory;
- }
-
- public long getConnectionId()
- {
- return _connectionId;
- }
-
- public ConnectionDelegate getConnectionDelegate()
- {
- return delegate;
- }
-
- public void received(ProtocolEvent event)
- {
- log.debug("RECV: [%s] %s", this, event);
- event.delegate(this, delegate);
- }
-
- public void send(ProtocolEvent event)
- {
- log.debug("SEND: [%s] %s", this, event);
- Sender s = sender;
- if (s == null)
- {
- throw new ConnectionException("connection closed");
- }
- s.send(event);
- }
-
- public void flush()
- {
- log.debug("FLUSH: [%s]", this);
- sender.flush();
- }
-
- protected void invoke(Method method)
- {
- method.setChannel(0);
- send(method);
- if (!method.isBatch())
- {
- flush();
- }
- }
-
- public void dispatch(Method method)
- {
- Session ssn = getSession(method.getChannel());
- if(ssn != null)
- {
- ssn.received(method);
- }
- else
- {
- throw new ProtocolViolationException(
- "Received frames for an already dettached session", null);
- }
- }
-
- public int getChannelMax()
- {
- return channelMax;
- }
-
- void setChannelMax(int max)
- {
- channelMax = max;
- }
-
- private int map(Session ssn)
- {
- synchronized (lock)
- {
- //For a negotiated channelMax N, there are channels 0 to N-1 available.
- for (int i = 0; i < getChannelMax(); i++)
- {
- if (!channels.containsKey(i))
- {
- map(ssn, i);
- return i;
- }
- }
-
- throw new RuntimeException("no more channels available");
- }
- }
-
- void map(Session ssn, int channel)
- {
- synchronized (lock)
- {
- channels.put(channel, ssn);
- ssn.setChannel(channel);
- }
- }
-
- void unmap(Session ssn)
- {
- synchronized (lock)
- {
- channels.remove(ssn.getChannel());
- }
- }
-
- protected Session getSession(int channel)
- {
- synchronized (lock)
- {
- return channels.get(channel);
- }
- }
-
- public void resume()
- {
- synchronized (lock)
- {
- for (Session ssn : sessions.values())
- {
- if (ssn.isTransacted())
- {
- removeSession(ssn);
- ssn.setState(Session.State.CLOSED);
- }
- else
- {
- map(ssn);
- ssn.attach();
- ssn.resume();
- }
- }
- setState(OPEN);
- }
- }
-
- public void exception(ConnectionException e)
- {
- connectionLost.set(true);
- synchronized (lock)
- {
- switch (state)
- {
- case OPENING:
- case CLOSING:
- error = e;
- lock.notifyAll();
- return;
- }
- }
-
- for (ConnectionListener listener: listeners)
- {
- listener.exception(this, e);
- }
-
- }
-
- public void exception(Throwable t)
- {
- exception(new ConnectionException(t));
- }
-
- void closeCode(ConnectionClose close)
- {
- synchronized (lock)
- {
- for (Session ssn : channels.values())
- {
- ssn.closeCode(close);
- }
- ConnectionCloseCode code = close.getReplyCode();
- if (code != ConnectionCloseCode.NORMAL)
- {
- exception(new ConnectionException(close));
- }
- }
- }
-
- public void closed()
- {
- if (state == OPEN)
- {
- exception(new ConnectionException("connection aborted"));
- }
-
- log.debug("connection closed: %s", this);
-
- synchronized (lock)
- {
- List<Session> values = new ArrayList<Session>(channels.values());
- for (Session ssn : values)
- {
- ssn.closed();
- }
-
- try
- {
- sender.close();
- }
- catch(Exception e)
- {
- // ignore.
- }
- sender = null;
- setState(CLOSED);
- }
-
- for (ConnectionListener listener: listeners)
- {
- listener.closed(this);
- }
- }
-
- public void close()
- {
- close(ConnectionCloseCode.NORMAL, null);
- }
-
- public void mgmtClose()
- {
- close(ConnectionCloseCode.CONNECTION_FORCED, "The connection was closed using the broker's management interface.");
- }
-
- public void close(ConnectionCloseCode replyCode, String replyText, Option ... _options)
- {
- synchronized (lock)
- {
- switch (state)
- {
- case OPEN:
- state = CLOSING;
- connectionClose(replyCode, replyText, _options);
- Waiter w = new Waiter(lock, timeout);
- while (w.hasTime() && state == CLOSING && error == null)
- {
- w.await();
- }
-
- if (error != null)
- {
- close(replyCode, replyText, _options);
- throw new ConnectionException(error);
- }
-
- switch (state)
- {
- case CLOSING:
- close(replyCode, replyText, _options);
- throw new ConnectionException("close() timed out");
- case CLOSED:
- break;
- default:
- throw new IllegalStateException(String.valueOf(state));
- }
- break;
- case CLOSED:
- break;
- default:
- if (sender != null)
- {
- sender.close();
- w = new Waiter(lock, timeout);
- while (w.hasTime() && sender != null && error == null)
- {
- w.await();
- }
-
- if (error != null)
- {
- throw new ConnectionException(error);
- }
-
- if (sender != null)
- {
- throw new ConnectionException("close() timed out");
- }
- }
- break;
- }
- }
- }
-
- public void setIdleTimeout(int i)
- {
- idleTimeout = i;
- if (sender != null)
- {
- sender.setIdleTimeout(i);
- }
- }
-
- public int getIdleTimeout()
- {
- return idleTimeout;
- }
-
- public void setAuthorizationID(String authorizationID)
- {
- _authorizationID = authorizationID;
- }
-
- public String getAuthorizationID()
- {
- return _authorizationID;
- }
-
- public String getUserID()
- {
- return userID;
- }
-
- public void setUserID(String id)
- {
- userID = id;
- }
-
- public void setServerProperties(final Map<String, Object> serverProperties)
- {
- _serverProperties = serverProperties == null ? Collections.EMPTY_MAP : serverProperties;
- }
-
- public Map<String, Object> getServerProperties()
- {
- return _serverProperties;
- }
-
- public String toString()
- {
- return String.format("conn:%x", System.identityHashCode(this));
- }
-
- public ConnectionSettings getConnectionSettings()
- {
- return conSettings;
- }
-
- public SecurityLayer getSecurityLayer()
- {
- return securityLayer;
- }
-
- public boolean isConnectionResuming()
- {
- return connectionLost.get();
- }
-
- protected Collection<Session> getChannels()
- {
- return channels.values();
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java b/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
deleted file mode 100644
index 88dd2d6afa..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import org.apache.qpid.transport.util.Logger;
-
-import static org.apache.qpid.transport.Connection.State.*;
-
-
-/**
- * ConnectionDelegate
- *
- * @author Rafael H. Schloming
- */
-
-/**
- * Currently only implemented client specific methods
- * the server specific methods are dummy impls for testing
- *
- * the connectionClose is kind of different for both sides
- */
-public abstract class ConnectionDelegate
- extends MethodDelegate<Connection>
- implements ProtocolDelegate<Connection>
-{
-
- private static final Logger log = Logger.get(ConnectionDelegate.class);
-
- public void control(Connection conn, Method method)
- {
- method.dispatch(conn, this);
- }
-
- public void command(Connection conn, Method method)
- {
- method.dispatch(conn, this);
- }
-
- public void error(Connection conn, ProtocolError error)
- {
- conn.exception(new ConnectionException(error.getMessage()));
- }
-
- public void handle(Connection conn, Method method)
- {
- conn.dispatch(method);
- }
-
- @Override public void connectionHeartbeat(Connection conn, ConnectionHeartbeat hearbeat)
- {
- // do nothing
- }
-
- @Override public void connectionClose(Connection conn, ConnectionClose close)
- {
- conn.connectionCloseOk();
- conn.getSender().close();
- conn.closeCode(close);
- conn.setState(CLOSE_RCVD);
- }
-
- @Override public void connectionCloseOk(Connection conn, ConnectionCloseOk ok)
- {
- conn.getSender().close();
- }
-
- @Override public void sessionDetach(Connection conn, SessionDetach dtc)
- {
- Session ssn = conn.getSession(dtc.getChannel());
- ssn.sessionDetached(dtc.getName(), SessionDetachCode.NORMAL);
- conn.unmap(ssn);
- ssn.closed();
- }
-
- @Override public void sessionDetached(Connection conn, SessionDetached dtc)
- {
- Session ssn = conn.getSession(dtc.getChannel());
- if (ssn != null)
- {
- conn.unmap(ssn);
- ssn.closed();
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java b/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java
deleted file mode 100644
index 6d3972eb43..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * ConnectionException
- *
- */
-
-public class ConnectionException extends TransportException
-{
-
- private ConnectionClose close;
-
- public ConnectionException(String message, ConnectionClose close, Throwable cause)
- {
- super(message, cause);
- this.close = close;
- }
-
- public ConnectionException(String message)
- {
- this(message, null, null);
- }
-
- public ConnectionException(String message, Throwable cause)
- {
- this(message, null, cause);
- }
-
- public ConnectionException(Throwable cause)
- {
- this(cause.getMessage(), null, cause);
- }
-
- public ConnectionException(ConnectionClose close)
- {
- this(close.getReplyText(), close, null);
- }
-
- public ConnectionClose getClose()
- {
- return close;
- }
-
- @Override public void rethrow()
- {
- throw new ConnectionException(getMessage(), close, this);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ConnectionListener.java b/java/common/src/main/java/org/apache/qpid/transport/ConnectionListener.java
deleted file mode 100644
index 616e76825a..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ConnectionListener.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * ConnectionListener
- *
- */
-
-public interface ConnectionListener
-{
-
- void opened(Connection connection);
-
- void exception(Connection connection, ConnectionException exception);
-
- void closed(Connection connection);
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ConnectionSettings.java b/java/common/src/main/java/org/apache/qpid/transport/ConnectionSettings.java
deleted file mode 100644
index 08678b213b..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ConnectionSettings.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.util.Map;
-
-/**
- * A ConnectionSettings object can only be associated with
- * one Connection object. I have added an assertion that will
- * throw an exception if it is used by more than on Connection
- *
- */
-public class ConnectionSettings
-{
- String protocol = "tcp";
- String host = "localhost";
- String vhost;
- String username = "guest";
- String password = "guest";
- int port = 5672;
- boolean tcpNodelay = Boolean.getBoolean("amqj.tcp_nodelay");
- int maxChannelCount = 32767;
- int maxFrameSize = 65535;
- int heartbeatInterval;
- int readBufferSize = 65535;
- int writeBufferSize = 65535;
- long transportTimeout = 60000;
-
- // SSL props
- boolean useSSL;
- String keyStorePath = System.getProperty("javax.net.ssl.keyStore");
- String keyStorePassword = System.getProperty("javax.net.ssl.keyStorePassword");
- String keyStoreCertType = System.getProperty("qpid.ssl.keyStoreCertType","SunX509");;
- String trustStoreCertType = System.getProperty("qpid.ssl.trustStoreCertType","SunX509");;
- String trustStorePath = System.getProperty("javax.net.ssl.trustStore");;
- String trustStorePassword = System.getProperty("javax.net.ssl.trustStorePassword");;
- String certAlias;
- boolean verifyHostname;
-
- // SASL props
- String saslMechs = System.getProperty("qpid.sasl_mechs", "PLAIN");
- String saslProtocol = System.getProperty("qpid.sasl_protocol", "AMQP");
- String saslServerName = System.getProperty("qpid.sasl_server_name", "localhost");
- boolean useSASLEncryption;
-
- private Map<String, Object> _clientProperties;
-
- public boolean isTcpNodelay()
- {
- return tcpNodelay;
- }
-
- public void setTcpNodelay(boolean tcpNodelay)
- {
- this.tcpNodelay = tcpNodelay;
- }
-
- public int getHeartbeatInterval()
- {
- return heartbeatInterval;
- }
-
- public void setHeartbeatInterval(int heartbeatInterval)
- {
- this.heartbeatInterval = heartbeatInterval;
- }
-
- public String getProtocol()
- {
- return protocol;
- }
-
- public void setProtocol(String protocol)
- {
- this.protocol = protocol;
- }
-
- public String getHost()
- {
- return host;
- }
-
- public void setHost(String host)
- {
- this.host = host;
- }
-
- public int getPort()
- {
- return port;
- }
-
- public void setPort(int port)
- {
- this.port = port;
- }
-
- public String getVhost()
- {
- return vhost;
- }
-
- public void setVhost(String vhost)
- {
- this.vhost = vhost;
- }
-
- public String getUsername()
- {
- return username;
- }
-
- public void setUsername(String username)
- {
- this.username = username;
- }
-
- public String getPassword()
- {
- return password;
- }
-
- public void setPassword(String password)
- {
- this.password = password;
- }
-
- public boolean isUseSSL()
- {
- return useSSL;
- }
-
- public void setUseSSL(boolean useSSL)
- {
- this.useSSL = useSSL;
- }
-
- public boolean isUseSASLEncryption()
- {
- return useSASLEncryption;
- }
-
- public void setUseSASLEncryption(boolean useSASLEncryption)
- {
- this.useSASLEncryption = useSASLEncryption;
- }
-
- public String getSaslMechs()
- {
- return saslMechs;
- }
-
- public void setSaslMechs(String saslMechs)
- {
- this.saslMechs = saslMechs;
- }
-
- public String getSaslProtocol()
- {
- return saslProtocol;
- }
-
- public void setSaslProtocol(String saslProtocol)
- {
- this.saslProtocol = saslProtocol;
- }
-
- public String getSaslServerName()
- {
- return saslServerName;
- }
-
- public void setSaslServerName(String saslServerName)
- {
- this.saslServerName = saslServerName;
- }
-
- public int getMaxChannelCount()
- {
- return maxChannelCount;
- }
-
- public void setMaxChannelCount(int maxChannelCount)
- {
- this.maxChannelCount = maxChannelCount;
- }
-
- public int getMaxFrameSize()
- {
- return maxFrameSize;
- }
-
- public void setMaxFrameSize(int maxFrameSize)
- {
- this.maxFrameSize = maxFrameSize;
- }
-
- public void setClientProperties(final Map<String, Object> clientProperties)
- {
- _clientProperties = clientProperties;
- }
-
- public Map<String, Object> getClientProperties()
- {
- return _clientProperties;
- }
-
- public String getKeyStorePath()
- {
- return keyStorePath;
- }
-
- public void setKeyStorePath(String keyStorePath)
- {
- this.keyStorePath = keyStorePath;
- }
-
- public String getKeyStorePassword()
- {
- return keyStorePassword;
- }
-
- public void setKeyStorePassword(String keyStorePassword)
- {
- this.keyStorePassword = keyStorePassword;
- }
-
- public String getTrustStorePath()
- {
- return trustStorePath;
- }
-
- public void setTrustStorePath(String trustStorePath)
- {
- this.trustStorePath = trustStorePath;
- }
-
- public String getTrustStorePassword()
- {
- return trustStorePassword;
- }
-
- public void setTrustStorePassword(String trustStorePassword)
- {
- this.trustStorePassword = trustStorePassword;
- }
-
- public String getCertAlias()
- {
- return certAlias;
- }
-
- public void setCertAlias(String certAlias)
- {
- this.certAlias = certAlias;
- }
-
- public boolean isVerifyHostname()
- {
- return verifyHostname;
- }
-
- public void setVerifyHostname(boolean verifyHostname)
- {
- this.verifyHostname = verifyHostname;
- }
-
- public String getKeyStoreCertType()
- {
- return keyStoreCertType;
- }
-
- public void setKeyStoreCertType(String keyStoreCertType)
- {
- this.keyStoreCertType = keyStoreCertType;
- }
-
- public String getTrustStoreCertType()
- {
- return trustStoreCertType;
- }
-
- public void setTrustStoreCertType(String trustStoreCertType)
- {
- this.trustStoreCertType = trustStoreCertType;
- }
-
- public int getReadBufferSize()
- {
- return readBufferSize;
- }
-
- public void setReadBufferSize(int readBufferSize)
- {
- this.readBufferSize = readBufferSize;
- }
-
- public int getWriteBufferSize()
- {
- return writeBufferSize;
- }
-
- public void setWriteBufferSize(int writeBufferSize)
- {
- this.writeBufferSize = writeBufferSize;
- }
-
- public long getTransportTimeout()
- {
- return transportTimeout;
- }
-
- public void setTransportTimeout(long transportTimeout)
- {
- this.transportTimeout = transportTimeout;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Field.java b/java/common/src/main/java/org/apache/qpid/transport/Field.java
deleted file mode 100644
index bc6bf10041..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Field.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import org.apache.qpid.transport.codec.Decoder;
-import org.apache.qpid.transport.codec.Encoder;
-
-
-/**
- * Field
- *
- */
-
-public abstract class Field<C,T>
-{
-
- private final Class<C> container;
- private final Class<T> type;
- private final String name;
- private final int index;
-
- Field(Class<C> container, Class<T> type, String name, int index)
- {
- this.container = container;
- this.type = type;
- this.name = name;
- this.index = index;
- }
-
- public final Class<C> getContainer()
- {
- return container;
- }
-
- public final Class<T> getType()
- {
- return type;
- }
-
- public final String getName()
- {
- return name;
- }
-
- public final int getIndex()
- {
- return index;
- }
-
- protected final C check(Object struct)
- {
- return container.cast(struct);
- }
-
- public abstract boolean has(Object struct);
-
- public abstract void has(Object struct, boolean value);
-
- public abstract T get(Object struct);
-
- public abstract void read(Decoder dec, Object struct);
-
- public abstract void write(Encoder enc, Object struct);
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Future.java b/java/common/src/main/java/org/apache/qpid/transport/Future.java
deleted file mode 100644
index d8cde61af5..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Future.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * Future
- *
- * @author Rafael H. Schloming
- */
-
-public interface Future<T>
-{
-
- T get();
-
- boolean isDone();
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Header.java b/java/common/src/main/java/org/apache/qpid/transport/Header.java
deleted file mode 100644
index 9439e5e0de..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Header.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import org.apache.qpid.transport.network.Frame;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.LinkedHashMap;
-import java.nio.ByteBuffer;
-
-
-/**
- * Header
- *
- * @author Rafael H. Schloming
- */
-
-public class Header {
-
- private final Struct[] structs;
-
- public Header(List<Struct> structs)
- {
- this(structs.toArray(new Struct[structs.size()]));
- }
-
- public Header(Struct ... structs)
- {
- this.structs = structs;
- }
-
- public Struct[] getStructs()
- {
- return structs;
- }
-
-
- public <T> T get(Class<T> klass)
- {
- for (Struct st : structs)
- {
- if (klass.isInstance(st))
- {
- return (T) st;
- }
- }
-
- return null;
- }
-
- public String toString()
- {
- StringBuffer str = new StringBuffer();
- str.append(" Header(");
- boolean first = true;
- for (Struct s : structs)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- str.append(", ");
- }
- str.append(s);
- }
- str.append(")");
- return str.toString();
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Method.java b/java/common/src/main/java/org/apache/qpid/transport/Method.java
deleted file mode 100644
index 3c80180d0b..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Method.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import org.apache.qpid.transport.network.Frame;
-
-import java.nio.ByteBuffer;
-
-import static org.apache.qpid.transport.util.Functions.*;
-
-/**
- * Method
- *
- * @author Rafael H. Schloming
- */
-
-public abstract class Method extends Struct implements ProtocolEvent
-{
-
-
- public static final Method create(int type)
- {
- // XXX: should generate separate factories for separate
- // namespaces
- return (Method) StructFactory.createInstruction(type);
- }
-
- // XXX: command subclass?
- public static interface CompletionListener
- {
- public void onComplete(Method method);
- }
-
- private int id;
- private int channel;
- private boolean idSet = false;
- private boolean sync = false;
- private boolean batch = false;
- private boolean unreliable = false;
- private CompletionListener completionListener;
-
- public final int getId()
- {
- return id;
- }
-
- void setId(int id)
- {
- this.id = id;
- this.idSet = true;
- }
-
- boolean idSet()
- {
- return idSet;
- }
-
- public final int getChannel()
- {
- return channel;
- }
-
- public final void setChannel(int channel)
- {
- this.channel = channel;
- }
-
- public final boolean isSync()
- {
- return sync;
- }
-
- public final void setSync(boolean value)
- {
- this.sync = value;
- }
-
- public final boolean isBatch()
- {
- return batch;
- }
-
- final void setBatch(boolean value)
- {
- this.batch = value;
- }
-
- public final boolean isUnreliable()
- {
- return unreliable;
- }
-
- final void setUnreliable(boolean value)
- {
- this.unreliable = value;
- }
-
- public abstract boolean hasPayload();
-
- public Header getHeader()
- {
- return null;
- }
-
- public void setHeader(Header header)
- {
- throw new UnsupportedOperationException();
- }
-
- public ByteBuffer getBody()
- {
- return null;
- }
-
- public void setBody(ByteBuffer body)
- {
- throw new UnsupportedOperationException();
- }
-
- public int getBodySize()
- {
- ByteBuffer body = getBody();
- if (body == null)
- {
- return 0;
- }
- else
- {
- return body.remaining();
- }
- }
-
- public abstract byte getEncodedTrack();
-
- public abstract <C> void dispatch(C context, MethodDelegate<C> delegate);
-
- public <C> void delegate(C context, ProtocolDelegate<C> delegate)
- {
- if (getEncodedTrack() == Frame.L4)
- {
- delegate.command(context, this);
- }
- else
- {
- delegate.control(context, this);
- }
- }
-
-
- public void setCompletionListener(CompletionListener completionListener)
- {
- this.completionListener = completionListener;
- }
-
- public void complete()
- {
- if(completionListener!= null)
- {
- completionListener.onComplete(this);
- completionListener = null;
- }
- }
-
- public boolean hasCompletionListener()
- {
- return completionListener != null;
- }
-
- public String toString()
- {
- StringBuilder str = new StringBuilder();
-
- str.append("ch=");
- str.append(channel);
-
- if (getEncodedTrack() == Frame.L4 && idSet)
- {
- str.append(" id=");
- str.append(id);
- }
-
- if (sync || batch)
- {
- str.append(" ");
- str.append("[");
- if (sync)
- {
- str.append("S");
- }
- if (batch)
- {
- str.append("B");
- }
- str.append("]");
- }
-
- str.append(" ");
- str.append(super.toString());
- Header hdr = getHeader();
- if (hdr != null)
- {
- for (Struct st : hdr.getStructs())
- {
- str.append("\n ");
- str.append(st);
- }
- }
- ByteBuffer body = getBody();
- if (body != null)
- {
- str.append("\n body=");
- str.append(str(body, 64));
- }
-
- return str.toString();
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/NetworkDriver.java b/java/common/src/main/java/org/apache/qpid/transport/NetworkDriver.java
deleted file mode 100644
index 86af97bf7e..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/NetworkDriver.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.net.BindException;
-import java.net.InetAddress;
-import java.net.SocketAddress;
-
-import org.apache.qpid.protocol.ProtocolEngine;
-import org.apache.qpid.protocol.ProtocolEngineFactory;
-import org.apache.qpid.ssl.SSLContextFactory;
-
-public interface NetworkDriver extends Sender<java.nio.ByteBuffer>
-{
- // Creates a NetworkDriver which attempts to connect to destination on port and attaches the ProtocolEngine to
- // it using the SSLContextFactory if provided
- void open(int port, InetAddress destination, ProtocolEngine engine,
- NetworkDriverConfiguration config, SSLContextFactory sslFactory)
- throws OpenException;
-
- // listens for incoming connections on the specified ports and address and creates a new NetworkDriver which
- // processes incoming connections with ProtocolEngines and SSLEngines created from the factories
- // (in the case of an SSLContextFactory, if provided)
- void bind (int port, InetAddress[] addresses, ProtocolEngineFactory protocolFactory,
- NetworkDriverConfiguration config, SSLContextFactory sslFactory) throws BindException;
-
- // Returns the remote address of the underlying socket
- SocketAddress getRemoteAddress();
-
- // Returns the local address of the underlying socket
- SocketAddress getLocalAddress();
-
- /**
- * The length of time after which the ProtocolEngines readIdle() method should be called if no data has been
- * read in seconds
- */
- void setMaxReadIdle(int idleTime);
-
- /**
- * The length of time after which the ProtocolEngines writeIdle() method should be called if no data has been
- * written in seconds
- */
- void setMaxWriteIdle(int idleTime);
-
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/transport/NetworkDriverConfiguration.java b/java/common/src/main/java/org/apache/qpid/transport/NetworkDriverConfiguration.java
deleted file mode 100644
index c38afe5dd5..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/NetworkDriverConfiguration.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-/**
- * This interface provides a means for NetworkDrivers to configure TCP options such as incoming and outgoing
- * buffer sizes and set particular options on the socket. NetworkDrivers should honour the values returned
- * from here if the underlying implementation supports them.
- */
-public interface NetworkDriverConfiguration
-{
- // Taken from Socket
- Boolean getKeepAlive();
- Boolean getOOBInline();
- Boolean getReuseAddress();
- Integer getSoLinger(); // null means off
- Integer getSoTimeout();
- Boolean getTcpNoDelay();
- Integer getTrafficClass();
-
- // The amount of memory in bytes to allocate to the incoming buffer
- Integer getReceiveBufferSize();
-
- // The amount of memory in bytes to allocate to the outgoing buffer
- Integer getSendBufferSize();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/OpenException.java b/java/common/src/main/java/org/apache/qpid/transport/OpenException.java
deleted file mode 100644
index 68fbb5e8ec..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/OpenException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.transport;
-
-import java.io.IOException;
-
-public class OpenException extends IOException
-{
-
- public OpenException(String string, Throwable lastException)
- {
- super(string, lastException);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ProtocolDelegate.java b/java/common/src/main/java/org/apache/qpid/transport/ProtocolDelegate.java
deleted file mode 100644
index a90948fc1d..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ProtocolDelegate.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * ProtocolDelegate
- *
- */
-
-public interface ProtocolDelegate<C>
-{
-
- void init(C context, ProtocolHeader header);
-
- void control(C context, Method control);
-
- void command(C context, Method command);
-
- void error(C context, ProtocolError error);
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ProtocolError.java b/java/common/src/main/java/org/apache/qpid/transport/ProtocolError.java
deleted file mode 100644
index 8a5edc302e..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ProtocolError.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import org.apache.qpid.transport.network.NetworkDelegate;
-import org.apache.qpid.transport.network.NetworkEvent;
-
-
-/**
- * ProtocolError
- *
- * @author Rafael H. Schloming
- */
-
-public final class ProtocolError implements NetworkEvent, ProtocolEvent
-{
-
- private int channel;
- private final byte track;
- private final String format;
- private final Object[] args;
-
- public ProtocolError(byte track, String format, Object ... args)
- {
- this.track = track;
- this.format = format;
- this.args = args;
- }
-
- public int getChannel()
- {
- return channel;
- }
-
- public void setChannel(int channel)
- {
- this.channel = channel;
- }
-
- public byte getEncodedTrack()
- {
- return track;
- }
-
- public boolean isConnectionControl()
- {
- return false;
- }
-
- public String getMessage()
- {
- return String.format(format, args);
- }
-
- public <C> void delegate(C context, ProtocolDelegate<C> delegate)
- {
- delegate.error(context, this);
- }
-
- public void delegate(NetworkDelegate delegate)
- {
- delegate.error(this);
- }
-
- public String toString()
- {
- return String.format("protocol error: %s", getMessage());
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ProtocolEvent.java b/java/common/src/main/java/org/apache/qpid/transport/ProtocolEvent.java
deleted file mode 100644
index b51a540701..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ProtocolEvent.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * ProtocolEvent
- *
- */
-
-public interface ProtocolEvent
-{
-
- int getChannel();
-
- void setChannel(int channel);
-
- byte getEncodedTrack();
-
- <C> void delegate(C context, ProtocolDelegate<C> delegate);
-
- boolean isConnectionControl();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ProtocolHeader.java b/java/common/src/main/java/org/apache/qpid/transport/ProtocolHeader.java
deleted file mode 100644
index e5b93e40a9..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ProtocolHeader.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.transport.network.NetworkDelegate;
-import org.apache.qpid.transport.network.NetworkEvent;
-import org.apache.qpid.transport.network.Frame;
-
-
-/**
- * ProtocolHeader
- *
- * @author Rafael H. Schloming
- */
-
-public final class ProtocolHeader implements NetworkEvent, ProtocolEvent
-{
-
- private static final byte[] AMQP = {'A', 'M', 'Q', 'P' };
- private static final byte CLASS = 1;
-
- final private byte protoClass;
- final private byte instance;
- final private byte major;
- final private byte minor;
- private int channel;
-
- public ProtocolHeader(byte protoClass, byte instance, byte major, byte minor)
- {
- this.protoClass = protoClass;
- this.instance = instance;
- this.major = major;
- this.minor = minor;
- }
-
- public ProtocolHeader(int instance, int major, int minor)
- {
- this(CLASS, (byte) instance, (byte) major, (byte) minor);
- }
-
- public byte getInstance()
- {
- return instance;
- }
-
- public byte getMajor()
- {
- return major;
- }
-
- public byte getMinor()
- {
- return minor;
- }
-
- public int getChannel()
- {
- return channel;
- }
-
- public void setChannel(int channel)
- {
- this.channel = channel;
- }
-
- public byte getEncodedTrack()
- {
- return Frame.L1;
- }
-
- public boolean isConnectionControl()
- {
- return false;
- }
-
- public ByteBuffer toByteBuffer()
- {
- ByteBuffer buf = ByteBuffer.allocate(8);
- buf.put(AMQP);
- buf.put(protoClass);
- buf.put(instance);
- buf.put(major);
- buf.put(minor);
- buf.flip();
- return buf;
- }
-
- public <C> void delegate(C context, ProtocolDelegate<C> delegate)
- {
- delegate.init(context, this);
- }
-
- public void delegate(NetworkDelegate delegate)
- {
- delegate.init(this);
- }
-
- public String toString()
- {
- return String.format("AMQP.%d %d-%d", instance, major, minor);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java b/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java
deleted file mode 100644
index db8064268c..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ProtocolVersionException.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * ProtocolVersionException
- *
- */
-
-public final class ProtocolVersionException extends ConnectionException
-{
-
- private final byte major;
- private final byte minor;
-
- public ProtocolVersionException(byte major, byte minor, Throwable cause)
- {
- super(String.format("version mismatch: %s-%s", major, minor), cause);
- this.major = major;
- this.minor = minor;
- }
-
- public ProtocolVersionException(byte major, byte minor)
- {
- this(major, minor, null);
- }
-
- public byte getMajor()
- {
- return this.major;
- }
-
- public byte getMinor()
- {
- return this.minor;
- }
-
- @Override public void rethrow()
- {
- throw new ProtocolVersionException(major, minor, this);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ProtocolViolationException.java b/java/common/src/main/java/org/apache/qpid/transport/ProtocolViolationException.java
deleted file mode 100644
index 6787157e8e..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ProtocolViolationException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * ProtocolViolationException
- *
- */
-
-public final class ProtocolViolationException extends ConnectionException
-{
- public ProtocolViolationException(String msg,Throwable cause)
- {
- super(msg, cause);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Range.java b/java/common/src/main/java/org/apache/qpid/transport/Range.java
deleted file mode 100644
index f4335dc8a6..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Range.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.apache.qpid.util.Serial.*;
-
-
-/**
- * Range
- *
- * @author Rafael H. Schloming
- */
-
-public final class Range
-{
- private final int lower;
- private final int upper;
-
- public Range(int lower, int upper)
- {
- this.lower = lower;
- this.upper = upper;
- }
-
- public int getLower()
- {
- return lower;
- }
-
- public int getUpper()
- {
- return upper;
- }
-
- public boolean includes(int value)
- {
- return le(lower, value) && le(value, upper);
- }
-
- public boolean includes(Range range)
- {
- return includes(range.lower) && includes(range.upper);
- }
-
- public boolean intersects(Range range)
- {
- return (includes(range.lower) || includes(range.upper) ||
- range.includes(lower) || range.includes(upper));
- }
-
- public boolean touches(Range range)
- {
- return (intersects(range) ||
- includes(range.upper + 1) || includes(range.lower - 1) ||
- range.includes(upper + 1) || range.includes(lower - 1));
- }
-
- public Range span(Range range)
- {
- return new Range(min(lower, range.lower), max(upper, range.upper));
- }
-
- public List<Range> subtract(Range range)
- {
- List<Range> result = new ArrayList<Range>();
-
- if (includes(range.lower) && le(lower, range.lower - 1))
- {
- result.add(new Range(lower, range.lower - 1));
- }
-
- if (includes(range.upper) && le(range.upper + 1, upper))
- {
- result.add(new Range(range.upper + 1, upper));
- }
-
- if (result.isEmpty() && !range.includes(this))
- {
- result.add(this);
- }
-
- return result;
- }
-
- public Range intersect(Range range)
- {
- int l = max(lower, range.lower);
- int r = min(upper, range.upper);
- if (gt(l, r))
- {
- return null;
- }
- else
- {
- return new Range(l, r);
- }
- }
-
- public String toString()
- {
- return "[" + lower + ", " + upper + "]";
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/RangeSet.java b/java/common/src/main/java/org/apache/qpid/transport/RangeSet.java
deleted file mode 100644
index 3850dc162b..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/RangeSet.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.LinkedList;
-
-import static org.apache.qpid.util.Serial.*;
-
-/**
- * RangeSet
- *
- * @author Rafael H. Schloming
- */
-
-public final class RangeSet implements Iterable<Range>
-{
-
- private LinkedList<Range> ranges = new LinkedList<Range>();
-
- public int size()
- {
- return ranges.size();
- }
-
- public Iterator<Range> iterator()
- {
- return ranges.iterator();
- }
-
- public Range getFirst()
- {
- return ranges.getFirst();
- }
-
- public Range getLast()
- {
- return ranges.getLast();
- }
-
- public boolean includes(Range range)
- {
- for (Range r : this)
- {
- if (r.includes(range))
- {
- return true;
- }
- }
-
- return false;
- }
-
- public boolean includes(int n)
- {
- for (Range r : this)
- {
- if (r.includes(n))
- {
- return true;
- }
- }
-
- return false;
- }
-
- public void add(Range range)
- {
- ListIterator<Range> it = ranges.listIterator();
-
- while (it.hasNext())
- {
- Range next = it.next();
- if (range.touches(next))
- {
- it.remove();
- range = range.span(next);
- }
- else if (lt(range.getUpper(), next.getLower()))
- {
- it.previous();
- it.add(range);
- return;
- }
- }
-
- it.add(range);
- }
-
- public void add(int lower, int upper)
- {
- add(new Range(lower, upper));
- }
-
- public void add(int value)
- {
- add(value, value);
- }
-
- public void clear()
- {
- ranges.clear();
- }
-
- public RangeSet copy()
- {
- RangeSet copy = new RangeSet();
- copy.ranges.addAll(ranges);
- return copy;
- }
-
- public String toString()
- {
- StringBuffer str = new StringBuffer();
- str.append("{");
- boolean first = true;
- for (Range range : ranges)
- {
- if (first)
- {
- first = false;
- }
- else
- {
- str.append(", ");
- }
- str.append(range);
- }
- str.append("}");
- return str.toString();
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Receiver.java b/java/common/src/main/java/org/apache/qpid/transport/Receiver.java
deleted file mode 100644
index 2a994580dc..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Receiver.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * Receiver
- *
- */
-
-public interface Receiver<T>
-{
-
- void received(T msg);
-
- void exception(Throwable t);
-
- void closed();
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Sender.java b/java/common/src/main/java/org/apache/qpid/transport/Sender.java
deleted file mode 100644
index 6519702c76..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Sender.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * Sender
- *
- */
-
-public interface Sender<T>
-{
- void setIdleTimeout(int i);
-
- void send(T msg);
-
- void flush();
-
- void close();
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/SenderException.java b/java/common/src/main/java/org/apache/qpid/transport/SenderException.java
deleted file mode 100644
index a96079dc27..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/SenderException.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * SenderException
- *
- */
-
-public class SenderException extends TransportException
-{
-
- public SenderException(String message, Throwable cause)
- {
- super(message, cause);
- }
-
- public SenderException(String message)
- {
- super(message);
- }
-
- public SenderException(Throwable cause)
- {
- super(cause);
- }
-
- public void rethrow()
- {
- throw new SenderException(getMessage(), this);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java b/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java
deleted file mode 100644
index f21df251da..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/ServerDelegate.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import static org.apache.qpid.transport.Connection.State.*;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import javax.security.sasl.Sasl;
-import javax.security.sasl.SaslException;
-import javax.security.sasl.SaslServer;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * ServerDelegate
- */
-public class ServerDelegate extends ConnectionDelegate
-{
- protected static final Logger _logger = LoggerFactory.getLogger(ServerDelegate.class);
-
- private List<Object> _locales;
- private List<Object> _mechanisms;
- private Map<String, Object> _clientProperties;
-
-
- public ServerDelegate()
- {
- this(null, Collections.emptyList(), Collections.singletonList((Object)"utf8"));
- }
-
- protected ServerDelegate(Map<String, Object> clientProperties, List<Object> mechanisms, List<Object> locales)
- {
- _clientProperties = clientProperties;
- _mechanisms = mechanisms;
- _locales = locales;
- }
-
- public void init(Connection conn, ProtocolHeader hdr)
- {
- conn.send(new ProtocolHeader(1, 0, 10));
-
- conn.connectionStart(_clientProperties, _mechanisms, _locales);
- }
-
- @Override
- public void connectionStartOk(Connection conn, ConnectionStartOk ok)
- {
- conn.setLocale(ok.getLocale());
- String mechanism = ok.getMechanism();
-
- String clientName = (String) ok.getClientProperties().get("clientName");
- conn.setClientId(clientName);
-
- if (mechanism == null || mechanism.length() == 0)
- {
- conn.connectionTune
- (getChannelMax(),
- org.apache.qpid.transport.network.ConnectionBinding.MAX_FRAME_SIZE,
- 0, getHeartbeatMax());
- return;
- }
-
- try
- {
-
- SaslServer ss = createSaslServer(mechanism);
- if (ss == null)
- {
- conn.connectionClose(ConnectionCloseCode.CONNECTION_FORCED,
- "null SASL mechanism: " + mechanism);
- return;
- }
- conn.setSaslServer(ss);
- secure(conn, ok.getResponse());
- }
- catch (SaslException e)
- {
- conn.exception(e);
- conn.connectionClose(ConnectionCloseCode.CONNECTION_FORCED, e.getMessage());
- }
- }
-
- protected SaslServer createSaslServer(String mechanism)
- throws SaslException
- {
- SaslServer ss = Sasl.createSaslServer(mechanism, "AMQP", "localhost", null, null);
- return ss;
- }
-
- private void secure(Connection conn, byte[] response)
- {
- SaslServer ss = conn.getSaslServer();
- try
- {
- byte[] challenge = ss.evaluateResponse(response);
- if (ss.isComplete())
- {
- ss.dispose();
- conn.connectionTune
- (getChannelMax(),
- org.apache.qpid.transport.network.ConnectionBinding.MAX_FRAME_SIZE,
- 0, getHeartbeatMax());
- conn.setAuthorizationID(ss.getAuthorizationID());
- }
- else
- {
- conn.connectionSecure(challenge);
- }
- }
- catch (SaslException e)
- {
- conn.exception(e);
- conn.connectionClose(ConnectionCloseCode.CONNECTION_FORCED, e.getMessage());
- }
- }
-
- protected int getHeartbeatMax()
- {
- return 0xFFFF;
- }
-
- protected int getChannelMax()
- {
- return 0xFFFF;
- }
-
- @Override
- public void connectionSecureOk(Connection conn, ConnectionSecureOk ok)
- {
- secure(conn, ok.getResponse());
- }
-
- @Override
- public void connectionTuneOk(Connection conn, ConnectionTuneOk ok)
- {
- int okChannelMax = ok.getChannelMax();
-
- if (okChannelMax > getChannelMax())
- {
- _logger.error("Connection '" + conn.getConnectionId() + "' being severed, " +
- "client connectionTuneOk returned a channelMax (" + okChannelMax +
- ") above the servers offered limit (" + getChannelMax() +")");
-
- //Due to the error we must forcefully close the connection without negotiation
- conn.getSender().close();
- return;
- }
-
- //0 means no implied limit, except available server resources
- //(or that forced by protocol limitations [0xFFFF])
- conn.setChannelMax(okChannelMax == 0 ? Connection.MAX_CHANNEL_MAX : okChannelMax);
- }
-
- @Override
- public void connectionOpen(Connection conn, ConnectionOpen open)
- {
- conn.connectionOpenOk(Collections.emptyList());
-
- conn.setState(OPEN);
- }
-
- protected Session getSession(Connection conn, SessionDelegate delegate, SessionAttach atc)
- {
- return new Session(conn, delegate, new Binary(atc.getName()), 0);
- }
-
-
- public Session getSession(Connection conn, SessionAttach atc)
- {
- return new Session(conn, new Binary(atc.getName()), 0);
- }
-
- @Override
- public void sessionAttach(Connection conn, SessionAttach atc)
- {
- Session ssn = getSession(conn, atc);
- conn.map(ssn, atc.getChannel());
- ssn.sessionAttached(atc.getName());
- ssn.setState(Session.State.OPEN);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Session.java b/java/common/src/main/java/org/apache/qpid/transport/Session.java
deleted file mode 100644
index 862c37283b..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Session.java
+++ /dev/null
@@ -1,1057 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-import static org.apache.qpid.transport.Option.COMPLETED;
-import static org.apache.qpid.transport.Option.SYNC;
-import static org.apache.qpid.transport.Option.TIMELY_REPLY;
-import static org.apache.qpid.transport.Session.State.CLOSED;
-import static org.apache.qpid.transport.Session.State.CLOSING;
-import static org.apache.qpid.transport.Session.State.DETACHED;
-import static org.apache.qpid.transport.Session.State.NEW;
-import static org.apache.qpid.transport.Session.State.OPEN;
-import static org.apache.qpid.transport.Session.State.RESUMING;
-import org.apache.qpid.transport.network.Frame;
-import static org.apache.qpid.transport.util.Functions.mod;
-import org.apache.qpid.transport.util.Logger;
-import org.apache.qpid.transport.util.Waiter;
-import static org.apache.qpid.util.Serial.ge;
-import static org.apache.qpid.util.Serial.gt;
-import static org.apache.qpid.util.Serial.le;
-import static org.apache.qpid.util.Serial.lt;
-import static org.apache.qpid.util.Serial.max;
-import static org.apache.qpid.util.Strings.toUTF8;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Session
- *
- * @author Rafael H. Schloming
- */
-
-public class Session extends SessionInvoker
-{
-
- private static final Logger log = Logger.get(Session.class);
-
- public enum State { NEW, DETACHED, RESUMING, OPEN, CLOSING, CLOSED }
-
- static class DefaultSessionListener implements SessionListener
- {
-
- public void opened(Session ssn) {}
-
- public void resumed(Session ssn) {}
-
- public void message(Session ssn, MessageTransfer xfr)
- {
- log.info("message: %s", xfr);
- }
-
- public void exception(Session ssn, SessionException exc)
- {
- log.error(exc, "session exception");
- }
-
- public void closed(Session ssn) {}
- }
-
- public static final int UNLIMITED_CREDIT = 0xFFFFFFFF;
-
- private Connection connection;
- private Binary name;
- private long expiry;
- private boolean closing;
- private int channel;
- private SessionDelegate delegate;
- private SessionListener listener = new DefaultSessionListener();
- private long timeout = 60000;
- private boolean autoSync = false;
-
- private boolean incomingInit;
- // incoming command count
- private int commandsIn;
- // completed incoming commands
- private final Object processedLock = new Object();
- private RangeSet processed;
- private int maxProcessed;
- private int syncPoint;
-
- // outgoing command count
- private int commandsOut = 0;
- private Method[] commands = new Method[Integer.getInteger("qpid.session.command_limit", 64*1024)];
- private int commandBytes = 0;
- private int byteLimit = Integer.getInteger("qpid.session.byte_limit", 1024*1024);
- private int maxComplete = commandsOut - 1;
- private boolean needSync = false;
-
- private State state = NEW;
-
- // transfer flow control
- private volatile boolean flowControl = false;
- private Semaphore credit = new Semaphore(0);
-
- private Thread resumer = null;
- private boolean transacted = false;
-
- protected Session(Connection connection, Binary name, long expiry)
- {
- this(connection, new SessionDelegate(), name, expiry);
- }
-
- protected Session(Connection connection, SessionDelegate delegate, Binary name, long expiry)
- {
- this.connection = connection;
- this.delegate = delegate;
- this.name = name;
- this.expiry = expiry;
- this.closing = false;
- initReceiver();
- }
-
- public Connection getConnection()
- {
- return connection;
- }
-
- public Binary getName()
- {
- return name;
- }
-
- void setExpiry(long expiry)
- {
- this.expiry = expiry;
- }
-
- void setClose(boolean close)
- {
- this.closing = close;
- }
-
- public int getChannel()
- {
- return channel;
- }
-
- void setChannel(int channel)
- {
- this.channel = channel;
- }
-
- public void setSessionListener(SessionListener listener)
- {
- if (listener == null)
- {
- this.listener = new DefaultSessionListener();
- }
- else
- {
- this.listener = listener;
- }
- }
-
- public SessionListener getSessionListener()
- {
- return listener;
- }
-
- public void setAutoSync(boolean value)
- {
- synchronized (commands)
- {
- this.autoSync = value;
- }
- }
-
- protected void setState(State state)
- {
- synchronized (commands)
- {
- this.state = state;
- commands.notifyAll();
- }
- }
-
- void setFlowControl(boolean value)
- {
- flowControl = value;
- }
-
- void addCredit(int value)
- {
- credit.release(value);
- }
-
- void drainCredit()
- {
- credit.drainPermits();
- }
-
- void acquireCredit()
- {
- if (flowControl)
- {
- try
- {
- if (!credit.tryAcquire(timeout, TimeUnit.MILLISECONDS))
- {
- throw new SessionException
- ("timed out waiting for message credit");
- }
- }
- catch (InterruptedException e)
- {
- throw new SessionException
- ("interrupted while waiting for credit", null, e);
- }
- }
- }
-
- private void initReceiver()
- {
- synchronized (processedLock)
- {
- incomingInit = false;
- processed = new RangeSet();
- }
- }
-
- void attach()
- {
- initReceiver();
- sessionAttach(name.getBytes());
- sessionRequestTimeout(0);//use expiry here only if/when session resume is supported
- }
-
- void resume()
- {
- synchronized (commands)
- {
- for (int i = maxComplete + 1; lt(i, commandsOut); i++)
- {
- Method m = commands[mod(i, commands.length)];
- if (m == null)
- {
- m = new ExecutionSync();
- m.setId(i);
- }
- else if (m instanceof MessageTransfer)
- {
- MessageTransfer xfr = (MessageTransfer)m;
-
- if (xfr.getHeader() != null)
- {
- if (xfr.getHeader().get(DeliveryProperties.class) != null)
- {
- xfr.getHeader().get(DeliveryProperties.class).setRedelivered(true);
- }
- else
- {
- Struct[] structs = xfr.getHeader().getStructs();
- DeliveryProperties deliveryProps = new DeliveryProperties();
- deliveryProps.setRedelivered(true);
-
- List<Struct> list = Arrays.asList(structs);
- list.add(deliveryProps);
- xfr.setHeader(new Header(list));
- }
-
- }
- else
- {
- DeliveryProperties deliveryProps = new DeliveryProperties();
- deliveryProps.setRedelivered(true);
- xfr.setHeader(new Header(deliveryProps));
- }
- }
- sessionCommandPoint(m.getId(), 0);
- send(m);
- }
-
- sessionCommandPoint(commandsOut, 0);
- sessionFlush(COMPLETED);
- resumer = Thread.currentThread();
- state = RESUMING;
- listener.resumed(this);
- resumer = null;
- }
- }
-
- void dump()
- {
- synchronized (commands)
- {
- for (Method m : commands)
- {
- if (m != null)
- {
- log.debug("%s", m);
- }
- }
- }
- }
-
- final void commandPoint(int id)
- {
- synchronized (processedLock)
- {
- this.commandsIn = id;
- if (!incomingInit)
- {
- incomingInit = true;
- maxProcessed = commandsIn - 1;
- syncPoint = maxProcessed;
- }
- }
- }
-
- public int getCommandsOut()
- {
- return commandsOut;
- }
-
- public int getCommandsIn()
- {
- return commandsIn;
- }
-
- public int nextCommandId()
- {
- return commandsIn++;
- }
-
- final void identify(Method cmd)
- {
- if (!incomingInit)
- {
- throw new IllegalStateException();
- }
-
- int id = nextCommandId();
- cmd.setId(id);
-
- if(log.isDebugEnabled())
- {
- log.debug("ID: [%s] %s", this.channel, id);
- }
-
- //if ((id % 65536) == 0)
- if ((id & 0xff) == 0)
- {
- flushProcessed(TIMELY_REPLY);
- }
- }
-
- public void processed(Method command)
- {
- processed(command.getId());
- }
-
- public void processed(int command)
- {
- processed(new Range(command, command));
- }
-
- public void processed(int lower, int upper)
- {
-
- processed(new Range(lower, upper));
- }
-
- public void processed(Range range)
- {
- log.debug("%s processed(%s) %s %s", this, range, syncPoint, maxProcessed);
-
- boolean flush;
- synchronized (processedLock)
- {
- log.debug("%s", processed);
-
- if (ge(range.getUpper(), commandsIn))
- {
- throw new IllegalArgumentException
- ("range exceeds max received command-id: " + range);
- }
-
- processed.add(range);
- Range first = processed.getFirst();
- int lower = first.getLower();
- int upper = first.getUpper();
- int old = maxProcessed;
- if (le(lower, maxProcessed + 1))
- {
- maxProcessed = max(maxProcessed, upper);
- }
- boolean synced = ge(maxProcessed, syncPoint);
- flush = lt(old, syncPoint) && synced;
- if (synced)
- {
- syncPoint = maxProcessed;
- }
- }
- if (flush)
- {
- flushProcessed();
- }
- }
-
- void flushExpected()
- {
- RangeSet rs = new RangeSet();
- synchronized (processedLock)
- {
- if (incomingInit)
- {
- rs.add(commandsIn);
- }
- }
- sessionExpected(rs, null);
- }
-
- public void flushProcessed(Option ... options)
- {
- RangeSet copy;
- synchronized (processedLock)
- {
- copy = processed.copy();
- }
-
- synchronized (commands)
- {
- if (state == DETACHED || state == CLOSING)
- {
- return;
- }
- if (copy.size() > 0)
- {
- sessionCompleted(copy, options);
- }
- }
- }
-
- void knownComplete(RangeSet kc)
- {
- synchronized (processedLock)
- {
- RangeSet newProcessed = new RangeSet();
- for (Range pr : processed)
- {
- for (Range kr : kc)
- {
- for (Range r : pr.subtract(kr))
- {
- newProcessed.add(r);
- }
- }
- }
- this.processed = newProcessed;
- }
- }
-
- void syncPoint()
- {
- int id = getCommandsIn() - 1;
- log.debug("%s synced to %d", this, id);
- boolean flush;
- synchronized (processedLock)
- {
- syncPoint = id;
- flush = ge(maxProcessed, syncPoint);
- }
- if (flush)
- {
- flushProcessed();
- }
- }
-
- protected boolean complete(int lower, int upper)
- {
- //avoid autoboxing
- if(log.isDebugEnabled())
- {
- log.debug("%s complete(%d, %d)", this, lower, upper);
- }
- synchronized (commands)
- {
- int old = maxComplete;
- for (int id = max(maxComplete, lower); le(id, upper); id++)
- {
- int idx = mod(id, commands.length);
- Method m = commands[idx];
- if (m != null)
- {
- commandBytes -= m.getBodySize();
- m.complete();
- commands[idx] = null;
- }
- }
- if (le(lower, maxComplete + 1))
- {
- maxComplete = max(maxComplete, upper);
- }
- log.debug("%s commands remaining: %s", this, commandsOut - maxComplete);
- commands.notifyAll();
- return gt(maxComplete, old);
- }
- }
-
- void received(Method m)
- {
- m.delegate(this, delegate);
- }
-
- private void send(Method m)
- {
- m.setChannel(channel);
- connection.send(m);
-
- if (!m.isBatch())
- {
- connection.flush();
- }
- }
-
- protected boolean isFull(int id)
- {
- return isCommandsFull(id) || isBytesFull();
- }
-
- protected boolean isBytesFull()
- {
- return commandBytes >= byteLimit;
- }
-
- protected boolean isCommandsFull(int id)
- {
- return id - maxComplete >= commands.length;
- }
-
- public void invoke(Method m)
- {
- invoke(m,(Runnable)null);
- }
-
- public void invoke(Method m, Runnable postIdSettingAction)
- {
- if (m.getEncodedTrack() == Frame.L4)
- {
-
- if (state == DETACHED && transacted)
- {
- state = CLOSED;
- delegate.closed(this);
- connection.removeSession(this);
- throw new SessionException(
- "Session failed over, possibly in the middle of a transaction. " +
- "Closing the session. Any Transaction in progress will be rolledback.");
- }
-
- if (m.hasPayload())
- {
- acquireCredit();
- }
-
- synchronized (commands)
- {
- if (state == DETACHED && m.isUnreliable())
- {
- Thread current = Thread.currentThread();
- if (!current.equals(resumer))
- {
- return;
- }
- }
-
- if (state != OPEN && state != CLOSED && state != CLOSING)
- {
- Thread current = Thread.currentThread();
- if (!current.equals(resumer))
- {
- Waiter w = new Waiter(commands, timeout);
- while (w.hasTime() && (state != OPEN && state != CLOSED))
- {
- w.await();
- }
- }
- }
-
- switch (state)
- {
- case OPEN:
- break;
- case RESUMING:
- Thread current = Thread.currentThread();
- if (!current.equals(resumer))
- {
- throw new SessionException
- ("timed out waiting for resume to finish");
- }
- break;
- case CLOSING:
- case CLOSED:
- ExecutionException exc = getException();
- if (exc != null)
- {
- throw new SessionException(exc);
- }
- else
- {
- throw new SessionClosedException();
- }
- default:
- throw new SessionException
- (String.format
- ("timed out waiting for session to become open " +
- "(state=%s)", state));
- }
-
- int next;
- next = commandsOut++;
- m.setId(next);
- if(postIdSettingAction != null)
- {
- postIdSettingAction.run();
- }
-
- if (isFull(next))
- {
- Waiter w = new Waiter(commands, timeout);
- while (w.hasTime() && isFull(next) && state != CLOSED)
- {
- if (state == OPEN || state == RESUMING)
- {
- try
- {
- sessionFlush(COMPLETED);
- }
- catch (SenderException e)
- {
- if (!closing)
- {
- // if expiry is > 0 then this will
- // happen again on resume
- log.error(e, "error sending flush (full replay buffer)");
- }
- else
- {
- e.rethrow();
- }
- }
- }
- w.await();
- }
- }
-
- if (state == CLOSED)
- {
- ExecutionException exc = getException();
- if (exc != null)
- {
- throw new SessionException(exc);
- }
- else
- {
- throw new SessionClosedException();
- }
- }
-
- if (isFull(next))
- {
- throw new SessionException("timed out waiting for completion");
- }
-
- if (next == 0)
- {
- sessionCommandPoint(0, 0);
- }
-
- boolean replayTransfer = !closing && !transacted &&
- m instanceof MessageTransfer &&
- ! m.isUnreliable();
-
- if ((replayTransfer) || m.hasCompletionListener())
- {
- commands[mod(next, commands.length)] = m;
- commandBytes += m.getBodySize();
- }
- if (autoSync)
- {
- m.setSync(true);
- }
- needSync = !m.isSync();
-
- try
- {
- send(m);
- }
- catch (SenderException e)
- {
- if (!closing)
- {
- // if we are not closing then this will happen
- // again on resume
- log.error(e, "error sending command");
- }
- else
- {
- e.rethrow();
- }
- }
- if (autoSync)
- {
- sync();
- }
-
- // flush every 64K commands to avoid ambiguity on
- // wraparound
- if (shouldIssueFlush(next))
- {
- try
- {
- sessionFlush(COMPLETED);
- }
- catch (SenderException e)
- {
- if (!closing)
- {
- // if expiry is > 0 then this will happen
- // again on resume
- log.error(e, "error sending flush (periodic)");
- }
- else
- {
- e.rethrow();
- }
- }
- }
- }
- }
- else
- {
- send(m);
- }
- }
-
- protected boolean shouldIssueFlush(int next)
- {
- return (next % 65536) == 0;
- }
-
- public void sync()
- {
- sync(timeout);
- }
-
- public void sync(long timeout)
- {
- log.debug("%s sync()", this);
- synchronized (commands)
- {
- int point = commandsOut - 1;
-
- if (needSync && lt(maxComplete, point))
- {
- executionSync(SYNC);
- }
-
- Waiter w = new Waiter(commands, timeout);
- while (w.hasTime() && state != CLOSED && lt(maxComplete, point))
- {
- log.debug("%s waiting for[%d]: %d, %s", this, point, maxComplete, commands);
- w.await();
- }
-
- if (lt(maxComplete, point))
- {
- if (state != CLOSED)
- {
- throw new SessionException(
- String.format("timed out waiting for sync: complete = %s, point = %s",
- maxComplete, point));
- }
- else
- {
- ExecutionException ee = getException();
- if (ee != null)
- {
- throw new SessionException(ee);
- }
- }
- }
- }
- }
-
- private Map<Integer,ResultFuture<?>> results = new HashMap<Integer,ResultFuture<?>>();
- private ExecutionException exception = null;
-
- void result(int command, Struct result)
- {
- ResultFuture<?> future;
- synchronized (results)
- {
- future = results.remove(command);
- }
-
- if (future != null)
- {
- future.set(result);
- }
- else
- {
- log.warn("Received a response to a command" +
- " that's no longer valid on the client side." +
- " [ command id : %s , result : %s ]",command, result);
- }
- }
-
- void setException(ExecutionException exc)
- {
- synchronized (results)
- {
- if (exception != null)
- {
- throw new IllegalStateException(
- String.format("too many exceptions: %s, %s", exception, exc));
- }
- exception = exc;
- }
- }
-
- private ConnectionClose close = null;
-
- void closeCode(ConnectionClose close)
- {
- this.close = close;
- }
-
- ExecutionException getException()
- {
- synchronized (results)
- {
- return exception;
- }
- }
-
- protected <T> Future<T> invoke(Method m, Class<T> klass)
- {
- synchronized (commands)
- {
- int command = commandsOut;
- ResultFuture<T> future = new ResultFuture<T>(klass);
- synchronized (results)
- {
- results.put(command, future);
- }
- invoke(m);
- return future;
- }
- }
-
- private class ResultFuture<T> implements Future<T>
- {
-
- private final Class<T> klass;
- private T result;
-
- private ResultFuture(Class<T> klass)
- {
- this.klass = klass;
- }
-
- private void set(Struct result)
- {
- synchronized (this)
- {
- this.result = klass.cast(result);
- notifyAll();
- }
- }
-
- public T get(long timeout)
- {
- synchronized (this)
- {
- Waiter w = new Waiter(this, timeout);
- while (w.hasTime() && state != CLOSED && !isDone())
- {
- log.debug("%s waiting for result: %s", Session.this, this);
- w.await();
- }
- }
-
- if (isDone())
- {
- return result;
- }
- else if (state == CLOSED)
- {
- throw new SessionException(getException());
- }
- else
- {
- throw new SessionException(
- String.format("%s timed out waiting for result: %s",
- Session.this, this));
- }
- }
-
- public T get()
- {
- return get(timeout);
- }
-
- public boolean isDone()
- {
- return result != null;
- }
-
- public String toString()
- {
- return String.format("Future(%s)", isDone() ? result : klass);
- }
-
- }
-
- public final void messageTransfer(String destination,
- MessageAcceptMode acceptMode,
- MessageAcquireMode acquireMode,
- Header header,
- byte[] body,
- Option ... _options) {
- messageTransfer(destination, acceptMode, acquireMode, header,
- ByteBuffer.wrap(body), _options);
- }
-
- public final void messageTransfer(String destination,
- MessageAcceptMode acceptMode,
- MessageAcquireMode acquireMode,
- Header header,
- String body,
- Option ... _options) {
- messageTransfer(destination, acceptMode, acquireMode, header,
- toUTF8(body), _options);
- }
-
- public void close()
- {
- synchronized (commands)
- {
- state = CLOSING;
- setClose(true);
- sessionRequestTimeout(0);
- sessionDetach(name.getBytes());
-
- awaitClose();
-
-
- }
- }
-
- protected void awaitClose()
- {
- Waiter w = new Waiter(commands, timeout);
- while (w.hasTime() && state != CLOSED)
- {
- w.await();
- }
-
- if (state != CLOSED)
- {
- throw new SessionException("close() timed out");
- }
- }
-
- public void exception(Throwable t)
- {
- log.error(t, "caught exception");
- }
-
- public void closed()
- {
- synchronized (commands)
- {
- if (closing || getException() != null)
- {
- state = CLOSED;
- }
- else
- {
- state = DETACHED;
- }
-
- commands.notifyAll();
-
- synchronized (results)
- {
- for (ResultFuture<?> result : results.values())
- {
- synchronized(result)
- {
- result.notifyAll();
- }
- }
- }
- if(state == CLOSED)
- {
- delegate.closed(this);
- }
- else
- {
- delegate.detached(this);
- }
- }
-
- if(state == CLOSED)
- {
- connection.removeSession(this);
- listener.closed(this);
- }
- }
-
- public boolean isClosing()
- {
- return state == CLOSED || state == CLOSING;
- }
-
- public String toString()
- {
- return String.format("ssn:%s", name);
- }
-
- public void setTransacted(boolean b) {
- this.transacted = b;
- }
-
- public boolean isTransacted(){
- return transacted;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java b/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java
deleted file mode 100644
index 64f9039484..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.util.Collections;
-
-
-/**
- * SessionClosedException
- *
- */
-
-public class SessionClosedException extends SessionException
-{
-
- public SessionClosedException()
- {
- this(null);
- }
-
- public SessionClosedException(Throwable cause)
- {
- super("session closed", null, cause);
- }
-
- @Override public void rethrow()
- {
- throw new SessionClosedException(this);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java b/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java
deleted file mode 100644
index 9a02961dc4..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/SessionDelegate.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import org.apache.qpid.transport.util.Logger;
-
-
-/**
- * SessionDelegate
- *
- * @author Rafael H. Schloming
- */
-
-public class SessionDelegate
- extends MethodDelegate<Session>
- implements ProtocolDelegate<Session>
-{
- protected static final Logger log = Logger.get(SessionDelegate.class);
-
- public void init(Session ssn, ProtocolHeader hdr)
- {
- log.warn("INIT: [%s] %s", ssn, hdr);
- }
-
- public void control(Session ssn, Method method)
- {
- method.dispatch(ssn, this);
- }
-
- public void command(Session ssn, Method method) {
- ssn.identify(method);
- method.dispatch(ssn, this);
- if (!method.hasPayload())
- {
- ssn.processed(method);
- }
- }
-
- public void error(Session ssn, ProtocolError error)
- {
- log.warn("ERROR: [%s] %s", ssn, error);
- }
-
- public void handle(Session ssn, Method method)
- {
- log.warn("UNHANDLED: [%s] %s", ssn, method);
- }
-
- @Override public void sessionRequestTimeout(Session ssn, SessionRequestTimeout t)
- {
- if (t.getTimeout() == 0)
- {
- ssn.setClose(true);
- }
- ssn.sessionTimeout(0); // Always report back an expiry of 0 until it is implemented
- }
-
- @Override public void sessionAttached(Session ssn, SessionAttached atc)
- {
- ssn.setState(Session.State.OPEN);
- }
-
- @Override public void sessionTimeout(Session ssn, SessionTimeout t)
- {
- // Setting of expiry is not implemented
- }
-
- @Override public void sessionCompleted(Session ssn, SessionCompleted cmp)
- {
- RangeSet ranges = cmp.getCommands();
- RangeSet known = null;
- if (cmp.getTimelyReply())
- {
- known = new RangeSet();
- }
-
- if (ranges != null)
- {
- for (Range range : ranges)
- {
- boolean advanced = ssn.complete(range.getLower(), range.getUpper());
- if (advanced && known != null)
- {
- known.add(range);
- }
- }
- }
-
- if (known != null)
- {
- ssn.sessionKnownCompleted(known);
- }
- }
-
- @Override public void sessionKnownCompleted(Session ssn, SessionKnownCompleted kcmp)
- {
- RangeSet kc = kcmp.getCommands();
- if (kc != null)
- {
- ssn.knownComplete(kc);
- }
- }
-
- @Override public void sessionFlush(Session ssn, SessionFlush flush)
- {
- if (flush.getCompleted())
- {
- ssn.flushProcessed();
- }
- if (flush.getConfirmed())
- {
- ssn.flushProcessed();
- }
- if (flush.getExpected())
- {
- ssn.flushExpected();
- }
- }
-
- @Override public void sessionCommandPoint(Session ssn, SessionCommandPoint scp)
- {
- ssn.commandPoint(scp.getCommandId());
- }
-
- @Override public void executionSync(Session ssn, ExecutionSync sync)
- {
- ssn.syncPoint();
- }
-
- @Override public void executionResult(Session ssn, ExecutionResult result)
- {
- ssn.result(result.getCommandId(), result.getValue());
- }
-
- @Override public void executionException(Session ssn, ExecutionException exc)
- {
- ssn.setException(exc);
- ssn.getSessionListener().exception(ssn, new SessionException(exc));
- ssn.closed();
- }
-
- @Override public void messageTransfer(Session ssn, MessageTransfer xfr)
- {
- ssn.getSessionListener().message(ssn, xfr);
- }
-
- @Override public void messageSetFlowMode(Session ssn, MessageSetFlowMode sfm)
- {
- if ("".equals(sfm.getDestination()) &&
- MessageFlowMode.CREDIT.equals(sfm.getFlowMode()))
- {
- ssn.setFlowControl(true);
- }
- else
- {
- super.messageSetFlowMode(ssn, sfm);
- }
- }
-
- @Override public void messageFlow(Session ssn, MessageFlow flow)
- {
- if ("".equals(flow.getDestination()) &&
- MessageCreditUnit.MESSAGE.equals(flow.getUnit()))
- {
- ssn.addCredit((int) flow.getValue());
- }
- else
- {
- super.messageFlow(ssn, flow);
- }
- }
-
- @Override public void messageStop(Session ssn, MessageStop stop)
- {
- if ("".equals(stop.getDestination()))
- {
- ssn.drainCredit();
- }
- else
- {
- super.messageStop(ssn, stop);
- }
- }
-
- public void closed(Session session)
- {
- log.debug("CLOSED: [%s]", session);
- }
-
- public void detached(Session session)
- {
- log.debug("DETACHED: [%s]", session);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/SessionException.java b/java/common/src/main/java/org/apache/qpid/transport/SessionException.java
deleted file mode 100644
index c4fc9558a1..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/SessionException.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.util.List;
-
-/**
- * SessionException
- *
- */
-
-public class SessionException extends TransportException
-{
-
- private ExecutionException exception;
-
- public SessionException(String message, ExecutionException exception, Throwable cause)
- {
- super(message, cause);
- this.exception = exception;
- }
-
- public SessionException(ExecutionException exception)
- {
- this(String.valueOf(exception), exception, null);
- }
-
- public SessionException(String message)
- {
- this(message, null, null);
- }
-
- public ExecutionException getException()
- {
- return exception;
- }
-
- @Override public void rethrow()
- {
- throw new SessionException(getMessage(), exception, this);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/SessionListener.java b/java/common/src/main/java/org/apache/qpid/transport/SessionListener.java
deleted file mode 100644
index eb650eb9ed..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/SessionListener.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * SessionListener
- *
- */
-
-public interface SessionListener
-{
-
- void opened(Session session);
-
- void resumed(Session session);
-
- void message(Session ssn, MessageTransfer xfr);
-
- void exception(Session session, SessionException exception);
-
- void closed(Session session);
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/Struct.java b/java/common/src/main/java/org/apache/qpid/transport/Struct.java
deleted file mode 100644
index 22bd9f34ad..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/Struct.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.qpid.transport.codec.Decoder;
-import org.apache.qpid.transport.codec.Encodable;
-import org.apache.qpid.transport.codec.Encoder;
-
-
-/**
- * Struct
- *
- * @author Rafael H. Schloming
- */
-
-public abstract class Struct implements Encodable
-{
-
- public static Struct create(int type)
- {
- return StructFactory.create(type);
- }
-
- boolean dirty = true;
-
- public boolean isDirty()
- {
- return dirty;
- }
-
- public void setDirty(boolean dirty)
- {
- this.dirty = dirty;
- }
-
- public abstract int getStructType();
-
- public abstract int getSizeWidth();
-
- public abstract int getPackWidth();
-
- public final int getEncodedType()
- {
- int type = getStructType();
- if (type < 0)
- {
- throw new UnsupportedOperationException();
- }
- return type;
- }
-
- private final boolean isBit(Field<?,?> f)
- {
- return f.getType().equals(Boolean.class);
- }
-
- private final boolean packed()
- {
- return getPackWidth() > 0;
- }
-
- private final boolean encoded(Field<?,?> f)
- {
- return !packed() || !isBit(f) && f.has(this);
- }
-
- private final int getFlagWidth()
- {
- return (getFields().size() + 7)/8;
- }
-
- private final int getPaddWidth()
- {
- int pw = getPackWidth() - getFlagWidth();
- assert pw > 0;
- return pw;
- }
-
- private final int getFlagCount()
- {
- return 8*getPackWidth();
- }
-
- private final int getReservedFlagCount()
- {
- return getFlagCount() - getFields().size();
- }
-
- public abstract void read(Decoder dec);
-
- public abstract void write(Encoder enc);
-
- public abstract Map<String,Object> getFields();
-
- public String toString()
- {
- StringBuilder str = new StringBuilder();
- str.append(getClass().getSimpleName());
-
- str.append("(");
- boolean first = true;
- for (Map.Entry<String,Object> me : getFields().entrySet())
- {
- if (first)
- {
- first = false;
- }
- else
- {
- str.append(", ");
- }
- str.append(me.getKey());
- str.append("=");
- str.append(me.getValue());
- }
- str.append(")");
-
- return str.toString();
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/TransportBuilder.java b/java/common/src/main/java/org/apache/qpid/transport/TransportBuilder.java
deleted file mode 100644
index c08909c6e4..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/TransportBuilder.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.transport.network.Assembler;
-import org.apache.qpid.transport.network.Disassembler;
-import org.apache.qpid.transport.network.InputHandler;
-import org.apache.qpid.transport.network.NetworkTransport;
-import org.apache.qpid.transport.network.Transport;
-import org.apache.qpid.transport.network.security.SecurityLayer;
-
-public class TransportBuilder
-{
- private Connection con;
- private ConnectionSettings settings;
- private NetworkTransport transport;
- private SecurityLayer securityLayer = new SecurityLayer();
-
- public void init(Connection con) throws TransportException
- {
- this.con = con;
- this.settings = con.getConnectionSettings();
- transport = Transport.getTransport();
- transport.init(settings);
- securityLayer.init(con);
- }
-
- public Sender<ProtocolEvent> buildSenderPipe()
- {
- ConnectionSettings settings = con.getConnectionSettings();
-
- // Io layer
- Sender<ByteBuffer> sender = transport.sender();
-
- // Security layer
- sender = securityLayer.sender(sender);
-
- Disassembler dis = new Disassembler(sender, settings.getMaxFrameSize());
- return dis;
- }
-
- public void buildReceiverPipe(Receiver<ProtocolEvent> delegate)
- {
- Receiver<ByteBuffer> receiver = new InputHandler(new Assembler(delegate));
-
- // Security layer
- receiver = securityLayer.receiver(receiver);
-
- //Io layer
- transport.receiver(receiver);
- }
-
- public SecurityLayer getSecurityLayer()
- {
- return securityLayer;
- }
-
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/transport/TransportException.java b/java/common/src/main/java/org/apache/qpid/transport/TransportException.java
deleted file mode 100644
index 0de190dfad..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/TransportException.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-
-/**
- * TransportException
- */
-
-public class TransportException extends RuntimeException
-{
-
- public TransportException(String msg)
- {
- super(msg);
- }
-
- public TransportException(String msg, Throwable cause)
- {
- super(msg, cause);
- }
-
- public TransportException(Throwable cause)
- {
- super(cause);
- }
-
- public void rethrow()
- {
- throw new TransportException(getMessage(), this);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/codec/AbstractDecoder.java b/java/common/src/main/java/org/apache/qpid/transport/codec/AbstractDecoder.java
deleted file mode 100644
index 09ce6a7eb1..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/codec/AbstractDecoder.java
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.codec;
-
-import java.io.UnsupportedEncodingException;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.apache.qpid.transport.Binary;
-import org.apache.qpid.transport.RangeSet;
-import org.apache.qpid.transport.Struct;
-import org.apache.qpid.transport.Type;
-
-import static org.apache.qpid.transport.util.Functions.*;
-
-
-/**
- * AbstractDecoder
- *
- * @author Rafael H. Schloming
- */
-
-abstract class AbstractDecoder implements Decoder
-{
-
- private final Map<Binary,String> str8cache = new LinkedHashMap<Binary,String>()
- {
- @Override protected boolean removeEldestEntry(Map.Entry<Binary,String> me)
- {
- return size() > 4*1024;
- }
- };
-
- protected abstract byte doGet();
-
- protected abstract void doGet(byte[] bytes);
-
- protected byte get()
- {
- return doGet();
- }
-
- protected void get(byte[] bytes)
- {
- doGet(bytes);
- }
-
- protected Binary get(int size)
- {
- byte[] bytes = new byte[size];
- get(bytes);
- return new Binary(bytes);
- }
-
- protected short uget()
- {
- return (short) (0xFF & get());
- }
-
- public short readUint8()
- {
- return uget();
- }
-
- public int readUint16()
- {
- int i = uget() << 8;
- i |= uget();
- return i;
- }
-
- public long readUint32()
- {
- long l = uget() << 24;
- l |= uget() << 16;
- l |= uget() << 8;
- l |= uget();
- return l;
- }
-
- public int readSequenceNo()
- {
- return (int) readUint32();
- }
-
- public long readUint64()
- {
- long l = 0;
- for (int i = 0; i < 8; i++)
- {
- l |= ((long) (0xFF & get())) << (56 - i*8);
- }
- return l;
- }
-
- public long readDatetime()
- {
- return readUint64();
- }
-
- private static final String decode(byte[] bytes, int offset, int length, String charset)
- {
- try
- {
- return new String(bytes, offset, length, charset);
- }
- catch (UnsupportedEncodingException e)
- {
- throw new RuntimeException(e);
- }
- }
-
- private static final String decode(byte[] bytes, String charset)
- {
- return decode(bytes, 0, bytes.length, charset);
- }
-
- public String readStr8()
- {
- short size = readUint8();
- Binary bin = get(size);
- String str = str8cache.get(bin);
-
- if (str == null)
- {
- str = decode(bin.array(), bin.offset(), bin.size(), "UTF-8");
- if(bin.hasExcessCapacity())
- {
- str8cache.put(bin.copy(), str);
- }
- else
- {
- str8cache.put(bin, str);
- }
- }
- return str;
- }
-
- public String readStr16()
- {
- int size = readUint16();
- byte[] bytes = new byte[size];
- get(bytes);
- return decode(bytes, "UTF-8");
- }
-
- public byte[] readVbin8()
- {
- int size = readUint8();
- byte[] bytes = new byte[size];
- get(bytes);
- return bytes;
- }
-
- public byte[] readVbin16()
- {
- int size = readUint16();
- byte[] bytes = new byte[size];
- get(bytes);
- return bytes;
- }
-
- public byte[] readVbin32()
- {
- int size = (int) readUint32();
- byte[] bytes = new byte[size];
- get(bytes);
- return bytes;
- }
-
- public RangeSet readSequenceSet()
- {
- int count = readUint16()/8;
- if (count == 0)
- {
- return null;
- }
- else
- {
- RangeSet ranges = new RangeSet();
- for (int i = 0; i < count; i++)
- {
- ranges.add(readSequenceNo(), readSequenceNo());
- }
- return ranges;
- }
- }
-
- public RangeSet readByteRanges()
- {
- throw new Error("not implemented");
- }
-
- public UUID readUuid()
- {
- long msb = readUint64();
- long lsb = readUint64();
- return new UUID(msb, lsb);
- }
-
- public String readContent()
- {
- throw new Error("Deprecated");
- }
-
- public Struct readStruct(int type)
- {
- Struct st = Struct.create(type);
- int width = st.getSizeWidth();
- if (width > 0)
- {
- long size = readSize(width);
- if (size == 0)
- {
- return null;
- }
- }
- if (type > 0)
- {
- int code = readUint16();
- assert code == type;
- }
- st.read(this);
- return st;
- }
-
- public Struct readStruct32()
- {
- long size = readUint32();
- if (size == 0)
- {
- return null;
- }
- else
- {
- int type = readUint16();
- Struct result = Struct.create(type);
- result.read(this);
- return result;
- }
- }
-
- public Map<String,Object> readMap()
- {
- long size = readUint32();
-
- if (size == 0)
- {
- return null;
- }
-
- long count = readUint32();
-
- if (count == 0)
- {
- return Collections.EMPTY_MAP;
- }
-
- Map<String,Object> result = new LinkedHashMap();
- for (int i = 0; i < count; i++)
- {
- String key = readStr8();
- byte code = get();
- Type t = getType(code);
- Object value = read(t);
- result.put(key, value);
- }
-
- return result;
- }
-
- public List<Object> readList()
- {
- long size = readUint32();
-
- if (size == 0)
- {
- return null;
- }
-
- long count = readUint32();
-
- if (count == 0)
- {
- return Collections.EMPTY_LIST;
- }
-
- List<Object> result = new ArrayList();
- for (int i = 0; i < count; i++)
- {
- byte code = get();
- Type t = getType(code);
- Object value = read(t);
- result.add(value);
- }
- return result;
- }
-
- public List<Object> readArray()
- {
- long size = readUint32();
-
- if (size == 0)
- {
- return null;
- }
-
- byte code = get();
- Type t = getType(code);
- long count = readUint32();
-
- if (count == 0)
- {
- return Collections.EMPTY_LIST;
- }
-
- List<Object> result = new ArrayList<Object>();
- for (int i = 0; i < count; i++)
- {
- Object value = read(t);
- result.add(value);
- }
- return result;
- }
-
- private Type getType(byte code)
- {
- Type type = Type.get(code);
- if (type == null)
- {
- throw new IllegalArgumentException("unknown code: " + code);
- }
- else
- {
- return type;
- }
- }
-
- private long readSize(Type t)
- {
- if (t.fixed)
- {
- return t.width;
- }
- else
- {
- return readSize(t.width);
- }
- }
-
- private long readSize(int width)
- {
- switch (width)
- {
- case 1:
- return readUint8();
- case 2:
- return readUint16();
- case 4:
- return readUint32();
- default:
- throw new IllegalStateException("illegal width: " + width);
- }
- }
-
- private byte[] readBytes(Type t)
- {
- long size = readSize(t);
- byte[] result = new byte[(int) size];
- get(result);
- return result;
- }
-
- private Object read(Type t)
- {
- switch (t)
- {
- case BIN8:
- case UINT8:
- return readUint8();
- case INT8:
- return get();
- case CHAR:
- return (char) get();
- case BOOLEAN:
- return get() > 0;
-
- case BIN16:
- case UINT16:
- return readUint16();
-
- case INT16:
- return (short) readUint16();
-
- case BIN32:
- case UINT32:
- return readUint32();
-
- case CHAR_UTF32:
- case INT32:
- return (int) readUint32();
-
- case FLOAT:
- return Float.intBitsToFloat((int) readUint32());
-
- case BIN64:
- case UINT64:
- case INT64:
- case DATETIME:
- return readUint64();
-
- case DOUBLE:
- return Double.longBitsToDouble(readUint64());
-
- case UUID:
- return readUuid();
-
- case STR8:
- return readStr8();
-
- case STR16:
- return readStr16();
-
- case STR8_LATIN:
- case STR8_UTF16:
- case STR16_LATIN:
- case STR16_UTF16:
- // XXX: need to do character conversion
- return new String(readBytes(t));
-
- case MAP:
- return readMap();
- case LIST:
- return readList();
- case ARRAY:
- return readArray();
- case STRUCT32:
- return readStruct32();
-
- case BIN40:
- case DEC32:
- case BIN72:
- case DEC64:
- // XXX: what types are we supposed to use here?
- return readBytes(t);
-
- case VOID:
- return null;
-
- default:
- return readBytes(t);
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/codec/AbstractEncoder.java b/java/common/src/main/java/org/apache/qpid/transport/codec/AbstractEncoder.java
deleted file mode 100644
index 0ccfcfcb70..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/codec/AbstractEncoder.java
+++ /dev/null
@@ -1,621 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.codec;
-
-import java.io.UnsupportedEncodingException;
-
-import java.nio.ByteBuffer;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.apache.qpid.transport.Range;
-import org.apache.qpid.transport.RangeSet;
-import org.apache.qpid.transport.Struct;
-import org.apache.qpid.transport.Type;
-
-import static org.apache.qpid.transport.util.Functions.*;
-
-
-/**
- * AbstractEncoder
- *
- * @author Rafael H. Schloming
- */
-
-abstract class AbstractEncoder implements Encoder
-{
-
- private static Map<Class<?>,Type> ENCODINGS = new HashMap<Class<?>,Type>();
- static
- {
- ENCODINGS.put(Boolean.class, Type.BOOLEAN);
- ENCODINGS.put(String.class, Type.STR16);
- ENCODINGS.put(Long.class, Type.INT64);
- ENCODINGS.put(Integer.class, Type.INT32);
- ENCODINGS.put(Short.class, Type.INT16);
- ENCODINGS.put(Byte.class, Type.INT8);
- ENCODINGS.put(Map.class, Type.MAP);
- ENCODINGS.put(List.class, Type.LIST);
- ENCODINGS.put(Float.class, Type.FLOAT);
- ENCODINGS.put(Double.class, Type.DOUBLE);
- ENCODINGS.put(Character.class, Type.CHAR);
- ENCODINGS.put(byte[].class, Type.VBIN32);
- ENCODINGS.put(UUID.class, Type.UUID);
- }
-
- private final Map<String,byte[]> str8cache = new LinkedHashMap<String,byte[]>()
- {
- @Override protected boolean removeEldestEntry(Map.Entry<String,byte[]> me)
- {
- return size() > 4*1024;
- }
- };
-
- protected abstract void doPut(byte b);
-
- protected abstract void doPut(ByteBuffer src);
-
- protected void put(byte b)
- {
- doPut(b);
- }
-
- protected void put(ByteBuffer src)
- {
- doPut(src);
- }
-
- protected void put(byte[] bytes)
- {
- put(ByteBuffer.wrap(bytes));
- }
-
- protected abstract int beginSize8();
- protected abstract void endSize8(int pos);
-
- protected abstract int beginSize16();
- protected abstract void endSize16(int pos);
-
- protected abstract int beginSize32();
- protected abstract void endSize32(int pos);
-
- public void writeUint8(short b)
- {
- assert b < 0x100;
-
- put((byte) b);
- }
-
- public void writeUint16(int s)
- {
- assert s < 0x10000;
-
- put(lsb(s >>> 8));
- put(lsb(s));
- }
-
- public void writeUint32(long i)
- {
- assert i < 0x100000000L;
-
- put(lsb(i >>> 24));
- put(lsb(i >>> 16));
- put(lsb(i >>> 8));
- put(lsb(i));
- }
-
- public void writeSequenceNo(int i)
- {
- writeUint32(i);
- }
-
- public void writeUint64(long l)
- {
- for (int i = 0; i < 8; i++)
- {
- put(lsb(l >> (56 - i*8)));
- }
- }
-
-
- public void writeDatetime(long l)
- {
- writeUint64(l);
- }
-
- private static final byte[] encode(String s, String charset)
- {
- try
- {
- return s.getBytes(charset);
- }
- catch (UnsupportedEncodingException e)
- {
- throw new RuntimeException(e);
- }
- }
-
- public void writeStr8(String s)
- {
- if (s == null)
- {
- s = "";
- }
-
- byte[] bytes = str8cache.get(s);
- if (bytes == null)
- {
- bytes = encode(s, "UTF-8");
- str8cache.put(s, bytes);
- }
- writeUint8((short) bytes.length);
- put(bytes);
- }
-
- public void writeStr16(String s)
- {
- if (s == null)
- {
- s = "";
- }
-
- byte[] bytes = encode(s, "UTF-8");
- writeUint16(bytes.length);
- put(bytes);
- }
-
- public void writeVbin8(byte[] bytes)
- {
- if (bytes == null) { bytes = new byte[0]; }
- if (bytes.length > 255)
- {
- throw new IllegalArgumentException("array too long: " + bytes.length);
- }
- writeUint8((short) bytes.length);
- put(ByteBuffer.wrap(bytes));
- }
-
- public void writeVbin16(byte[] bytes)
- {
- if (bytes == null) { bytes = new byte[0]; }
- writeUint16(bytes.length);
- put(ByteBuffer.wrap(bytes));
- }
-
- public void writeVbin32(byte[] bytes)
- {
- if (bytes == null) { bytes = new byte[0]; }
- writeUint32(bytes.length);
- put(ByteBuffer.wrap(bytes));
- }
-
- public void writeSequenceSet(RangeSet ranges)
- {
- if (ranges == null)
- {
- writeUint16((short) 0);
- }
- else
- {
- writeUint16(ranges.size() * 8);
- for (Range range : ranges)
- {
- writeSequenceNo(range.getLower());
- writeSequenceNo(range.getUpper());
- }
- }
- }
-
- public void writeByteRanges(RangeSet ranges)
- {
- throw new Error("not implemented");
- }
-
- public void writeUuid(UUID uuid)
- {
- long msb = 0;
- long lsb = 0;
- if (uuid != null)
- {
- msb = uuid.getMostSignificantBits();
- lsb = uuid.getLeastSignificantBits();
- }
- writeUint64(msb);
- writeUint64(lsb);
- }
-
- public void writeStruct(int type, Struct s)
- {
- boolean empty = false;
- if (s == null)
- {
- s = Struct.create(type);
- empty = true;
- }
-
- int width = s.getSizeWidth();
- int pos = -1;
- if (width > 0)
- {
- pos = beginSize(width);
- }
-
- if (type > 0)
- {
- writeUint16(type);
- }
-
- s.write(this);
-
- if (width > 0)
- {
- endSize(width, pos);
- }
- }
-
- public void writeStruct32(Struct s)
- {
- if (s == null)
- {
- writeUint32(0);
- }
- else
- {
- int pos = beginSize32();
- writeUint16(s.getEncodedType());
- s.write(this);
- endSize32(pos);
- }
- }
-
- private Type encoding(Object value)
- {
- if (value == null)
- {
- return Type.VOID;
- }
-
- Class klass = value.getClass();
- Type type = resolve(klass);
-
- if (type == null)
- {
- throw new IllegalArgumentException
- ("unable to resolve type: " + klass + ", " + value);
- }
- else
- {
- return type;
- }
- }
-
- static final Type resolve(Class klass)
- {
- Type type = ENCODINGS.get(klass);
- if (type != null)
- {
- return type;
- }
-
- Class sup = klass.getSuperclass();
- if (sup != null)
- {
- type = resolve(klass.getSuperclass());
-
- if (type != null)
- {
- return type;
- }
- }
-
- for (Class iface : klass.getInterfaces())
- {
- type = resolve(iface);
- if (type != null)
- {
- return type;
- }
- }
-
- return null;
- }
-
- public void writeMap(Map<String,Object> map)
- {
- int pos = beginSize32();
- if (map != null)
- {
- writeUint32(map.size());
- writeMapEntries(map);
- }
- endSize32(pos);
- }
-
- protected void writeMapEntries(Map<String,Object> map)
- {
- for (Map.Entry<String,Object> entry : map.entrySet())
- {
- String key = entry.getKey();
- Object value = entry.getValue();
- Type type = encoding(value);
- writeStr8(key);
- put(type.code);
- write(type, value);
- }
- }
-
- public void writeList(List<Object> list)
- {
- int pos = beginSize32();
- if (list != null)
- {
- writeUint32(list.size());
- writeListEntries(list);
- }
- endSize32(pos);
- }
-
- protected void writeListEntries(List<Object> list)
- {
- for (Object value : list)
- {
- Type type = encoding(value);
- put(type.code);
- write(type, value);
- }
- }
-
- public void writeArray(List<Object> array)
- {
- int pos = beginSize32();
- if (array != null)
- {
- writeArrayEntries(array);
- }
- endSize32(pos);
- }
-
- protected void writeArrayEntries(List<Object> array)
- {
- Type type;
-
- if (array.isEmpty())
- {
- return;
- }
- else
- {
- type = encoding(array.get(0));
- }
-
- put(type.code);
-
- writeUint32(array.size());
-
- for (Object value : array)
- {
- write(type, value);
- }
- }
-
- private void writeSize(Type t, int size)
- {
- if (t.fixed)
- {
- if (size != t.width)
- {
- throw new IllegalArgumentException
- ("size does not match fixed width " + t.width + ": " +
- size);
- }
- }
- else
- {
- writeSize(t.width, size);
- }
- }
-
- private void writeSize(int width, int size)
- {
- // XXX: should check lengths
- switch (width)
- {
- case 1:
- writeUint8((short) size);
- break;
- case 2:
- writeUint16(size);
- break;
- case 4:
- writeUint32(size);
- break;
- default:
- throw new IllegalStateException("illegal width: " + width);
- }
- }
-
- private int beginSize(int width)
- {
- switch (width)
- {
- case 1:
- return beginSize8();
- case 2:
- return beginSize16();
- case 4:
- return beginSize32();
- default:
- throw new IllegalStateException("illegal width: " + width);
- }
- }
-
- private void endSize(int width, int pos)
- {
- switch (width)
- {
- case 1:
- endSize8(pos);
- break;
- case 2:
- endSize16(pos);
- break;
- case 4:
- endSize32(pos);
- break;
- default:
- throw new IllegalStateException("illegal width: " + width);
- }
- }
-
- private void writeBytes(Type t, byte[] bytes)
- {
- writeSize(t, bytes.length);
- put(bytes);
- }
-
- private <T> T coerce(Class<T> klass, Object value)
- {
- if (klass.isInstance(value))
- {
- return klass.cast(value);
- }
- else
- {
- throw new IllegalArgumentException("" + value);
- }
- }
-
- private void write(Type t, Object value)
- {
- switch (t)
- {
- case BIN8:
- case UINT8:
- writeUint8(coerce(Short.class, value));
- break;
- case INT8:
- put(coerce(Byte.class, value));
- break;
- case CHAR:
- put((byte) ((char)coerce(Character.class, value)));
- break;
- case BOOLEAN:
- if (coerce(Boolean.class, value))
- {
- put((byte) 1);
- }
- else
- {
- put((byte) 0);
- }
- break;
-
- case BIN16:
- case UINT16:
- writeUint16(coerce(Integer.class, value));
- break;
-
- case INT16:
- writeUint16(coerce(Short.class, value));
- break;
-
- case BIN32:
- case UINT32:
- writeUint32(coerce(Long.class, value));
- break;
-
- case CHAR_UTF32:
- case INT32:
- writeUint32(coerce(Integer.class, value));
- break;
-
- case FLOAT:
- writeUint32(Float.floatToIntBits(coerce(Float.class, value)));
- break;
-
- case BIN64:
- case UINT64:
- case INT64:
- case DATETIME:
- writeUint64(coerce(Long.class, value));
- break;
-
- case DOUBLE:
- long bits = Double.doubleToLongBits(coerce(Double.class, value));
- writeUint64(bits);
- break;
-
- case UUID:
- writeUuid(coerce(UUID.class, value));
- break;
-
- case STR8:
- writeStr8(coerce(String.class, value));
- break;
-
- case STR16:
- writeStr16(coerce(String.class, value));
- break;
-
- case STR8_LATIN:
- case STR8_UTF16:
- case STR16_LATIN:
- case STR16_UTF16:
- // XXX: need to do character conversion
- writeBytes(t, coerce(String.class, value).getBytes());
- break;
-
- case MAP:
- writeMap((Map<String,Object>) coerce(Map.class, value));
- break;
- case LIST:
- writeList(coerce(List.class, value));
- break;
- case ARRAY:
- writeArray(coerce(List.class, value));
- break;
- case STRUCT32:
- writeStruct32(coerce(Struct.class, value));
- break;
-
- case BIN40:
- case DEC32:
- case BIN72:
- case DEC64:
- // XXX: what types are we supposed to use here?
- writeBytes(t, coerce(byte[].class, value));
- break;
-
- case VOID:
- break;
-
- default:
- writeBytes(t, coerce(byte[].class, value));
- break;
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java b/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java
deleted file mode 100644
index 10f67e1cd6..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/codec/BBDecoder.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.codec;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-import org.apache.qpid.transport.Binary;
-
-/**
- * Byte Buffer Decoder.
- * Decoder concrete implementor using a backing byte buffer for decoding data.
- *
- * @author Rafael H. Schloming
- */
-public final class BBDecoder extends AbstractDecoder
-{
- private ByteBuffer in;
-
- public void init(ByteBuffer in)
- {
- this.in = in;
- this.in.order(ByteOrder.BIG_ENDIAN);
- }
-
- public void releaseBuffer()
- {
- in = null;
- }
-
- protected byte doGet()
- {
- return in.get();
- }
-
- protected void doGet(byte[] bytes)
- {
- in.get(bytes);
- }
-
- protected Binary get(int size)
- {
- if (in.hasArray())
- {
- byte[] bytes = in.array();
- Binary bin = new Binary(bytes, in.arrayOffset() + in.position(), size);
- in.position(in.position() + size);
- return bin;
- }
- else
- {
- return super.get(size);
- }
- }
-
- public boolean hasRemaining()
- {
- return in.hasRemaining();
- }
-
- public short readUint8()
- {
- return (short) (0xFF & in.get());
- }
-
- public int readUint16()
- {
- return 0xFFFF & in.getShort();
- }
-
- public long readUint32()
- {
- return 0xFFFFFFFFL & in.getInt();
- }
-
- public long readUint64()
- {
- return in.getLong();
- }
-
- public byte[] readBin128()
- {
- byte[] result = new byte[16];
- get(result);
- return result;
- }
-
- public byte[] readBytes(int howManyBytes)
- {
- byte[] result = new byte[howManyBytes];
- get(result);
- return result;
- }
-
- public double readDouble()
- {
- return in.getDouble();
- }
-
- public float readFloat()
- {
- return in.getFloat();
- }
-
- public short readInt16()
- {
- return in.getShort();
- }
-
- public int readInt32()
- {
- return in.getInt();
- }
-
- public byte readInt8()
- {
- return in.get();
- }
-
- public byte[] readReaminingBytes()
- {
- byte[] result = new byte[in.limit() - in.position()];
- get(result);
- return result;
- }
-
- public long readInt64()
- {
- return in.getLong();
- }
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/transport/codec/BBEncoder.java b/java/common/src/main/java/org/apache/qpid/transport/codec/BBEncoder.java
deleted file mode 100644
index 4486b03a67..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/codec/BBEncoder.java
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.codec;
-
-import java.nio.BufferOverflowException;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.UUID;
-
-
-/**
- * Byte Buffer Encoder.
- * Encoder concrete implementor using a backing byte buffer for encoding data.
- *
- * @author Rafael H. Schloming
- */
-public final class BBEncoder extends AbstractEncoder
-{
- private ByteBuffer out;
- private int segment;
-
- public BBEncoder(int capacity) {
- out = ByteBuffer.allocate(capacity);
- out.order(ByteOrder.BIG_ENDIAN);
- segment = 0;
- }
-
- public void init()
- {
- out.clear();
- segment = 0;
- }
-
- public ByteBuffer segment()
- {
- int pos = out.position();
- out.position(segment);
- ByteBuffer slice = out.slice();
- slice.limit(pos - segment);
- out.position(pos);
- segment = pos;
- return slice;
- }
-
- public ByteBuffer buffer()
- {
- int pos = out.position();
- out.position(segment);
- ByteBuffer slice = out.slice();
- slice.limit(pos - segment);
- out.position(pos);
- return slice;
- }
-
- private void grow(int size)
- {
- ByteBuffer old = out;
- int capacity = old.capacity();
- out = ByteBuffer.allocate(Math.max(capacity + size, 2*capacity));
- out.order(ByteOrder.BIG_ENDIAN);
- old.flip();
- out.put(old);
- }
-
- protected void doPut(byte b)
- {
- try
- {
- out.put(b);
- }
- catch (BufferOverflowException e)
- {
- grow(1);
- out.put(b);
- }
- }
-
- protected void doPut(ByteBuffer src)
- {
- try
- {
- out.put(src);
- }
- catch (BufferOverflowException e)
- {
- grow(src.remaining());
- out.put(src);
- }
- }
-
- protected void put(byte[] bytes)
- {
- try
- {
- out.put(bytes);
- }
- catch (BufferOverflowException e)
- {
- grow(bytes.length);
- out.put(bytes);
- }
- }
-
- public void writeUint8(short b)
- {
- assert b < 0x100;
-
- try
- {
- out.put((byte) b);
- }
- catch (BufferOverflowException e)
- {
- grow(1);
- out.put((byte) b);
- }
- }
-
- public void writeUint16(int s)
- {
- assert s < 0x10000;
-
- try
- {
- out.putShort((short) s);
- }
- catch (BufferOverflowException e)
- {
- grow(2);
- out.putShort((short) s);
- }
- }
-
- public void writeUint32(long i)
- {
- assert i < 0x100000000L;
-
- try
- {
- out.putInt((int) i);
- }
- catch (BufferOverflowException e)
- {
- grow(4);
- out.putInt((int) i);
- }
- }
-
- public void writeUint64(long l)
- {
- try
- {
- out.putLong(l);
- }
- catch (BufferOverflowException e)
- {
- grow(8);
- out.putLong(l);
- }
- }
-
- public int beginSize8()
- {
- int pos = out.position();
- try
- {
- out.put((byte) 0);
- }
- catch (BufferOverflowException e)
- {
- grow(1);
- out.put((byte) 0);
- }
- return pos;
- }
-
- public void endSize8(int pos)
- {
- int cur = out.position();
- out.put(pos, (byte) (cur - pos - 1));
- }
-
- public int beginSize16()
- {
- int pos = out.position();
- try
- {
- out.putShort((short) 0);
- }
- catch (BufferOverflowException e)
- {
- grow(2);
- out.putShort((short) 0);
- }
- return pos;
- }
-
- public void endSize16(int pos)
- {
- int cur = out.position();
- out.putShort(pos, (short) (cur - pos - 2));
- }
-
- public int beginSize32()
- {
- int pos = out.position();
- try
- {
- out.putInt(0);
- }
- catch (BufferOverflowException e)
- {
- grow(4);
- out.putInt(0);
- }
- return pos;
- }
-
- public void endSize32(int pos)
- {
- int cur = out.position();
- out.putInt(pos, (cur - pos - 4));
- }
-
- public void writeDouble(double aDouble)
- {
- try
- {
- out.putDouble(aDouble);
- } catch(BufferOverflowException exception)
- {
- grow(8);
- out.putDouble(aDouble);
- }
- }
-
- public void writeInt16(short aShort)
- {
- try
- {
- out.putShort(aShort);
- } catch(BufferOverflowException exception)
- {
- grow(2);
- out.putShort(aShort);
- }
- }
-
- public void writeInt32(int anInt)
- {
- try
- {
- out.putInt(anInt);
- } catch(BufferOverflowException exception)
- {
- grow(4);
- out.putInt(anInt);
- }
- }
-
- public void writeInt64(long aLong)
- {
- try
- {
- out.putLong(aLong);
- } catch(BufferOverflowException exception)
- {
- grow(8);
- out.putLong(aLong);
- }
- }
-
- public void writeInt8(byte aByte)
- {
- try
- {
- out.put(aByte);
- } catch(BufferOverflowException exception)
- {
- grow(1);
- out.put(aByte);
- }
- }
-
- public void writeBin128(byte[] byteArray)
- {
- byteArray = (byteArray != null) ? byteArray : new byte [16];
-
- assert byteArray.length == 16;
-
- try
- {
- out.put(byteArray);
- } catch(BufferOverflowException exception)
- {
- grow(16);
- out.put(byteArray);
- }
- }
-
- public void writeBin128(UUID id)
- {
- byte[] data = new byte[16];
-
- long msb = id.getMostSignificantBits();
- long lsb = id.getLeastSignificantBits();
-
- assert data.length == 16;
- for (int i=7; i>=0; i--)
- {
- data[i] = (byte)(msb & 0xff);
- msb = msb >> 8;
- }
-
- for (int i=15; i>=8; i--)
- {
- data[i] = (byte)(lsb & 0xff);
- lsb = (lsb >> 8);
- }
- writeBin128(data);
- }
-
- public void writeFloat(float aFloat)
- {
- try
- {
- out.putFloat(aFloat);
- } catch(BufferOverflowException exception)
- {
- grow(4);
- out.putFloat(aFloat);
- }
- }
-
- public void writeMagicNumber()
- {
- out.put("AM2".getBytes());
- }
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/transport/codec/Decoder.java b/java/common/src/main/java/org/apache/qpid/transport/codec/Decoder.java
deleted file mode 100644
index a4df5b5fcb..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/codec/Decoder.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.codec;
-
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.apache.qpid.transport.RangeSet;
-import org.apache.qpid.transport.Struct;
-
-
-/**
- * Decoder interface.
- * Each concrete implementor must specify how to decode given values.
- *
- * @author Rafael H. Schloming
- */
-public interface Decoder
-{
- /**
- * Tells whether there are any remaining byte(s) to be read.
- *
- * @return true if there are remaining bytes, false otherwise.
- */
- boolean hasRemaining();
-
- /**
- * The uint8 type is an 8-bit unsigned integral value.
- *
- * @return an 8-bit unsigned integral value.
- */
- short readUint8();
-
- /**
- *The uint16 type is a 16-bit unsigned integral value encoded in network byte order.
- *
- * @return a 16-bit unsigned integral value encoded in network byte order.
- */
- int readUint16();
-
- /**
- *The uint32 type is a 32-bit unsigned integral value encoded in network byte order.
- *
- * @return a 32-bit unsigned integral value encoded in network byte order.
- */
- long readUint32();
-
- /**
- * The uint64 type is a 64-bit unsigned integral value encoded in network byte order.
- *
- * @return a 64-bit unsigned integral value encoded in network byte order.
- */
- long readUint64();
-
- /**
- * The datetime type encodes a date and time using the 64 bit POSIX time_t format.
- *
- * @return a date and time using the 64 bit POSIX time_t format.
- */
- long readDatetime();
-
- /**
- * The uuid type encodes a universally unique id as defined by RFC-4122.
- * The format and operations for this type can be found in section 4.1.2 of RFC-4122.
- *
- * return a universally unique id as defined by RFC-4122.
- */
- UUID readUuid();
-
- /**
-// *The sequence-no type encodes, in network byte order, a serial number as defined in RFC-1982.
- *
- * @return a serial number as defined in RFC-1982.
- */
- int readSequenceNo();
-
- RangeSet readSequenceSet(); // XXX
- RangeSet readByteRanges(); // XXX
-
- /**
- * The str8 type encodes up to 255 octets worth of UTF-8 unicode.
- * The number of octets of unicode is first encoded as an 8-bit unsigned integral value.
- * This is followed by the actual UTF-8 unicode.
- * Note that the encoded size refers to the number of octets of unicode, not necessarily the number of characters since
- * the UTF-8 unicode may include multi-byte character sequences.
- *
- * @return a string.
- */
- String readStr8();
-
- /**
- * The str16 type encodes up to 65535 octets worth of UTF-8 unicode.
- * The number of octets is first encoded as a 16-bit unsigned integral value in network byte order.
- * This is followed by the actual UTF-8 unicode.
- * Note that the encoded size refers to the number of octets of unicode, not necessarily the number of unicode
- * characters since the UTF-8 unicode may include multi-byte character sequences.
- *
- * return a string.
- */
- String readStr16();
-
- /**
- * The vbin8 type encodes up to 255 octets of opaque binary data.
- *
- * return a byte array.
- */
- byte[] readVbin8();
-
- /**
- * The vbin16 type encodes up to 65535 octets of opaque binary data.
- *
- * @return the corresponding byte array.
- */
- byte[] readVbin16();
-
- /**
- * The vbin32 type encodes up to 4294967295 octets of opaque binary data.
- *
- * @return the corresponding byte array.
- */
- byte[] readVbin32();
-
- /**
- * The struct32 type describes any coded struct with a 32-bit (4 octet) size.
- * The type is restricted to be only coded structs with a 32-bit size, consequently the first six octets of any encoded
- * value for this type MUST always contain the size, class-code, and struct-code in that order.
- * The size is encoded as a 32-bit unsigned integral value in network byte order that is equal to the size of the
- * encoded field-data, packing-flags, class-code, and struct-code. The class-code is a single octet that may be set to any
- * valid class code.
- * The struct-code is a single octet that may be set to any valid struct code within the given class-code.
- * The first six octets are then followed by the packing flags and encoded field data.
- * The presence and quantity of packingflags, as well as the specific fields are determined by the struct definition
- * identified with the encoded class-code and struct-code.
- *
- * @return the decoded struct.
- */
- Struct readStruct32();
-
- /**
- * A map is a set of distinct keys where each key has an associated (type,value) pair.
- * The triple of the key, type, and value, form an entry within a map. Each entry within a given map MUST have a
- * distinct key.
- * A map is encoded as a size in octets, a count of the number of entries, followed by the encoded entries themselves.
- * An encoded map may contain up to (4294967295 - 4) octets worth of encoded entries.
- * The size is encoded as a 32-bit unsigned integral value in network byte order equal to the number of octets worth of
- * encoded entries plus 4. (The extra 4 octets is added for the entry count.)
- * The size is then followed by the number of entries encoded as a 32-bit unsigned integral value in network byte order.
- * Finally the entries are encoded sequentially.
- * An entry is encoded as the key, followed by the type, and then the value. The key is always a string encoded as a str8.
- * The type is a single octet that may contain any valid AMQP type code.
- * The value is encoded according to the rules defined by the type code for that entry.
- *
- * @return the decoded map.
- */
- Map<String,Object> readMap();
-
- /**
- * A list is an ordered sequence of (type, value) pairs. The (type, value) pair forms an item within the list.
- * The list may contain items of many distinct types. A list is encoded as a size in octets, followed by a count of the
- * number of items, followed by the items themselves encoded in their defined order.
- * An encoded list may contain up to (4294967295 - 4) octets worth of encoded items.
- * The size is encoded as a 32-bit unsigned integral value in network byte order equal to the number of octets worth
- * of encoded items plus 4. (The extra4 octets is added for the item count.)
- * The size is then followed by the number of items encoded as a 32-bit unsigned integral value in network byte order.
- * Finally the items are encoded sequentially in their defined order.
- * An item is encoded as the type followed by the value. The type is a single octet that may contain any valid AMQP type
- * code.
- * The value is encoded according to the rules defined by the type code for that item.
- *
- * @return the decoded list.
- */
- List<Object> readList();
-
- /**
- * An array is an ordered sequence of values of the same type.
- * The array is encoded in as a size in octets, followed by a type code, then a count of the number values in the array,
- * and finally the values encoded in their defined order.
- * An encoded array may contain up to (4294967295 - 5) octets worth of encoded values.
- * The size is encoded as a 32-bit unsigned integral value in network byte order equal to the number of octets worth of
- * encoded values plus 5. (The extra 5 octets consist of 4 octets for the count of the number of values, and one octet to
- * hold the type code for the items inthe array.)
- * The size is then followed by a single octet that may contain any valid AMQP type code.
- * The type code is then followed by the number of values encoded as a 32-bit unsigned integral value in network byte
- * order.
- * Finally the values are encoded sequentially in their defined order according to the rules defined by the type code for
- * the array.
- *
- * @return the decoded array.
- */
- List<Object> readArray();
-
- /**
- *
- * @param type the type of the struct.
- * @return the decoded struct.
- */
- Struct readStruct(int type);
-
- /**
- * The float type encodes a single precision 32-bit floating point number.
- * The format and operations are defined by the IEEE 754 standard for 32-bit single precision floating point numbers.
- *
- * @return the decoded float.
- */
- float readFloat();
-
- /**
- * The double type encodes a double precision 64-bit floating point number.
- * The format and operations are defined by the IEEE 754 standard for 64-bit double precision floating point numbers.
- *
- * @return the decoded double
- */
- double readDouble();
-
- /**
- * The int8 type is a signed integral value encoded using an 8-bit two's complement representation.
- *
- * @return the decoded integer.
- */
- byte readInt8();
-
- /**
- * The int16 type is a signed integral value encoded using a 16-bit two's complement representation in network byte order.
- *
- * @return the decoded integer.
- */
- short readInt16();
-
- /**
- * The int32 type is a signed integral value encoded using a 32-bit two's complement representation in network byte order.
- *
- * @return the decoded integer.
- */
- int readInt32();
-
- /**
- * The int64 type is a signed integral value encoded using a 64-bit two's complement representation in network byte order.
- *
- * @return the decoded integer (as long).
- */
- long readInt64();
-
- /**
- * The bin128 type consists of 16 consecutive octets of opaque binary data.
- *
- * @return the decoded byte array.
- */
- byte [] readBin128();
-
- /**
- * Reads the remaining bytes on the underlying buffer.
- *
- * @return the remaining bytes on the underlying buffer.
- */
- byte[] readReaminingBytes ();
-
- /**
- * Reads the given number of bytes.
- *
- * @param howManyBytes how many bytes need to be read?
- * @return a byte array containing the requested data.
- */
- byte[] readBytes (int howManyBytes);
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/transport/codec/Encodable.java b/java/common/src/main/java/org/apache/qpid/transport/codec/Encodable.java
deleted file mode 100644
index 37ce8a5cb7..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/codec/Encodable.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.codec;
-
-
-/**
- * Encodable
- *
- * @author Rafael H. Schloming
- */
-public interface Encodable
-{
- /**
- * Encodes this encodable using the given encoder.
- *
- * @param encoder the encoder.
- */
- void write(Encoder encoder);
-
- /**
- * Decodes this encodable using the given decoder.
- *
- * @param decoder the decoder.
- */
- void read(Decoder decoder);
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/transport/codec/Encoder.java b/java/common/src/main/java/org/apache/qpid/transport/codec/Encoder.java
deleted file mode 100644
index 7d4f02af31..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/codec/Encoder.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.codec;
-
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.apache.qpid.transport.RangeSet;
-import org.apache.qpid.transport.Struct;
-
-
-/**
- * Encoder interface.
- * Each concrete implementor must specify how to encode given values.
- *
- * @author Rafael H. Schloming
- */
-public interface Encoder
-{
- /**
- * The uint8 type is an 8-bit unsigned integral value.
- *
- * @param b the unsigned integer to be encoded.
- */
- void writeUint8(short b);
-
- /**
- *The uint16 type is a 16-bit unsigned integral value encoded in network byte order.
- *
- * @param s the unsigned integer to be encoded.
- */
- void writeUint16(int s);
-
- /**
- *The uint32 type is a 32-bit unsigned integral value encoded in network byte order.
- *
- * @param i the unsigned integer to be encoded.
- */
- void writeUint32(long i);
-
- /**
- * The uint64 type is a 64-bit unsigned integral value encoded in network byte order.
- *
- * @param b the unsigned integer to be encoded.
- */
- void writeUint64(long l);
-
- /**
- * The datetime type encodes a date and time using the 64 bit POSIX time_t format.
- *
- * @param l the datetime (as long) to be encoded.
- */
- void writeDatetime(long l);
-
- /**
- * The uuid type encodes a universally unique id as defined by RFC-4122.
- * The format and operations for this type can be found in section 4.1.2 of RFC-4122.
- *
- * @param uuid the uuid to be encoded.
- */
- void writeUuid(UUID uuid);
-
- /**
- *The sequence-no type encodes, in network byte order, a serial number as defined in RFC-1982.
- *
- * @param s the sequence number to be encoded.
- */
- void writeSequenceNo(int s);
-
- void writeSequenceSet(RangeSet ranges); // XXX
- void writeByteRanges(RangeSet ranges); // XXX
-
- /**
- * The str8 type encodes up to 255 octets worth of UTF-8 unicode.
- * The number of octets of unicode is first encoded as an 8-bit unsigned integral value.
- * This is followed by the actual UTF-8 unicode.
- * Note that the encoded size refers to the number of octets of unicode, not necessarily the number of characters since
- * the UTF-8 unicode may include multi-byte character sequences.
- *
- * @param s the string to be encoded.
- */
- void writeStr8(String s);
-
- /**
- * The str16 type encodes up to 65535 octets worth of UTF-8 unicode.
- * The number of octets is first encoded as a 16-bit unsigned integral value in network byte order.
- * This is followed by the actual UTF-8 unicode.
- * Note that the encoded size refers to the number of octets of unicode, not necessarily the number of unicode
- * characters since the UTF-8 unicode may include multi-byte character sequences.
- *
- * @param s the string to be encoded.
- */
- void writeStr16(String s);
-
- /**
- * The vbin8 type encodes up to 255 octets of opaque binary data.
- * The number of octets is first encoded as an 8-bit unsigned integral value.
- * This is followed by the actual data.
- *
- * @param bytes the byte array to be encoded.
- */
- void writeVbin8(byte[] bytes);
-
- /**
- * The vbin16 type encodes up to 65535 octets of opaque binary data.
- * The number of octets is first encoded as a 16-bit unsigned integral value in network byte order.
- * This is followed by the actual data.
- *
- * @param bytes the byte array to be encoded.
- */
- void writeVbin16(byte[] bytes);
-
- /**
- * The vbin32 type encodes up to 4294967295 octets of opaque binary data.
- * The number of octets is first encoded as a 32-bit unsigned integral value in network byte order.
- * This is followed by the actual data.
- *
- * @param bytes the byte array to be encoded.
- */
- void writeVbin32(byte[] bytes);
-
- /**
- * The struct32 type describes any coded struct with a 32-bit (4 octet) size.
- * The type is restricted to be only coded structs with a 32-bit size, consequently the first six octets of any encoded
- * value for this type MUST always contain the size, class-code, and struct-code in that order.
- * The size is encoded as a 32-bit unsigned integral value in network byte order that is equal to the size of the
- * encoded field-data, packing-flags, class-code, and struct-code. The class-code is a single octet that may be set to any
- * valid class code.
- * The struct-code is a single octet that may be set to any valid struct code within the given class-code.
- * The first six octets are then followed by the packing flags and encoded field data.
- * The presence and quantity of packingflags, as well as the specific fields are determined by the struct definition
- * identified with the encoded class-code and struct-code.
- *
- * @param struct the struct to be encoded.
- */
- void writeStruct32(Struct struct);
-
- /**
- * A map is a set of distinct keys where each key has an associated (type,value) pair.
- * The triple of the key, type, and value, form an entry within a map. Each entry within a given map MUST have a
- * distinct key.
- * A map is encoded as a size in octets, a count of the number of entries, followed by the encoded entries themselves.
- * An encoded map may contain up to (4294967295 - 4) octets worth of encoded entries.
- * The size is encoded as a 32-bit unsigned integral value in network byte order equal to the number of octets worth of
- * encoded entries plus 4. (The extra 4 octets is added for the entry count.)
- * The size is then followed by the number of entries encoded as a 32-bit unsigned integral value in network byte order.
- * Finally the entries are encoded sequentially.
- * An entry is encoded as the key, followed by the type, and then the value. The key is always a string encoded as a str8.
- * The type is a single octet that may contain any valid AMQP type code.
- * The value is encoded according to the rules defined by the type code for that entry.
- *
- * @param map the map to be encoded.
- */
- void writeMap(Map<String,Object> map);
-
- /**
- * A list is an ordered sequence of (type, value) pairs. The (type, value) pair forms an item within the list.
- * The list may contain items of many distinct types. A list is encoded as a size in octets, followed by a count of the
- * number of items, followed by the items themselves encoded in their defined order.
- * An encoded list may contain up to (4294967295 - 4) octets worth of encoded items.
- * The size is encoded as a 32-bit unsigned integral value in network byte order equal to the number of octets worth
- * of encoded items plus 4. (The extra4 octets is added for the item count.)
- * The size is then followed by the number of items encoded as a 32-bit unsigned integral value in network byte order.
- * Finally the items are encoded sequentially in their defined order.
- * An item is encoded as the type followed by the value. The type is a single octet that may contain any valid AMQP type
- * code.
- * The value is encoded according to the rules defined by the type code for that item.
- *
- * @param list the list to be encoded.
- */
- void writeList(List<Object> list);
-
- /**
- * An array is an ordered sequence of values of the same type.
- * The array is encoded in as a size in octets, followed by a type code, then a count of the number values in the array,
- * and finally the values encoded in their defined order.
- * An encoded array may contain up to (4294967295 - 5) octets worth of encoded values.
- * The size is encoded as a 32-bit unsigned integral value in network byte order equal to the number of octets worth of
- * encoded values plus 5. (The extra 5 octets consist of 4 octets for the count of the number of values, and one octet to
- * hold the type code for the items inthe array.)
- * The size is then followed by a single octet that may contain any valid AMQP type code.
- * The type code is then followed by the number of values encoded as a 32-bit unsigned integral value in network byte
- * order.
- * Finally the values are encoded sequentially in their defined order according to the rules defined by the type code for
- * the array.
- *
- * @param array the array to be encoded.
- */
- void writeArray(List<Object> array);
-
- /**
- * The struct32 type describes any coded struct with a 32-bit (4 octet) size.
- * The type is restricted to be only coded structs with a 32-bit size, consequently the first six octets of any encoded
- * value for this type MUST always contain the size, class-code, and struct-code in that order.
- * The size is encoded as a 32-bit unsigned integral value in network byte order that is equal to the size of the
- * encoded field-data, packing-flags, class-code, and struct-code. The class-code is a single octet that may be set to any
- * valid class code.
- * The struct-code is a single octet that may be set to any valid struct code within the given class-code.
- * The first six octets are then followed by the packing flags and encoded field data.
- * The presence and quantity of packingflags, as well as the specific fields are determined by the struct definition
- * identified with the encoded class-code and struct-code.
- *
- * @param type the type of the struct.
- * @param struct the struct to be encoded.
- */
- void writeStruct(int type, Struct struct);
-
- /**
- * The float type encodes a single precision 32-bit floating point number.
- * The format and operations are defined by the IEEE 754 standard for 32-bit single precision floating point numbers.
- *
- * @param aFloat the float to be encoded.
- */
- void writeFloat(float aFloat);
-
- /**
- * The double type encodes a double precision 64-bit floating point number.
- * The format and operations are defined by the IEEE 754 standard for 64-bit double precision floating point numbers.
- *
- * @param aDouble the double to be encoded.
- */
- void writeDouble(double aDouble);
-
- /**
- * The int8 type is a signed integral value encoded using an 8-bit two's complement representation.
- *
- * @param aByte the integer to be encoded.
- */
- void writeInt8(byte aByte);
-
- /**
- * The int16 type is a signed integral value encoded using a 16-bit two's complement representation in network byte order.
- *
- * @param aShort the integer to be encoded.
- */
- void writeInt16(short aShort);
-
- /**
- * The int32 type is a signed integral value encoded using a 32-bit two's complement representation in network byte order.
- *
- * @param anInt the integer to be encoded.
- */
- void writeInt32(int anInt);
-
- /**
- * The int64 type is a signed integral value encoded using a 64-bit two's complement representation in network byte order.
- *
- * @param aLong the integer to be encoded.
- */
- void writeInt64(long aLong);
-
- /**
- * The bin128 type consists of 16 consecutive octets of opaque binary data.
- *
- * @param bytes the bytes array to be encoded.
- */
- void writeBin128(byte [] bytes);
-
- /**
- * Encodes the AMQP magic number.
- */
- void writeMagicNumber();
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java b/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java
deleted file mode 100644
index 1a85ab88a5..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/Assembler.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.qpid.transport.Header;
-import org.apache.qpid.transport.Method;
-import org.apache.qpid.transport.ProtocolError;
-import org.apache.qpid.transport.ProtocolEvent;
-import org.apache.qpid.transport.ProtocolHeader;
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.Struct;
-import org.apache.qpid.transport.codec.BBDecoder;
-
-/**
- * Assembler
- *
- */
-public class Assembler implements Receiver<NetworkEvent>, NetworkDelegate
-{
- // Use a small array to store incomplete Methods for low-value channels, instead of allocating a huge
- // array or always boxing the channelId and looking it up in the map. This value must be of the form 2^X - 1.
- private static final int ARRAY_SIZE = 0xFF;
- private final Method[] _incompleteMethodArray = new Method[ARRAY_SIZE + 1];
- private final Map<Integer, Method> _incompleteMethodMap = new HashMap<Integer, Method>();
-
- private final Receiver<ProtocolEvent> receiver;
- private final Map<Integer,List<Frame>> segments;
- private static final ThreadLocal<BBDecoder> _decoder = new ThreadLocal<BBDecoder>()
- {
- public BBDecoder initialValue()
- {
- return new BBDecoder();
- }
- };
-
- public Assembler(Receiver<ProtocolEvent> receiver)
- {
- this.receiver = receiver;
- segments = new HashMap<Integer,List<Frame>>();
- }
-
- private int segmentKey(Frame frame)
- {
- return (frame.getTrack() + 1) * frame.getChannel();
- }
-
- private List<Frame> getSegment(Frame frame)
- {
- return segments.get(segmentKey(frame));
- }
-
- private void setSegment(Frame frame, List<Frame> segment)
- {
- int key = segmentKey(frame);
- if (segments.containsKey(key))
- {
- error(new ProtocolError(Frame.L2, "segment in progress: %s",
- frame));
- }
- segments.put(segmentKey(frame), segment);
- }
-
- private void clearSegment(Frame frame)
- {
- segments.remove(segmentKey(frame));
- }
-
- private void emit(int channel, ProtocolEvent event)
- {
- event.setChannel(channel);
- receiver.received(event);
- }
-
- public void received(NetworkEvent event)
- {
- event.delegate(this);
- }
-
- public void exception(Throwable t)
- {
- this.receiver.exception(t);
- }
-
- public void closed()
- {
- this.receiver.closed();
- }
-
- public void init(ProtocolHeader header)
- {
- emit(0, header);
- }
-
- public void error(ProtocolError error)
- {
- emit(0, error);
- }
-
- public void frame(Frame frame)
- {
- ByteBuffer segment;
- if (frame.isFirstFrame() && frame.isLastFrame())
- {
- segment = frame.getBody();
- assemble(frame, segment);
- }
- else
- {
- List<Frame> frames;
- if (frame.isFirstFrame())
- {
- frames = new ArrayList<Frame>();
- setSegment(frame, frames);
- }
- else
- {
- frames = getSegment(frame);
- }
-
- frames.add(frame);
-
- if (frame.isLastFrame())
- {
- clearSegment(frame);
-
- int size = 0;
- for (Frame f : frames)
- {
- size += f.getSize();
- }
- segment = ByteBuffer.allocate(size);
- for (Frame f : frames)
- {
- segment.put(f.getBody());
- }
- segment.flip();
- assemble(frame, segment);
- }
- }
-
- }
-
- private void assemble(Frame frame, ByteBuffer segment)
- {
- BBDecoder dec = _decoder.get();
- dec.init(segment);
-
- int channel = frame.getChannel();
- Method command;
-
- switch (frame.getType())
- {
- case CONTROL:
- int controlType = dec.readUint16();
- Method control = Method.create(controlType);
- control.read(dec);
- emit(channel, control);
- break;
- case COMMAND:
- int commandType = dec.readUint16();
- // read in the session header, right now we don't use it
- int hdr = dec.readUint16();
- command = Method.create(commandType);
- command.setSync((0x0001 & hdr) != 0);
- command.read(dec);
- if (command.hasPayload())
- {
- setIncompleteCommand(channel, command);
- }
- else
- {
- emit(channel, command);
- }
- break;
- case HEADER:
- command = getIncompleteCommand(channel);
- List<Struct> structs = new ArrayList<Struct>(2);
- while (dec.hasRemaining())
- {
- structs.add(dec.readStruct32());
- }
- command.setHeader(new Header(structs));
- if (frame.isLastSegment())
- {
- setIncompleteCommand(channel, null);
- emit(channel, command);
- }
- break;
- case BODY:
- command = getIncompleteCommand(channel);
- command.setBody(segment);
- setIncompleteCommand(channel, null);
- emit(channel, command);
- break;
- default:
- throw new IllegalStateException("unknown frame type: " + frame.getType());
- }
-
- dec.releaseBuffer();
- }
-
- private void setIncompleteCommand(int channelId, Method incomplete)
- {
- if ((channelId & ARRAY_SIZE) == channelId)
- {
- _incompleteMethodArray[channelId] = incomplete;
- }
- else
- {
- if(incomplete != null)
- {
- _incompleteMethodMap.put(channelId, incomplete);
- }
- else
- {
- _incompleteMethodMap.remove(channelId);
- }
- }
- }
-
- private Method getIncompleteCommand(int channelId)
- {
- if ((channelId & ARRAY_SIZE) == channelId)
- {
- return _incompleteMethodArray[channelId];
- }
- else
- {
- return _incompleteMethodMap.get(channelId);
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/ConnectionBinding.java b/java/common/src/main/java/org/apache/qpid/transport/network/ConnectionBinding.java
deleted file mode 100644
index 1a8d277bba..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/ConnectionBinding.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network;
-
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.transport.Binding;
-import org.apache.qpid.transport.Connection;
-import org.apache.qpid.transport.ConnectionDelegate;
-import org.apache.qpid.transport.ConnectionListener;
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.network.security.sasl.SASLReceiver;
-import org.apache.qpid.transport.network.security.sasl.SASLSender;
-
-/**
- * ConnectionBinding
- *
- */
-
-public abstract class ConnectionBinding
- implements Binding<Connection,ByteBuffer>
-{
-
- public static Binding<Connection,ByteBuffer> get(final Connection connection)
- {
- return new ConnectionBinding()
- {
- public Connection connection()
- {
- return connection;
- }
- };
- }
-
- public static Binding<Connection,ByteBuffer> get(final ConnectionDelegate delegate)
- {
- return new ConnectionBinding()
- {
- public Connection connection()
- {
- Connection conn = new Connection();
- conn.setConnectionDelegate(delegate);
- return conn;
- }
- };
- }
-
- public static final int MAX_FRAME_SIZE = 64 * 1024 - 1;
-
- public abstract Connection connection();
-
- public Connection endpoint(Sender<ByteBuffer> sender)
- {
- Connection conn = connection();
-
- if (conn.getConnectionSettings() != null &&
- conn.getConnectionSettings().isUseSASLEncryption())
- {
- sender = new SASLSender(sender);
- conn.addConnectionListener((ConnectionListener)sender);
- }
-
- // XXX: hardcoded max-frame
- Disassembler dis = new Disassembler(sender, MAX_FRAME_SIZE);
- conn.setSender(dis);
- return conn;
- }
-
- public Receiver<ByteBuffer> receiver(Connection conn)
- {
- if (conn.getConnectionSettings() != null &&
- conn.getConnectionSettings().isUseSASLEncryption())
- {
- SASLReceiver receiver = new SASLReceiver(new InputHandler(new Assembler(conn)));
- conn.addConnectionListener((ConnectionListener)receiver);
- return receiver;
- }
- else
- {
- return new InputHandler(new Assembler(conn));
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java b/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java
deleted file mode 100644
index 685034d1a9..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/Disassembler.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network;
-
-import org.apache.qpid.transport.Header;
-import org.apache.qpid.transport.Method;
-import org.apache.qpid.transport.ProtocolDelegate;
-import org.apache.qpid.transport.ProtocolError;
-import org.apache.qpid.transport.ProtocolEvent;
-import org.apache.qpid.transport.ProtocolHeader;
-import org.apache.qpid.transport.SegmentType;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.Struct;
-import org.apache.qpid.transport.codec.BBEncoder;
-import static org.apache.qpid.transport.network.Frame.FIRST_FRAME;
-import static org.apache.qpid.transport.network.Frame.FIRST_SEG;
-import static org.apache.qpid.transport.network.Frame.HEADER_SIZE;
-import static org.apache.qpid.transport.network.Frame.LAST_FRAME;
-import static org.apache.qpid.transport.network.Frame.LAST_SEG;
-
-import static java.lang.Math.min;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-/**
- * Disassembler
- */
-public final class Disassembler implements Sender<ProtocolEvent>, ProtocolDelegate<Void>
-{
- private final Sender<ByteBuffer> sender;
- private final int maxPayload;
- private final Object sendlock = new Object();
- private final static ThreadLocal<BBEncoder> _encoder = new ThreadLocal<BBEncoder>()
- {
- public BBEncoder initialValue()
- {
- return new BBEncoder(4*1024);
- }
- };
-
- public Disassembler(Sender<ByteBuffer> sender, int maxFrame)
- {
- if (maxFrame <= HEADER_SIZE || maxFrame >= 64*1024)
- {
- throw new IllegalArgumentException("maxFrame must be > HEADER_SIZE and < 64K: " + maxFrame);
- }
- this.sender = sender;
- this.maxPayload = maxFrame - HEADER_SIZE;
- }
-
- public void send(ProtocolEvent event)
- {
- event.delegate(null, this);
- }
-
- public void flush()
- {
- synchronized (sendlock)
- {
- sender.flush();
- }
- }
-
- public void close()
- {
- synchronized (sendlock)
- {
- sender.close();
- }
- }
-
- private void frame(byte flags, byte type, byte track, int channel, int size, ByteBuffer buf)
- {
- synchronized (sendlock)
- {
- ByteBuffer data = ByteBuffer.allocate(size + HEADER_SIZE);
- data.order(ByteOrder.BIG_ENDIAN);
-
- data.put(0, flags);
- data.put(1, type);
- data.putShort(2, (short) (size + HEADER_SIZE));
- data.put(5, track);
- data.putShort(6, (short) channel);
- data.position(HEADER_SIZE);
-
- int limit = buf.limit();
- buf.limit(buf.position() + size);
- data.put(buf);
- buf.limit(limit);
-
- data.rewind();
- sender.send(data);
- }
- }
-
- private void fragment(byte flags, SegmentType type, ProtocolEvent event, ByteBuffer buf)
- {
- byte typeb = (byte) type.getValue();
- byte track = event.getEncodedTrack() == Frame.L4 ? (byte) 1 : (byte) 0;
-
- int remaining = buf.remaining();
- boolean first = true;
- while (true)
- {
- int size = min(maxPayload, remaining);
- remaining -= size;
-
- byte newflags = flags;
- if (first)
- {
- newflags |= FIRST_FRAME;
- first = false;
- }
- if (remaining == 0)
- {
- newflags |= LAST_FRAME;
- }
-
- frame(newflags, typeb, track, event.getChannel(), size, buf);
-
- if (remaining == 0)
- {
- break;
- }
- }
- }
-
- public void init(Void v, ProtocolHeader header)
- {
- synchronized (sendlock)
- {
- sender.send(header.toByteBuffer());
- sender.flush();
- }
- }
-
- public void control(Void v, Method method)
- {
- method(method, SegmentType.CONTROL);
- }
-
- public void command(Void v, Method method)
- {
- method(method, SegmentType.COMMAND);
- }
-
- private void method(Method method, SegmentType type)
- {
- BBEncoder enc = _encoder.get();
- enc.init();
- enc.writeUint16(method.getEncodedType());
- if (type == SegmentType.COMMAND)
- {
- if (method.isSync())
- {
- enc.writeUint16(0x0101);
- }
- else
- {
- enc.writeUint16(0x0100);
- }
- }
- method.write(enc);
- ByteBuffer methodSeg = enc.segment();
-
- byte flags = FIRST_SEG;
-
- boolean payload = method.hasPayload();
- if (!payload)
- {
- flags |= LAST_SEG;
- }
-
- ByteBuffer headerSeg = null;
- if (payload)
- {
- final Header hdr = method.getHeader();
- if (hdr != null)
- {
- final Struct[] structs = hdr.getStructs();
-
- for (Struct st : structs)
- {
- enc.writeStruct32(st);
- }
- }
- headerSeg = enc.segment();
- }
-
- synchronized (sendlock)
- {
- fragment(flags, type, method, methodSeg);
- if (payload)
- {
- ByteBuffer body = method.getBody();
- fragment(body == null ? LAST_SEG : 0x0, SegmentType.HEADER, method, headerSeg);
- if (body != null)
- {
- fragment(LAST_SEG, SegmentType.BODY, method, body);
- }
-
- }
- }
- }
-
- public void error(Void v, ProtocolError error)
- {
- throw new IllegalArgumentException(String.valueOf(error));
- }
-
- public void setIdleTimeout(int i)
- {
- sender.setIdleTimeout(i);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/Frame.java b/java/common/src/main/java/org/apache/qpid/transport/network/Frame.java
deleted file mode 100644
index 849355276e..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/Frame.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network;
-
-import org.apache.qpid.transport.SegmentType;
-import org.apache.qpid.transport.util.SliceIterator;
-
-import java.nio.ByteBuffer;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Iterator;
-
-import static org.apache.qpid.transport.util.Functions.*;
-
-
-/**
- * Frame
- *
- * @author Rafael H. Schloming
- */
-
-public final class Frame implements NetworkEvent
-{
- public static final int HEADER_SIZE = 12;
-
- // XXX: enums?
- public static final byte L1 = 0;
- public static final byte L2 = 1;
- public static final byte L3 = 2;
- public static final byte L4 = 3;
-
- public static final byte RESERVED = 0x0;
-
- public static final byte VERSION = 0x0;
-
- public static final byte FIRST_SEG = 0x8;
- public static final byte LAST_SEG = 0x4;
- public static final byte FIRST_FRAME = 0x2;
- public static final byte LAST_FRAME = 0x1;
-
- final private byte flags;
- final private SegmentType type;
- final private byte track;
- final private int channel;
- final private ByteBuffer body;
-
- public Frame(byte flags, SegmentType type, byte track, int channel,
- ByteBuffer body)
- {
- this.flags = flags;
- this.type = type;
- this.track = track;
- this.channel = channel;
- this.body = body;
- }
-
- public ByteBuffer getBody()
- {
- return body.slice();
- }
-
- public byte getFlags()
- {
- return flags;
- }
-
- public int getChannel()
- {
- return channel;
- }
-
- public int getSize()
- {
- return body.remaining();
- }
-
- public SegmentType getType()
- {
- return type;
- }
-
- public byte getTrack()
- {
- return track;
- }
-
- private boolean flag(byte mask)
- {
- return (flags & mask) != 0;
- }
-
- public boolean isFirstSegment()
- {
- return flag(FIRST_SEG);
- }
-
- public boolean isLastSegment()
- {
- return flag(LAST_SEG);
- }
-
- public boolean isFirstFrame()
- {
- return flag(FIRST_FRAME);
- }
-
- public boolean isLastFrame()
- {
- return flag(LAST_FRAME);
- }
-
- public void delegate(NetworkDelegate delegate)
- {
- delegate.frame(this);
- }
-
- public String toString()
- {
- StringBuilder str = new StringBuilder();
-
- str.append(String.format
- ("[%05d %05d %1d %s %d%d%d%d] ", getChannel(), getSize(),
- getTrack(), getType(),
- isFirstSegment() ? 1 : 0, isLastSegment() ? 1 : 0,
- isFirstFrame() ? 1 : 0, isLastFrame() ? 1 : 0));
-
- str.append(str(body));
-
- return str.toString();
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/InputHandler.java b/java/common/src/main/java/org/apache/qpid/transport/network/InputHandler.java
deleted file mode 100644
index a2885f97bc..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/InputHandler.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-import org.apache.qpid.transport.ProtocolError;
-import org.apache.qpid.transport.ProtocolHeader;
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.SegmentType;
-
-import static org.apache.qpid.transport.util.Functions.*;
-
-import static org.apache.qpid.transport.network.InputHandler.State.*;
-
-
-/**
- * InputHandler
- *
- * @author Rafael H. Schloming
- */
-
-public class InputHandler implements Receiver<ByteBuffer>
-{
-
- public enum State
- {
- PROTO_HDR,
- FRAME_HDR,
- FRAME_BODY,
- ERROR;
- }
-
- private final Receiver<NetworkEvent> receiver;
- private State state;
- private ByteBuffer input = null;
- private int needed;
-
- private byte flags;
- private SegmentType type;
- private byte track;
- private int channel;
-
- public InputHandler(Receiver<NetworkEvent> receiver, State state)
- {
- this.receiver = receiver;
- this.state = state;
-
- switch (state)
- {
- case PROTO_HDR:
- needed = 8;
- break;
- case FRAME_HDR:
- needed = Frame.HEADER_SIZE;
- break;
- }
- }
-
- public InputHandler(Receiver<NetworkEvent> receiver)
- {
- this(receiver, PROTO_HDR);
- }
-
- private void error(String fmt, Object ... args)
- {
- receiver.received(new ProtocolError(Frame.L1, fmt, args));
- }
-
- public void received(ByteBuffer buf)
- {
- int limit = buf.limit();
- int remaining = buf.remaining();
- while (remaining > 0)
- {
- if (remaining >= needed)
- {
- int consumed = needed;
- int pos = buf.position();
- if (input == null)
- {
- buf.limit(pos + needed);
- input = buf;
- state = next(pos);
- buf.limit(limit);
- buf.position(pos + consumed);
- }
- else
- {
- buf.limit(pos + needed);
- input.put(buf);
- buf.limit(limit);
- input.flip();
- state = next(0);
- }
-
- remaining -= consumed;
- input = null;
- }
- else
- {
- if (input == null)
- {
- input = ByteBuffer.allocate(needed);
- }
- input.put(buf);
- needed -= remaining;
- remaining = 0;
- }
- }
- }
-
- private State next(int pos)
- {
- input.order(ByteOrder.BIG_ENDIAN);
-
- switch (state) {
- case PROTO_HDR:
- if (input.get(pos) != 'A' &&
- input.get(pos + 1) != 'M' &&
- input.get(pos + 2) != 'Q' &&
- input.get(pos + 3) != 'P')
- {
- error("bad protocol header: %s", str(input));
- return ERROR;
- }
-
- byte protoClass = input.get(pos + 4);
- byte instance = input.get(pos + 5);
- byte major = input.get(pos + 6);
- byte minor = input.get(pos + 7);
- receiver.received(new ProtocolHeader(protoClass, instance, major, minor));
- needed = Frame.HEADER_SIZE;
- return FRAME_HDR;
- case FRAME_HDR:
- flags = input.get(pos);
- type = SegmentType.get(input.get(pos + 1));
- int size = (0xFFFF & input.getShort(pos + 2));
- size -= Frame.HEADER_SIZE;
- if (size < 0 || size > (64*1024 - 12))
- {
- error("bad frame size: %d", size);
- return ERROR;
- }
- byte b = input.get(pos + 5);
- if ((b & 0xF0) != 0) {
- error("non-zero reserved bits in upper nibble of " +
- "frame header byte 5: '%x'", b);
- return ERROR;
- } else {
- track = (byte) (b & 0xF);
- }
- channel = (0xFFFF & input.getShort(pos + 6));
- if (size == 0)
- {
- Frame frame = new Frame(flags, type, track, channel, ByteBuffer.allocate(0));
- receiver.received(frame);
- needed = Frame.HEADER_SIZE;
- return FRAME_HDR;
- }
- else
- {
- needed = size;
- return FRAME_BODY;
- }
- case FRAME_BODY:
- Frame frame = new Frame(flags, type, track, channel, input.slice());
- receiver.received(frame);
- needed = Frame.HEADER_SIZE;
- return FRAME_HDR;
- default:
- throw new IllegalStateException();
- }
- }
-
- public void exception(Throwable t)
- {
- receiver.exception(t);
- }
-
- public void closed()
- {
- receiver.closed();
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/NetworkDelegate.java b/java/common/src/main/java/org/apache/qpid/transport/network/NetworkDelegate.java
deleted file mode 100644
index fbdfe6e84c..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/NetworkDelegate.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network;
-
-import org.apache.qpid.transport.ProtocolError;
-import org.apache.qpid.transport.ProtocolHeader;
-
-
-/**
- * NetworkDelegate
- *
- * @author Rafael H. Schloming
- */
-
-public interface NetworkDelegate
-{
-
- void init(ProtocolHeader header);
-
- void frame(Frame frame);
-
- void error(ProtocolError error);
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/NetworkEvent.java b/java/common/src/main/java/org/apache/qpid/transport/network/NetworkEvent.java
deleted file mode 100644
index 91314cd4ad..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/NetworkEvent.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network;
-
-
-/**
- * NetworkEvent
- *
- */
-
-public interface NetworkEvent
-{
-
- void delegate(NetworkDelegate delegate);
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/NetworkTransport.java b/java/common/src/main/java/org/apache/qpid/transport/network/NetworkTransport.java
deleted file mode 100644
index 5e12d7e7c6..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/NetworkTransport.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network;
-
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.ConnectionSettings;
-
-public interface NetworkTransport
-{
- public void init(ConnectionSettings settings);
-
- public Sender<ByteBuffer> sender();
-
- public void receiver(Receiver<ByteBuffer> delegate);
-
- public void close();
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/Transport.java b/java/common/src/main/java/org/apache/qpid/transport/network/Transport.java
deleted file mode 100644
index f0bf04d04f..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/Transport.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.transport.network;
-
-import org.apache.qpid.transport.TransportException;
-
-public class Transport
-{
- private final static Class<?> transportClass;
-
- static
- {
- try
- {
- transportClass =
- Class.forName(System.getProperty("qpid.transport",
- "org.apache.qpid.transport.network.io.IoNetworkTransport"));
-
- }
- catch(Exception e)
- {
- throw new Error("Error occured while loading Qpid Transport",e);
- }
- }
-
- public static NetworkTransport getTransport() throws TransportException
- {
- try
- {
- return (NetworkTransport)transportClass.newInstance();
- }
- catch (Exception e)
- {
- throw new TransportException("Error while creating a new transport instance",e);
- }
- }
-} \ No newline at end of file
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/io/InputHandler_0_9.java b/java/common/src/main/java/org/apache/qpid/transport/network/io/InputHandler_0_9.java
deleted file mode 100644
index ecc5f6d07c..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/io/InputHandler_0_9.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package org.apache.qpid.transport.network.io;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.AMQException;
-import org.apache.qpid.framing.AMQFrame;
-import org.apache.qpid.framing.AMQFrameDecodingException;
-import org.apache.qpid.framing.AMQMethodBody;
-import org.apache.qpid.framing.AMQMethodBodyFactory;
-import org.apache.qpid.framing.BodyFactory;
-import org.apache.qpid.framing.ContentBody;
-import org.apache.qpid.framing.ContentBodyFactory;
-import org.apache.qpid.framing.ContentHeaderBody;
-import org.apache.qpid.framing.ContentHeaderBodyFactory;
-import org.apache.qpid.framing.HeartbeatBody;
-import org.apache.qpid.framing.HeartbeatBodyFactory;
-import org.apache.qpid.framing.MethodRegistry;
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-import org.apache.qpid.transport.Receiver;
-
-public class InputHandler_0_9 implements Receiver<ByteBuffer>
-{
-
- private AMQVersionAwareProtocolSession _session;
- private MethodRegistry _registry;
- private BodyFactory bodyFactory;
- private static final BodyFactory[] _bodiesSupported = new BodyFactory[Byte.MAX_VALUE];
-
- static
- {
- _bodiesSupported[ContentHeaderBody.TYPE] = ContentHeaderBodyFactory.getInstance();
- _bodiesSupported[ContentBody.TYPE] = ContentBodyFactory.getInstance();
- _bodiesSupported[HeartbeatBody.TYPE] = new HeartbeatBodyFactory();
- }
-
- public InputHandler_0_9(AMQVersionAwareProtocolSession session)
- {
- _session = session;
- _registry = _session.getMethodRegistry();
- }
-
- public void closed()
- {
- // AS FIXME: implement
- }
-
- public void exception(Throwable t)
- {
- // TODO: propogate exception to things
- t.printStackTrace();
- }
-
- public void received(ByteBuffer buf)
- {
- org.apache.mina.common.ByteBuffer in = org.apache.mina.common.ByteBuffer.wrap(buf);
- try
- {
- final byte type = in.get();
- if (type == AMQMethodBody.TYPE)
- {
- bodyFactory = new AMQMethodBodyFactory(_session);
- }
- else
- {
- bodyFactory = _bodiesSupported[type];
- }
-
- if (bodyFactory == null)
- {
- throw new AMQFrameDecodingException(null, "Unsupported frame type: " + type, null);
- }
-
- final int channel = in.getUnsignedShort();
- final long bodySize = in.getUnsignedInt();
-
- // bodySize can be zero
- if ((channel < 0) || (bodySize < 0))
- {
- throw new AMQFrameDecodingException(null, "Undecodable frame: type = " + type + " channel = " + channel
- + " bodySize = " + bodySize, null);
- }
-
- AMQFrame frame = new AMQFrame(in, channel, bodySize, bodyFactory);
-
- byte marker = in.get();
- if ((marker & 0xFF) != 0xCE)
- {
- throw new AMQFrameDecodingException(null, "End of frame marker not found. Read " + marker + " length=" + bodySize
- + " type=" + type, null);
- }
-
- try
- {
- frame.getBodyFrame().handle(frame.getChannel(), _session);
- }
- catch (AMQException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- catch (AMQFrameDecodingException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoAcceptor.java b/java/common/src/main/java/org/apache/qpid/transport/network/io/IoAcceptor.java
deleted file mode 100644
index 8530240dcc..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoAcceptor.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network.io;
-
-import org.apache.qpid.transport.Binding;
-import org.apache.qpid.transport.TransportException;
-
-import java.io.IOException;
-
-import java.net.InetSocketAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.SocketAddress;
-
-import java.nio.ByteBuffer;
-
-
-/**
- * IoAcceptor
- *
- */
-
-public class IoAcceptor<E> extends Thread
-{
-
-
- private ServerSocket socket;
- private Binding<E,ByteBuffer> binding;
-
- public IoAcceptor(SocketAddress address, Binding<E,ByteBuffer> binding)
- throws IOException
- {
- socket = new ServerSocket();
- socket.setReuseAddress(true);
- socket.bind(address);
- this.binding = binding;
-
- setName(String.format("IoAcceptor - %s", socket.getInetAddress()));
- }
-
- /**
- Close the underlying ServerSocket if it has not already been closed.
- */
- public void close() throws IOException
- {
- if (!socket.isClosed())
- {
- socket.close();
- }
- }
-
- public IoAcceptor(String host, int port, Binding<E,ByteBuffer> binding)
- throws IOException
- {
- this(new InetSocketAddress(host, port), binding);
- }
-
- public void run()
- {
- while (true)
- {
- try
- {
- Socket sock = socket.accept();
- IoTransport<E> transport = new IoTransport<E>(sock, binding,false);
- }
- catch (IOException e)
- {
- throw new TransportException(e);
- }
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoContext.java b/java/common/src/main/java/org/apache/qpid/transport/network/io/IoContext.java
deleted file mode 100644
index 69b3a0ce45..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoContext.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network.io;
-
-import java.net.Socket;
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.transport.Sender;
-
-public interface IoContext
-{
- Sender<ByteBuffer> getSender();
-
- IoReceiver getReceiver();
-
- Socket getSocket();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java b/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java
deleted file mode 100644
index dd6a37eca2..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoNetworkTransport.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network.io;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.SocketException;
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.transport.ConnectionSettings;
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.TransportException;
-import org.apache.qpid.transport.network.NetworkTransport;
-import org.apache.qpid.transport.util.Logger;
-
-public class IoNetworkTransport implements NetworkTransport, IoContext
-{
- static
- {
- org.apache.mina.common.ByteBuffer.setAllocator
- (new org.apache.mina.common.SimpleByteBufferAllocator());
- org.apache.mina.common.ByteBuffer.setUseDirectBuffers
- (Boolean.getBoolean("amqj.enableDirectBuffers"));
- }
-
- private static final Logger log = Logger.get(IoNetworkTransport.class);
-
- private Socket socket;
- private Sender<ByteBuffer> sender;
- private IoReceiver receiver;
- private long timeout = 60000;
- private ConnectionSettings settings;
-
- public void init(ConnectionSettings settings)
- {
- try
- {
- this.settings = settings;
- InetAddress address = InetAddress.getByName(settings.getHost());
- socket = new Socket();
- socket.setReuseAddress(true);
- socket.setTcpNoDelay(settings.isTcpNodelay());
-
- log.debug("default-SO_RCVBUF : %s", socket.getReceiveBufferSize());
- log.debug("default-SO_SNDBUF : %s", socket.getSendBufferSize());
-
- socket.setSendBufferSize(settings.getWriteBufferSize());
- socket.setReceiveBufferSize(settings.getReadBufferSize());
-
- log.debug("new-SO_RCVBUF : %s", socket.getReceiveBufferSize());
- log.debug("new-SO_SNDBUF : %s", socket.getSendBufferSize());
-
- socket.connect(new InetSocketAddress(address, settings.getPort()));
- }
- catch (SocketException e)
- {
- throw new TransportException("Error connecting to broker", e);
- }
- catch (IOException e)
- {
- throw new TransportException("Error connecting to broker", e);
- }
- }
-
- public void receiver(Receiver<ByteBuffer> delegate)
- {
- receiver = new IoReceiver(this, delegate,
- 2*settings.getReadBufferSize() , timeout);
- }
-
- public Sender<ByteBuffer> sender()
- {
- return new IoSender(this, 2*settings.getWriteBufferSize(), timeout);
- }
-
- public void close()
- {
-
- }
-
- public Sender<ByteBuffer> getSender()
- {
- return sender;
- }
-
- public IoReceiver getReceiver()
- {
- return receiver;
- }
-
- public Socket getSocket()
- {
- return socket;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java b/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java
deleted file mode 100644
index 19a683d505..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network.io;
-
-import org.apache.qpid.thread.Threading;
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.TransportException;
-import org.apache.qpid.transport.util.Logger;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.Socket;
-import java.net.SocketException;
-import java.nio.ByteBuffer;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-/**
- * IoReceiver
- *
- */
-
-final class IoReceiver implements Runnable
-{
-
- private static final Logger log = Logger.get(IoReceiver.class);
-
- private final IoContext ioCtx;
- private final Receiver<ByteBuffer> receiver;
- private final int bufferSize;
- private final Socket socket;
- private final long timeout;
- private final AtomicBoolean closed = new AtomicBoolean(false);
- private final Thread receiverThread;
- private final boolean shutdownBroken =
- ((String) System.getProperties().get("os.name")).matches("(?i).*windows.*");
-
- public IoReceiver(IoContext ioCtx, Receiver<ByteBuffer> receiver,
- int bufferSize, long timeout)
- {
- this.ioCtx = ioCtx;
- this.receiver = receiver;
- this.bufferSize = bufferSize;
- this.socket = ioCtx.getSocket();
- this.timeout = timeout;
-
- try
- {
- receiverThread = Threading.getThreadFactory().createThread(this);
- }
- catch(Exception e)
- {
- throw new Error("Error creating IOReceiver thread",e);
- }
- receiverThread.setDaemon(true);
- receiverThread.setName(String.format("IoReceiver - %s", socket.getRemoteSocketAddress()));
- receiverThread.start();
- }
-
- void close(boolean block)
- {
- if (!closed.getAndSet(true))
- {
- try
- {
- if (shutdownBroken)
- {
- socket.close();
- }
- else
- {
- socket.shutdownInput();
- }
- if (block && Thread.currentThread() != receiverThread)
- {
- receiverThread.join(timeout);
- if (receiverThread.isAlive())
- {
- throw new TransportException("join timed out");
- }
- }
- }
- catch (InterruptedException e)
- {
- throw new TransportException(e);
- }
- catch (IOException e)
- {
- throw new TransportException(e);
- }
- }
- }
-
- public void run()
- {
- final int threshold = bufferSize / 2;
-
- // I set the read buffer size simillar to SO_RCVBUF
- // Haven't tested with a lower value to see if it's better or worse
- byte[] buffer = new byte[bufferSize];
- try
- {
- InputStream in = socket.getInputStream();
- int read = 0;
- int offset = 0;
- while ((read = in.read(buffer, offset, bufferSize-offset)) != -1)
- {
- if (read > 0)
- {
- ByteBuffer b = ByteBuffer.wrap(buffer,offset,read);
- receiver.received(b);
- offset+=read;
- if (offset > threshold)
- {
- offset = 0;
- buffer = new byte[bufferSize];
- }
- }
- }
- }
- catch (Throwable t)
- {
- if (!(shutdownBroken &&
- t instanceof SocketException &&
- t.getMessage().equalsIgnoreCase("socket closed") &&
- closed.get()))
- {
- receiver.exception(t);
- }
- }
- finally
- {
- receiver.closed();
- try
- {
- socket.close();
- }
- catch(Exception e)
- {
- log.warn(e, "Error closing socket");
- }
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java b/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java
deleted file mode 100644
index 66b97e8225..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoSender.java
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.qpid.transport.network.io;
-
-import static org.apache.qpid.transport.util.Functions.mod;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.Socket;
-import java.nio.ByteBuffer;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.apache.qpid.thread.Threading;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.SenderException;
-import org.apache.qpid.transport.TransportException;
-import org.apache.qpid.transport.util.Logger;
-
-
-public final class IoSender implements Runnable, Sender<ByteBuffer>
-{
-
- private static final Logger log = Logger.get(IoSender.class);
-
- // by starting here, we ensure that we always test the wraparound
- // case, we should probably make this configurable somehow so that
- // we can test other cases as well
- private final static int START = Integer.MAX_VALUE - 10;
-
- private final IoContext ioCtx;
- private final long timeout;
- private final Socket socket;
- private final OutputStream out;
-
- private final byte[] buffer;
- private volatile int head = START;
- private volatile int tail = START;
- private volatile boolean idle = true;
- private final Object notFull = new Object();
- private final Object notEmpty = new Object();
- private final AtomicBoolean closed = new AtomicBoolean(false);
- private final Thread senderThread;
-
- private volatile Throwable exception = null;
-
-
- public IoSender(IoContext ioCtx, int bufferSize, long timeout)
- {
- this.ioCtx = ioCtx;
- this.socket = ioCtx.getSocket();
- this.buffer = new byte[pof2(bufferSize)]; // buffer size must be a power of 2
- this.timeout = timeout;
-
- try
- {
- out = socket.getOutputStream();
- }
- catch (IOException e)
- {
- throw new TransportException("Error getting output stream for socket", e);
- }
-
- try
- {
- senderThread = Threading.getThreadFactory().createThread(this);
- }
- catch(Exception e)
- {
- throw new Error("Error creating IOSender thread",e);
- }
-
- senderThread.setDaemon(true);
- senderThread.setName(String.format("IoSender - %s", socket.getRemoteSocketAddress()));
- senderThread.start();
- }
-
- private static final int pof2(int n)
- {
- int result = 1;
- while (result < n)
- {
- result *= 2;
- }
- return result;
- }
-
- public void send(ByteBuffer buf)
- {
- if (closed.get())
- {
- throw new SenderException("sender is closed", exception);
- }
-
- final int size = buffer.length;
- int remaining = buf.remaining();
-
- while (remaining > 0)
- {
- final int hd = head;
- final int tl = tail;
-
- if (hd - tl >= size)
- {
- flush();
- synchronized (notFull)
- {
- long start = System.currentTimeMillis();
- long elapsed = 0;
- while (!closed.get() && head - tail >= size && elapsed < timeout)
- {
- try
- {
- notFull.wait(timeout - elapsed);
- }
- catch (InterruptedException e)
- {
- // pass
- }
- elapsed += System.currentTimeMillis() - start;
- }
-
- if (closed.get())
- {
- throw new SenderException("sender is closed", exception);
- }
-
- if (head - tail >= size)
- {
- throw new SenderException(String.format("write timed out: %s, %s", head, tail));
- }
- }
- continue;
- }
-
- final int hd_idx = mod(hd, size);
- final int tl_idx = mod(tl, size);
- final int length;
-
- if (tl_idx > hd_idx)
- {
- length = Math.min(tl_idx - hd_idx, remaining);
- }
- else
- {
- length = Math.min(size - hd_idx, remaining);
- }
-
- buf.get(buffer, hd_idx, length);
- head += length;
- remaining -= length;
- }
- }
-
- public void flush()
- {
- if (idle)
- {
- synchronized (notEmpty)
- {
- notEmpty.notify();
- }
- }
- }
-
- public void close()
- {
- close(true);
- }
-
- void close(boolean reportException)
- {
- if (!closed.getAndSet(true))
- {
- synchronized (notFull)
- {
- notFull.notify();
- }
-
- synchronized (notEmpty)
- {
- notEmpty.notify();
- }
-
- try
- {
- if (Thread.currentThread() != senderThread)
- {
- senderThread.join(timeout);
- if (senderThread.isAlive())
- {
- throw new SenderException("join timed out");
- }
- }
- ioCtx.getReceiver().close(false);
- }
- catch (InterruptedException e)
- {
- throw new SenderException(e);
- }
-
- if (reportException && exception != null)
- {
- throw new SenderException(exception);
- }
- }
- }
-
- public void run()
- {
- final int size = buffer.length;
- while (true)
- {
- final int hd = head;
- final int tl = tail;
-
- if (hd == tl)
- {
- if (closed.get())
- {
- break;
- }
-
- idle = true;
-
- synchronized (notEmpty)
- {
- while (head == tail && !closed.get())
- {
- try
- {
- notEmpty.wait();
- }
- catch (InterruptedException e)
- {
- // pass
- }
- }
- }
-
- idle = false;
-
- continue;
- }
-
- final int hd_idx = mod(hd, size);
- final int tl_idx = mod(tl, size);
-
- final int length;
- if (tl_idx < hd_idx)
- {
- length = hd_idx - tl_idx;
- }
- else
- {
- length = size - tl_idx;
- }
-
- try
- {
- out.write(buffer, tl_idx, length);
- }
- catch (IOException e)
- {
- log.error(e, "error in write thread");
- exception = e;
- close(false);
- break;
- }
- tail += length;
- if (head - tl >= size)
- {
- synchronized (notFull)
- {
- notFull.notify();
- }
- }
- }
- }
-
- public void setIdleTimeout(int i)
- {
- try
- {
- socket.setSoTimeout(i);
- }
- catch (Exception e)
- {
- throw new SenderException(e);
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoTransport.java b/java/common/src/main/java/org/apache/qpid/transport/network/io/IoTransport.java
deleted file mode 100644
index bfdbb34978..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/io/IoTransport.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.qpid.transport.network.io;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.SocketException;
-import java.nio.ByteBuffer;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLEngine;
-
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-import org.apache.qpid.ssl.SSLContextFactory;
-import org.apache.qpid.transport.Binding;
-import org.apache.qpid.transport.Connection;
-import org.apache.qpid.transport.ConnectionDelegate;
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.TransportException;
-import org.apache.qpid.transport.network.ConnectionBinding;
-import org.apache.qpid.transport.network.security.ssl.SSLReceiver;
-import org.apache.qpid.transport.network.security.ssl.SSLSender;
-import org.apache.qpid.transport.util.Logger;
-
-/**
- * This class provides a socket based transport using the java.io
- * classes.
- *
- * The following params are configurable via JVM arguments
- * TCP_NO_DELAY - amqj.tcpNoDelay
- * SO_RCVBUF - amqj.receiveBufferSize
- * SO_SNDBUF - amqj.sendBufferSize
- */
-public final class IoTransport<E> implements IoContext
-{
-
- static
- {
- org.apache.mina.common.ByteBuffer.setAllocator
- (new org.apache.mina.common.SimpleByteBufferAllocator());
- org.apache.mina.common.ByteBuffer.setUseDirectBuffers
- (Boolean.getBoolean("amqj.enableDirectBuffers"));
- }
-
- private static final Logger log = Logger.get(IoTransport.class);
-
- private static int DEFAULT_READ_WRITE_BUFFER_SIZE = 64 * 1024;
- private static int readBufferSize = Integer.getInteger
- ("amqj.receiveBufferSize", DEFAULT_READ_WRITE_BUFFER_SIZE);
- private static int writeBufferSize = Integer.getInteger
- ("amqj.sendBufferSize", DEFAULT_READ_WRITE_BUFFER_SIZE);
-
- private Socket socket;
- private Sender<ByteBuffer> sender;
- private E endpoint;
- private IoReceiver receiver;
- private long timeout = 60000;
-
- IoTransport(Socket socket, Binding<E,ByteBuffer> binding, boolean ssl)
- {
- this.socket = socket;
-
- if (ssl)
- {
- SSLEngine engine = null;
- SSLContext sslCtx;
- try
- {
- sslCtx = createSSLContext();
- }
- catch (Exception e)
- {
- throw new TransportException("Error creating SSL Context", e);
- }
-
- try
- {
- engine = sslCtx.createSSLEngine();
- engine.setUseClientMode(true);
- }
- catch(Exception e)
- {
- throw new TransportException("Error creating SSL Engine", e);
- }
-
- this.sender = new SSLSender(engine,new IoSender(this, 2*writeBufferSize, timeout));
- this.endpoint = binding.endpoint(sender);
- this.receiver = new IoReceiver(this, new SSLReceiver(engine,binding.receiver(endpoint),(SSLSender)sender),
- 2*readBufferSize, timeout);
-
- log.info("SSL Sender and Receiver initiated");
- }
- else
- {
- this.sender = new IoSender(this, 2*writeBufferSize, timeout);
- this.endpoint = binding.endpoint(sender);
- this.receiver = new IoReceiver(this, binding.receiver(endpoint),
- 2*readBufferSize, timeout);
- }
- }
-
- public Sender<ByteBuffer> getSender()
- {
- return sender;
- }
-
- public IoReceiver getReceiver()
- {
- return receiver;
- }
-
- public Socket getSocket()
- {
- return socket;
- }
-
- public static final <E> E connect(String host, int port,
- Binding<E,ByteBuffer> binding,
- boolean ssl)
- {
- Socket socket = createSocket(host, port);
- IoTransport<E> transport = new IoTransport<E>(socket, binding,ssl);
- return transport.endpoint;
- }
-
- public static final Connection connect(String host, int port,
- ConnectionDelegate delegate,
- boolean ssl)
- {
- return connect(host, port, ConnectionBinding.get(delegate),ssl);
- }
-
- public static void connect_0_9(AMQVersionAwareProtocolSession session, String host, int port, boolean ssl)
- {
- connect(host, port, new Binding_0_9(session),ssl);
- }
-
- private static class Binding_0_9
- implements Binding<AMQVersionAwareProtocolSession,ByteBuffer>
- {
-
- private AMQVersionAwareProtocolSession session;
-
- Binding_0_9(AMQVersionAwareProtocolSession session)
- {
- this.session = session;
- }
-
- public AMQVersionAwareProtocolSession endpoint(Sender<ByteBuffer> sender)
- {
- session.setSender(sender);
- return session;
- }
-
- public Receiver<ByteBuffer> receiver(AMQVersionAwareProtocolSession ssn)
- {
- return new InputHandler_0_9(ssn);
- }
-
- }
-
- private static Socket createSocket(String host, int port)
- {
- try
- {
- InetAddress address = InetAddress.getByName(host);
- Socket socket = new Socket();
- socket.setReuseAddress(true);
- socket.setTcpNoDelay(Boolean.getBoolean("amqj.tcpNoDelay"));
-
- log.debug("default-SO_RCVBUF : %s", socket.getReceiveBufferSize());
- log.debug("default-SO_SNDBUF : %s", socket.getSendBufferSize());
-
- socket.setSendBufferSize(writeBufferSize);
- socket.setReceiveBufferSize(readBufferSize);
-
- log.debug("new-SO_RCVBUF : %s", socket.getReceiveBufferSize());
- log.debug("new-SO_SNDBUF : %s", socket.getSendBufferSize());
-
- socket.connect(new InetSocketAddress(address, port));
- return socket;
- }
- catch (SocketException e)
- {
- throw new TransportException("Error connecting to broker", e);
- }
- catch (IOException e)
- {
- throw new TransportException("Error connecting to broker", e);
- }
- }
-
- private SSLContext createSSLContext() throws Exception
- {
- String trustStorePath = System.getProperty("javax.net.ssl.trustStore");
- String trustStorePassword = System.getProperty("javax.net.ssl.trustStorePassword");
- String trustStoreCertType = System.getProperty("qpid.ssl.trustStoreCertType","SunX509");
-
- String keyStorePath = System.getProperty("javax.net.ssl.keyStore",trustStorePath);
- String keyStorePassword = System.getProperty("javax.net.ssl.keyStorePassword",trustStorePassword);
- String keyStoreCertType = System.getProperty("qpid.ssl.keyStoreCertType","SunX509");
-
- SSLContextFactory sslContextFactory = new SSLContextFactory(trustStorePath,trustStorePassword,
- trustStoreCertType,keyStorePath,
- keyStorePassword,keyStoreCertType);
-
- return sslContextFactory.buildServerContext();
-
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/mina/MINANetworkDriver.java b/java/common/src/main/java/org/apache/qpid/transport/network/mina/MINANetworkDriver.java
deleted file mode 100644
index 0f2c0d0226..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/mina/MINANetworkDriver.java
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.transport.network.mina;
-
-import org.apache.mina.common.ConnectFuture;
-import org.apache.mina.common.ExecutorThreadModel;
-import org.apache.mina.common.IdleStatus;
-import org.apache.mina.common.IoAcceptor;
-import org.apache.mina.common.IoConnector;
-import org.apache.mina.common.IoFilterChain;
-import org.apache.mina.common.IoHandlerAdapter;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.common.SimpleByteBufferAllocator;
-import org.apache.mina.common.WriteFuture;
-import org.apache.mina.filter.ReadThrottleFilterBuilder;
-import org.apache.mina.filter.SSLFilter;
-import org.apache.mina.filter.WriteBufferLimitFilterBuilder;
-import org.apache.mina.filter.executor.ExecutorFilter;
-import org.apache.mina.transport.socket.nio.MultiThreadSocketConnector;
-import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
-import org.apache.mina.transport.socket.nio.SocketConnector;
-import org.apache.mina.transport.socket.nio.SocketConnectorConfig;
-import org.apache.mina.transport.socket.nio.SocketSessionConfig;
-import org.apache.mina.util.NewThreadExecutor;
-import org.apache.mina.util.SessionUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.qpid.protocol.ProtocolEngine;
-import org.apache.qpid.protocol.ProtocolEngineFactory;
-import org.apache.qpid.ssl.SSLContextFactory;
-import org.apache.qpid.thread.QpidThreadExecutor;
-import org.apache.qpid.transport.NetworkDriver;
-import org.apache.qpid.transport.NetworkDriverConfiguration;
-import org.apache.qpid.transport.OpenException;
-
-import java.io.IOException;
-import java.net.BindException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.nio.ByteBuffer;
-
-public class MINANetworkDriver extends IoHandlerAdapter implements NetworkDriver
-{
-
- private static final int DEFAULT_BUFFER_SIZE = 32 * 1024;
-
- ProtocolEngine _protocolEngine;
- private boolean _useNIO = false;
- private int _processors = 4;
- private boolean _executorPool = false;
- private SSLContextFactory _sslFactory = null;
- private IoConnector _socketConnector;
- private IoAcceptor _acceptor;
- private IoSession _ioSession;
- private ProtocolEngineFactory _factory;
- private boolean _protectIO;
- private NetworkDriverConfiguration _config;
- private Throwable _lastException;
- private boolean _acceptingConnections = false;
-
- private WriteFuture _lastWriteFuture;
-
- private static final Logger _logger = LoggerFactory.getLogger(MINANetworkDriver.class);
-
- static
- {
- org.apache.mina.common.ByteBuffer.setUseDirectBuffers(Boolean.getBoolean("amqj.enableDirectBuffers"));
-
- //override the MINA defaults to prevent use of the PooledByteBufferAllocator
- org.apache.mina.common.ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
- }
-
- public MINANetworkDriver(boolean useNIO, int processors, boolean executorPool, boolean protectIO)
- {
- _useNIO = useNIO;
- _processors = processors;
- _executorPool = executorPool;
- _protectIO = protectIO;
- }
-
- public MINANetworkDriver(boolean useNIO, int processors, boolean executorPool, boolean protectIO,
- ProtocolEngine protocolEngine, IoSession session)
- {
- _useNIO = useNIO;
- _processors = processors;
- _executorPool = executorPool;
- _protectIO = protectIO;
- _protocolEngine = protocolEngine;
- _ioSession = session;
- _ioSession.setAttachment(_protocolEngine);
- }
-
- public MINANetworkDriver()
- {
-
- }
-
- public MINANetworkDriver(IoConnector ioConnector)
- {
- _socketConnector = ioConnector;
- }
-
- public MINANetworkDriver(IoConnector ioConnector, ProtocolEngine engine)
- {
- _socketConnector = ioConnector;
- _protocolEngine = engine;
- }
-
- public void bind(int port, InetAddress[] addresses, ProtocolEngineFactory factory,
- NetworkDriverConfiguration config, SSLContextFactory sslFactory) throws BindException
- {
-
- _factory = factory;
- _config = config;
-
- if (_useNIO)
- {
- _acceptor = new org.apache.mina.transport.socket.nio.MultiThreadSocketAcceptor(_processors,
- new NewThreadExecutor());
- }
- else
- {
- _acceptor = new org.apache.mina.transport.socket.nio.SocketAcceptor(_processors, new NewThreadExecutor());
- }
-
- SocketAcceptorConfig sconfig = (SocketAcceptorConfig) _acceptor.getDefaultConfig();
- sconfig.setThreadModel(ExecutorThreadModel.getInstance("MINANetworkDriver(Acceptor)"));
- SocketSessionConfig sc = (SocketSessionConfig) sconfig.getSessionConfig();
-
- if (config != null)
- {
- sc.setReceiveBufferSize(config.getReceiveBufferSize());
- sc.setSendBufferSize(config.getSendBufferSize());
- sc.setTcpNoDelay(config.getTcpNoDelay());
- }
-
- if (sslFactory != null)
- {
- _sslFactory = sslFactory;
- }
-
- if (addresses != null && addresses.length > 0)
- {
- for (InetAddress addr : addresses)
- {
- try
- {
- _acceptor.bind(new InetSocketAddress(addr, port), this, sconfig);
- }
- catch (IOException e)
- {
- throw new BindException(String.format("Could not bind to %1s:%2s", addr, port));
- }
- }
- }
- else
- {
- try
- {
- _acceptor.bind(new InetSocketAddress(port), this, sconfig);
- }
- catch (IOException e)
- {
- throw new BindException(String.format("Could not bind to *:%1s", port));
- }
- }
- _acceptingConnections = true;
- }
-
- public SocketAddress getRemoteAddress()
- {
- return _ioSession.getRemoteAddress();
- }
-
- public SocketAddress getLocalAddress()
- {
- return _ioSession.getLocalAddress();
- }
-
-
- public void open(int port, InetAddress destination, ProtocolEngine engine, NetworkDriverConfiguration config,
- SSLContextFactory sslFactory) throws OpenException
- {
- if (sslFactory != null)
- {
- _sslFactory = sslFactory;
- }
-
- if (_useNIO)
- {
- _socketConnector = new MultiThreadSocketConnector(1, new QpidThreadExecutor());
- }
- else
- {
- _socketConnector = new SocketConnector(1, new QpidThreadExecutor()); // non-blocking
- // connector
- }
-
- SocketConnectorConfig cfg = (SocketConnectorConfig) _socketConnector.getDefaultConfig();
- String s = "";
- StackTraceElement[] trace = Thread.currentThread().getStackTrace();
- for(StackTraceElement elt : trace)
- {
- if(elt.getClassName().contains("Test"))
- {
- s = elt.getClassName();
- break;
- }
- }
- cfg.setThreadModel(ExecutorThreadModel.getInstance("MINANetworkDriver(Client)-"+s));
-
- SocketSessionConfig scfg = (SocketSessionConfig) cfg.getSessionConfig();
- scfg.setTcpNoDelay((config != null) ? config.getTcpNoDelay() : true);
- scfg.setSendBufferSize((config != null) ? config.getSendBufferSize() : DEFAULT_BUFFER_SIZE);
- scfg.setReceiveBufferSize((config != null) ? config.getReceiveBufferSize() : DEFAULT_BUFFER_SIZE);
-
- // Don't have the connector's worker thread wait around for other
- // connections (we only use
- // one SocketConnector per connection at the moment anyway). This allows
- // short-running
- // clients (like unit tests) to complete quickly.
- if (_socketConnector instanceof SocketConnector)
- {
- ((SocketConnector) _socketConnector).setWorkerTimeout(0);
- }
-
- ConnectFuture future = _socketConnector.connect(new InetSocketAddress(destination, port), this, cfg);
- future.join();
- if (!future.isConnected())
- {
- throw new OpenException("Could not open connection", _lastException);
- }
- _ioSession = future.getSession();
- _ioSession.setAttachment(engine);
- engine.setNetworkDriver(this);
- _protocolEngine = engine;
- }
-
- public void setMaxReadIdle(int idleTime)
- {
- _ioSession.setIdleTime(IdleStatus.READER_IDLE, idleTime);
- }
-
- public void setMaxWriteIdle(int idleTime)
- {
- _ioSession.setIdleTime(IdleStatus.WRITER_IDLE, idleTime);
- }
-
- public void close()
- {
- if (_lastWriteFuture != null)
- {
- _lastWriteFuture.join();
- }
- if (_acceptor != null)
- {
- _acceptor.unbindAll();
- }
- if (_ioSession != null)
- {
- _ioSession.close();
- }
- }
-
- public void flush()
- {
- if (_lastWriteFuture != null)
- {
- _lastWriteFuture.join();
- }
- }
-
- public void send(ByteBuffer msg)
- {
- org.apache.mina.common.ByteBuffer minaBuf = org.apache.mina.common.ByteBuffer.allocate(msg.capacity());
- minaBuf.put(msg);
- minaBuf.flip();
- _lastWriteFuture = _ioSession.write(minaBuf);
- }
-
- public void setIdleTimeout(int i)
- {
- // MINA doesn't support setting SO_TIMEOUT
- }
-
- public void exceptionCaught(IoSession protocolSession, Throwable throwable) throws Exception
- {
- if (_protocolEngine != null)
- {
- _protocolEngine.exception(throwable);
- }
- else
- {
- _logger.error("Exception thrown and no ProtocolEngine to handle it", throwable);
- }
- _lastException = throwable;
- }
-
- /**
- * Invoked when a message is received on a particular protocol session. Note
- * that a protocol session is directly tied to a particular physical
- * connection.
- *
- * @param protocolSession
- * the protocol session that received the message
- * @param message
- * the message itself (i.e. a decoded frame)
- *
- * @throws Exception
- * if the message cannot be processed
- */
- public void messageReceived(IoSession protocolSession, Object message) throws Exception
- {
- if (message instanceof org.apache.mina.common.ByteBuffer)
- {
- ((ProtocolEngine) protocolSession.getAttachment()).received(((org.apache.mina.common.ByteBuffer) message).buf());
- }
- else
- {
- throw new IllegalStateException("Handed unhandled message. message.class = " + message.getClass() + " message = " + message);
- }
- }
-
- public void sessionClosed(IoSession protocolSession) throws Exception
- {
- ((ProtocolEngine) protocolSession.getAttachment()).closed();
- }
-
- public void sessionCreated(IoSession protocolSession) throws Exception
- {
- // Configure the session with SSL if necessary
- SessionUtil.initialize(protocolSession);
- if (_executorPool)
- {
- if (_sslFactory != null)
- {
- protocolSession.getFilterChain().addAfter("AsynchronousReadFilter", "sslFilter",
- new SSLFilter(_sslFactory.buildServerContext()));
- }
- }
- else
- {
- if (_sslFactory != null)
- {
- protocolSession.getFilterChain().addBefore("protocolFilter", "sslFilter",
- new SSLFilter(_sslFactory.buildServerContext()));
- }
- }
- // Do we want to have read/write buffer limits?
- if (_protectIO)
- {
- //Add IO Protection Filters
- IoFilterChain chain = protocolSession.getFilterChain();
-
- protocolSession.getFilterChain().addLast("tempExecutorFilterForFilterBuilder", new ExecutorFilter());
-
- ReadThrottleFilterBuilder readfilter = new ReadThrottleFilterBuilder();
- readfilter.setMaximumConnectionBufferSize(_config.getReceiveBufferSize());
- readfilter.attach(chain);
-
- WriteBufferLimitFilterBuilder writefilter = new WriteBufferLimitFilterBuilder();
- writefilter.setMaximumConnectionBufferSize(_config.getSendBufferSize());
- writefilter.attach(chain);
-
- protocolSession.getFilterChain().remove("tempExecutorFilterForFilterBuilder");
- }
-
- if (_ioSession == null)
- {
- _ioSession = protocolSession;
- }
-
- if (_acceptingConnections)
- {
- // Set up the protocol engine
- ProtocolEngine protocolEngine = _factory.newProtocolEngine(this);
- MINANetworkDriver newDriver = new MINANetworkDriver(_useNIO, _processors, _executorPool, _protectIO, protocolEngine, protocolSession);
- protocolEngine.setNetworkDriver(newDriver);
- }
- }
-
- public void sessionIdle(IoSession session, IdleStatus status) throws Exception
- {
- if (IdleStatus.WRITER_IDLE.equals(status))
- {
- ((ProtocolEngine) session.getAttachment()).writerIdle();
- }
- else if (IdleStatus.READER_IDLE.equals(status))
- {
- ((ProtocolEngine) session.getAttachment()).readerIdle();
- }
- }
-
- private ProtocolEngine getProtocolEngine()
- {
- return _protocolEngine;
- }
-
- public void setProtocolEngineFactory(ProtocolEngineFactory engineFactory, boolean acceptingConnections)
- {
- _factory = engineFactory;
- _acceptingConnections = acceptingConnections;
- }
-
- public void setProtocolEngine(ProtocolEngine protocolEngine)
- {
- _protocolEngine = protocolEngine;
- if (_ioSession != null)
- {
- _ioSession.setAttachment(protocolEngine);
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/mina/MinaHandler.java b/java/common/src/main/java/org/apache/qpid/transport/network/mina/MinaHandler.java
deleted file mode 100644
index b89eed48b0..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/mina/MinaHandler.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network.mina;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-
-import org.apache.mina.common.*;
-
-import org.apache.mina.transport.socket.nio.SocketAcceptor;
-import org.apache.mina.transport.socket.nio.SocketSessionConfig;
-import org.apache.mina.transport.socket.nio.SocketConnector;
-import org.apache.mina.filter.ReadThrottleFilterBuilder;
-import org.apache.mina.filter.WriteBufferLimitFilterBuilder;
-import org.apache.mina.filter.executor.ExecutorFilter;
-
-import org.apache.qpid.transport.Binding;
-import org.apache.qpid.transport.Connection;
-import org.apache.qpid.transport.ConnectionDelegate;
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.network.ConnectionBinding;
-
-import org.apache.qpid.transport.util.Logger;
-
-import org.apache.qpid.transport.network.Assembler;
-import org.apache.qpid.transport.network.Disassembler;
-import org.apache.qpid.transport.network.InputHandler;
-
-import static org.apache.qpid.transport.util.Functions.*;
-
-/**
- * MinaHandler
- *
- * @author Rafael H. Schloming
- */
-//RA making this public until we sort out the package issues
-public class MinaHandler<E> implements IoHandler
-{
- /** Default buffer size for pending messages reads */
- private static final String DEFAULT_READ_BUFFER_LIMIT = "262144";
- /** Default buffer size for pending messages writes */
- private static final String DEFAULT_WRITE_BUFFER_LIMIT = "262144";
- private static final int MAX_RCVBUF = 64*1024;
-
- private static final Logger log = Logger.get(MinaHandler.class);
-
- static
- {
- ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
- ByteBuffer.setUseDirectBuffers(Boolean.getBoolean("amqj.enableDirectBuffers"));
- }
-
- private final Binding<E,java.nio.ByteBuffer> binding;
-
- private MinaHandler(Binding<E,java.nio.ByteBuffer> binding)
- {
- this.binding = binding;
- }
-
- public void messageReceived(IoSession ssn, Object obj)
- {
- Attachment<E> attachment = (Attachment<E>) ssn.getAttachment();
- ByteBuffer buf = (ByteBuffer) obj;
- try
- {
- attachment.receiver.received(buf.buf());
- }
- catch (Throwable t)
- {
- log.error(t, "exception handling buffer %s", str(buf.buf()));
- throw new RuntimeException(t);
- }
- }
-
- public void messageSent(IoSession ssn, Object obj)
- {
- // do nothing
- }
-
- public void exceptionCaught(IoSession ssn, Throwable e)
- {
- Attachment<E> attachment = (Attachment<E>) ssn.getAttachment();
- attachment.receiver.exception(e);
- }
-
- /**
- * Invoked by MINA when a MINA session for a new connection is created. This method sets up the filter chain on the
- * session, which filters the events handled by this handler. The filter chain consists of, handing off events
- * to an optional protectio
- *
- * @param session The MINA session.
- * @throws Exception Any underlying exceptions are allowed to fall through to MINA.
- */
- public void sessionCreated(IoSession session) throws Exception
- {
- log.debug("Protocol session created for session " + System.identityHashCode(session));
-
- if (Boolean.getBoolean("protectio"))
- {
- try
- {
- //Add IO Protection Filters
- IoFilterChain chain = session.getFilterChain();
-
- session.getFilterChain().addLast("tempExecutorFilterForFilterBuilder", new ExecutorFilter());
-
- ReadThrottleFilterBuilder readfilter = new ReadThrottleFilterBuilder();
- readfilter.setMaximumConnectionBufferSize(
- Integer.parseInt(System.getProperty("qpid.read.buffer.limit", DEFAULT_READ_BUFFER_LIMIT)));
- readfilter.attach(chain);
-
- WriteBufferLimitFilterBuilder writefilter = new WriteBufferLimitFilterBuilder();
- writefilter.setMaximumConnectionBufferSize(
- Integer.parseInt(System.getProperty("qpid.write.buffer.limit", DEFAULT_WRITE_BUFFER_LIMIT)));
- writefilter.attach(chain);
- session.getFilterChain().remove("tempExecutorFilterForFilterBuilder");
-
- log.info("Using IO Read/Write Filter Protection");
- }
- catch (Exception e)
- {
- log.error("Unable to attach IO Read/Write Filter Protection :" + e.getMessage());
- }
- }
- }
-
- public void sessionOpened(final IoSession ssn)
- {
- log.debug("opened: %s", this);
- E endpoint = binding.endpoint(new MinaSender(ssn));
- Attachment<E> attachment =
- new Attachment<E>(endpoint, binding.receiver(endpoint));
-
- // We need to synchronize and notify here because the MINA
- // connect future returns the session prior to the attachment
- // being set. This is arguably a bug in MINA.
- synchronized (ssn)
- {
- ssn.setAttachment(attachment);
- ssn.notifyAll();
- }
- }
-
- public void sessionClosed(IoSession ssn)
- {
- log.debug("closed: %s", ssn);
- Attachment<E> attachment = (Attachment<E>) ssn.getAttachment();
- attachment.receiver.closed();
- ssn.setAttachment(null);
- }
-
- public void sessionIdle(IoSession ssn, IdleStatus status)
- {
- // do nothing
- }
-
- private static class Attachment<E>
- {
-
- E endpoint;
- Receiver<java.nio.ByteBuffer> receiver;
-
- Attachment(E endpoint, Receiver<java.nio.ByteBuffer> receiver)
- {
- this.endpoint = endpoint;
- this.receiver = receiver;
- }
- }
-
- public static final void accept(String host, int port,
- Binding<?,java.nio.ByteBuffer> binding)
- throws IOException
- {
- accept(new InetSocketAddress(host, port), binding);
- }
-
- public static final <E> void accept(SocketAddress address,
- Binding<E,java.nio.ByteBuffer> binding)
- throws IOException
- {
- IoAcceptor acceptor = new SocketAcceptor();
- acceptor.bind(address, new MinaHandler<E>(binding));
- }
-
- public static final <E> E connect(String host, int port,
- Binding<E,java.nio.ByteBuffer> binding)
- {
- return connect(new InetSocketAddress(host, port), binding);
- }
-
- public static final <E> E connect(SocketAddress address,
- Binding<E,java.nio.ByteBuffer> binding)
- {
- MinaHandler<E> handler = new MinaHandler<E>(binding);
- SocketConnector connector = new SocketConnector();
- IoServiceConfig acceptorConfig = connector.getDefaultConfig();
- acceptorConfig.setThreadModel(ThreadModel.MANUAL);
- SocketSessionConfig scfg = (SocketSessionConfig) acceptorConfig.getSessionConfig();
- scfg.setTcpNoDelay(Boolean.getBoolean("amqj.tcpNoDelay"));
- Integer sendBufferSize = Integer.getInteger("amqj.sendBufferSize");
- if (sendBufferSize != null && sendBufferSize > 0)
- {
- scfg.setSendBufferSize(sendBufferSize);
- }
- Integer receiveBufferSize = Integer.getInteger("amqj.receiveBufferSize");
- if (receiveBufferSize != null && receiveBufferSize > 0)
- {
- scfg.setReceiveBufferSize(receiveBufferSize);
- }
- else if (scfg.getReceiveBufferSize() > MAX_RCVBUF)
- {
- scfg.setReceiveBufferSize(MAX_RCVBUF);
- }
- connector.setWorkerTimeout(0);
- ConnectFuture cf = connector.connect(address, handler);
- cf.join();
- IoSession ssn = cf.getSession();
-
- // We need to synchronize and wait here because the MINA
- // connect future returns the session prior to the attachment
- // being set. This is arguably a bug in MINA.
- synchronized (ssn)
- {
- while (ssn.getAttachment() == null)
- {
- try
- {
- ssn.wait();
- }
- catch (InterruptedException e)
- {
- throw new RuntimeException(e);
- }
- }
- }
-
- Attachment<E> attachment = (Attachment<E>) ssn.getAttachment();
- return attachment.endpoint;
- }
-
- public static final void accept(String host, int port,
- ConnectionDelegate delegate)
- throws IOException
- {
- accept(host, port, ConnectionBinding.get(delegate));
- }
-
- public static final Connection connect(String host, int port,
- ConnectionDelegate delegate)
- {
- return connect(host, port, ConnectionBinding.get(delegate));
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/mina/MinaSender.java b/java/common/src/main/java/org/apache/qpid/transport/network/mina/MinaSender.java
deleted file mode 100644
index 22b9c5e784..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/mina/MinaSender.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network.mina;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.CloseFuture;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.common.WriteFuture;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.TransportException;
-
-
-/**
- * MinaSender
- */
-
-public class MinaSender implements Sender<java.nio.ByteBuffer>
-{
- private static final int TIMEOUT = 2 * 60 * 1000;
-
- private final IoSession session;
- private WriteFuture lastWrite = null;
-
- public MinaSender(IoSession session)
- {
- this.session = session;
- }
-
- public void send(java.nio.ByteBuffer buf)
- {
- if (session.isClosing())
- {
- throw new TransportException("attempted to write to a closed socket");
- }
-
- synchronized (this)
- {
- lastWrite = session.write(ByteBuffer.wrap(buf));
- }
- }
-
- public void flush()
- {
- // pass
- }
-
- public synchronized void close()
- {
- // MINA will sometimes throw away in-progress writes when you
- // ask it to close
- synchronized (this)
- {
- if (lastWrite != null)
- {
- lastWrite.join();
- }
- }
- CloseFuture closed = session.close();
- closed.join();
- }
-
- public void setIdleTimeout(int i)
- {
- //noop
- }
-
- public long getIdleTimeout()
- {
- return 0;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioHandler.java b/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioHandler.java
deleted file mode 100644
index 84e66c25bd..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioHandler.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package org.apache.qpid.transport.network.nio;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.net.SocketException;
-import java.nio.ByteBuffer;
-import java.nio.channels.SocketChannel;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.qpid.transport.Connection;
-import org.apache.qpid.transport.ConnectionDelegate;
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.network.Assembler;
-import org.apache.qpid.transport.network.Disassembler;
-import org.apache.qpid.transport.network.InputHandler;
-
-public class NioHandler implements Runnable
-{
- private Receiver<ByteBuffer> _receiver;
- private SocketChannel _ch;
- private ByteBuffer _readBuf;
- private static Map<Long,NioSender> _handlers = new ConcurrentHashMap<Long,NioSender>();
-
- private NioHandler(){}
-
- public static final Connection connect(String host, int port,
- ConnectionDelegate delegate)
- {
- NioHandler handler = new NioHandler();
- return handler.connectInternal(host,port,delegate);
- }
-
- private Connection connectInternal(String host, int port,
- ConnectionDelegate delegate)
- {
- try
- {
- SocketAddress address = new InetSocketAddress(host,port);
- _ch = SocketChannel.open();
- _ch.socket().setReuseAddress(true);
- _ch.configureBlocking(true);
- _ch.socket().setTcpNoDelay(true);
- if (address != null)
- {
- _ch.socket().connect(address);
- }
- while (_ch.isConnectionPending())
- {
-
- }
-
- }
- catch (SocketException e)
- {
-
- e.printStackTrace();
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
-
- NioSender sender = new NioSender(_ch);
- Connection con = new Connection();
- con.setSender(new Disassembler(sender, 64*1024 - 1));
- con.setConnectionDelegate(delegate);
-
- _handlers.put(con.getConnectionId(),sender);
-
- _receiver = new InputHandler(new Assembler(con), InputHandler.State.FRAME_HDR);
-
- Thread t = new Thread(this);
- t.start();
-
- return con;
- }
-
- public void run()
- {
- _readBuf = ByteBuffer.allocate(512);
- long read = 0;
- while(_ch.isConnected() && _ch.isOpen())
- {
- try
- {
- read = _ch.read(_readBuf);
- if (read > 0)
- {
- _readBuf.flip();
- ByteBuffer b = ByteBuffer.allocate(_readBuf.remaining());
- b.put(_readBuf);
- b.flip();
- _readBuf.clear();
- _receiver.received(b);
- }
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
-
- //throw new EOFException("The underlying socket/channel has closed");
- }
-
- public static void startBatchingFrames(int connectionId)
- {
- NioSender sender = _handlers.get(connectionId);
- sender.setStartBatching();
- }
-
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioSender.java b/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioSender.java
deleted file mode 100644
index 2fa875f279..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/nio/NioSender.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package org.apache.qpid.transport.network.nio;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.nio.ByteBuffer;
-import java.nio.channels.SocketChannel;
-
-import org.apache.qpid.transport.Sender;
-
-public class NioSender implements Sender<java.nio.ByteBuffer>
-{
- private final Object lock = new Object();
- private SocketChannel _ch;
- private boolean _batch = false;
- private ByteBuffer _batcher;
-
- public NioSender(SocketChannel ch)
- {
- this._ch = ch;
- }
-
- public void send(java.nio.ByteBuffer buf)
- {
- if (_batch)
- {
- //System.out.println(_batcher.position() + " , " + buf.remaining() + " , " + buf.position() + ","+_batcher.capacity());
- if (_batcher.position() + buf.remaining() >= _batcher.capacity())
- {
- _batcher.flip();
- write(_batcher);
- _batcher.clear();
- if (buf.remaining() > _batcher.capacity())
- {
- write(buf);
- }
- else
- {
- _batcher.put(buf);
- }
- }
- else
- {
- _batcher.put(buf);
- }
- }
- else
- {
- write(buf);
- }
- }
-
- public void flush()
- {
- // pass
- }
-
- private void write(java.nio.ByteBuffer buf)
- {
- synchronized (lock)
- {
- if( _ch.isConnected() && _ch.isOpen())
- {
- try
- {
- _ch.write(buf);
- }
- catch(Exception e)
- {
- e.fillInStackTrace();
- }
- }
- else
- {
- throw new RuntimeException("Trying to write on a closed socket");
- }
-
- }
- }
-
- public void setStartBatching()
- {
- _batch = true;
- _batcher = ByteBuffer.allocate(1024);
- }
-
- public void close()
- {
- // MINA will sometimes throw away in-progress writes when you
- // ask it to close
- synchronized (lock)
- {
- try
- {
- _ch.close();
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
- }
-
- public void setIdleTimeout(int i)
- {
- //noop
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/security/SecurityLayer.java b/java/common/src/main/java/org/apache/qpid/transport/network/security/SecurityLayer.java
deleted file mode 100644
index 3f0966903d..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/security/SecurityLayer.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
-*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network.security;
-
-import java.nio.ByteBuffer;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLEngine;
-
-import org.apache.qpid.transport.Connection;
-import org.apache.qpid.transport.ConnectionListener;
-import org.apache.qpid.transport.ConnectionSettings;
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.TransportException;
-import org.apache.qpid.transport.network.security.sasl.SASLReceiver;
-import org.apache.qpid.transport.network.security.sasl.SASLSender;
-import org.apache.qpid.transport.network.security.ssl.SSLReceiver;
-import org.apache.qpid.transport.network.security.ssl.SSLSender;
-import org.apache.qpid.transport.network.security.ssl.SSLUtil;
-
-public class SecurityLayer
-{
- ConnectionSettings settings;
- Connection con;
- SSLSecurityLayer sslLayer;
- SASLSecurityLayer saslLayer;
-
- public void init(Connection con) throws TransportException
- {
- this.con = con;
- this.settings = con.getConnectionSettings();
- if (settings.isUseSSL())
- {
- sslLayer = new SSLSecurityLayer();
- }
- if (settings.isUseSASLEncryption())
- {
- saslLayer = new SASLSecurityLayer();
- }
-
- }
-
- public Sender<ByteBuffer> sender(Sender<ByteBuffer> delegate)
- {
- Sender<ByteBuffer> sender = delegate;
-
- if (settings.isUseSSL())
- {
- sender = sslLayer.sender(sender);
- }
-
- if (settings.isUseSASLEncryption())
- {
- sender = saslLayer.sender(sender);
- }
-
- return sender;
- }
-
- public Receiver<ByteBuffer> receiver(Receiver<ByteBuffer> delegate)
- {
- Receiver<ByteBuffer> receiver = delegate;
-
- if (settings.isUseSSL())
- {
- receiver = sslLayer.receiver(receiver);
- }
-
- if (settings.isUseSASLEncryption())
- {
- receiver = saslLayer.receiver(receiver);
- }
-
- return receiver;
- }
-
- public String getUserID()
- {
- if (settings.isUseSSL())
- {
- return sslLayer.getUserID();
- }
- else
- {
- return null;
- }
- }
-
- class SSLSecurityLayer
- {
- SSLEngine engine;
- SSLSender sender;
-
- public SSLSecurityLayer()
- {
- SSLContext sslCtx;
- try
- {
- sslCtx = SSLUtil.createSSLContext(settings);
- }
- catch (Exception e)
- {
- throw new TransportException("Error creating SSL Context", e);
- }
-
- try
- {
- engine = sslCtx.createSSLEngine();
- engine.setUseClientMode(true);
- }
- catch(Exception e)
- {
- throw new TransportException("Error creating SSL Engine", e);
- }
- }
-
- public SSLSender sender(Sender<ByteBuffer> delegate)
- {
- sender = new SSLSender(engine,delegate);
- sender.setConnectionSettings(settings);
- return sender;
- }
-
- public SSLReceiver receiver(Receiver<ByteBuffer> delegate)
- {
- if (sender == null)
- {
- throw new
- IllegalStateException("SecurityLayer.sender method should be " +
- "invoked before SecurityLayer.receiver");
- }
-
- SSLReceiver receiver = new SSLReceiver(engine,delegate,sender);
- receiver.setConnectionSettings(settings);
- return receiver;
- }
-
- public String getUserID()
- {
- return SSLUtil.retriveIdentity(engine);
- }
-
- }
-
- class SASLSecurityLayer
- {
- public SASLSecurityLayer()
- {
- }
-
- public SASLSender sender(Sender<ByteBuffer> delegate)
- {
- SASLSender sender = new SASLSender(delegate);
- con.addConnectionListener((ConnectionListener)sender);
- return sender;
- }
-
- public SASLReceiver receiver(Receiver<ByteBuffer> delegate)
- {
- SASLReceiver receiver = new SASLReceiver(delegate);
- con.addConnectionListener((ConnectionListener)receiver);
- return receiver;
- }
-
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLEncryptor.java b/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLEncryptor.java
deleted file mode 100644
index 7964239e31..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLEncryptor.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.apache.qpid.transport.network.security.sasl;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.security.sasl.Sasl;
-import javax.security.sasl.SaslClient;
-
-import org.apache.qpid.transport.Connection;
-import org.apache.qpid.transport.ConnectionException;
-import org.apache.qpid.transport.ConnectionListener;
-
-public abstract class SASLEncryptor implements ConnectionListener
-{
- protected SaslClient saslClient;
- protected boolean securityLayerEstablished = false;
- protected int sendBuffSize;
- protected int recvBuffSize;
-
- public boolean isSecurityLayerEstablished()
- {
- return securityLayerEstablished;
- }
-
- public void opened(Connection conn)
- {
- if (conn.getSaslClient() != null)
- {
- saslClient = conn.getSaslClient();
- if (saslClient.isComplete() && saslClient.getNegotiatedProperty(Sasl.QOP) == "auth-conf")
- {
- sendBuffSize = Integer.parseInt(
- (String)saslClient.getNegotiatedProperty(Sasl.RAW_SEND_SIZE));
- recvBuffSize = Integer.parseInt(
- (String)saslClient.getNegotiatedProperty(Sasl.MAX_BUFFER));
- securityLayerEstablished();
- securityLayerEstablished = true;
- }
- }
- }
-
- public void exception(Connection conn, ConnectionException exception){}
- public void closed(Connection conn) {}
-
- public abstract void securityLayerEstablished();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLReceiver.java b/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLReceiver.java
deleted file mode 100644
index 86106318ef..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLReceiver.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.apache.qpid.transport.network.security.sasl;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.nio.ByteBuffer;
-
-import javax.security.sasl.SaslClient;
-import javax.security.sasl.SaslException;
-
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.SenderException;
-import org.apache.qpid.transport.util.Logger;
-
-public class SASLReceiver extends SASLEncryptor implements Receiver<ByteBuffer> {
-
- Receiver<ByteBuffer> delegate;
- private byte[] netData;
- private static final Logger log = Logger.get(SASLReceiver.class);
-
- public SASLReceiver(Receiver<ByteBuffer> delegate)
- {
- this.delegate = delegate;
- }
-
- public void closed()
- {
- delegate.closed();
- }
-
-
- public void exception(Throwable t)
- {
- delegate.exception(t);
- }
-
- public void received(ByteBuffer buf)
- {
- if (isSecurityLayerEstablished())
- {
- while (buf.hasRemaining())
- {
- int length = Math.min(buf.remaining(),recvBuffSize);
- buf.get(netData, 0, length);
- try
- {
- byte[] out = saslClient.unwrap(netData, 0, length);
- delegate.received(ByteBuffer.wrap(out));
- }
- catch (SaslException e)
- {
- throw new SenderException("SASL Sender, Error occurred while encrypting data",e);
- }
- }
- }
- else
- {
- delegate.received(buf);
- }
- }
-
- public void securityLayerEstablished()
- {
- netData = new byte[recvBuffSize];
- log.debug("SASL Security Layer Established");
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLSender.java b/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLSender.java
deleted file mode 100644
index 27255f79f6..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/security/sasl/SASLSender.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package org.apache.qpid.transport.network.security.sasl;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.nio.ByteBuffer;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.security.sasl.SaslClient;
-import javax.security.sasl.SaslException;
-
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.SenderException;
-import org.apache.qpid.transport.util.Logger;
-
-public class SASLSender extends SASLEncryptor implements Sender<ByteBuffer> {
-
- protected Sender<ByteBuffer> delegate;
- private byte[] appData;
- private final AtomicBoolean closed = new AtomicBoolean(false);
- private static final Logger log = Logger.get(SASLSender.class);
-
- public SASLSender(Sender<ByteBuffer> delegate)
- {
- this.delegate = delegate;
- log.debug("SASL Sender enabled");
- }
-
- @Override
- public void close()
- {
-
- if (!closed.getAndSet(true))
- {
- delegate.close();
- if (isSecurityLayerEstablished())
- {
- try
- {
- saslClient.dispose();
- }
- catch (SaslException e)
- {
- throw new SenderException("Error closing SASL Sender",e);
- }
- }
- }
- }
-
- @Override
- public void flush()
- {
- delegate.flush();
- }
-
- @Override
- public void send(ByteBuffer buf)
- {
- if (closed.get())
- {
- throw new SenderException("SSL Sender is closed");
- }
-
- if (isSecurityLayerEstablished())
- {
- while (buf.hasRemaining())
- {
- int length = Math.min(buf.remaining(),sendBuffSize);
- log.debug("sendBuffSize %s", sendBuffSize);
- log.debug("buf.remaining() %s", buf.remaining());
-
- buf.get(appData, 0, length);
- try
- {
- byte[] out = saslClient.wrap(appData, 0, length);
- log.debug("out.length %s", out.length);
-
- delegate.send(ByteBuffer.wrap(out));
- }
- catch (SaslException e)
- {
- log.error("Exception while encrypting data.",e);
- throw new SenderException("SASL Sender, Error occurred while encrypting data",e);
- }
- }
- }
- else
- {
- delegate.send(buf);
- }
- }
-
- @Override
- public void setIdleTimeout(int i)
- {
- delegate.setIdleTimeout(i);
- }
-
- public void securityLayerEstablished()
- {
- appData = new byte[sendBuffSize];
- log.debug("SASL Security Layer Established");
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/QpidClientX509KeyManager.java b/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/QpidClientX509KeyManager.java
deleted file mode 100644
index 14f28f8828..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/QpidClientX509KeyManager.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network.security.ssl;
-
-import java.net.Socket;
-import java.security.KeyStore;
-import java.security.Principal;
-import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.X509ExtendedKeyManager;
-
-import org.apache.qpid.transport.util.Logger;
-
-public class QpidClientX509KeyManager extends X509ExtendedKeyManager
-{
- private static final Logger log = Logger.get(QpidClientX509KeyManager.class);
-
- X509ExtendedKeyManager delegate;
- String alias;
-
- public QpidClientX509KeyManager(String alias, String keyStorePath,
- String keyStorePassword,String keyStoreCertType) throws Exception
- {
- this.alias = alias;
- KeyStore ks = SSLUtil.getInitializedKeyStore(keyStorePath,keyStorePassword);
- KeyManagerFactory kmf = KeyManagerFactory.getInstance(keyStoreCertType);
- kmf.init(ks, keyStorePassword.toCharArray());
- this.delegate = (X509ExtendedKeyManager)kmf.getKeyManagers()[0];
- }
-
- @Override
- public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket socket)
- {
- log.debug("chooseClientAlias:Returning alias " + alias);
- return alias;
- }
-
- @Override
- public String chooseServerAlias(String keyType, Principal[] issuers, Socket socket)
- {
- return delegate.chooseServerAlias(keyType, issuers, socket);
- }
-
- @Override
- public X509Certificate[] getCertificateChain(String alias)
- {
- return delegate.getCertificateChain(alias);
- }
-
- @Override
- public String[] getClientAliases(String keyType, Principal[] issuers)
- {
- log.debug("getClientAliases:Returning alias " + alias);
- return new String[]{alias};
- }
-
- @Override
- public PrivateKey getPrivateKey(String alias)
- {
- return delegate.getPrivateKey(alias);
- }
-
- @Override
- public String[] getServerAliases(String keyType, Principal[] issuers)
- {
- return delegate.getServerAliases(keyType, issuers);
- }
-
- public String chooseEngineClientAlias(String[] keyType, Principal[] issuers, SSLEngine engine)
- {
- log.debug("chooseEngineClientAlias:Returning alias " + alias);
- return alias;
- }
-
- public String chooseEngineServerAlias(String keyType, Principal[] issuers, SSLEngine engine)
- {
- return delegate.chooseEngineServerAlias(keyType, issuers, engine);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java b/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java
deleted file mode 100644
index e227a51729..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLReceiver.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
-*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network.security.ssl;
-
-import java.nio.ByteBuffer;
-
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.SSLEngineResult;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLEngineResult.HandshakeStatus;
-import javax.net.ssl.SSLEngineResult.Status;
-
-import org.apache.qpid.transport.ConnectionSettings;
-import org.apache.qpid.transport.Receiver;
-import org.apache.qpid.transport.TransportException;
-import org.apache.qpid.transport.util.Logger;
-
-public class SSLReceiver implements Receiver<ByteBuffer>
-{
- private Receiver<ByteBuffer> delegate;
- private SSLEngine engine;
- private SSLSender sender;
- private int sslBufSize;
- private ByteBuffer appData;
- private ByteBuffer localBuffer;
- private boolean dataCached = false;
- private final Object notificationToken;
- private ConnectionSettings settings;
-
- private static final Logger log = Logger.get(SSLReceiver.class);
-
- public SSLReceiver(SSLEngine engine, Receiver<ByteBuffer> delegate,SSLSender sender)
- {
- this.engine = engine;
- this.delegate = delegate;
- this.sender = sender;
- this.sslBufSize = engine.getSession().getApplicationBufferSize();
- appData = ByteBuffer.allocate(sslBufSize);
- localBuffer = ByteBuffer.allocate(sslBufSize);
- notificationToken = sender.getNotificationToken();
- }
-
- public void setConnectionSettings(ConnectionSettings settings)
- {
- this.settings = settings;
- }
-
- public void closed()
- {
- delegate.closed();
- }
-
- public void exception(Throwable t)
- {
- delegate.exception(t);
- }
-
- private ByteBuffer addPreviouslyUnreadData(ByteBuffer buf)
- {
- if (dataCached)
- {
- ByteBuffer b = ByteBuffer.allocate(localBuffer.remaining() + buf.remaining());
- b.put(localBuffer);
- b.put(buf);
- b.flip();
- dataCached = false;
- return b;
- }
- else
- {
- return buf;
- }
- }
-
- public void received(ByteBuffer buf)
- {
- ByteBuffer netData = addPreviouslyUnreadData(buf);
-
- HandshakeStatus handshakeStatus;
- Status status;
-
- while (netData.hasRemaining())
- {
- try
- {
- SSLEngineResult result = engine.unwrap(netData, appData);
- synchronized (notificationToken)
- {
- notificationToken.notifyAll();
- }
-
- int read = result.bytesProduced();
- status = result.getStatus();
- handshakeStatus = result.getHandshakeStatus();
-
- if (read > 0)
- {
- int limit = appData.limit();
- appData.limit(appData.position());
- appData.position(appData.position() - read);
-
- ByteBuffer data = appData.slice();
-
- appData.limit(limit);
- appData.position(appData.position() + read);
-
- delegate.received(data);
- }
-
-
- switch(status)
- {
- case CLOSED:
- synchronized(notificationToken)
- {
- notificationToken.notifyAll();
- }
- return;
-
- case BUFFER_OVERFLOW:
- appData = ByteBuffer.allocate(sslBufSize);
- continue;
-
- case BUFFER_UNDERFLOW:
- localBuffer.clear();
- localBuffer.put(netData);
- localBuffer.flip();
- dataCached = true;
- break;
-
- case OK:
- break; // do nothing
-
- default:
- throw new IllegalStateException("SSLReceiver: Invalid State " + status);
- }
-
- switch (handshakeStatus)
- {
- case NEED_UNWRAP:
- if (netData.hasRemaining())
- {
- continue;
- }
- break;
-
- case NEED_TASK:
- sender.doTasks();
- handshakeStatus = engine.getHandshakeStatus();
-
- case FINISHED:
- if (this.settings != null && this.settings.isVerifyHostname() )
- {
- SSLUtil.verifyHostname(engine, this.settings.getHost());
- }
-
- case NEED_WRAP:
- case NOT_HANDSHAKING:
- synchronized(notificationToken)
- {
- notificationToken.notifyAll();
- }
- break;
-
- default:
- throw new IllegalStateException("SSLReceiver: Invalid State " + status);
- }
-
-
- }
- catch(SSLException e)
- {
- log.error(e, "Error caught in SSLReceiver");
- sender.setErrorFlag();
- synchronized(notificationToken)
- {
- notificationToken.notifyAll();
- }
- exception(new TransportException("Error in SSLReceiver",e));
- }
-
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java b/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java
deleted file mode 100644
index cd47a11825..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLSender.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network.security.ssl;
-
-import java.nio.ByteBuffer;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.SSLEngineResult;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLEngineResult.HandshakeStatus;
-import javax.net.ssl.SSLEngineResult.Status;
-
-import org.apache.qpid.transport.ConnectionSettings;
-import org.apache.qpid.transport.Sender;
-import org.apache.qpid.transport.SenderException;
-import org.apache.qpid.transport.util.Logger;
-
-public class SSLSender implements Sender<ByteBuffer>
-{
- private Sender<ByteBuffer> delegate;
- private SSLEngine engine;
- private int sslBufSize;
- private ByteBuffer netData;
- private long timeout = 30000;
- private ConnectionSettings settings;
-
- private final Object engineState = new Object();
- private final AtomicBoolean closed = new AtomicBoolean(false);
- private final AtomicBoolean error = new AtomicBoolean(false);
-
- private static final Logger log = Logger.get(SSLSender.class);
-
- public SSLSender(SSLEngine engine, Sender<ByteBuffer> delegate)
- {
- this.engine = engine;
- this.delegate = delegate;
- sslBufSize = engine.getSession().getPacketBufferSize();
- netData = ByteBuffer.allocate(sslBufSize);
- timeout = Long.getLong("qpid.ssl_timeout", 60000);
- }
-
- public void setConnectionSettings(ConnectionSettings settings)
- {
- this.settings = settings;
- }
-
- public void close()
- {
- if (!closed.getAndSet(true))
- {
- if (engine.isOutboundDone())
- {
- return;
- }
- log.debug("Closing SSL connection");
-
- engine.closeOutbound();
- try
- {
- tearDownSSLConnection();
- }
- catch(Exception e)
- {
- throw new SenderException("Error closing SSL connection",e);
- }
-
-
- synchronized(engineState)
- {
- while (!engine.isOutboundDone())
- {
- try
- {
- engineState.wait();
- }
- catch(InterruptedException e)
- {
- // pass
- }
-
- }
- }
- delegate.close();
- }
- }
-
- private void tearDownSSLConnection() throws Exception
- {
- SSLEngineResult result = engine.wrap(ByteBuffer.allocate(0), netData);
- Status status = result.getStatus();
- int read = result.bytesProduced();
- while (status != Status.CLOSED)
- {
- if (status == Status.BUFFER_OVERFLOW)
- {
- netData.clear();
- }
- if(read > 0)
- {
- int limit = netData.limit();
- netData.limit(netData.position());
- netData.position(netData.position() - read);
-
- ByteBuffer data = netData.slice();
-
- netData.limit(limit);
- netData.position(netData.position() + read);
-
- delegate.send(data);
- flush();
- }
- result = engine.wrap(ByteBuffer.allocate(0), netData);
- status = result.getStatus();
- read = result.bytesProduced();
- }
- }
-
- public void flush()
- {
- delegate.flush();
- }
-
- public void send(ByteBuffer appData)
- {
- if (closed.get())
- {
- throw new SenderException("SSL Sender is closed");
- }
-
- HandshakeStatus handshakeStatus;
- Status status;
-
- while(appData.hasRemaining() && !error.get())
- {
- int read = 0;
- try
- {
- SSLEngineResult result = engine.wrap(appData, netData);
- read = result.bytesProduced();
- status = result.getStatus();
- handshakeStatus = result.getHandshakeStatus();
- }
- catch(SSLException e)
- {
- throw new SenderException("SSL, Error occurred while encrypting data",e);
- }
-
- if(read > 0)
- {
- int limit = netData.limit();
- netData.limit(netData.position());
- netData.position(netData.position() - read);
-
- ByteBuffer data = netData.slice();
-
- netData.limit(limit);
- netData.position(netData.position() + read);
-
- delegate.send(data);
- }
-
- switch(status)
- {
- case CLOSED:
- throw new SenderException("SSLEngine is closed");
-
- case BUFFER_OVERFLOW:
- netData.clear();
- continue;
-
- case OK:
- break; // do nothing
-
- default:
- throw new IllegalStateException("SSLReceiver: Invalid State " + status);
- }
-
- switch (handshakeStatus)
- {
- case NEED_WRAP:
- if (netData.hasRemaining())
- {
- continue;
- }
-
- case NEED_TASK:
- doTasks();
- break;
-
- case NEED_UNWRAP:
- flush();
- synchronized(engineState)
- {
- switch (engine.getHandshakeStatus())
- {
- case NEED_UNWRAP:
- long start = System.currentTimeMillis();
- try
- {
- engineState.wait(timeout);
- }
- catch(InterruptedException e)
- {
- // pass
- }
-
- if (System.currentTimeMillis()- start >= timeout)
- {
- throw new SenderException(
- "SSL Engine timed out waiting for a response." +
- "To get more info,run with -Djavax.net.debug=ssl");
- }
- break;
- }
- }
- break;
-
- case FINISHED:
- if (this.settings != null && this.settings.isVerifyHostname() )
- {
- SSLUtil.verifyHostname(engine, this.settings.getHost());
- }
-
- case NOT_HANDSHAKING:
- break; //do nothing
-
- default:
- throw new IllegalStateException("SSLSender: Invalid State " + status);
- }
-
- }
- }
-
- public void doTasks()
- {
- Runnable runnable;
- while ((runnable = engine.getDelegatedTask()) != null) {
- runnable.run();
- }
- }
-
- public Object getNotificationToken()
- {
- return engineState;
- }
-
- public void setErrorFlag()
- {
- error.set(true);
- }
-
- public void setIdleTimeout(int i)
- {
- delegate.setIdleTimeout(i);
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java b/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java
deleted file mode 100644
index fd73915b65..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/network/security/ssl/SSLUtil.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.network.security.ssl;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.GeneralSecurityException;
-import java.security.KeyStore;
-import java.security.Principal;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.SSLPeerUnverifiedException;
-
-import org.apache.qpid.ssl.SSLContextFactory;
-import org.apache.qpid.transport.ConnectionSettings;
-import org.apache.qpid.transport.TransportException;
-import org.apache.qpid.transport.util.Logger;
-
-public class SSLUtil
-{
- private static final Logger log = Logger.get(SSLUtil.class);
-
- public static void verifyHostname(SSLEngine engine,String hostnameExpected)
- {
- try
- {
- Certificate cert = engine.getSession().getPeerCertificates()[0];
- Principal p = ((X509Certificate)cert).getSubjectDN();
- String dn = p.getName();
- String hostname = null;
-
- if (dn.contains("CN="))
- {
- hostname = dn.substring(3,
- dn.indexOf(",") == -1? dn.length(): dn.indexOf(","));
- }
-
- if (log.isDebugEnabled())
- {
- log.debug("Hostname expected : " + hostnameExpected);
- log.debug("Distinguished Name for server certificate : " + dn);
- log.debug("Host Name obtained from DN : " + hostname);
- }
-
- if (hostname != null && !(hostname.equalsIgnoreCase(hostnameExpected) ||
- hostname.equalsIgnoreCase(hostnameExpected + ".localdomain")))
- {
- throw new TransportException("SSL hostname verification failed." +
- " Expected : " + hostnameExpected +
- " Found in cert : " + hostname);
- }
-
- }
- catch(SSLPeerUnverifiedException e)
- {
- log.warn("Exception received while trying to verify hostname",e);
- // For some reason the SSL engine sets the handshake status to FINISH twice
- // in succession. The first time the peer certificate
- // info is not available. The second time it works !
- // Therefore have no choice but to ignore the exception here.
- }
- }
-
- public static String retriveIdentity(SSLEngine engine)
- {
- StringBuffer id = new StringBuffer();
- try
- {
- Certificate cert = engine.getSession().getLocalCertificates()[0];
- Principal p = ((X509Certificate)cert).getSubjectDN();
- String dn = p.getName();
-
- if (dn.contains("CN="))
- {
- id.append(dn.substring(3,
- dn.indexOf(",") == -1? dn.length(): dn.indexOf(",")));
- }
-
- if (dn.contains("DC="))
- {
- id.append("@");
- int c = 0;
- for (String toks : dn.split(","))
- {
- if (toks.contains("DC"))
- {
- if (c > 0) {id.append(".");}
- id.append(toks.substring(
- toks.indexOf("=")+1,
- toks.indexOf(",") == -1? toks.length(): toks.indexOf(",")));
- c++;
- }
- }
- }
- }
- catch(Exception e)
- {
- log.info("Exception received while trying to retrive client identity from SSL cert",e);
- }
-
- log.debug("Extracted Identity from client certificate : " + id);
- return id.toString();
- }
-
- public static SSLContext createSSLContext(ConnectionSettings settings) throws Exception
- {
- SSLContextFactory sslContextFactory;
-
- if (settings.getCertAlias() == null)
- {
- sslContextFactory =
- new SSLContextFactory(settings.getTrustStorePath(),
- settings.getTrustStorePassword(),
- settings.getTrustStoreCertType(),
- settings.getKeyStorePath(),
- settings.getKeyStorePassword(),
- settings.getKeyStoreCertType());
-
- } else
- {
- sslContextFactory =
- new SSLContextFactory(settings.getTrustStorePath(),
- settings.getTrustStorePassword(),
- settings.getTrustStoreCertType(),
- new QpidClientX509KeyManager(settings.getCertAlias(),
- settings.getKeyStorePath(),
- settings.getKeyStorePassword(),
- settings.getKeyStoreCertType()));
-
- log.debug("Using custom key manager");
- }
-
- return sslContextFactory.buildServerContext();
-
- }
-
- public static KeyStore getInitializedKeyStore(String storePath, String storePassword) throws GeneralSecurityException, IOException
- {
- KeyStore ks = KeyStore.getInstance("JKS");
- InputStream in = null;
- try
- {
- File f = new File(storePath);
- if (f.exists())
- {
- in = new FileInputStream(f);
- }
- else
- {
- in = Thread.currentThread().getContextClassLoader().getResourceAsStream(storePath);
- }
- if (in == null)
- {
- throw new IOException("Unable to load keystore resource: " + storePath);
- }
- ks.load(in, storePassword.toCharArray());
- }
- finally
- {
- if (in != null)
- {
- //noinspection EmptyCatchBlock
- try
- {
- in.close();
- }
- catch (IOException ignored)
- {
- }
- }
- }
- return ks;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/util/Functions.java b/java/common/src/main/java/org/apache/qpid/transport/util/Functions.java
deleted file mode 100644
index 5761228642..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/util/Functions.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.util;
-
-import java.nio.ByteBuffer;
-
-import static java.lang.Math.*;
-
-
-/**
- * Functions
- *
- * @author Rafael H. Schloming
- */
-
-public class Functions
-{
-
- public static final int mod(int n, int m)
- {
- int r = n % m;
- return r < 0 ? m + r : r;
- }
-
- public static final byte lsb(int i)
- {
- return (byte) (0xFF & i);
- }
-
- public static final byte lsb(long l)
- {
- return (byte) (0xFF & l);
- }
-
- public static final String str(ByteBuffer buf)
- {
- return str(buf, buf.remaining());
- }
-
- public static final String str(ByteBuffer buf, int limit)
- {
- return str(buf, limit,buf.position());
- }
-
- public static final String str(ByteBuffer buf, int limit,int start)
- {
- StringBuilder str = new StringBuilder();
- str.append('"');
-
- for (int i = start; i < min(buf.limit(), limit); i++)
- {
- byte c = buf.get(i);
-
- if (c > 31 && c < 127 && c != '\\')
- {
- str.append((char)c);
- }
- else
- {
- str.append(String.format("\\x%02x", c));
- }
- }
-
- str.append('"');
-
- if (limit < buf.remaining())
- {
- str.append("...");
- }
-
- return str.toString();
- }
-
- public static final String str(byte[] bytes)
- {
- return str(ByteBuffer.wrap(bytes));
- }
-
- public static final String str(byte[] bytes, int limit)
- {
- return str(ByteBuffer.wrap(bytes), limit);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/util/Logger.java b/java/common/src/main/java/org/apache/qpid/transport/util/Logger.java
deleted file mode 100644
index 8c4818df92..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/util/Logger.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.util;
-
-import org.slf4j.LoggerFactory;
-
-/**
- * Logger
- *
- */
-
-public final class Logger
-{
-
- public static final Logger get(Class<?> klass)
- {
- return new Logger(LoggerFactory.getLogger(klass));
- }
-
- private final org.slf4j.Logger log;
-
- private Logger(org.slf4j.Logger log)
- {
- this.log = log;
- }
-
- public boolean isDebugEnabled()
- {
- return log.isDebugEnabled();
- }
-
- public void debug(String message, Object ... args)
- {
- if (log.isDebugEnabled())
- {
- log.debug(String.format(message, args));
- }
- }
-
- public void debug(Throwable t, String message, Object ... args)
- {
- if (log.isDebugEnabled())
- {
- log.debug(String.format(message, args), t);
- }
- }
-
- public void error(String message, Object ... args)
- {
- if (log.isErrorEnabled())
- {
- log.error(String.format(message, args));
- }
- }
-
- public void error(Throwable t, String message, Object ... args)
- {
- if (log.isErrorEnabled())
- {
- log.error(String.format(message, args), t);
- }
- }
-
- public void warn(String message, Object ... args)
- {
- if (log.isWarnEnabled())
- {
- log.warn(String.format(message, args));
- }
- }
-
- public void warn(Throwable t, String message, Object ... args)
- {
- if (log.isWarnEnabled())
- {
- log.warn(String.format(message, args), t);
- }
- }
-
- public void info(String message, Object ... args)
- {
- if (log.isInfoEnabled())
- {
- log.info(String.format(message, args));
- }
- }
-
- public void info(Throwable t, String message, Object ... args)
- {
- if (log.isInfoEnabled())
- {
- log.info(String.format(message, args), t);
- }
- }
-
- public void trace(String message, Object ... args)
- {
- if (log.isTraceEnabled())
- {
- log.trace(String.format(message, args));
- }
- }
-
- public void trace(Throwable t, String message, Object ... args)
- {
- if (log.isTraceEnabled())
- {
- log.trace(String.format(message, args), t);
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/util/SliceIterator.java b/java/common/src/main/java/org/apache/qpid/transport/util/SliceIterator.java
deleted file mode 100644
index 3db29847b2..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/util/SliceIterator.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.util;
-
-import java.nio.ByteBuffer;
-
-import java.util.Iterator;
-
-
-/**
- * SliceIterator
- *
- * @author Rafael H. Schloming
- */
-
-public class SliceIterator implements Iterator<ByteBuffer>
-{
-
- final private Iterator<ByteBuffer> iterator;
-
- public SliceIterator(Iterator<ByteBuffer> iterator)
- {
- this.iterator = iterator;
- }
-
- public boolean hasNext()
- {
- return iterator.hasNext();
- }
-
- public ByteBuffer next()
- {
- return iterator.next().slice();
- }
-
- public void remove()
- {
- throw new UnsupportedOperationException();
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/transport/util/Waiter.java b/java/common/src/main/java/org/apache/qpid/transport/util/Waiter.java
deleted file mode 100644
index e034d779ca..0000000000
--- a/java/common/src/main/java/org/apache/qpid/transport/util/Waiter.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.util;
-
-
-/**
- * Waiter
- *
- */
-
-public final class Waiter
-{
-
- private final Object lock;
- private final long timeout;
- private final long start;
- private long elapsed;
-
- public Waiter(Object lock, long timeout)
- {
- this.lock = lock;
- this.timeout = timeout;
- this.start = System.currentTimeMillis();
- this.elapsed = 0;
- }
-
- public boolean hasTime()
- {
- return elapsed < timeout;
- }
-
- public void await()
- {
- try
- {
- lock.wait(timeout - elapsed);
- }
- catch (InterruptedException e)
- {
- // pass
- }
- elapsed = System.currentTimeMillis() - start;
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/url/AMQBindingURL.java b/java/common/src/main/java/org/apache/qpid/url/AMQBindingURL.java
deleted file mode 100644
index 26cb56ea97..0000000000
--- a/java/common/src/main/java/org/apache/qpid/url/AMQBindingURL.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.url;
-
-import java.net.URISyntaxException;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.qpid.exchange.ExchangeDefaults;
-import org.apache.qpid.framing.AMQShortString;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AMQBindingURL implements BindingURL
-{
- private static final Logger _logger = LoggerFactory.getLogger(AMQBindingURL.class);
-
- String _url;
- AMQShortString _exchangeClass = ExchangeDefaults.DIRECT_EXCHANGE_CLASS;
- AMQShortString _exchangeName = new AMQShortString("");
- AMQShortString _destinationName = new AMQShortString("");;
- AMQShortString _queueName = new AMQShortString("");
- AMQShortString[] _bindingKeys = new AMQShortString[0];
- private HashMap<String, String> _options;
-
- public AMQBindingURL(String url) throws URISyntaxException
- {
- // format:
- // <exch_class>://<exch_name>/[<destination>]/[<queue>]?<option>='<value>'[,<option>='<value>']*
- _logger.debug("Parsing URL: " + url);
- _url = url;
- _options = new HashMap<String, String>();
-
- parseBindingURL();
- }
-
- private void parseBindingURL() throws URISyntaxException
- {
- BindingURLParser parser = new BindingURLParser();
- parser.parse(_url,this);
- processOptions();
- _logger.debug("URL Parsed: " + this);
- }
-
- public void setExchangeClass(String exchangeClass)
- {
- setExchangeClass(new AMQShortString(exchangeClass));
- }
-
- public void setQueueName(String name)
- {
- setQueueName(new AMQShortString(name));
- }
-
- public void setDestinationName(String name)
- {
- setDestinationName(new AMQShortString(name));
- }
-
- public void setExchangeName(String exchangeName)
- {
- setExchangeName(new AMQShortString(exchangeName));
- }
-
- private void processOptions() throws URISyntaxException
- {
- }
-
- public String getURL()
- {
- return _url;
- }
-
- public AMQShortString getExchangeClass()
- {
- return _exchangeClass;
- }
-
- private void setExchangeClass(AMQShortString exchangeClass)
- {
-
- _exchangeClass = exchangeClass;
- if (exchangeClass.equals(ExchangeDefaults.TOPIC_EXCHANGE_CLASS))
- {
- setOption(BindingURL.OPTION_EXCLUSIVE, "true");
- }
-
- }
-
- public AMQShortString getExchangeName()
- {
- return _exchangeName;
- }
-
- private void setExchangeName(AMQShortString name)
- {
- _exchangeName = name;
- }
-
- public AMQShortString getDestinationName()
- {
- return _destinationName;
- }
-
- private void setDestinationName(AMQShortString name)
- {
- _destinationName = name;
- }
-
- public AMQShortString getQueueName()
- {
- return _queueName;
- }
-
- public void setQueueName(AMQShortString name)
- {
- _queueName = name;
- }
-
- public String getOption(String key)
- {
- return _options.get(key);
- }
-
- public void setOption(String key, String value)
- {
- _options.put(key, value);
- }
-
- public boolean containsOption(String key)
- {
- return _options.containsKey(key);
- }
-
- public AMQShortString getRoutingKey()
- {
- if (_exchangeClass.equals(ExchangeDefaults.DIRECT_EXCHANGE_CLASS))
- {
- if (containsOption(BindingURL.OPTION_ROUTING_KEY))
- {
- return new AMQShortString((String)getOption(OPTION_ROUTING_KEY));
- }
- else
- {
- return getQueueName();
- }
- }
-
- if (containsOption(BindingURL.OPTION_ROUTING_KEY))
- {
- return new AMQShortString((String)getOption(OPTION_ROUTING_KEY));
- }
-
- return getDestinationName();
- }
-
- public AMQShortString[] getBindingKeys()
- {
- if (_bindingKeys != null && _bindingKeys.length>0)
- {
- return _bindingKeys;
- }
- else
- {
- return new AMQShortString[]{getRoutingKey()};
- }
- }
-
- public void setBindingKeys(AMQShortString[] keys)
- {
- _bindingKeys = keys;
- }
-
- public void setRoutingKey(AMQShortString key)
- {
- setOption(OPTION_ROUTING_KEY, key.toString());
- }
-
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
-
- sb.append(_exchangeClass);
- sb.append("://");
- sb.append(_exchangeName);
- sb.append('/');
- sb.append(_destinationName);
- sb.append('/');
- sb.append(_queueName);
-
- sb.append(URLHelper.printOptions(_options));
-
- // temp hack
- if (getRoutingKey() == null || getRoutingKey().toString().equals(""))
- {
-
- if (sb.toString().indexOf("?") == -1)
- {
- sb.append("?");
- }
- else
- {
- sb.append("&");
- }
-
- for (AMQShortString key :_bindingKeys)
- {
- sb.append(BindingURL.OPTION_BINDING_KEY).append("='").append(key.toString()).append("'&");
- }
-
- return sb.toString().substring(0,sb.toString().length()-1);
- }
- else
- {
- return sb.toString();
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/url/BindingURL.java b/java/common/src/main/java/org/apache/qpid/url/BindingURL.java
deleted file mode 100644
index 9996fff311..0000000000
--- a/java/common/src/main/java/org/apache/qpid/url/BindingURL.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.url;
-
-import org.apache.qpid.framing.AMQShortString;
-
-/*
- Binding URL format:
- <exch_class>://<exch_name>/[<destination>]/[<queue>]?<option>='<value>'[,<option>='<value>']*
-*/
-public interface BindingURL
-{
- public static final String OPTION_EXCLUSIVE = "exclusive";
- public static final String OPTION_AUTODELETE = "autodelete";
- public static final String OPTION_DURABLE = "durable";
- public static final String OPTION_BROWSE = "browse";
- public static final String OPTION_CLIENTID = "clientid";
- public static final String OPTION_SUBSCRIPTION = "subscription";
- public static final String OPTION_ROUTING_KEY = "routingkey";
- public static final String OPTION_BINDING_KEY = "bindingkey";
-
-
- String getURL();
-
- AMQShortString getExchangeClass();
-
- AMQShortString getExchangeName();
-
- AMQShortString getDestinationName();
-
- AMQShortString getQueueName();
-
- String getOption(String key);
-
- boolean containsOption(String key);
-
- AMQShortString getRoutingKey();
-
- AMQShortString[] getBindingKeys();
-
- String toString();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java b/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java
deleted file mode 100644
index 0ebfe0e869..0000000000
--- a/java/common/src/main/java/org/apache/qpid/url/BindingURLParser.java
+++ /dev/null
@@ -1,478 +0,0 @@
-package org.apache.qpid.url;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.qpid.exchange.ExchangeDefaults;
-import org.apache.qpid.framing.AMQShortString;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class BindingURLParser
-{
- private static final char PROPERTY_EQUALS_CHAR = '=';
- private static final char PROPERTY_SEPARATOR_CHAR = '&';
- private static final char ALTERNATIVE_PROPERTY_SEPARATOR_CHAR = ',';
- private static final char FORWARD_SLASH_CHAR = '/';
- private static final char QUESTION_MARK_CHAR = '?';
- private static final char SINGLE_QUOTE_CHAR = '\'';
- private static final char COLON_CHAR = ':';
- private static final char END_OF_URL_MARKER_CHAR = '%';
-
- private static final Logger _logger = LoggerFactory.getLogger(BindingURLParser.class);
-
- private char[] _url;
- private AMQBindingURL _bindingURL;
- private BindingURLParserState _currentParserState;
- private String _error;
- private int _index = 0;
- private String _currentPropName;
- private Map<String,Object> _options;
-
-
- public BindingURLParser()
- {
- }
-
- //<exch_class>://<exch_name>/[<destination>]/[<queue>]?<option>='<value>'[,<option>='<value>']*
- public synchronized void parse(String url,AMQBindingURL bindingURL) throws URISyntaxException
- {
- _url = (url + END_OF_URL_MARKER_CHAR).toCharArray();
- _bindingURL = bindingURL;
- _currentParserState = BindingURLParserState.BINDING_URL_START;
- BindingURLParserState prevState = _currentParserState;
- _index = 0;
- _currentPropName = null;
- _error = null;
- _options = new HashMap<String,Object>();
-
- try
- {
- while (_currentParserState != BindingURLParserState.ERROR && _currentParserState != BindingURLParserState.BINDING_URL_END)
- {
- prevState = _currentParserState;
- _currentParserState = next();
- }
-
- if (_currentParserState == BindingURLParserState.ERROR)
- {
- _error =
- "Invalid URL format [current_state = " + prevState + ", details parsed so far " + _bindingURL + " ] error at (" + _index + ") due to " + _error;
- _logger.debug(_error);
- URISyntaxException ex;
- ex = new URISyntaxException(markErrorLocation(),"Error occured while parsing URL",_index);
- throw ex;
- }
-
- processOptions();
- }
- catch (ArrayIndexOutOfBoundsException e)
- {
- _error = "Invalid URL format [current_state = " + prevState + ", details parsed so far " + _bindingURL + " ] error at (" + _index + ")";
- URISyntaxException ex = new URISyntaxException(markErrorLocation(),"Error occured while parsing URL",_index);
- ex.initCause(e);
- throw ex;
- }
- }
-
- enum BindingURLParserState
- {
- BINDING_URL_START,
- EXCHANGE_CLASS,
- COLON_CHAR,
- DOUBLE_SEP,
- EXCHANGE_NAME,
- EXCHANGE_SEPERATOR_CHAR,
- DESTINATION,
- DESTINATION_SEPERATOR_CHAR,
- QUEUE_NAME,
- QUESTION_MARK_CHAR,
- PROPERTY_NAME,
- PROPERTY_EQUALS,
- START_PROPERTY_VALUE,
- PROPERTY_VALUE,
- END_PROPERTY_VALUE,
- PROPERTY_SEPARATOR,
- BINDING_URL_END,
- ERROR
- }
-
- /**
- * I am fully ware that there are few optimizations
- * that can speed up things a wee bit. But I have opted
- * for readability and maintainability at the expense of
- * speed, as speed is not a critical factor here.
- *
- * One can understand the full parse logic by just looking at this method.
- */
- private BindingURLParserState next()
- {
- switch (_currentParserState)
- {
- case BINDING_URL_START:
- return extractExchangeClass();
- case COLON_CHAR:
- _index++; //skip ":"
- return BindingURLParserState.DOUBLE_SEP;
- case DOUBLE_SEP:
- _index = _index + 2; //skip "//"
- return BindingURLParserState.EXCHANGE_NAME;
- case EXCHANGE_NAME:
- return extractExchangeName();
- case EXCHANGE_SEPERATOR_CHAR:
- _index++; // skip '/'
- return BindingURLParserState.DESTINATION;
- case DESTINATION:
- return extractDestination();
- case DESTINATION_SEPERATOR_CHAR:
- _index++; // skip '/'
- return BindingURLParserState.QUEUE_NAME;
- case QUEUE_NAME:
- return extractQueueName();
- case QUESTION_MARK_CHAR:
- _index++; // skip '?'
- return BindingURLParserState.PROPERTY_NAME;
- case PROPERTY_NAME:
- return extractPropertyName();
- case PROPERTY_EQUALS:
- _index++; // skip the equal sign
- return BindingURLParserState.START_PROPERTY_VALUE;
- case START_PROPERTY_VALUE:
- _index++; // skip the '\''
- return BindingURLParserState.PROPERTY_VALUE;
- case PROPERTY_VALUE:
- return extractPropertyValue();
- case END_PROPERTY_VALUE:
- _index ++;
- return checkEndOfURL();
- case PROPERTY_SEPARATOR:
- _index++; // skip '&'
- return BindingURLParserState.PROPERTY_NAME;
- default:
- return BindingURLParserState.ERROR;
- }
- }
-
- private BindingURLParserState extractExchangeClass()
- {
- char nextChar = _url[_index];
-
- // check for the following special cases.
- // "myQueue?durable='true'" or just "myQueue";
-
- StringBuilder builder = new StringBuilder();
- while (nextChar != COLON_CHAR && nextChar != QUESTION_MARK_CHAR && nextChar != END_OF_URL_MARKER_CHAR)
- {
- builder.append(nextChar);
- _index++;
- nextChar = _url[_index];
- }
-
- // normal use case
- if (nextChar == COLON_CHAR)
- {
- _bindingURL.setExchangeClass(builder.toString());
- return BindingURLParserState.COLON_CHAR;
- }
- // "myQueue?durable='true'" use case
- else if (nextChar == QUESTION_MARK_CHAR)
- {
- _bindingURL.setExchangeClass(ExchangeDefaults.DIRECT_EXCHANGE_CLASS.asString());
- _bindingURL.setExchangeName("");
- _bindingURL.setQueueName(builder.toString());
- return BindingURLParserState.QUESTION_MARK_CHAR;
- }
- else
- {
- _bindingURL.setExchangeClass(ExchangeDefaults.DIRECT_EXCHANGE_CLASS.asString());
- _bindingURL.setExchangeName("");
- _bindingURL.setQueueName(builder.toString());
- return BindingURLParserState.BINDING_URL_END;
- }
- }
-
- private BindingURLParserState extractExchangeName()
- {
- char nextChar = _url[_index];
- StringBuilder builder = new StringBuilder();
- while (nextChar != FORWARD_SLASH_CHAR)
- {
- builder.append(nextChar);
- _index++;
- nextChar = _url[_index];
- }
-
- _bindingURL.setExchangeName(builder.toString());
- return BindingURLParserState.EXCHANGE_SEPERATOR_CHAR;
- }
-
- private BindingURLParserState extractDestination()
- {
- char nextChar = _url[_index];
-
- //The destination is and queue name are both optional
- // This is checking for the case where both are not specified.
- if (nextChar == QUESTION_MARK_CHAR)
- {
- return BindingURLParserState.QUESTION_MARK_CHAR;
- }
-
- StringBuilder builder = new StringBuilder();
- while (nextChar != FORWARD_SLASH_CHAR && nextChar != QUESTION_MARK_CHAR)
- {
- builder.append(nextChar);
- _index++;
- nextChar = _url[_index];
- }
-
- // This is the case where the destination is explictily stated.
- // ex direct://amq.direct/myDest/myQueue?option1='1' ... OR
- // direct://amq.direct//myQueue?option1='1' ...
- if (nextChar == FORWARD_SLASH_CHAR)
- {
- _bindingURL.setDestinationName(builder.toString());
- return BindingURLParserState.DESTINATION_SEPERATOR_CHAR;
- }
- // This is the case where destination is not explictly stated.
- // ex direct://amq.direct/myQueue?option1='1' ...
- else
- {
- _bindingURL.setQueueName(builder.toString());
- return BindingURLParserState.QUESTION_MARK_CHAR;
- }
- }
-
- private BindingURLParserState extractQueueName()
- {
- char nextChar = _url[_index];
- StringBuilder builder = new StringBuilder();
- while (nextChar != QUESTION_MARK_CHAR && nextChar != END_OF_URL_MARKER_CHAR)
- {
- builder.append(nextChar);
- nextChar = _url[++_index];
- }
- _bindingURL.setQueueName(builder.toString());
-
- if(nextChar == QUESTION_MARK_CHAR)
- {
- return BindingURLParserState.QUESTION_MARK_CHAR;
- }
- else
- {
- return BindingURLParserState.BINDING_URL_END;
- }
- }
-
- private BindingURLParserState extractPropertyName()
- {
- StringBuilder builder = new StringBuilder();
- char next = _url[_index];
- while (next != PROPERTY_EQUALS_CHAR)
- {
- builder.append(next);
- next = _url[++_index];
- }
- _currentPropName = builder.toString();
-
- if (_currentPropName.trim().equals(""))
- {
- _error = "Property name cannot be empty";
- return BindingURLParserState.ERROR;
- }
-
- return BindingURLParserState.PROPERTY_EQUALS;
- }
-
- private BindingURLParserState extractPropertyValue()
- {
- StringBuilder builder = new StringBuilder();
- char next = _url[_index];
- while (next != SINGLE_QUOTE_CHAR)
- {
- builder.append(next);
- next = _url[++_index];
- }
- String propValue = builder.toString();
-
- if (propValue.trim().equals(""))
- {
- _error = "Property values cannot be empty";
- return BindingURLParserState.ERROR;
- }
- else
- {
- if (_options.containsKey(_currentPropName))
- {
- Object obj = _options.get(_currentPropName);
- if (obj instanceof List)
- {
- List list = (List)obj;
- list.add(propValue);
- }
- else // it has to be a string
- {
- List<String> list = new ArrayList();
- list.add((String)obj);
- list.add(propValue);
- _options.put(_currentPropName, list);
- }
- }
- else
- {
- _options.put(_currentPropName, propValue);
- }
-
-
- return BindingURLParserState.END_PROPERTY_VALUE;
- }
- }
-
- private BindingURLParserState checkEndOfURL()
- {
- char nextChar = _url[_index];
- if ( nextChar == END_OF_URL_MARKER_CHAR)
- {
- return BindingURLParserState.BINDING_URL_END;
- }
- else if (nextChar == PROPERTY_SEPARATOR_CHAR || nextChar == ALTERNATIVE_PROPERTY_SEPARATOR_CHAR)
- {
- return BindingURLParserState.PROPERTY_SEPARATOR;
- }
- else
- {
- return BindingURLParserState.ERROR;
- }
- }
-
- private String markErrorLocation()
- {
- String tmp = String.valueOf(_url);
- // length -1 to remove ENDOF URL marker
- return tmp.substring(0,_index) + "^" + tmp.substring(_index+1> tmp.length()-1?tmp.length()-1:_index+1,tmp.length()-1);
- }
-
- private void processOptions() throws URISyntaxException
- {
-// check for bindingKey
- if (_options.containsKey(BindingURL.OPTION_BINDING_KEY) && _options.get(BindingURL.OPTION_BINDING_KEY) != null)
- {
- Object obj = _options.get(BindingURL.OPTION_BINDING_KEY);
-
- if (obj instanceof String)
- {
- AMQShortString[] bindingKeys = new AMQShortString[]{new AMQShortString((String)obj)};
- _bindingURL.setBindingKeys(bindingKeys);
- }
- else // it would be a list
- {
- List list = (List)obj;
- AMQShortString[] bindingKeys = new AMQShortString[list.size()];
- int i=0;
- for (Iterator it = list.iterator(); it.hasNext();)
- {
- bindingKeys[i] = new AMQShortString((String)it.next());
- i++;
- }
- _bindingURL.setBindingKeys(bindingKeys);
- }
-
- }
- for (String key: _options.keySet())
- {
- // We want to skip the bindingKey list
- if (_options.get(key) instanceof String)
- {
- _bindingURL.setOption(key, (String)_options.get(key));
- }
- }
-
-
- // check if both a binding key and a routing key is specified.
- if (_options.containsKey(BindingURL.OPTION_BINDING_KEY) && _options.containsKey(BindingURL.OPTION_ROUTING_KEY))
- {
- throw new URISyntaxException(String.valueOf(_url),"It is illegal to specify both a routingKey and a bindingKey in the same URL",-1);
- }
-
- // check for durable subscriptions
- if (_bindingURL.getExchangeClass().equals(ExchangeDefaults.TOPIC_EXCHANGE_CLASS))
- {
- String queueName = null;
- if (Boolean.parseBoolean(_bindingURL.getOption(BindingURL.OPTION_DURABLE)))
- {
- if (_bindingURL.containsOption(BindingURL.OPTION_CLIENTID) && _bindingURL.containsOption(BindingURL.OPTION_SUBSCRIPTION))
- {
- queueName = _bindingURL.getOption(BindingURL.OPTION_CLIENTID) + ":" + _bindingURL.getOption(BindingURL.OPTION_SUBSCRIPTION);
- }
- else
- {
- throw new URISyntaxException(String.valueOf(_url),"Durable subscription must have values for " + BindingURL.OPTION_CLIENTID
- + " and " + BindingURL.OPTION_SUBSCRIPTION , -1);
-
- }
- }
- _bindingURL.setQueueName(queueName);
- }
- }
-
- public static void main(String[] args)
- {
-
- String[] urls = new String[]
- {
- "topic://amq.topic//myTopic?routingkey='stocks.#'",
- "topic://amq.topic/message_queue?bindingkey='usa.*'&bindingkey='control',exclusive='true'",
- "topic://amq.topic//?bindingKey='usa.*',bindingkey='control',exclusive='true'",
- "direct://amq.direct/dummyDest/myQueue?routingkey='abc.*'",
- "exchange.Class://exchangeName/Destination/Queue",
- "exchangeClass://exchangeName/Destination/?option='value',option2='value2'",
- "IBMPerfQueue1?durable='true'",
- "exchangeClass://exchangeName/Destination/?bindingkey='key1',bindingkey='key2'",
- "exchangeClass://exchangeName/Destination/?bindingkey='key1'&routingkey='key2'"
- };
-
- try
- {
- BindingURLParser parser = new BindingURLParser();
-
- for (String url: urls)
- {
- System.out.println("URL " + url);
- AMQBindingURL bindingURL = new AMQBindingURL(url);
- parser.parse(url,bindingURL);
- System.out.println("\nX " + bindingURL.toString() + " \n");
-
- }
-
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/url/URLHelper.java b/java/common/src/main/java/org/apache/qpid/url/URLHelper.java
deleted file mode 100644
index 6f21c327e7..0000000000
--- a/java/common/src/main/java/org/apache/qpid/url/URLHelper.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.url;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class URLHelper
-{
- public static final char DEFAULT_OPTION_SEPERATOR = '&';
- public static final char ALTERNATIVE_OPTION_SEPARATOR = ',';
- public static final char BROKER_SEPARATOR = ';';
-
- public static void parseOptions(Map<String, String> optionMap, String options) throws URLSyntaxException
- {
- // options looks like this
- // brokerlist='tcp://host:port?option='value',option='value';vm://:3/virtualpath?option='value'',failover='method?option='value',option='value''
-
- if ((options == null) || (options.indexOf('=') == -1))
- {
- return;
- }
-
- int optionIndex = options.indexOf('=');
-
- String option = options.substring(0, optionIndex);
-
- int length = options.length();
-
- int nestedQuotes = 0;
-
- // to store index of final "'"
- int valueIndex = optionIndex;
-
- // Walk remainder of url.
- while ((nestedQuotes > 0) || (valueIndex < length))
- {
- valueIndex++;
-
- if (valueIndex >= length)
- {
- break;
- }
-
- if (options.charAt(valueIndex) == '\'')
- {
- if ((valueIndex + 1) < options.length())
- {
- if ((options.charAt(valueIndex + 1) == DEFAULT_OPTION_SEPERATOR)
- || (options.charAt(valueIndex + 1) == ALTERNATIVE_OPTION_SEPARATOR)
- || (options.charAt(valueIndex + 1) == BROKER_SEPARATOR)
- || (options.charAt(valueIndex + 1) == '\''))
- {
- nestedQuotes--;
-
- if (nestedQuotes == 0)
- {
- // We've found the value of an option
- break;
- }
- }
- else
- {
- nestedQuotes++;
- }
- }
- else
- {
- // We are at the end of the string
- // Check to see if we are corectly closing quotes
- if (options.charAt(valueIndex) == '\'')
- {
- nestedQuotes--;
- }
-
- break;
- }
- }
- }
-
- if ((nestedQuotes != 0) || (valueIndex < (optionIndex + 2)))
- {
- int sepIndex = 0;
-
- // Try and identify illegal separator character
- if (nestedQuotes > 1)
- {
- for (int i = 0; i < nestedQuotes; i++)
- {
- sepIndex = options.indexOf('\'', sepIndex);
- sepIndex++;
- }
- }
-
- if ((sepIndex >= options.length()) || (sepIndex == 0))
- {
- throw parseError(valueIndex, "Unterminated option", options);
- }
- else
- {
- throw parseError(sepIndex, "Unterminated option. Possible illegal option separator:'"
- + options.charAt(sepIndex) + "'", options);
- }
- }
-
- // optionIndex +2 to skip "='"
- String value = options.substring(optionIndex + 2, valueIndex);
-
- optionMap.put(option, value);
-
- if (valueIndex < (options.length() - 1))
- {
- // Recurse to get remaining options
- parseOptions(optionMap, options.substring(valueIndex + 2));
- }
- }
-
- public static URLSyntaxException parseError(int index, String error, String url)
- {
- return parseError(index, 1, error, url);
- }
-
- public static URLSyntaxException parseError(int index, int length, String error, String url)
- {
- return new URLSyntaxException(url, error, index, length);
- }
-
- public static String printOptions(Map<String, String> options)
- {
- if (options.isEmpty())
- {
- return "";
- }
- else
- {
- StringBuffer sb = new StringBuffer();
- sb.append('?');
- for (String key : options.keySet())
- {
- sb.append(key);
-
- sb.append("='");
-
- sb.append(options.get(key));
-
- sb.append("'");
- sb.append(DEFAULT_OPTION_SEPERATOR);
- }
-
- sb.deleteCharAt(sb.length() - 1);
-
- return sb.toString();
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/url/URLSyntaxException.java b/java/common/src/main/java/org/apache/qpid/url/URLSyntaxException.java
deleted file mode 100644
index 3ff7195794..0000000000
--- a/java/common/src/main/java/org/apache/qpid/url/URLSyntaxException.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.url;
-
-import java.net.URISyntaxException;
-
-public class URLSyntaxException extends URISyntaxException
-{
- private int _length;
-
- public URLSyntaxException(String url, String error, int index, int length)
- {
- super(url, error, index);
-
- _length = length;
- }
-
- private static String getPositionString(int index, int length)
- {
- StringBuffer sb = new StringBuffer(index + 1);
-
- for (int i = 0; i < index; i++)
- {
- sb.append(" ");
- }
-
- if (length > -1)
- {
- for (int i = 0; i < length; i++)
- {
- sb.append('^');
- }
- }
-
- return sb.toString();
- }
-
-
- public String toString()
- {
- StringBuffer sb = new StringBuffer();
-
- sb.append(getReason());
-
- if (getIndex() > -1)
- {
- if (_length != -1)
- {
- sb.append(" between indicies ");
- sb.append(getIndex());
- sb.append(" and ");
- sb.append(_length);
- }
- else
- {
- sb.append(" at index ");
- sb.append(getIndex());
- }
- }
-
- sb.append(" ");
- if (getIndex() != -1)
- {
- sb.append("\n");
- }
-
- sb.append(getInput());
-
- if (getIndex() != -1)
- {
- sb.append("\n");
- sb.append(getPositionString(getIndex(), _length));
- }
-
- return sb.toString();
- }
-
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/CommandLineParser.java b/java/common/src/main/java/org/apache/qpid/util/CommandLineParser.java
deleted file mode 100644
index 09478d4157..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/CommandLineParser.java
+++ /dev/null
@@ -1,695 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.regex.*;
-
-/**
- * CommandLineParser provides a utility for specifying the format of a command line and parsing command lines to ensure
- * that they fit their specified format. A command line is made up of flags and options, both may be refered to as
- * options. A flag is an option that does not take an argument (specifying it means it has the value 'true' and not
- * specifying it means it has the value 'false'). Options must take arguments but they can be set up with defaults so
- * that they take a default value when not set. Options may be mandatory in wich case it is an error not to specify
- * them on the command line. Flags are never mandatory because they are implicitly set to false when not specified.
- *
- * <p/>Some example command lines are:
- *
- * <ul>
- * <li>This one has two options that expect arguments:
- * <pre>
- * cruisecontrol -configfile cruisecontrol.xml -port 9000
- * </pre>
- * <li>This has one no-arg flag and two 'free' arguments:
- * <pre>
- * zip -r project.zip project/*
- * </pre>
- * <li>This one concatenates multiple flags into a single block with only one '-':
- * <pre>
- * jar -tvf mytar.tar
- * </pre>
- *
- * <p/>The parsing rules are:
- *
- * <ol>
- * <li>Flags may be combined after a single '-' because they never take arguments. Normally such flags are single letter
- * flags but this is only a convention and not enforced. Flags of more than one letter are usually specified on their own.
- * <li>Options expecting arguments must always be on their own.
- * <li>The argument to an option may be seperated from it by whitespace or appended directly onto the option.
- * <li>The argument to an option may never begin with a '-' character.
- * <li>All other arguments not beginning with a '-' character are free arguments that do not belong to any option.
- * <li>The second or later of a set of duplicate or repeated flags are ignored.
- * <li>Options are matched up to the shortest matching option. This is because of the possibility of having no space
- * between an option and its argument. This rules out the possibility of using two options where one is an opening
- * substring of the other. For example, the options "foo" and "foobar" cannot be used on the same command line because
- * it is not possible to distinguish the argument "-foobar" from being the "foobar" option or the "foo" option with
- * the "bar" argument.
- * </ol>
- *
- * <p/>By default, unknown options are simply ignored if specified on the command line. This behaviour may be changed
- * so that the parser reports all unknowns as errors by using the {@link #setErrorsOnUnknowns} method.
- *
- * <p><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Accept a command line specification.
- * <tr><td> Parse a command line into properties, validating it against its specification.
- * <tr><td> Report all errors between a command line and its specification.
- * <tr><td> Provide a formatted usage string for a command line.
- * <tr><td> Provide a formatted options in force string for a command line.
- * <tr><td> Allow errors on unknowns behaviour to be turned on or off.
- * </table>
- */
-public class CommandLineParser
-{
- /** Holds a mapping from command line option names to detailed information about those options. */
- private Map<String, CommandLineOption> optionMap = new HashMap<String, CommandLineOption>();
-
- /** Holds a list of parsing errors. */
- private List<String> parsingErrors = new ArrayList<String>();
-
- /** Holds the regular expression matcher to match command line options with. */
- private Matcher optionMatcher = null;
-
- /** Holds the parsed command line properties after parsing. */
- private Properties parsedProperties = null;
-
- /** Flag used to indicate that errors should be created for unknown options. False by default. */
- private boolean errorsOnUnknowns = false;
-
- /**
- * Creates a command line options parser from a command line specification. This is passed to this constructor
- * as an array of arrays of strings. Each array of strings specifies the command line for a single option. A static
- * array may therefore easily be used to configure the command line parser in a single method call with an easily
- * readable format.
- *
- * <p/>Each array of strings must be 2, 3, 4 or 5 elements long. If any of the last three elements are missing they
- * are assumed to be null. The elements specify the following parameters:
- * <ol>
- * <li>The name of the option without the leading '-'. For example, "file". To specify the format of the 'free'
- * arguments use the option names "1", "2", ... and so on.
- * <li>The option comment. A line of text describing the usage of the option. For example, "The file to be processed."
- * <li>The options argument. This is a very short description of the argument to the option, often a single word
- * or a reminder as to the arguments format. When this element is null the option is a flag and does not
- * accept any arguments. For example, "filename" or "(unix | windows)" or null. The actual text specified
- * is only used to print in the usage message to remind the user of the usage of the option.
- * <li>The mandatory flag. When set to "true" an option must always be specified. Any other value, including null,
- * means that the option is mandatory. Flags are always mandatory (see class javadoc for explanation of why) so
- * this is ignored for flags.
- * <li>A regular expression describing the format that the argument must take. Ignored if null.
- * </ol>
- * <p/>An example call to this constructor is:
- *
- * <pre>
- * CommandLineParser commandLine = new CommandLineParser(
- * new String[][] {{"file", "The file to be processed. ", "filename", "true"},
- * {"dir", "Directory to store results in. Current dir used if not set.", "out dir"},
- * {"os", "Operating system EOL format to use.", "(windows | unix)", null, "windows\|unix"},
- * {"v", "Verbose mode. Prints information about the processing as it goes."},
- * {"1", "The processing command to run.", "command", "true", "add\|remove\|list"}});
- * </pre>
- *
- * @param config The configuration as an array of arrays of strings.
- */
- public CommandLineParser(String[][] config)
- {
- // Loop through all the command line option specifications creating details for each in the options map.
- for (int i = 0; i < config.length; i++)
- {
- String[] nextOptionSpec = config[i];
-
- addOption(nextOptionSpec[0], nextOptionSpec[1], (nextOptionSpec.length > 2) ? nextOptionSpec[2] : null,
- (nextOptionSpec.length > 3) ? ("true".equals(nextOptionSpec[3]) ? true : false) : false,
- (nextOptionSpec.length > 4) ? nextOptionSpec[4] : null);
- }
- }
-
- /**
- * Lists all the parsing errors from the most recent parsing in a string.
- *
- * @return All the parsing errors from the most recent parsing.
- */
- public String getErrors()
- {
- // Return the empty string if there are no errors.
- if (parsingErrors.isEmpty())
- {
- return "";
- }
-
- // Concatenate all the parsing errors together.
- StringBuilder result = new StringBuilder();
-
- for (String s : parsingErrors)
- {
- result.append(s);
- }
-
- return result.toString();
- }
-
- /**
- * Lists the properties set from the most recent parsing or an empty string if no parsing has been done yet.
- *
- * @return The properties set from the most recent parsing or an empty string if no parsing has been done yet.
- */
- public String getOptionsInForce()
- {
- // Check if there are no properties to report and return and empty string if so.
- if (parsedProperties == null)
- {
- return "";
- }
-
- // List all the properties.
- StringBuilder result = new StringBuilder("Options in force:\n");
-
- for (Map.Entry<Object, Object> property : parsedProperties.entrySet())
- {
- result.append(property.getKey())
- .append(" = ")
- .append(property.getValue())
- .append('\n');
- }
-
- return result.toString();
- }
-
- /**
- * Generates a usage string consisting of the name of each option and each options argument description and
- * comment.
- *
- * @return A usage string for all the options.
- */
- public String getUsage()
- {
- String result = "Options:\n";
-
- // Print usage on each of the command line options.
- for (CommandLineOption optionInfo : optionMap.values())
- {
- result +=
- "-" + optionInfo.option + " " + ((optionInfo.argument != null) ? (optionInfo.argument + " ") : "")
- + optionInfo.comment + "\n";
- }
-
- return result;
- }
-
- /**
- * Control the behaviour of the errors on unkowns reporting. When turned on this reports all unkowns options
- * as errors. When turned off, all unknowns are simply ignored.
- *
- * @param errors The setting of the errors on unkown flag. True to turn it on.
- */
- public void setErrorsOnUnknowns(boolean errors)
- {
- errorsOnUnknowns = errors;
- }
-
- /**
- * Parses a set of command line arguments into a set of properties, keyed by the argument flag. The free arguments
- * are keyed by integers as strings starting at "1" and then "2", ... and so on.
- *
- * <p/>See the class level comment for a description of the parsing rules.
- *
- * @param args The command line arguments.
- *
- * @return The arguments as a set of properties.
- *
- * @throws IllegalArgumentException If the command line cannot be parsed against its specification. If this exception
- * is thrown a call to {@link #getErrors} will provide a diagnostic of the command
- * line errors.
- */
- public Properties parseCommandLine(String[] args) throws IllegalArgumentException
- {
- Properties options = new Properties();
-
- // Used to keep count of the current 'free' argument.
- int free = 1;
-
- // Used to indicate that the most recently parsed option is expecting arguments.
- boolean expectingArgs = false;
-
- // The option that is expecting arguments from the next element of the command line.
- String optionExpectingArgs = null;
-
- // Used to indicate that the most recently parsed option is a duplicate and should be ignored.
- boolean ignore = false;
-
- // Create the regular expression matcher for the command line options.
- StringBuilder regexp = new StringBuilder("^(");
- int optionsAdded = 0;
-
- for (Iterator<String> i = optionMap.keySet().iterator(); i.hasNext();)
- {
- String nextOption = i.next();
-
- // Check that the option is not a free argument definition.
- boolean notFree = false;
-
- try
- {
- Integer.parseInt(nextOption);
- }
- catch (NumberFormatException e)
- {
- notFree = true;
- }
-
- // Add the option to the regular expression matcher if it is not a free argument definition.
- if (notFree)
- {
- regexp.append(nextOption)
- .append(i.hasNext() ? "|" : "");
- optionsAdded++;
- }
- }
-
- // There has to be more that one option in the regular expression or else the compiler complains that the close
- // cannot be nullable if the '?' token is used to make the matched option string optional.
- regexp.append(')')
- .append(((optionsAdded > 0) ? "?" : ""))
- .append("(.*)");
- Pattern pattern = Pattern.compile(regexp.toString());
-
- // Loop through all the command line arguments.
- for (int i = 0; i < args.length; i++)
- {
- // Check if the next command line argument begins with a '-' character and is therefore the start of
- // an option.
- if (args[i].startsWith("-"))
- {
- // Extract the value of the option without the leading '-'.
- String arg = args[i].substring(1);
-
- // Match up to the longest matching option.
- optionMatcher = pattern.matcher(arg);
- optionMatcher.matches();
-
- String matchedOption = optionMatcher.group(1);
-
- // Match any argument directly appended onto the longest matching option.
- String matchedArg = optionMatcher.group(2);
-
- // Check that a known option was matched.
- if ((matchedOption != null) && !"".equals(matchedOption))
- {
- // Get the command line option information for the matched option.
- CommandLineOption optionInfo = optionMap.get(matchedOption);
-
- // Check if this option is expecting arguments.
- if (optionInfo.expectsArgs)
- {
- // The option is expecting arguments so swallow the next command line argument as an
- // argument to this option.
- expectingArgs = true;
- optionExpectingArgs = matchedOption;
-
- // In the mean time set this options argument to the empty string in case no argument is ever
- // supplied.
- // options.put(matchedOption, "");
- }
-
- // Check if the option was matched on its own and is a flag in which case set that flag.
- if ("".equals(matchedArg) && !optionInfo.expectsArgs)
- {
- options.put(matchedOption, "true");
- }
- // The option was matched as a substring with its argument appended to it or is a flag that is
- // condensed together with other flags.
- else if (!"".equals(matchedArg))
- {
- // Check if the option is a flag and therefore is allowed to be condensed together
- // with other flags.
- if (!optionInfo.expectsArgs)
- {
- // Set the first matched flag.
- options.put(matchedOption, "true");
-
- // Repeat the longest matching process on the remainder but ensure that the remainder
- // consists only of flags as only flags may be condensed together in this fashion.
- do
- {
- // Match the remainder against the options.
- optionMatcher = pattern.matcher(matchedArg);
- optionMatcher.matches();
-
- matchedOption = optionMatcher.group(1);
- matchedArg = optionMatcher.group(2);
-
- // Check that an option was matched.
- if (matchedOption != null)
- {
- // Get the command line option information for the next matched option.
- optionInfo = optionMap.get(matchedOption);
-
- // Ensure that the next option is a flag or raise an error if not.
- if (optionInfo.expectsArgs == true)
- {
- parsingErrors.add("Option " + matchedOption + " cannot be combined with flags.\n");
- }
-
- options.put(matchedOption, "true");
- }
- // The remainder could not be matched against a flag it is either an unknown flag
- // or an illegal argument to a flag.
- else
- {
- parsingErrors.add("Illegal argument to a flag in the option " + arg + "\n");
-
- break;
- }
- }
- // Continue until the remainder of the argument has all been matched with flags.
- while (!"".equals(matchedArg));
- }
- // The option is expecting an argument, so store the unmatched portion against it
- // as its argument.
- else
- {
- // Check the arguments format is correct against any specified format.
- checkArgumentFormat(optionInfo, matchedArg);
-
- // Store the argument against its option (regardless of its format).
- options.put(matchedOption, matchedArg);
-
- // The argument to this flag has already been supplied to it. Do not swallow the
- // next command line argument as an argument to this flag.
- expectingArgs = false;
- }
- }
- }
- else // No matching option was found.
- {
- // Add this to the list of parsing errors if errors on unkowns is being used.
- if (errorsOnUnknowns)
- {
- parsingErrors.add("Option " + matchedOption + " is not a recognized option.\n");
- }
- }
- }
- // The command line argument did not being with a '-' so it is an argument to the previous flag or it
- // is a free argument.
- else
- {
- // Check if a previous flag is expecting to swallow this next argument as its argument.
- if (expectingArgs)
- {
- // Get the option info for the option waiting for arguments.
- CommandLineOption optionInfo = optionMap.get(optionExpectingArgs);
-
- // Check the arguments format is correct against any specified format.
- checkArgumentFormat(optionInfo, args[i]);
-
- // Store the argument against its option (regardless of its format).
- options.put(optionExpectingArgs, args[i]);
-
- // Clear the expecting args flag now that the argument has been swallowed.
- expectingArgs = false;
- optionExpectingArgs = null;
- }
- // This command line option is not an argument to any option. Add it to the set of 'free' options.
- else
- {
- // Get the option info for the free option, if there is any.
- CommandLineOption optionInfo = optionMap.get(Integer.toString(free));
-
- if (optionInfo != null)
- {
- // Check the arguments format is correct against any specified format.
- checkArgumentFormat(optionInfo, args[i]);
- }
-
- // Add to the list of free options.
- options.put(Integer.toString(free), args[i]);
-
- // Move on to the next free argument.
- free++;
- }
- }
- }
-
- // Scan through all the specified options to check that all mandatory options have been set and that all flags
- // that were not set are set to false in the set of properties.
- for (CommandLineOption optionInfo : optionMap.values())
- {
- // Check if this is a flag.
- if (!optionInfo.expectsArgs)
- {
- // Check if the flag is not set in the properties and set it to false if so.
- if (!options.containsKey(optionInfo.option))
- {
- options.put(optionInfo.option, "false");
- }
- }
- // Check if this is a mandatory option and was not set.
- else if (optionInfo.mandatory && !options.containsKey(optionInfo.option))
- {
- // Create an error for the missing option.
- parsingErrors.add("Option -" + optionInfo.option + " is mandatory but not was not specified.\n");
- }
- }
-
- // Check if there were any errors.
- if (!parsingErrors.isEmpty())
- {
- // Throw an illegal argument exception to signify that there were parsing errors.
- throw new IllegalArgumentException();
- }
-
- // Convert any name/value pairs in the free arguments into properties in the parsed options.
- options = takeFreeArgsAsProperties(options, 1);
-
- parsedProperties = options;
-
- return options;
- }
-
- /**
- * If a command line has been parsed, calling this method sets all of its parsed options into the specified properties.
- */
- public void addCommandLineToProperties(Properties properties)
- {
- if (parsedProperties != null)
- {
- for (Object propKey : parsedProperties.keySet())
- {
- String name = (String) propKey;
- String value = parsedProperties.getProperty(name);
-
- properties.setProperty(name, value);
- }
- }
- }
-
- /**
- * Resets this command line parser after it has been used to parse a command line. This method will only need
- * to be called to use this parser a second time which is not likely seeing as a command line is usually only
- * specified once. However, it is exposed as a public method for the rare case where this may be done.
- *
- * <p/>Cleans the internal state of this parser, removing all stored errors and information about the options in
- * force.
- */
- public void reset()
- {
- parsingErrors = new ArrayList<String>();
- parsedProperties = null;
- }
-
- /**
- * Adds the option to list of available command line options.
- *
- * @param option The option to add as an available command line option.
- * @param comment A comment for the option.
- * @param argument The text that appears after the option in the usage string.
- * @param mandatory When true, indicates that this option is mandatory.
- * @param formatRegexp The format that the argument must take, defined as a regular expression.
- */
- protected void addOption(String option, String comment, String argument, boolean mandatory, String formatRegexp)
- {
- // Check if usage text has been set in which case this option is expecting arguments.
- boolean expectsArgs = ((argument == null) || argument.equals("")) ? false : true;
-
- // Add the option to the map of command line options.
- CommandLineOption opt = new CommandLineOption(option, expectsArgs, comment, argument, mandatory, formatRegexp);
- optionMap.put(option, opt);
- }
-
- /**
- * Converts the free arguments into property declarations. After parsing the command line the free arguments
- * are numbered from 1, such that the parsed properties contain values for the keys "1", "2", ... This method
- * converts any free arguments declared using the 'name=value' syntax into properties with key 'name', value
- * 'value'.
- *
- * <p/>For example the comand line:
- * <pre>
- * ... debug=true
- * </pre>
- *
- * <p/>After parsing has properties:
- * <pre>[[1, debug=true]]</pre>
- *
- * <p/>After applying this method the properties are:
- * <pre>[[1, debug=true], [debug, true]]</pre>
- *
- * @param properties The parsed command line properties.
- * @param from The free argument index to convert to properties from.
- *
- * @return The parsed command line properties, with free argument name value pairs too.
- */
- private Properties takeFreeArgsAsProperties(Properties properties, int from)
- {
- for (int i = from; true; i++)
- {
- String nextFreeArg = properties.getProperty(Integer.toString(i));
-
- // Terminate the loop once all free arguments have been consumed.
- if (nextFreeArg == null)
- {
- break;
- }
-
- // Split it on the =, strip any whitespace and set it as a system property.
- String[] nameValuePair = nextFreeArg.split("=");
-
- if (nameValuePair.length == 2)
- {
- properties.setProperty(nameValuePair[0], nameValuePair[1]);
- }
- }
-
- return properties;
- }
-
- /**
- * Checks the format of an argument to an option against its specified regular expression format if one has
- * been set. Any errors are added to the list of parsing errors.
- *
- * @param optionInfo The command line option information for the option which is havings its argument checked.
- * @param matchedArg The string argument to the option.
- */
- private void checkArgumentFormat(CommandLineOption optionInfo, String matchedArg)
- {
- // Check if this option enforces a format for its argument.
- if (optionInfo.argumentFormatRegexp != null)
- {
- Pattern pattern = Pattern.compile(optionInfo.argumentFormatRegexp);
- Matcher argumentMatcher = pattern.matcher(matchedArg);
-
- // Check if the argument does not meet its required format.
- if (!argumentMatcher.matches())
- {
- // Create an error for this badly formed argument.
- parsingErrors.add("The argument to option -" + optionInfo.option + " does not meet its required format.\n");
- }
- }
- }
-
- /**
- * Extracts all name=value pairs from the command line, sets them all as system properties and also returns
- * a map of properties containing them.
- *
- * @param args The command line.
- * @param commandLine The command line parser.
- * @param properties The properties object to inject all parsed properties into (optional may be <tt>null</tt>).
- *
- * @return A set of properties containing all name=value pairs from the command line.
- */
- public static Properties processCommandLine(String[] args, CommandLineParser commandLine, Properties properties)
- {
- // Capture the command line arguments or display errors and correct usage and then exit.
- Properties options = null;
-
- try
- {
- options = commandLine.parseCommandLine(args);
-
- // Add all the trailing command line options (name=value pairs) to system properties. They may be picked up
- // from there.
- commandLine.addCommandLineToProperties(properties);
- }
- catch (IllegalArgumentException e)
- {
- System.out.println(commandLine.getErrors());
- System.out.println(commandLine.getUsage());
- System.exit(1);
- }
-
- return options;
- }
-
- /**
- * Holds information about a command line options. This includes what its name is, whether or not it is a flag,
- * whether or not it is mandatory, what its user comment is, what its argument reminder text is and what its
- * regular expression format is.
- *
- * <p><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Hold details of a command line option.
- * </table>
- */
- protected static class CommandLineOption
- {
- /** Holds the text for the flag to match this argument with. */
- public String option = null;
-
- /** Holds a string describing how to use this command line argument. */
- public String argument = null;
-
- /** Flag that determines whether or not this command line argument can take arguments. */
- public boolean expectsArgs = false;
-
- /** Holds a short comment describing what this command line argument is for. */
- public String comment = null;
-
- /** Flag that determines whether or not this is an mandatory command line argument. */
- public boolean mandatory = false;
-
- /** A regular expression describing what format the argument to this option muist have. */
- public String argumentFormatRegexp = null;
-
- /**
- * Create a command line option object that holds specific information about a command line option.
- *
- * @param option The text that matches the option.
- * @param expectsArgs Whether or not the option expects arguments. It is a flag if this is false.
- * @param comment A comment explaining how to use this option.
- * @param argument A short reminder of the format of the argument to this option/
- * @param mandatory Set to true if this option is mandatory.
- * @param formatRegexp The regular expression that the argument to this option must meet to be valid.
- */
- public CommandLineOption(String option, boolean expectsArgs, String comment, String argument, boolean mandatory,
- String formatRegexp)
- {
- this.option = option;
- this.expectsArgs = expectsArgs;
- this.comment = comment;
- this.argument = argument;
- this.mandatory = mandatory;
- this.argumentFormatRegexp = formatRegexp;
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedMessageQueueAtomicSize.java b/java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedMessageQueueAtomicSize.java
deleted file mode 100644
index 633cf4fe3a..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedMessageQueueAtomicSize.java
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-package org.apache.qpid.util;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Queue;
-import java.util.concurrent.atomic.AtomicInteger;
-
-public class ConcurrentLinkedMessageQueueAtomicSize<E> extends ConcurrentLinkedQueueAtomicSize<E> implements MessageQueue<E>
-{
- private static final Logger _logger = LoggerFactory.getLogger(ConcurrentLinkedMessageQueueAtomicSize.class);
-
- protected Queue<E> _messageHead = new ConcurrentLinkedQueueAtomicSize<E>();
-
- protected AtomicInteger _messageHeadSize = new AtomicInteger(0);
-
- @Override
- public int size()
- {
- return super.size() + _messageHeadSize.get();
- }
-
- public int headSize()
- {
- return _messageHeadSize.get();
- }
-
- @Override
- public E poll()
- {
- if (_messageHead.isEmpty())
- {
- return super.poll();
- }
- else
- {
- E e = _messageHead.poll();
-
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Providing item(" + e + ")from message head");
- }
-
- if (e != null)
- {
- _messageHeadSize.decrementAndGet();
- }
-
- return e;
- }
- }
-
- @Override
- public boolean remove(Object o)
- {
-
- if (_messageHead.isEmpty())
- {
- return super.remove(o);
- }
- else
- {
- if (_messageHead.remove(o))
- {
- _messageHeadSize.decrementAndGet();
-
- return true;
- }
-
- return super.remove(o);
- }
- }
-
- @Override
- public boolean removeAll(Collection<?> c)
- {
- if (_messageHead.isEmpty())
- {
- return super.removeAll(c);
- }
- else
- {
- // fixme this is super.removeAll but iterator here doesn't work
- // we need to be able to correctly decrement _messageHeadSize
- // boolean modified = false;
- // Iterator<?> e = iterator();
- // while (e.hasNext())
- // {
- // if (c.contains(e.next()))
- // {
- // e.remove();
- // modified = true;
- // _size.decrementAndGet();
- // }
- // }
- // return modified;
-
- throw new RuntimeException("Not implemented");
- }
- }
-
- @Override
- public boolean isEmpty()
- {
- return (_messageHead.isEmpty() && super.isEmpty());
- }
-
- @Override
- public void clear()
- {
- super.clear();
- _messageHead.clear();
- }
-
- @Override
- public boolean contains(Object o)
- {
- return _messageHead.contains(o) || super.contains(o);
- }
-
- @Override
- public boolean containsAll(Collection<?> o)
- {
- return _messageHead.containsAll(o) || super.containsAll(o);
- }
-
- @Override
- public E element()
- {
- if (_messageHead.isEmpty())
- {
- return super.element();
- }
- else
- {
- return _messageHead.element();
- }
- }
-
- @Override
- public E peek()
- {
- if (_messageHead.isEmpty())
- {
- return super.peek();
- }
- else
- {
- E o = _messageHead.peek();
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Peeking item (" + o + ") from message head");
- }
-
- return o;
- }
-
- }
-
- @Override
- public Iterator<E> iterator()
- {
- final Iterator<E> mainMessageIterator = super.iterator();
-
- return new Iterator<E>()
- {
- final Iterator<E> _headIterator = _messageHead.iterator();
- final Iterator<E> _mainIterator = mainMessageIterator;
-
- Iterator<E> last;
-
- public boolean hasNext()
- {
- return _headIterator.hasNext() || _mainIterator.hasNext();
- }
-
- public E next()
- {
- if (_headIterator.hasNext())
- {
- last = _headIterator;
-
- return _headIterator.next();
- }
- else
- {
- last = _mainIterator;
-
- return _mainIterator.next();
- }
- }
-
- public void remove()
- {
- last.remove();
- if(last == _mainIterator)
- {
- _size.decrementAndGet();
- }
- else
- {
- _messageHeadSize.decrementAndGet();
- }
- }
- };
- }
-
- @Override
- public boolean retainAll(Collection<?> c)
- {
- throw new RuntimeException("Not Implemented");
- }
-
- @Override
- public Object[] toArray()
- {
- throw new RuntimeException("Not Implemented");
- }
-
- public boolean pushHead(E o)
- {
- if (_logger.isDebugEnabled())
- {
- _logger.debug("Adding item(" + o + ") to head of queue");
- }
-
- if (_messageHead.offer(o))
- {
- _messageHeadSize.incrementAndGet();
-
- return true;
- }
-
- return false;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedQueueAtomicSize.java b/java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedQueueAtomicSize.java
deleted file mode 100644
index c4d7683a02..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedQueueAtomicSize.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.atomic.AtomicInteger;
-
-public class ConcurrentLinkedQueueAtomicSize<E> extends ConcurrentLinkedQueue<E>
-{
- AtomicInteger _size = new AtomicInteger(0);
-
- public int size()
- {
- return _size.get();
- }
-
- public boolean offer(E o)
- {
-
- if (super.offer(o))
- {
- _size.incrementAndGet();
- return true;
- }
-
- return false;
- }
-
- public E poll()
- {
- E e = super.poll();
-
- if (e != null)
- {
- _size.decrementAndGet();
- }
-
- return e;
- }
-
- @Override
- public boolean remove(Object o)
- {
- if (super.remove(o))
- {
- _size.decrementAndGet();
- return true;
- }
-
- return false;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedQueueNoSize.java b/java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedQueueNoSize.java
deleted file mode 100644
index 1f168345a1..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/ConcurrentLinkedQueueNoSize.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-import java.util.concurrent.ConcurrentLinkedQueue;
-
-public class ConcurrentLinkedQueueNoSize<E> extends ConcurrentLinkedQueue<E>
-{
- public int size()
- {
- if (isEmpty())
- {
- return 0;
- }
- else
- {
- return 1;
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/FileUtils.java b/java/common/src/main/java/org/apache/qpid/util/FileUtils.java
deleted file mode 100644
index 1a57af9bf7..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/FileUtils.java
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * FileUtils provides some simple helper methods for working with files. It follows the convention of wrapping all
- * checked exceptions as runtimes, so code using these methods is free of try-catch blocks but does not expect to
- * recover from errors.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Read a text file as a string.
- * <tr><td> Open a file or default resource as an input stream.
- * </table>
- */
-public class FileUtils
-{
- /**
- * Reads a text file as a string.
- *
- * @param filename The name of the file.
- *
- * @return The contents of the file.
- */
- public static String readFileAsString(String filename)
- {
- BufferedInputStream is = null;
-
- try
- {
- try
- {
- is = new BufferedInputStream(new FileInputStream(filename));
- }
- catch (FileNotFoundException e)
- {
- throw new RuntimeException(e);
- }
-
- return readStreamAsString(is);
- }
- finally
- {
- if (is != null)
- {
- try
- {
- is.close();
- }
- catch (IOException e)
- {
- throw new RuntimeException(e);
- }
- }
- }
- }
-
- /**
- * Reads a text file as a string.
- *
- * @param file The file.
- *
- * @return The contents of the file.
- */
- public static String readFileAsString(File file)
- {
- BufferedInputStream is = null;
-
- try
- {
- is = new BufferedInputStream(new FileInputStream(file));
- }
- catch (FileNotFoundException e)
- {
- throw new RuntimeException(e);
- }
-
- return readStreamAsString(is);
- }
-
- /**
- * Reads the contents of a reader, one line at a time until the end of stream is encountered, and returns all
- * together as a string.
- *
- * @param is The reader.
- *
- * @return The contents of the reader.
- */
- private static String readStreamAsString(BufferedInputStream is)
- {
- try
- {
- byte[] data = new byte[4096];
-
- StringBuffer inBuffer = new StringBuffer();
-
- String line;
- int read;
-
- while ((read = is.read(data)) != -1)
- {
- String s = new String(data, 0, read);
- inBuffer.append(s);
- }
-
- return inBuffer.toString();
- }
- catch (IOException e)
- {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Either opens the specified filename as an input stream, or uses the default resource loaded using the
- * specified class loader, if opening the file fails or no file name is specified.
- *
- * @param filename The name of the file to open.
- * @param defaultResource The name of the default resource on the classpath if the file cannot be opened.
- * @param cl The classloader to load the default resource with.
- *
- * @return An input stream for the file or resource, or null if one could not be opened.
- */
- public static InputStream openFileOrDefaultResource(String filename, String defaultResource, ClassLoader cl)
- {
- InputStream is = null;
-
- // Flag to indicate whether the default resource should be used. By default this is true, so that the default
- // is used when opening the file fails.
- boolean useDefault = true;
-
- // Try to open the file if one was specified.
- if (filename != null)
- {
- try
- {
- is = new BufferedInputStream(new FileInputStream(new File(filename)));
-
- // Clear the default flag because the file was succesfully opened.
- useDefault = false;
- }
- catch (FileNotFoundException e)
- {
- // Ignore this exception, the default will be used instead.
- }
- }
-
- // Load the default resource if a file was not specified, or if opening the file failed.
- if (useDefault)
- {
- is = cl.getResourceAsStream(defaultResource);
- }
-
- return is;
- }
-
- /**
- * Copies the specified source file to the specified destintaion file. If the destinationst file does not exist,
- * it is created.
- *
- * @param src The source file name.
- * @param dst The destination file name.
- */
- public static void copy(File src, File dst)
- {
- try
- {
- copyCheckedEx(src, dst);
- }
- catch (IOException e)
- {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Copies the specified source file to the specified destination file. If the destination file does not exist,
- * it is created.
- *
- * @param src The source file name.
- * @param dst The destination file name.
- * @throws IOException
- */
- public static void copyCheckedEx(File src, File dst) throws IOException
- {
- InputStream in = new FileInputStream(src);
- try
- {
- if (!dst.exists())
- {
- dst.createNewFile();
- }
-
- OutputStream out = new FileOutputStream(dst);
-
- try
- {
- // Transfer bytes from in to out
- byte[] buf = new byte[1024];
- int len;
- while ((len = in.read(buf)) > 0)
- {
- out.write(buf, 0, len);
- }
- }
- finally
- {
- out.close();
- }
- }
- finally
- {
- in.close();
- }
- }
-
- /*
- * Deletes a given file
- */
- public static boolean deleteFile(String filePath)
- {
- return delete(new File(filePath), false);
- }
-
- /*
- * Deletes a given empty directory
- */
- public static boolean deleteDirectory(String directoryPath)
- {
- File directory = new File(directoryPath);
-
- if (directory.isDirectory())
- {
- if (directory.listFiles().length == 0)
- {
- return delete(directory, true);
- }
- }
-
- return false;
- }
-
- /**
- * Delete a given file/directory,
- * A directory will always require the recursive flag to be set.
- * if a directory is specified and recursive set then delete the whole tree
- *
- * @param file the File object to start at
- * @param recursive boolean to recurse if a directory is specified.
- *
- * @return <code>true</code> if and only if the file or directory is
- * successfully deleted; <code>false</code> otherwise
- */
- public static boolean delete(File file, boolean recursive)
- {
- boolean success = true;
-
- if (file.isDirectory())
- {
- if (recursive)
- {
- File[] files = file.listFiles();
-
- // This can occur if the file is deleted outside the JVM
- if (files == null)
- {
- return false;
- }
-
- for (int i = 0; i < files.length; i++)
- {
- success = delete(files[i], true) && success;
- }
-
- return success && file.delete();
- }
-
- return false;
- }
-
- return file.delete();
- }
-
- public static class UnableToCopyException extends Exception
- {
- UnableToCopyException(String msg)
- {
- super(msg);
- }
- }
-
- public static void copyRecursive(File source, File dst) throws FileNotFoundException, UnableToCopyException
- {
-
- if (!source.exists())
- {
- throw new FileNotFoundException("Unable to copy '" + source.toString() + "' as it does not exist.");
- }
-
- if (dst.exists() && !dst.isDirectory())
- {
- throw new IllegalArgumentException("Unable to copy '" + source.toString() + "' to '" + dst + "' a file with same name exists.");
- }
-
- if (source.isFile())
- {
- copy(source, dst);
- }
-
- //else we have a source directory
- if (!dst.isDirectory() && !dst.mkdirs())
- {
- throw new UnableToCopyException("Unable to create destination directory");
- }
-
- for (File file : source.listFiles())
- {
- if (file.isFile())
- {
- copy(file, new File(dst.toString() + File.separator + file.getName()));
- }
- else
- {
- copyRecursive(file, new File(dst + File.separator + file.getName()));
- }
- }
-
- }
-
- /**
- * Checks the specified file for instances of the search string.
- *
- * @param file the file to search
- * @param search the search String
- *
- * @throws java.io.IOException
- * @return the list of matching entries
- */
- public static List<String> searchFile(File file, String search)
- throws IOException
- {
-
- List<String> results = new LinkedList<String>();
-
- BufferedReader reader = new BufferedReader(new FileReader(file));
- try
- {
- while (reader.ready())
- {
- String line = reader.readLine();
- if (line.contains(search))
- {
- results.add(line);
- }
- }
- }
- finally
- {
- reader.close();
- }
-
- return results;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/MessageQueue.java b/java/common/src/main/java/org/apache/qpid/util/MessageQueue.java
deleted file mode 100644
index b5efaa61b6..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/MessageQueue.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- *
- */
-package org.apache.qpid.util;
-
-import java.util.Queue;
-
-/**
- * Defines a queue that has a push operation to add an element to the head of the queue.
- *
- * @todo Seems like this may be pointless, the implementation uses this method to increment the message count
- * then calls offer. Why not simply override offer and drop this interface?
- */
-public interface MessageQueue<E> extends Queue<E>
-{
- /**
- * Inserts the specified element into this queue, if possible. When using queues that may impose insertion
- * restrictions (for example capacity bounds), method offer is generally preferable to method Collection.add(E),
- * which can fail to insert an element only by throwing an exception.
- *
- * @param o The element to insert.
- *
- * @return <tt>true</tt> if it was possible to add the element to this queue, else <tt>false</tt>
- */
- boolean pushHead(E o);
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/NameUUIDGen.java b/java/common/src/main/java/org/apache/qpid/util/NameUUIDGen.java
deleted file mode 100644
index e764c8536b..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/NameUUIDGen.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-import java.nio.ByteBuffer;
-import java.util.UUID;
-
-
-/**
- * NameUUIDGen
- *
- */
-
-public final class NameUUIDGen implements UUIDGen
-{
-
- private static final int WIDTH = 8;
-
- final private byte[] seed;
- final private ByteBuffer seedBuf;
- private long counter;
-
- public NameUUIDGen()
- {
- String namespace = UUID.randomUUID().toString();
- this.seed = new byte[namespace.length() + WIDTH];
- for (int i = WIDTH; i < seed.length; i++)
- {
- seed[i] = (byte) namespace.charAt(i - WIDTH);
- }
- this.seedBuf = ByteBuffer.wrap(seed);
- this.counter = 0;
- }
-
- public UUID generate()
- {
- seedBuf.putLong(0, counter++);
- return UUID.nameUUIDFromBytes(seed);
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/NetMatcher.java b/java/common/src/main/java/org/apache/qpid/util/NetMatcher.java
deleted file mode 100644
index 4c653e6ca0..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/NetMatcher.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/***********************************************************************
- * Copyright (c) 2000-2006 The Apache Software Foundation. *
- * All rights reserved. *
- * ------------------------------------------------------------------- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you *
- * may not use this file except in compliance with the License. You *
- * may obtain a copy of the License at: *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, software *
- * distributed under the License is distributed on an "AS IS" BASIS, *
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or *
- * implied. See the License for the specific language governing *
- * permissions and limitations under the License. *
- ***********************************************************************/
-
-package org.apache.qpid.util;
-
-import java.net.InetAddress;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-
-public class NetMatcher
-{
- private ArrayList networks;
-
- public void initInetNetworks(final Collection nets)
- {
- networks = new ArrayList();
- for (Iterator iter = nets.iterator(); iter.hasNext(); ) try
- {
- InetNetwork net = InetNetwork.getFromString((String) iter.next());
- if (!networks.contains(net)) networks.add(net);
- }
- catch (java.net.UnknownHostException uhe)
- {
- log("Cannot resolve address: " + uhe.getMessage());
- }
- networks.trimToSize();
- }
-
- public void initInetNetworks(final String[] nets)
- {
- networks = new ArrayList();
- for (int i = 0; i < nets.length; i++) try
- {
- InetNetwork net = InetNetwork.getFromString(nets[i]);
- if (!networks.contains(net)) networks.add(net);
- }
- catch (java.net.UnknownHostException uhe)
- {
- log("Cannot resolve address: " + uhe.getMessage());
- }
- networks.trimToSize();
- }
-
- public boolean matchInetNetwork(final String hostIP)
- {
- InetAddress ip = null;
-
- try
- {
- ip = InetAddress.getByName(hostIP);
- }
- catch (java.net.UnknownHostException uhe)
- {
- log("Cannot resolve address for " + hostIP + ": " + uhe.getMessage());
- }
-
- boolean sameNet = false;
-
- if (ip != null) for (Iterator iter = networks.iterator(); (!sameNet) && iter.hasNext(); )
- {
- InetNetwork network = (InetNetwork) iter.next();
- sameNet = network.contains(ip);
- }
- return sameNet;
- }
-
- public boolean matchInetNetwork(final InetAddress ip)
- {
- boolean sameNet = false;
-
- for (Iterator iter = networks.iterator(); (!sameNet) && iter.hasNext(); )
- {
- InetNetwork network = (InetNetwork) iter.next();
- sameNet = network.contains(ip);
- }
- return sameNet;
- }
-
- public NetMatcher()
- {
- }
-
- public NetMatcher(final String[] nets)
- {
- initInetNetworks(nets);
- }
-
- public NetMatcher(final Collection nets)
- {
- initInetNetworks(nets);
- }
-
- public String toString() {
- return networks.toString();
- }
-
- protected void log(String s) { }
-}
-
-class InetNetwork
-{
- /*
- * Implements network masking, and is compatible with RFC 1518 and
- * RFC 1519, which describe CIDR: Classless Inter-Domain Routing.
- */
-
- private InetAddress network;
- private InetAddress netmask;
-
- public InetNetwork(InetAddress ip, InetAddress netmask)
- {
- network = maskIP(ip, netmask);
- this.netmask = netmask;
- }
-
- public boolean contains(final String name) throws java.net.UnknownHostException
- {
- return network.equals(maskIP(InetAddress.getByName(name), netmask));
- }
-
- public boolean contains(final InetAddress ip)
- {
- return network.equals(maskIP(ip, netmask));
- }
-
- public String toString()
- {
- return network.getHostAddress() + "/" + netmask.getHostAddress();
- }
-
- public int hashCode()
- {
- return maskIP(network, netmask).hashCode();
- }
-
- public boolean equals(Object obj)
- {
- return (obj != null) && (obj instanceof InetNetwork) &&
- ((((InetNetwork)obj).network.equals(network)) && (((InetNetwork)obj).netmask.equals(netmask)));
- }
-
- public static InetNetwork getFromString(String netspec) throws java.net.UnknownHostException
- {
- if (netspec.endsWith("*")) netspec = normalizeFromAsterisk(netspec);
- else
- {
- int iSlash = netspec.indexOf('/');
- if (iSlash == -1) netspec += "/255.255.255.255";
- else if (netspec.indexOf('.', iSlash) == -1) netspec = normalizeFromCIDR(netspec);
- }
-
- return new InetNetwork(InetAddress.getByName(netspec.substring(0, netspec.indexOf('/'))),
- InetAddress.getByName(netspec.substring(netspec.indexOf('/') + 1)));
- }
-
- public static InetAddress maskIP(final byte[] ip, final byte[] mask)
- {
- try
- {
- return getByAddress(new byte[]
- {
- (byte) (mask[0] & ip[0]),
- (byte) (mask[1] & ip[1]),
- (byte) (mask[2] & ip[2]),
- (byte) (mask[3] & ip[3])
- });
- }
- catch(Exception _) {}
- {
- return null;
- }
- }
-
- public static InetAddress maskIP(final InetAddress ip, final InetAddress mask)
- {
- return maskIP(ip.getAddress(), mask.getAddress());
- }
-
- /*
- * This converts from an uncommon "wildcard" CIDR format
- * to "address + mask" format:
- *
- * * => 000.000.000.0/000.000.000.0
- * xxx.* => xxx.000.000.0/255.000.000.0
- * xxx.xxx.* => xxx.xxx.000.0/255.255.000.0
- * xxx.xxx.xxx.* => xxx.xxx.xxx.0/255.255.255.0
- */
- static private String normalizeFromAsterisk(final String netspec)
- {
- String[] masks = { "0.0.0.0/0.0.0.0", "0.0.0/255.0.0.0", "0.0/255.255.0.0", "0/255.255.255.0" };
- char[] srcb = netspec.toCharArray();
- int octets = 0;
- for (int i = 1; i < netspec.length(); i++) {
- if (srcb[i] == '.') octets++;
- }
- return (octets == 0) ? masks[0] : netspec.substring(0, netspec.length() -1 ).concat(masks[octets]);
- }
-
- /*
- * RFC 1518, 1519 - Classless Inter-Domain Routing (CIDR)
- * This converts from "prefix + prefix-length" format to
- * "address + mask" format, e.g. from xxx.xxx.xxx.xxx/yy
- * to xxx.xxx.xxx.xxx/yyy.yyy.yyy.yyy.
- */
- static private String normalizeFromCIDR(final String netspec)
- {
- final int bits = 32 - Integer.parseInt(netspec.substring(netspec.indexOf('/')+1));
- final int mask = (bits == 32) ? 0 : 0xFFFFFFFF - ((1 << bits)-1);
-
- return netspec.substring(0, netspec.indexOf('/') + 1) +
- Integer.toString(mask >> 24 & 0xFF, 10) + "." +
- Integer.toString(mask >> 16 & 0xFF, 10) + "." +
- Integer.toString(mask >> 8 & 0xFF, 10) + "." +
- Integer.toString(mask >> 0 & 0xFF, 10);
- }
-
- private static java.lang.reflect.Method getByAddress = null;
-
- static {
- try {
- Class inetAddressClass = Class.forName("java.net.InetAddress");
- Class[] parameterTypes = { byte[].class };
- getByAddress = inetAddressClass.getMethod("getByAddress", parameterTypes);
- } catch (Exception e) {
- getByAddress = null;
- }
- }
-
- private static InetAddress getByAddress(byte[] ip) throws java.net.UnknownHostException
- {
- InetAddress addr = null;
- if (getByAddress != null) try {
- addr = (InetAddress) getByAddress.invoke(null, new Object[] { ip });
- } catch (IllegalAccessException e) {
- } catch (java.lang.reflect.InvocationTargetException e) {
- }
-
- if (addr == null) {
- addr = InetAddress.getByName
- (
- Integer.toString(ip[0] & 0xFF, 10) + "." +
- Integer.toString(ip[1] & 0xFF, 10) + "." +
- Integer.toString(ip[2] & 0xFF, 10) + "." +
- Integer.toString(ip[3] & 0xFF, 10)
- );
- }
- return addr;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/PrettyPrintingUtils.java b/java/common/src/main/java/org/apache/qpid/util/PrettyPrintingUtils.java
deleted file mode 100644
index 93266f2486..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/PrettyPrintingUtils.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-/**
- * Contains pretty printing convenienve methods for producing formatted logging output, mostly for debugging purposes.
- *
- * <p><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * </table>
- *
- * @todo Drop this. There are already array pretty printing methods it java.utils.Arrays.
- */
-public class PrettyPrintingUtils
-{
- /**
- * Pretty prints an array of ints as a string.
- *
- * @param array The array to pretty print.
- *
- * @return The pretty printed string.
- */
- public static String printArray(int[] array)
- {
- StringBuilder result = new StringBuilder("[");
- for (int i = 0; i < array.length; i++)
- {
- result.append(array[i])
- .append((i < (array.length - 1)) ? ", " : "");
- }
-
- result.append(']');
-
- return result.toString();
- }
-
- /**
- * Pretty prints an array of strings as a string.
- *
- * @param array The array to pretty print.
- *
- * @return The pretty printed string.
- */
- public static String printArray(String[] array)
- {
- String result = "[";
- for (int i = 0; i < array.length; i++)
- {
- result += array[i];
- result += (i < (array.length - 1)) ? ", " : "";
- }
-
- result += "]";
-
- return result;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/RandomUUIDGen.java b/java/common/src/main/java/org/apache/qpid/util/RandomUUIDGen.java
deleted file mode 100644
index 60b402a105..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/RandomUUIDGen.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-import java.util.UUID;
-
-
-/**
- * RandomUUIDGen
- *
- */
-
-public final class RandomUUIDGen implements UUIDGen
-{
-
- public UUID generate()
- {
- return UUID.randomUUID();
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/Serial.java b/java/common/src/main/java/org/apache/qpid/util/Serial.java
deleted file mode 100644
index 8ad9d00f54..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/Serial.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.apache.qpid.util;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.util.Comparator;
-
-import org.apache.qpid.SerialException;
-
-/**
- * This class provides basic serial number comparisons as defined in
- * RFC 1982.
- */
-
-public class Serial
-{
-
- public static final Comparator<Integer> COMPARATOR = new Comparator<Integer>()
- {
- public int compare(Integer s1, Integer s2)
- {
- return Serial.compare(s1, s2);
- }
- };
-
- /**
- * Compares two numbers using serial arithmetic.
- *
- * @param s1 the first serial number
- * @param s2 the second serial number
- *
- * @return a negative integer, zero, or a positive integer as the
- * first argument is less than, equal to, or greater than the
- * second
- */
- public static final int compare(int s1, int s2)
- {
- return s1 - s2;
- }
-
- public static final boolean lt(int s1, int s2)
- {
- return compare(s1, s2) < 0;
- }
-
- public static final boolean le(int s1, int s2)
- {
- return compare(s1, s2) <= 0;
- }
-
- public static final boolean gt(int s1, int s2)
- {
- return compare(s1, s2) > 0;
- }
-
- public static final boolean ge(int s1, int s2)
- {
- return compare(s1, s2) >= 0;
- }
-
- public static final boolean eq(int s1, int s2)
- {
- return s1 == s2;
- }
-
- public static final int min(int s1, int s2)
- {
- if (lt(s1, s2))
- {
- return s1;
- }
- else
- {
- return s2;
- }
- }
-
- public static final int max(int s1, int s2)
- {
- if (gt(s1, s2))
- {
- return s1;
- }
- else
- {
- return s2;
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/Strings.java b/java/common/src/main/java/org/apache/qpid/util/Strings.java
deleted file mode 100644
index a6a8b8beb4..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/Strings.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-import java.io.UnsupportedEncodingException;
-
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Stack;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-
-/**
- * Strings
- *
- */
-
-public final class Strings
-{
-
- private static final byte[] EMPTY = new byte[0];
-
- private static final ThreadLocal<char[]> charbuf = new ThreadLocal<char[]>()
- {
- public char[] initialValue()
- {
- return new char[4096];
- }
- };
-
- public static final byte[] toUTF8(String str)
- {
- if (str == null)
- {
- return EMPTY;
- }
- else
- {
- final int size = str.length();
- char[] chars = charbuf.get();
- if (size > chars.length)
- {
- chars = new char[Math.max(size, 2*chars.length)];
- charbuf.set(chars);
- }
-
- str.getChars(0, size, chars, 0);
- final byte[] bytes = new byte[size];
- for (int i = 0; i < size; i++)
- {
- if (chars[i] > 127)
- {
- try
- {
- return str.getBytes("UTF-8");
- }
- catch (UnsupportedEncodingException e)
- {
- throw new RuntimeException(e);
- }
- }
-
- bytes[i] = (byte) chars[i];
- }
- return bytes;
- }
- }
-
- public static final String fromUTF8(byte[] bytes)
- {
- try
- {
- return new String(bytes, "UTF-8");
- }
- catch (UnsupportedEncodingException e)
- {
- throw new RuntimeException(e);
- }
- }
-
- private static final Pattern VAR = Pattern.compile("(?:\\$\\{([^\\}]*)\\})|(?:\\$(\\$))");
-
- public static interface Resolver
- {
- String resolve(String variable);
- }
-
- public static class MapResolver implements Resolver
- {
-
- private final Map<String,String> map;
-
- public MapResolver(Map<String,String> map)
- {
- this.map = map;
- }
-
- public String resolve(String variable)
- {
- return map.get(variable);
- }
- }
-
- public static class PropertiesResolver implements Resolver
- {
-
- private final Properties properties;
-
- public PropertiesResolver(Properties properties)
- {
- this.properties = properties;
- }
-
- public String resolve(String variable)
- {
- return properties.getProperty(variable);
- }
- }
-
- public static class ChainedResolver implements Resolver
- {
- private final Resolver primary;
- private final Resolver secondary;
-
- public ChainedResolver(Resolver primary, Resolver secondary)
- {
- this.primary = primary;
- this.secondary = secondary;
- }
-
- public String resolve(String variable)
- {
- String result = primary.resolve(variable);
- if (result == null)
- {
- result = secondary.resolve(variable);
- }
- return result;
- }
- }
-
- public static final Resolver SYSTEM_RESOLVER = new Resolver()
- {
- public String resolve(String variable)
- {
- String result = System.getProperty(variable);
- if (result == null)
- {
- result = System.getenv(variable);
- }
- return result;
- }
- };
-
- public static final String expand(String input)
- {
- return expand(input, SYSTEM_RESOLVER);
- }
-
- public static final String expand(String input, Resolver resolver)
- {
- return expand(input, resolver, new Stack<String>());
- }
-
- private static final String expand(String input, Resolver resolver, Stack<String> stack)
- {
- Matcher m = VAR.matcher(input);
- StringBuffer result = new StringBuffer();
- while (m.find())
- {
- String var = m.group(1);
- if (var == null)
- {
- String esc = m.group(2);
- if ("$".equals(esc))
- {
- m.appendReplacement(result, Matcher.quoteReplacement("$"));
- }
- else
- {
- throw new IllegalArgumentException(esc);
- }
- }
- else
- {
- m.appendReplacement(result, Matcher.quoteReplacement(resolve(var, resolver, stack)));
- }
- }
- m.appendTail(result);
- return result.toString();
- }
-
- private static final String resolve(String var, Resolver resolver, Stack<String> stack)
- {
- if (stack.contains(var))
- {
- throw new IllegalArgumentException
- (String.format("recursively defined variable: %s stack=%s", var,
- stack));
- }
-
- String result = resolver.resolve(var);
- if (result == null)
- {
- throw new IllegalArgumentException("no such variable: " + var);
- }
-
- stack.push(var);
- try
- {
- return expand(result, resolver, stack);
- }
- finally
- {
- stack.pop();
- }
- }
-
- public static final String join(String sep, Iterable items)
- {
- StringBuilder result = new StringBuilder();
-
- for (Object o : items)
- {
- if (result.length() > 0)
- {
- result.append(sep);
- }
- result.append(o.toString());
- }
-
- return result.toString();
- }
-
- public static final String join(String sep, Object[] items)
- {
- return join(sep, Arrays.asList(items));
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/UUIDGen.java b/java/common/src/main/java/org/apache/qpid/util/UUIDGen.java
deleted file mode 100644
index 3cfe5afdac..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/UUIDGen.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-
-import java.util.UUID;
-
-/**
- * UUIDGen
- *
- */
-
-public interface UUIDGen
-{
-
- public UUID generate();
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/UUIDs.java b/java/common/src/main/java/org/apache/qpid/util/UUIDs.java
deleted file mode 100644
index 4bf6b7f0a2..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/UUIDs.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-
-/**
- * UUIDs
- *
- */
-
-public final class UUIDs
-{
-
- public static final UUIDGen newGenerator()
- {
- return newGenerator(System.getProperty("qpid.uuid.generator",
- NameUUIDGen.class.getName()));
- }
-
- public static UUIDGen newGenerator(String name)
- {
- try
- {
- Class cls = Class.forName(name);
- return (UUIDGen) cls.newInstance();
- }
- catch (InstantiationException e)
- {
- throw new RuntimeException(e);
- }
- catch (IllegalAccessException e)
- {
- throw new RuntimeException(e);
- }
- catch (ClassNotFoundException e)
- {
- throw new RuntimeException(e);
- }
- }
-
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/concurrent/AlreadyUnblockedException.java b/java/common/src/main/java/org/apache/qpid/util/concurrent/AlreadyUnblockedException.java
deleted file mode 100644
index e0c0337898..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/concurrent/AlreadyUnblockedException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.apache.qpid.util.concurrent;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-/**
- * Used to signal that a data element and its producer cannot be requeued or sent an error message when using a
- * {@link BatchSynchQueue} because the producer has already been unblocked by an unblocking take on the queue.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Signal that an unblocking take has already occurred.
- * </table>
- */
-public class AlreadyUnblockedException extends RuntimeException
-{ }
diff --git a/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueue.java b/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueue.java
deleted file mode 100644
index 63d8f77edb..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueue.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.apache.qpid.util.concurrent;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.util.Collection;
-import java.util.concurrent.BlockingQueue;
-
-/**
- * BatchSynchQueue is an abstraction of the classic producer/consumer buffer pattern for thread interaction. In this
- * pattern threads can deposit data onto a buffer whilst other threads take data from the buffer and perform usefull
- * work with it. A BatchSynchQueue adds to this the possibility that producers can be blocked until their data is
- * consumed or until a consumer chooses to release the producer some time after consuming the data from the queue.
- *
- * <p>There are a number of possible advantages to using this technique when compared with having the producers
- * processing their own data:
- *
- * <ul>
- * <li>Data may be deposited asynchronously in the buffer allowing the producers to continue running.</li>
- * <li>Data may be deposited synchronously in the buffer so that producers wait until their data has been processed
- * before being allowed to continue.</li>
- * <li>Variable rates of production/consumption can be smoothed over by the buffer as it provides space in memory to
- * hold data between production and consumption.</li>
- * <li>Consumers may be able to batch data as they consume it leading to more efficient consumption over
- * individual data item consumption where latency associated with the consume operation can be ammortized.
- * For example, it may be possibly to ammortize the cost of a disk seek over many producers.</li>
- * <li>Data from seperate threads can be combined together in the buffer, providing a convenient way of spreading work
- * amongst many workers and gathering the results together again.</li>
- * <li>Different types of queue can be used to hold the buffer, resulting in different processing orders. For example,
- * lifo, fifo, priority heap, etc.</li>
- * </ul>
- *
- * <p/>The asynchronous type of producer/consumer buffers is already well supported by the java.util.concurrent package
- * (in Java 5) and there is also a synchronous queue implementation available there too. This interface extends the
- * blocking queue with some more methods for controlling a synchronous blocking queue. In particular it adds additional
- * take methods that can be used to take data from a queue without releasing producers, so that consumers have an
- * opportunity to confirm correct processing of the data before producers are released. It also adds a put method with
- * exceptions so that consumers can signal exception cases back to producers where there are errors in the data.
- *
- * <p/>This type of queue is usefull in situations where consumers can obtain an efficiency gain by batching data
- * from many threads but where synchronous handling of that data is neccessary because producers need to know that
- * their data has been processed before they continue. For example, sending a bundle of messages together, or writing
- * many records to disk at once, may result in improved performance but the originators of the messages or disk records
- * need confirmation that their data has really been sent or saved to disk.
- *
- * <p/>The consumer can put an element back onto the queue or send an error message to the elements producer using the
- * {@link SynchRecord} interface.
- *
- * <p/>The {@link #take()}, {@link #drainTo(java.util.Collection<? super E>)} and
- * {@link #drainTo(java.util.Collection<? super E>, int)} methods from {@link BlockingQueue} should behave as if they
- * have been called with unblock set to false. That is they take elements from the queue but leave the producers
- * blocked. These methods do not return collections of {@link SynchRecord}s so they do not supply an interface through
- * which errors or re-queuings can be applied. If these methods are used then the consumer must succesfully process
- * all the records it takes.
- *
- * <p/>The {@link #put} method should silently swallow any exceptions that consumers attempt to return to the caller.
- * In order to handle exceptions the {@link #tryPut} method must be used.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Handle synchronous puts, with possible exceptions.
- * <tr><td> Allow consumers to take many records from a queue in a batch.
- * <tr><td> Allow consumers to decide when to unblock synchronous producers.
- * </table>
- */
-public interface BatchSynchQueue<E> extends BlockingQueue<E>
-{
- /**
- * Tries a synchronous put into the queue. If a consumer encounters an exception condition whilst processing the
- * data that is put, then this is returned to the caller wrapped inside a {@link SynchException}.
- *
- * @param e The data element to put into the queue.
- *
- * @throws InterruptedException If the thread is interrupted whilst waiting to write to the queue or whilst waiting
- * on its entry in the queue being consumed.
- * @throws SynchException If a consumer encounters an error whilst processing the data element.
- */
- public void tryPut(E e) throws InterruptedException, SynchException;
-
- /**
- * Takes all available data items from the queue or blocks until some become available. The returned items
- * are wrapped in a {@link SynchRecord} which provides an interface to requeue them or send errors to their
- * producers, where the producers are still blocked.
- *
- * @param c The collection to drain the data items into.
- * @param unblock If set to <tt>true</tt> the producers for the taken items will be immediately unblocked.
- *
- * @return A count of the number of elements that were drained from the queue.
- */
- public SynchRef drainTo(Collection<SynchRecord<E>> c, boolean unblock);
-
- /**
- * Takes up to maxElements available data items from the queue or blocks until some become available. The returned
- * items are wrapped in a {@link SynchRecord} which provides an interface to requeue them or send errors to their
- * producers, where the producers are still blocked.
- *
- * @param c The collection to drain the data items into.
- * @param maxElements The maximum number of elements to drain.
- * @param unblock If set to <tt>true</tt> the producers for the taken items will be immediately unblocked.
- *
- * @return A count of the number of elements that were drained from the queue.
- */
- public SynchRef drainTo(Collection<SynchRecord<E>> c, int maxElements, boolean unblock);
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueueBase.java b/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueueBase.java
deleted file mode 100644
index 4564b1d686..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/concurrent/BatchSynchQueueBase.java
+++ /dev/null
@@ -1,834 +0,0 @@
-package org.apache.qpid.util.concurrent;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.ReentrantLock;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-
-/**
- * Synchronous/Asynchronous puts. Asynchronous is easiest, just wait till can write to queue and deposit data.
- * Synchronous is harder. Deposit data, but then must wait until deposited element/elements are taken before being
- * allowed to unblock and continue. Consumer needs some options here too. Can just get the data from the buffer and
- * allow any producers unblocked as a result to continue, or can get data but continue blocking while the data is
- * processed before sending a message to do the unblocking. Synch/Asynch mode to be controlled by a switch.
- * Unblocking/not unblocking during consumer processing to be controlled by the consumers calls.
- *
- * <p/>Implementing sub-classes only need to supply an implementation of a queue to produce a valid concrete
- * implementation of this. This queue is only accessed through the methods {@link #insert}, {@link #extract},
- * {@link #getBufferCapacity()}, {@link #peekAtBufferHead()}. An implementation can override these methods to implement
- * the buffer other than by a queue, for example, by using an array.
- *
- * <p/>Normal queue methods to work asynchronously.
- * <p/>Put, take and drain methods from the BlockingQueue interface work synchronously but unblock producers immediately
- * when their data is taken.
- * <p/>The additional put, take and drain methods from the BatchSynchQueue interface work synchronously and provide the
- * option to keep producers blocked until the consumer decides to release them.
- *
- * <p/>Removed take method that keeps producers blocked as it is pointless. Essentially it reduces this class to
- * synchronous processing of individual data items, which negates the point of the hand-off design. The efficiency
- * gain of the hand off design comes in being able to batch consume requests, ammortizing latency (such as caused by io)
- * accross many producers. The only advantage of the single blocking take method is that it did take advantage of the
- * queue ordering, which ma be usefull, for example to apply a priority ordering amongst producers. This is also an
- * advantage over the java.util.concurrent.SynchronousQueue which doesn't have a backing queue which can be used to
- * apply orderings. If a single item take is really needed can just use the drainTo method with a maximum of one item.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * </table>
- */
-public abstract class BatchSynchQueueBase<E> extends AbstractQueue<E> implements BatchSynchQueue<E>
-{
- /** Used for logging. */
- private static final Logger log = LoggerFactory.getLogger(BatchSynchQueueBase.class);
-
- /** Holds a reference to the queue implementation that holds the buffer. */
- Queue<SynchRecordImpl<E>> buffer;
-
- /** Holds the number of items in the queue */
- private int count;
-
- /** Main lock guarding all access */
- private ReentrantLock lock;
-
- /** Condition for waiting takes */
- private Condition notEmpty;
-
- /** Condition for waiting puts */
- private Condition notFull;
-
- /**
- * Creates a batch synch queue without fair thread scheduling.
- */
- public BatchSynchQueueBase()
- {
- this(false);
- }
-
- /**
- * Ensures that the underlying buffer implementation is created.
- *
- * @param fair <tt>true</tt> if fairness is to be applied to threads waiting to access the buffer.
- */
- public BatchSynchQueueBase(boolean fair)
- {
- buffer = this.createQueue();
-
- // Create the buffer lock with the fairness flag set accordingly.
- lock = new ReentrantLock(fair);
-
- // Create the non-empty and non-full condition monitors on the buffer lock.
- notEmpty = lock.newCondition();
- notFull = lock.newCondition();
- }
-
- /**
- * Returns an iterator over the elements contained in this collection.
- *
- * @return An iterator over the elements contained in this collection.
- */
- public Iterator<E> iterator()
- {
- throw new RuntimeException("Not implemented.");
- }
-
- /**
- * Returns the number of elements in this collection. If the collection contains more than
- * <tt>Integer.MAX_VALUE</tt> elements, returns <tt>Integer.MAX_VALUE</tt>.
- *
- * @return The number of elements in this collection.
- */
- public int size()
- {
- final ReentrantLock lock = this.lock;
- lock.lock();
-
- try
- {
- return count;
- }
- finally
- {
- lock.unlock();
- }
- }
-
- /**
- * Inserts the specified element into this queue, if possible. When using queues that may impose insertion
- * restrictions (for example capacity bounds), method <tt>offer</tt> is generally preferable to method
- * {@link java.util.Collection#add}, which can fail to insert an element only by throwing an exception.
- *
- * @param e The element to insert.
- *
- * @return <tt>true</tt> if it was possible to add the element to this queue, else <tt>false</tt>
- */
- public boolean offer(E e)
- {
- if (e == null)
- {
- throw new NullPointerException();
- }
-
- final ReentrantLock lock = this.lock;
- lock.lock();
-
- try
- {
- return insert(e, false);
- }
- finally
- {
- lock.unlock();
- }
- }
-
- /**
- * Inserts the specified element into this queue, waiting if necessary up to the specified wait time for space to
- * become available.
- *
- * @param e The element to add.
- * @param timeout How long to wait before giving up, in units of <tt>unit</tt>
- * @param unit A <tt>TimeUnit</tt> determining how to interpret the <tt>timeout</tt> parameter.
- *
- * @return <tt>true</tt> if successful, or <tt>false</tt> if the specified waiting time elapses before space is
- * available.
- *
- * @throws InterruptedException If interrupted while waiting.
- * @throws NullPointerException If the specified element is <tt>null</tt>.
- */
- public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
- {
- if (e == null)
- {
- throw new NullPointerException();
- }
-
- final ReentrantLock lock = this.lock;
- lock.lockInterruptibly();
-
- long nanos = unit.toNanos(timeout);
-
- try
- {
- do
- {
- if (insert(e, false))
- {
- return true;
- }
-
- try
- {
- nanos = notFull.awaitNanos(nanos);
- }
- catch (InterruptedException ie)
- {
- notFull.signal(); // propagate to non-interrupted thread
- throw ie;
- }
- }
- while (nanos > 0);
-
- return false;
- }
- finally
- {
- lock.unlock();
- }
- }
-
- /**
- * Retrieves and removes the head of this queue, or <tt>null</tt> if this queue is empty.
- *
- * @return The head of this queue, or <tt>null</tt> if this queue is empty.
- */
- public E poll()
- {
- final ReentrantLock lock = this.lock;
-
- lock.lock();
- try
- {
- if (count == 0)
- {
- return null;
- }
-
- E x = extract(true, true).getElement();
-
- return x;
- }
- finally
- {
- lock.unlock();
- }
- }
-
- /**
- * Retrieves and removes the head of this queue, waiting if necessary up to the specified wait time if no elements
- * are present on this queue.
- *
- * @param timeout How long to wait before giving up, in units of <tt>unit</tt>.
- * @param unit A <tt>TimeUnit</tt> determining how to interpret the <tt>timeout</tt> parameter.
- *
- * @return The head of this queue, or <tt>null</tt> if the specified waiting time elapses before an element is present.
- *
- * @throws InterruptedException If interrupted while waiting.
- */
- public E poll(long timeout, TimeUnit unit) throws InterruptedException
- {
- final ReentrantLock lock = this.lock;
- lock.lockInterruptibly();
- try
- {
- long nanos = unit.toNanos(timeout);
-
- do
- {
- if (count != 0)
- {
- E x = extract(true, true).getElement();
-
- return x;
- }
-
- try
- {
- nanos = notEmpty.awaitNanos(nanos);
- }
- catch (InterruptedException ie)
- {
- notEmpty.signal(); // propagate to non-interrupted thread
- throw ie;
- }
- }
- while (nanos > 0);
-
- return null;
- }
- finally
- {
- lock.unlock();
- }
- }
-
- /**
- * Retrieves, but does not remove, the head of this queue, returning <tt>null</tt> if this queue is empty.
- *
- * @return The head of this queue, or <tt>null</tt> if this queue is empty.
- */
- public E peek()
- {
- final ReentrantLock lock = this.lock;
- lock.lock();
-
- try
- {
- return peekAtBufferHead();
- }
- finally
- {
- lock.unlock();
- }
- }
-
- /**
- * Returns the number of elements that this queue can ideally (in the absence of memory or resource constraints)
- * accept without blocking, or <tt>Integer.MAX_VALUE</tt> if there is no intrinsic limit.
- *
- * <p>Note that you <em>cannot</em> always tell if an attempt to <tt>add</tt> an element will succeed by
- * inspecting <tt>remainingCapacity</tt> because it may be the case that another thread is about to <tt>put</tt>
- * or <tt>take</tt> an element.
- *
- * @return The remaining capacity.
- */
- public int remainingCapacity()
- {
- final ReentrantLock lock = this.lock;
- lock.lock();
-
- try
- {
- return getBufferCapacity() - count;
- }
- finally
- {
- lock.unlock();
- }
- }
-
- /**
- * Adds the specified element to this queue, waiting if necessary for space to become available.
- *
- * <p/>This method delegated to {@link #tryPut} which can raise {@link SynchException}s. If any are raised
- * this method silently ignores them. Use the {@link #tryPut} method directly if you want to catch these
- * exceptions.
- *
- * @param e The element to add.
- *
- * @throws InterruptedException If interrupted while waiting.
- */
- public void put(E e) throws InterruptedException
- {
- try
- {
- tryPut(e);
- }
- catch (SynchException ex)
- {
- // This exception is deliberately ignored. See the method comment for information about this.
- }
- }
-
- /**
- * Tries a synchronous put into the queue. If a consumer encounters an exception condition whilst processing the
- * data that is put, then this is returned to the caller wrapped inside a {@link SynchException}.
- *
- * @param e The data element to put into the queue. Cannot be null.
- *
- * @throws InterruptedException If the thread is interrupted whilst waiting to write to the queue or whilst waiting
- * on its entry in the queue being consumed.
- * @throws SynchException If a consumer encounters an error whilst processing the data element.
- */
- public void tryPut(E e) throws InterruptedException, SynchException
- {
- if (e == null)
- {
- throw new NullPointerException();
- }
-
- // final Queue<E> items = this.buffer;
- final ReentrantLock lock = this.lock;
- lock.lockInterruptibly();
-
- try
- {
- while (count == getBufferCapacity())
- {
- // Release the lock and wait until the queue is not full.
- notFull.await();
- }
- }
- catch (InterruptedException ie)
- {
- notFull.signal(); // propagate to non-interrupted thread
- throw ie;
- }
-
- // There is room in the queue so insert must succeed. Insert into the queu, release the lock and block
- // the producer until its data is taken.
- insert(e, true);
- }
-
- /**
- * Retrieves and removes the head of this queue, waiting if no elements are present on this queue.
- * Any producer that has its data element taken by this call will be immediately unblocked. To keep the
- * producer blocked whilst taking just a single item, use the
- * {@link #drainTo(java.util.Collection<org.apache.qpid.util.concurrent.SynchRecord<E>>, int, boolean)}
- * method. There is no take method to do that because there is not usually any advantage in a synchronous hand
- * off design that consumes data one item at a time. It is normal to consume data in chunks to ammortize consumption
- * latencies accross many producers where possible.
- *
- * @return The head of this queue.
- *
- * @throws InterruptedException if interrupted while waiting.
- */
- public E take() throws InterruptedException
- {
- final ReentrantLock lock = this.lock;
- lock.lockInterruptibly();
-
- try
- {
- try
- {
- while (count == 0)
- {
- // Release the lock and wait until the queue becomes non-empty.
- notEmpty.await();
- }
- }
- catch (InterruptedException ie)
- {
- notEmpty.signal(); // propagate to non-interrupted thread
- throw ie;
- }
-
- // There is data in the queue so extraction must succeed. Notify any waiting threads that the queue is
- // not full, and unblock the producer that owns the data item that is taken.
- E x = extract(true, true).getElement();
-
- return x;
- }
- finally
- {
- lock.unlock();
- }
- }
-
- /**
- * Removes all available elements from this queue and adds them into the given collection. This operation may be
- * more efficient than repeatedly polling this queue. A failure encountered while attempting to <tt>add</tt> elements
- * to collection <tt>c</tt> may result in elements being in neither, either or both collections when the associated
- * exception is thrown. Attempts to drain a queue to itself result in <tt>IllegalArgumentException</tt>. Further,
- * the behavior of this operation is undefined if the specified collection is modified while the operation is in
- * progress.
- *
- * @param objects The collection to transfer elements into.
- *
- * @return The number of elements transferred.
- *
- * @throws NullPointerException If objects is null.
- * @throws IllegalArgumentException If objects is this queue.
- */
- public int drainTo(Collection<? super E> objects)
- {
- return drainTo(objects, -1);
- }
-
- /**
- * Removes at most the given number of available elements from this queue and adds them into the given collection.
- * A failure encountered while attempting to <tt>add</tt> elements to collection <tt>c</tt> may result in elements
- * being in neither, either or both collections when the associated exception is thrown. Attempts to drain a queue
- * to itself result in <tt>IllegalArgumentException</tt>. Further, the behavior of this operation is undefined if
- * the specified collection is modified while the operation is in progress.
- *
- * @param objects The collection to transfer elements into.
- * @param maxElements The maximum number of elements to transfer. If this is -1 then that is interpreted as meaning
- * all elements.
- *
- * @return The number of elements transferred.
- *
- * @throws NullPointerException If c is null.
- * @throws IllegalArgumentException If c is this queue.
- */
- public int drainTo(Collection<? super E> objects, int maxElements)
- {
- if (objects == null)
- {
- throw new NullPointerException();
- }
-
- if (objects == this)
- {
- throw new IllegalArgumentException();
- }
-
- // final Queue<E> items = this.buffer;
- final ReentrantLock lock = this.lock;
- lock.lock();
-
- try
- {
- int n = 0;
-
- for (int max = ((maxElements >= count) || (maxElements < 0)) ? count : maxElements; n < max; n++)
- {
- // Take items from the queue, do unblock the producers, but don't send not full signals yet.
- objects.add(extract(true, false).getElement());
- }
-
- if (n > 0)
- {
- // count -= n;
- notFull.signalAll();
- }
-
- return n;
- }
- finally
- {
- lock.unlock();
- }
- }
-
- /**
- * Takes all available data items from the queue or blocks until some become available. The returned items
- * are wrapped in a {@link SynchRecord} which provides an interface to requeue them or send errors to their
- * producers, where the producers are still blocked.
- *
- * @param c The collection to drain the data items into.
- * @param unblock If set to <tt>true</tt> the producers for the taken items will be immediately unblocked.
- *
- * @return A count of the number of elements that were drained from the queue.
- */
- public SynchRef drainTo(Collection<SynchRecord<E>> c, boolean unblock)
- {
- return drainTo(c, -1, unblock);
- }
-
- /**
- * Takes up to maxElements available data items from the queue or blocks until some become available. The returned
- * items are wrapped in a {@link SynchRecord} which provides an interface to requeue them or send errors to their
- * producers, where the producers are still blocked.
- *
- * @param coll The collection to drain the data items into.
- * @param maxElements The maximum number of elements to drain.
- * @param unblock If set to <tt>true</tt> the producers for the taken items will be immediately unblocked.
- *
- * @return A count of the number of elements that were drained from the queue.
- */
- public SynchRef drainTo(Collection<SynchRecord<E>> coll, int maxElements, boolean unblock)
- {
- if (coll == null)
- {
- throw new NullPointerException();
- }
-
- // final Queue<E> items = this.buffer;
- final ReentrantLock lock = this.lock;
- lock.lock();
-
- try
- {
- int n = 0;
-
- for (int max = ((maxElements >= count) || (maxElements < 0)) ? count : maxElements; n < max; n++)
- {
- // Extract the next record from the queue, don't signall the not full condition yet and release
- // producers depending on whether the caller wants to or not.
- coll.add(extract(false, unblock));
- }
-
- if (n > 0)
- {
- // count -= n;
- notFull.signalAll();
- }
-
- return new SynchRefImpl(n, coll);
- }
- finally
- {
- lock.unlock();
- }
- }
-
- /**
- * This abstract method should be overriden to return an empty queue. Different implementations of producer
- * consumer buffers can control the order in which data is accessed using different queue implementations.
- * This method allows the type of queue to be abstracted out of this class and to be supplied by concrete
- * implementations.
- *
- * @return An empty queue.
- */
- protected abstract <T> Queue<T> createQueue();
-
- /**
- * Insert element into the queue, then possibly signal that the queue is not empty and block the producer
- * on the element until permission to procede is given.
- *
- * <p/>If the producer is to be blocked then the lock must be released first, otherwise no other process
- * will be able to get access to the queue. Hence, unlock and block are always set together.
- *
- * <p/>Call only when holding the global lock.
- *
- * @param unlockAndBlock <tt>true</tt>If the global queue lock should be released and the producer should be blocked.
- *
- * @return <tt>true</tt> if the operation succeeded, <tt>false</tt> otherwise. If the result is <tt>true</tt> this
- * method may not return straight away, but only after the producer is unblocked by having its data
- * consumed if the unlockAndBlock flag is set. In the false case the method will return straight away, no
- * matter what value the unlockAndBlock flag has, leaving the global lock on.
- */
- protected boolean insert(E x, boolean unlockAndBlock)
- {
- // Create a new record for the data item.
- SynchRecordImpl<E> record = new SynchRecordImpl<E>(x);
-
- boolean result = buffer.offer(record);
-
- if (result)
- {
- count++;
-
- // Tell any waiting consumers that the queue is not empty.
- notEmpty.signal();
-
- if (unlockAndBlock)
- {
- // Allow other threads to read/write the queue.
- lock.unlock();
-
- // Wait until a consumer takes this data item.
- record.waitForConsumer();
- }
-
- return true;
- }
- else
- {
- return false;
- }
- }
-
- /**
- * Extract element at current take position, advance, and signal.
- *
- * <p/>Call only when holding lock.
- */
- protected SynchRecordImpl<E> extract(boolean unblock, boolean signal)
- {
- SynchRecordImpl<E> result = buffer.remove();
- count--;
-
- if (signal)
- {
- notFull.signal();
- }
-
- if (unblock)
- {
- result.releaseImmediately();
- }
-
- return result;
- }
-
- /**
- * Get the capacity of the buffer. If the buffer has no maximum capacity then Integer.MAX_VALUE is returned.
- *
- * <p/>Call only when holding lock.
- *
- * @return The maximum capacity of the buffer.
- */
- protected int getBufferCapacity()
- {
- if (buffer instanceof Capacity)
- {
- return ((Capacity) buffer).getCapacity();
- }
- else
- {
- return Integer.MAX_VALUE;
- }
- }
-
- /**
- * Return the head element from the buffer.
- *
- * <p/>Call only when holding lock.
- *
- * @return The head element from the buffer.
- */
- protected E peekAtBufferHead()
- {
- return buffer.peek().getElement();
- }
-
- public class SynchRefImpl implements SynchRef
- {
- /** Holds the number of synch records associated with this reference. */
- int numRecords;
-
- /** Holds a reference to the collection of synch records managed by this. */
- Collection<SynchRecord<E>> records;
-
- public SynchRefImpl(int n, Collection<SynchRecord<E>> records)
- {
- this.numRecords = n;
- this.records = records;
- }
-
- public int getNumRecords()
- {
- return numRecords;
- }
-
- /**
- * Any producers that have had their data elements taken from the queue but have not been unblocked are unblocked
- * when this method is called. The exception to this is producers that have had their data put back onto the queue
- * by a consumer. Producers that have had exceptions for their data items registered by consumers will be unblocked
- * but will not return from their put call normally, but with an exception instead.
- */
- public void unblockProducers()
- {
- log.debug("public void unblockProducers(): called");
-
- if (records != null)
- {
- for (SynchRecord<E> record : records)
- {
- // This call takes account of items that have already been released, are to be requeued or are in
- // error.
- record.releaseImmediately();
- }
- }
-
- records = null;
- }
- }
-
- /**
- * A SynchRecordImpl is used by a {@link BatchSynchQueue} to pair together a producer with its data. This allows
- * the producer of data to be identified so that it can be unblocked when its data is consumed or sent errors when
- * its data cannot be consumed.
- */
- public class SynchRecordImpl<E> implements SynchRecord<E>
- {
- /** A boolean latch that determines when the producer for this data item will be allowed to continue. */
- BooleanLatch latch = new BooleanLatch();
-
- /** The data element associated with this item. */
- E element;
-
- /**
- * Create a new synch record.
- *
- * @param e The data element that the record encapsulates.
- */
- public SynchRecordImpl(E e)
- {
- // Keep the data element.
- element = e;
- }
-
- /**
- * Waits until the producer is given permission to proceded by a consumer.
- */
- public void waitForConsumer()
- {
- latch.await();
- }
-
- /**
- * Gets the data element contained by this record.
- *
- * @return The data element contained by this record.
- */
- public E getElement()
- {
- return element;
- }
-
- /**
- * Immediately releases the producer of this data record. Consumers can bring the synchronization time of
- * producers to a minimum by using this method to release them at the earliest possible moment when batch
- * consuming records from sychronized producers.
- */
- public void releaseImmediately()
- {
- // Check that the record has not already been released, is in error or is to be requeued.
- latch.signal();
-
- // Propagate errors to the producer.
-
- // Requeue items to be requeued.
- }
-
- /**
- * Tells the synch queue to put this element back onto the queue instead of releasing its producer.
- * The element is not requeued immediately but upon calling the {@link SynchRef#unblockProducers()} method or
- * the {@link #releaseImmediately()} method.
- *
- * <p/>This method will raise a runtime exception {@link AlreadyUnblockedException} if the producer for this
- * element has already been unblocked.
- */
- public void reQueue()
- {
- throw new RuntimeException("Not implemented.");
- }
-
- /**
- * Tells the synch queue to raise an exception with this elements producer. The exception is not raised
- * immediately but upon calling the {@link SynchRef#unblockProducers()} method or the
- * {@link #releaseImmediately()} method. The exception will be wrapped in a {@link SynchException} before it is
- * raised on the producer.
- *
- * <p/>This method is unusual in that it accepts an exception as an argument. This is non-standard but is used
- * because the exception is to be passed onto a different thread.
- *
- * <p/>This method will raise a runtime exception {@link AlreadyUnblockedException} if the producer for this
- * element has already been unblocked.
- *
- * @param e The exception to raise on the producer.
- */
- public void inError(Exception e)
- {
- throw new RuntimeException("Not implemented.");
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/concurrent/BooleanLatch.java b/java/common/src/main/java/org/apache/qpid/util/concurrent/BooleanLatch.java
deleted file mode 100644
index 0e4a07594f..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/concurrent/BooleanLatch.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package org.apache.qpid.util.concurrent;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.util.concurrent.locks.AbstractQueuedSynchronizer;
-
-/**
- * A BooleanLatch is like a set of traffic lights, where threads can wait at a red light until another thread gives
- * the green light. When threads arrive at the latch it is initially red. They queue up until the green signal is
- * given, at which point they can all acquire the latch in shared mode and continue to run concurrently. Once the latch
- * is signalled it cannot be reset to red again.
- *
- * <p/> The latch uses a {@link java.util.concurrent.locks.AbstractQueuedSynchronizer} to implement its synchronization.
- * This has two internal states, 0 which means that the latch is blocked, and 1 which means that the latch is open.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Block threads until a go signal is given.
- * </table>
- *
- * @todo Might be better to use a countdown latch to count down from 1. Its await method can throw interrupted
- * exception which makes the possibility of interruption more explicit, and provides a reminder to recheck the
- * latch condition before continuing.
- */
-public class BooleanLatch
-{
- /** Holds the synchronizer that provides the thread queueing synchronization. */
- private final Sync sync = new Sync();
-
- /**
- * Tests whether or not the latch has been signalled, that is to say that, the light is green.
- *
- * <p/>This method is non-blocking.
- *
- * @return <tt>true</tt> if the latch may be acquired; the light is green.
- */
- public boolean isSignalled()
- {
- return sync.isSignalled();
- }
-
- /**
- * Waits on the latch until the signal is given and the light is green. If the light is already green then the
- * latch will be acquired and the thread will not have to wait.
- *
- * <p/>This method will block until the go signal is given or the thread is otherwise interrupted. Before carrying
- * out any processing threads that return from this method should confirm that the go signal has really been given
- * on this latch by calling the {@link #isSignalled()} method.
- */
- public void await()
- {
- sync.acquireShared(1);
- }
-
- /**
- * Releases any threads currently waiting on the latch. This flips the light to green allowing any threads that
- * were waiting for this condition to now run.
- *
- * <p/>This method is non-blocking.
- */
- public void signal()
- {
- sync.releaseShared(1);
- }
-
- /**
- * Implements a thread queued synchronizer. The internal state 0 means that the queue is blocked and the internl
- * state 1 means that the queue is released and that all waiting threads can acquire the synchronizer in shared
- * mode.
- */
- private static class Sync extends AbstractQueuedSynchronizer
- {
- /**
- * Attempts to acquire this synchronizer in shared mode. It may be acquired once it has been released.
- *
- * @param ignore This parameter is ignored.
- *
- * @return 1 if the shared acquisition succeeds and -1 if it fails.
- */
- protected int tryAcquireShared(int ignore)
- {
- return isSignalled() ? 1 : -1;
- }
-
- /**
- * Releases the synchronizer, setting its internal state to 1.
- *
- * @param ignore This parameter is ignored.
- *
- * @return <tt>true</tt> always.
- */
- protected boolean tryReleaseShared(int ignore)
- {
- setState(1);
-
- return true;
- }
-
- /**
- * Tests if the synchronizer is signalled. It is signalled when its internal state it 1.
- *
- * @return <tt>true</tt> if the internal state is 1, <tt>false</tt> otherwise.
- */
- boolean isSignalled()
- {
- return getState() != 0;
- }
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/concurrent/Capacity.java b/java/common/src/main/java/org/apache/qpid/util/concurrent/Capacity.java
deleted file mode 100644
index a97ce0e172..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/concurrent/Capacity.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.apache.qpid.util.concurrent;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-/**
- * An interface exposed by data structures that have a maximum capacity.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Report the maximum capacity.
- * </table>
- */
-public interface Capacity
-{
- public int getCapacity();
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchBuffer.java b/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchBuffer.java
deleted file mode 100644
index bc63eb0353..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchBuffer.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.apache.qpid.util.concurrent;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.util.Queue;
-
-/**
- * SynchBuffer completes the {@link BatchSynchQueueBase} abstract class by providing an implementation of the underlying
- * queue as an array. This uses FIFO ordering for the queue but restricts the maximum size of the queue to a fixed
- * amount. It also has the advantage that, as the buffer does not grow and shrink dynamically, memory for the buffer
- * is allocated up front and does not create garbage during the operation of the queue.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Provide array based FIFO queue to create a batch synched queue around.
- * </table>
- *
- * @todo Write an array based buffer implementation that implements Queue.
- */
-public class SynchBuffer<E> extends BatchSynchQueueBase<E>
-{
- /**
- * Returns an empty queue, implemented as an array.
- *
- * @return An empty queue, implemented as an array.
- */
- protected <T> Queue<T> createQueue()
- {
- throw new RuntimeException("Not implemented.");
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchException.java b/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchException.java
deleted file mode 100644
index 99a83f96cd..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchException.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.apache.qpid.util.concurrent;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-/**
- * SynchException is used to encapsulate exceptions with the data elements that caused them in order to send exceptions
- * back from the consumers of a {@link BatchSynchQueue} to producers. The underlying exception should be retrieved from
- * the {@link #getCause} method.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Encapsulate a data element and exception.
- * </table>
- */
-public class SynchException extends Exception
-{
- /** Holds the data element that is in error. */
- Object element;
-
- /**
- * Creates a new BaseApplicationException object.
- *
- * @param message The exception message.
- * @param cause The underlying throwable cause. This may be null.
- */
- public SynchException(String message, Throwable cause, Object element)
- {
- super(message, cause);
-
- // Keep the data element that was in error.
- this.element = element;
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchQueue.java b/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchQueue.java
deleted file mode 100644
index 95833f398a..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchQueue.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.apache.qpid.util.concurrent;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.util.LinkedList;
-import java.util.Queue;
-
-/**
- * SynchQueue completes the {@link BatchSynchQueueBase} abstract class by providing an implementation of the underlying
- * queue as a linked list. This uses FIFO ordering for the queue and allows the queue to grow to accomodate more
- * elements as needed.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Provide linked list FIFO queue to create a batch synched queue around.
- * </table>
- */
-public class SynchQueue<E> extends BatchSynchQueueBase<E>
-{
- /**
- * Returns an empty queue, implemented as a linked list.
- *
- * @return An empty queue, implemented as a linked list.
- */
- protected <T> Queue<T> createQueue()
- {
- return new LinkedList<T>();
- }
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRecord.java b/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRecord.java
deleted file mode 100644
index fd740c20cd..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRecord.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.apache.qpid.util.concurrent;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-/**
- * SynchRecord associates a data item from a {@link BatchSynchQueue} with its producer. This enables the data item data
- * item to be put back on the queue without unblocking its producer, or to send exceptions to the producer.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Get the underlying data element.
- * <tr><td> Put the data element back on the queue without unblocking its producer.
- * <tr><td> Send and exception to the data elements producer.
- * </table>
- */
-public interface SynchRecord<E>
-{
- /**
- * Gets the data element contained by this record.
- *
- * @return The data element contained by this record.
- */
- public E getElement();
-
- /**
- * Tells the synch queue to put this element back onto the queue instead of releasing its producer.
- * The element is not requeued immediately but upon calling the {@link SynchRef#unblockProducers()} method.
- *
- * <p/>This method will raise a runtime exception {@link AlreadyUnblockedException} if the producer for this element
- * has already been unblocked.
- */
- public void reQueue();
-
- /**
- * Immediately releases the producer of this data record. Consumers can bring the synchronization time of
- * producers to a minimum by using this method to release them at the earliest possible moment when batch
- * consuming records from sychronized producers.
- */
- public void releaseImmediately();
-
- /**
- * Tells the synch queue to raise an exception with this elements producer. The exception is not raised immediately
- * but upon calling the {@link SynchRef#unblockProducers()} method. The exception will be wrapped in a
- * {@link SynchException} before it is raised on the producer.
- *
- * <p/>This method is unusual in that it accepts an exception as an argument. This is non-standard but is used
- * because the exception is to be passed onto a different thread.
- *
- * <p/>This method will raise a runtime exception {@link AlreadyUnblockedException} if the producer for this element
- * has already been unblocked.
- *
- * @param e The exception to raise on the producer.
- */
- public void inError(Exception e);
-}
diff --git a/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRef.java b/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRef.java
deleted file mode 100644
index efe2344c06..0000000000
--- a/java/common/src/main/java/org/apache/qpid/util/concurrent/SynchRef.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.apache.qpid.util.concurrent;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-/**
- * A SynchRef is an interface which is returned from the synchronous take and drain methods of {@link BatchSynchQueue},
- * allowing call-backs to be made against the synchronizing strucutre. It allows the consumer to communicate when it
- * wants producers that have their data taken to be unblocked.
- *
- * <p/><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities
- * <tr><td> Report number of records returned by a taking operation.
- * <tr><td> Provide call-back to release producers of taken records.
- * </table>
- */
-public interface SynchRef
-{
- /**
- * Reports the number of records taken by the take or drain operation.
- *
- * @return The number of records taken by the take or drain operation.
- */
- public int getNumRecords();
-
- /**
- * Any producers that have had their data elements taken from the queue but have not been unblocked are
- * unblocked when this method is called. The exception to this is producers that have had their data put back
- * onto the queue by a consumer. Producers that have had exceptions for their data items registered by consumers
- * will be unblocked but will not return from their put call normally, but with an exception instead.
- */
- public void unblockProducers();
-}
diff --git a/java/common/src/test/java/org/apache/mina/SocketIOTest/IOWriterClient.java b/java/common/src/test/java/org/apache/mina/SocketIOTest/IOWriterClient.java
deleted file mode 100644
index b93dc46741..0000000000
--- a/java/common/src/test/java/org/apache/mina/SocketIOTest/IOWriterClient.java
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- *
- * Copyright (c) 2006 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.mina.SocketIOTest;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.CloseFuture;
-import org.apache.mina.common.ConnectFuture;
-import org.apache.mina.common.IoConnector;
-import org.apache.mina.common.IoFilterChain;
-import org.apache.mina.common.IoHandlerAdapter;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.common.SimpleByteBufferAllocator;
-import org.apache.mina.filter.ReadThrottleFilterBuilder;
-import org.apache.mina.filter.WriteBufferLimitFilterBuilder;
-import org.apache.mina.transport.socket.nio.SocketSessionConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.concurrent.CountDownLatch;
-
-public class IOWriterClient implements Runnable
-{
- private static final Logger _logger = LoggerFactory.getLogger(IOWriterClient.class);
-
- public static int DEFAULT_TEST_SIZE = 2;
-
- private IoSession _session;
-
- private long _startTime;
-
- private long[] _chunkTimes;
-
- public int _chunkCount = 200000;
-
- private int _chunkSize = 1024;
-
- private CountDownLatch _notifier;
-
- private int _maximumWriteQueueLength;
-
- static public int _PORT = IOWriterServer._PORT;
-
- public void run()
- {
- _logger.info("Starting to send " + _chunkCount + " buffers of " + _chunkSize + "B");
- _startTime = System.currentTimeMillis();
- _notifier = new CountDownLatch(1);
-
- for (int i = 0; i < _chunkCount; i++)
- {
- ByteBuffer buf = ByteBuffer.allocate(_chunkSize, false);
- byte check = (byte) (i % 128);
- buf.put(check);
- buf.fill((byte) 88, buf.remaining());
- buf.flip();
-
- _session.write(buf);
- }
-
- long _sentall = System.currentTimeMillis();
- long _receivedall = _sentall;
- try
- {
- _logger.info("All buffers sent; waiting for receipt from server");
- _notifier.await();
- _receivedall = System.currentTimeMillis();
- }
- catch (InterruptedException e)
- {
- //Ignore
- }
- _logger.info("Completed");
- _logger.info("Total time waiting for server after last write: " + (_receivedall - _sentall));
-
- long totalTime = System.currentTimeMillis() - _startTime;
-
- _logger.info("Total time: " + totalTime);
- _logger.info("MB per second: " + (int) ((1.0 * _chunkSize * _chunkCount) / totalTime));
- long lastChunkTime = _startTime;
- double average = 0;
- for (int i = 0; i < _chunkTimes.length; i++)
- {
- if (i == 0)
- {
- average = _chunkTimes[i] - _startTime;
- }
- else
- {
- long delta = _chunkTimes[i] - lastChunkTime;
- if (delta != 0)
- {
- average = (average + delta) / 2;
- }
- }
- lastChunkTime = _chunkTimes[i];
- }
- _logger.info("Average chunk time: " + average + "ms");
- _logger.info("Maximum WriteRequestQueue size: " + _maximumWriteQueueLength);
-
- CloseFuture cf = _session.close();
- _logger.info("Closing session");
- cf.join();
- }
-
- private class WriterHandler extends IoHandlerAdapter
- {
- private int _chunksReceived = 0;
-
- private int _partialBytesRead = 0;
-
- private byte _partialCheckNumber;
-
- private int _totalBytesReceived = 0;
-
- private int _receivedCount = 0;
- private int _sentCount = 0;
- private static final String DEFAULT_READ_BUFFER = "262144";
- private static final String DEFAULT_WRITE_BUFFER = "262144";
-
- public void sessionCreated(IoSession session) throws Exception
- {
- IoFilterChain chain = session.getFilterChain();
-
- ReadThrottleFilterBuilder readfilter = new ReadThrottleFilterBuilder();
- readfilter.setMaximumConnectionBufferSize(Integer.parseInt(System.getProperty("qpid.read.buffer.limit", DEFAULT_READ_BUFFER)));
- readfilter.attach(chain);
-
- WriteBufferLimitFilterBuilder writefilter = new WriteBufferLimitFilterBuilder();
-
- writefilter.setMaximumConnectionBufferSize(Integer.parseInt(System.getProperty("qpid.write.buffer.limit", DEFAULT_WRITE_BUFFER)));
-
- writefilter.attach(chain);
- }
-
- public void messageSent(IoSession session, Object message) throws Exception
- {
- _maximumWriteQueueLength = Math.max(session.getScheduledWriteRequests(), _maximumWriteQueueLength);
-
- if (_logger.isDebugEnabled())
- {
- ++_sentCount;
- if (_sentCount % 1000 == 0)
- {
- _logger.debug("Sent count " + _sentCount + ":WQueue" + session.getScheduledWriteRequests());
-
- }
- }
- }
-
- public void messageReceived(IoSession session, Object message) throws Exception
- {
- if (_logger.isDebugEnabled())
- {
- ++_receivedCount;
-
- if (_receivedCount % 1000 == 0)
- {
- _logger.debug("Receieved count " + _receivedCount);
- }
- }
-
- ByteBuffer result = (ByteBuffer) message;
- _totalBytesReceived += result.remaining();
- int size = result.remaining();
- long now = System.currentTimeMillis();
- if (_partialBytesRead > 0)
- {
- int offset = _chunkSize - _partialBytesRead;
- if (size >= offset)
- {
- _chunkTimes[_chunksReceived++] = now;
- result.position(offset);
- }
- else
- {
- // have not read even one chunk, including the previous partial bytes
- _partialBytesRead += size;
- return;
- }
- }
-
-
- int chunkCount = result.remaining() / _chunkSize;
-
- for (int i = 0; i < chunkCount; i++)
- {
- _chunkTimes[_chunksReceived++] = now;
- byte check = result.get();
- _logger.debug("Check number " + check + " read");
- if (check != (byte) ((_chunksReceived - 1) % 128))
- {
- _logger.error("Check number " + check + " read when expected " + (_chunksReceived % 128));
- }
- _logger.debug("Chunk times recorded");
-
- try
- {
- result.skip(_chunkSize - 1);
- }
- catch (IllegalArgumentException e)
- {
- _logger.error("Position was: " + result.position());
- _logger.error("Tried to skip to: " + (_chunkSize * i));
- _logger.error("limit was; " + result.limit());
- }
- }
- _logger.debug("Chunks received now " + _chunksReceived);
- _logger.debug("Bytes received: " + _totalBytesReceived);
- _partialBytesRead = result.remaining();
-
- if (_partialBytesRead > 0)
- {
- _partialCheckNumber = result.get();
- }
-
-
- if (_chunksReceived >= _chunkCount)
- {
- _notifier.countDown();
- }
-
- }
-
- public void exceptionCaught(IoSession session, Throwable cause) throws Exception
- {
- _logger.error("Error: " + cause, cause);
- }
- }
-
- public void startWriter() throws IOException, InterruptedException
- {
-
- _maximumWriteQueueLength = 0;
-
- IoConnector ioConnector = null;
-
- if (Boolean.getBoolean("multinio"))
- {
- _logger.warn("Using MultiThread NIO");
- ioConnector = new org.apache.mina.transport.socket.nio.MultiThreadSocketConnector();
- }
- else
- {
- _logger.warn("Using MINA NIO");
- ioConnector = new org.apache.mina.transport.socket.nio.SocketConnector();
- }
-
- SocketSessionConfig scfg = (SocketSessionConfig) ioConnector.getDefaultConfig().getSessionConfig();
- scfg.setTcpNoDelay(true);
- scfg.setSendBufferSize(32768);
- scfg.setReceiveBufferSize(32768);
-
- ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
-
-
- final InetSocketAddress address = new InetSocketAddress("localhost", _PORT);
- _logger.info("Attempting connection to " + address);
-
- //Old mina style
-// ioConnector.setHandler(new WriterHandler());
-// ConnectFuture future = ioConnector.connect(address);
- ConnectFuture future = ioConnector.connect(address, new WriterHandler());
- // wait for connection to complete
- future.join();
- _logger.info("Connection completed");
- // we call getSession which throws an IOException if there has been an error connecting
- _session = future.getSession();
-
- _chunkTimes = new long[_chunkCount];
- Thread t = new Thread(this);
- t.start();
- t.join();
- _logger.info("Test Complete");
- }
-
-
- public void test1k() throws IOException, InterruptedException
- {
- _logger.info("Starting 1k test");
- _chunkSize = 1024;
- startWriter();
- }
-
-
- public void test2k() throws IOException, InterruptedException
- {
- _logger.info("Starting 2k test");
- _chunkSize = 2048;
- startWriter();
- }
-
-
- public void test4k() throws IOException, InterruptedException
- {
- _logger.info("Starting 4k test");
- _chunkSize = 4096;
- startWriter();
- }
-
-
- public void test8k() throws IOException, InterruptedException
- {
- _logger.info("Starting 8k test");
- _chunkSize = 8192;
- startWriter();
- }
-
-
- public void test16k() throws IOException, InterruptedException
- {
- _logger.info("Starting 16k test");
- _chunkSize = 16384;
- startWriter();
- }
-
-
- public void test32k() throws IOException, InterruptedException
- {
- _logger.info("Starting 32k test");
- _chunkSize = 32768;
- startWriter();
- }
-
-
- public static int getIntArg(String[] args, int index, int defaultValue)
- {
- if (args.length > index)
- {
- try
- {
- return Integer.parseInt(args[index]);
- }
- catch (NumberFormatException e)
- {
- //Do nothing
- }
- }
- return defaultValue;
- }
-
- public static void main(String[] args) throws IOException, InterruptedException
- {
- _PORT = getIntArg(args, 0, _PORT);
-
- int test = getIntArg(args, 1, DEFAULT_TEST_SIZE);
-
- IOWriterClient w = new IOWriterClient();
- w._chunkCount = getIntArg(args, 2, w._chunkCount);
- switch (test)
- {
- case 0:
- w.test1k();
- w.test2k();
- w.test4k();
- w.test8k();
- w.test16k();
- w.test32k();
- break;
- case 1:
- w.test1k();
- break;
- case 2:
- w.test2k();
- break;
- case 4:
- w.test4k();
- break;
- case 8:
- w.test8k();
- break;
- case 16:
- w.test16k();
- break;
- case 32:
- w.test32k();
- break;
- }
- }
-}
diff --git a/java/common/src/test/java/org/apache/mina/SocketIOTest/IOWriterServer.java b/java/common/src/test/java/org/apache/mina/SocketIOTest/IOWriterServer.java
deleted file mode 100644
index 423e98c67b..0000000000
--- a/java/common/src/test/java/org/apache/mina/SocketIOTest/IOWriterServer.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- *
- * Copyright (c) 2006 The Apache Software Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.mina.SocketIOTest;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoAcceptor;
-import org.apache.mina.common.IoFilterChain;
-import org.apache.mina.common.IoHandlerAdapter;
-import org.apache.mina.common.IoSession;
-import org.apache.mina.common.SimpleByteBufferAllocator;
-import org.apache.mina.filter.ReadThrottleFilterBuilder;
-import org.apache.mina.filter.WriteBufferLimitFilterBuilder;
-import org.apache.mina.transport.socket.nio.SocketSessionConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-
-/** Tests MINA socket performance. This acceptor simply reads data from the network and writes it back again. */
-public class IOWriterServer
-{
- private static final Logger _logger = LoggerFactory.getLogger(IOWriterServer.class);
-
- static public int _PORT = 9999;
-
- private static final String DEFAULT_READ_BUFFER = "262144";
- private static final String DEFAULT_WRITE_BUFFER = "262144";
-
-
- private static class TestHandler extends IoHandlerAdapter
- {
- private int _sentCount = 0;
-
- private int _bytesSent = 0;
-
- private int _receivedCount = 0;
-
- public void sessionCreated(IoSession ioSession) throws java.lang.Exception
- {
- IoFilterChain chain = ioSession.getFilterChain();
-
- ReadThrottleFilterBuilder readfilter = new ReadThrottleFilterBuilder();
- readfilter.setMaximumConnectionBufferSize(Integer.parseInt(System.getProperty("qpid.read.buffer.limit", DEFAULT_READ_BUFFER)));
- readfilter.attach(chain);
-
- WriteBufferLimitFilterBuilder writefilter = new WriteBufferLimitFilterBuilder();
-
- writefilter.setMaximumConnectionBufferSize(Integer.parseInt(System.getProperty("qpid.write.buffer.limit", DEFAULT_WRITE_BUFFER)));
-
- writefilter.attach(chain);
-
- }
-
- public void messageReceived(IoSession session, Object message) throws Exception
- {
- ((ByteBuffer) message).acquire();
- session.write(message);
-
- if (_logger.isDebugEnabled())
- {
- _bytesSent += ((ByteBuffer) message).remaining();
-
- _sentCount++;
-
- if (_sentCount % 1000 == 0)
- {
- _logger.debug("Bytes sent: " + _bytesSent);
- }
- }
- }
-
- public void messageSent(IoSession session, Object message) throws Exception
- {
- if (_logger.isDebugEnabled())
- {
- ++_receivedCount;
-
- if (_receivedCount % 1000 == 0)
- {
- _logger.debug("Receieved count " + _receivedCount);
- }
- }
- }
-
- public void exceptionCaught(IoSession session, Throwable cause) throws Exception
- {
- _logger.error("Error: " + cause, cause);
- }
- }
-
- public void startAcceptor() throws IOException
- {
- IoAcceptor acceptor;
- if (Boolean.getBoolean("multinio"))
- {
- _logger.warn("Using MultiThread NIO");
- acceptor = new org.apache.mina.transport.socket.nio.MultiThreadSocketAcceptor();
- }
- else
- {
- _logger.warn("Using MINA NIO");
- acceptor = new org.apache.mina.transport.socket.nio.SocketAcceptor();
- }
-
-
- SocketSessionConfig sc = (SocketSessionConfig) acceptor.getDefaultConfig().getSessionConfig();
- sc.setTcpNoDelay(true);
- sc.setSendBufferSize(32768);
- sc.setReceiveBufferSize(32768);
-
- ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
-
- //The old mina style
-// acceptor.setLocalAddress(new InetSocketAddress(_PORT));
-// acceptor.setHandler(new TestHandler());
-// acceptor.bind();
- acceptor.bind(new InetSocketAddress(_PORT), new TestHandler());
-
- _logger.info("Bound on port " + _PORT + ":" + _logger.isDebugEnabled());
- _logger.debug("debug on");
- }
-
- public static void main(String[] args) throws IOException
- {
-
- if (args.length > 0)
- {
- try
- {
- _PORT = Integer.parseInt(args[0]);
- }
- catch (NumberFormatException e)
- {
- //IGNORE so use default port 9999;
- }
- }
-
- IOWriterServer a = new IOWriterServer();
- a.startAcceptor();
- }
-}
diff --git a/java/common/src/test/java/org/apache/qpid/AMQExceptionTest.java b/java/common/src/test/java/org/apache/qpid/AMQExceptionTest.java
deleted file mode 100644
index ef6cd41492..0000000000
--- a/java/common/src/test/java/org/apache/qpid/AMQExceptionTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid;
-
-import junit.framework.TestCase;
-import org.apache.qpid.protocol.AMQConstant;
-import org.apache.qpid.framing.AMQFrameDecodingException;
-
-/**
- * This test is to ensure that when an AMQException is rethrown that the specified exception is correctly wrapped up.
- *
- * There are three cases:
- * Re-throwing an AMQException
- * Re-throwing a Subclass of AMQException
- * Re-throwing a Subclass of AMQException that does not have the default AMQException constructor which will force the
- * creation of an AMQException.
- */
-public class AMQExceptionTest extends TestCase
-{
- /**
- * Test that an AMQException will be correctly created and rethrown.
- */
- public void testRethrowGeneric()
- {
- AMQException test = new AMQException(AMQConstant.ACCESS_REFUSED, "refused", new RuntimeException());
-
- AMQException e = reThrowException(test);
-
- assertEquals("Exception not of correct class", AMQException.class, e.getClass());
-
- }
-
- /**
- * Test that a subclass of AMQException that has the default constructor will be correctly created and rethrown.
- */
- public void testRethrowAMQESubclass()
- {
- AMQFrameDecodingException test = new AMQFrameDecodingException(AMQConstant.INTERNAL_ERROR,
- "Error",
- new Exception());
- AMQException e = reThrowException(test);
-
- assertEquals("Exception not of correct class", AMQFrameDecodingException.class, e.getClass());
- }
-
- /**
- * Test that a subclass of AMQException that doesnot have the default constructor will be correctly rethrown as an
- * AMQException
- */
- public void testRethrowAMQESubclassNoConstructor()
- {
- AMQExceptionSubclass test = new AMQExceptionSubclass("Invalid Argument Exception");
-
- AMQException e = reThrowException(test);
-
- assertEquals("Exception not of correct class", AMQException.class, e.getClass());
- }
-
- /**
- * Private method to rethrown and validate the basic values of the rethrown
- * @param test Exception to rethrow
- * @throws AMQException the rethrown exception
- */
- private AMQException reThrowException(AMQException test)
- {
- AMQException amqe = test.cloneForCurrentThread();
-
- assertEquals("Error code does not match.", test.getErrorCode(), amqe.getErrorCode());
- assertTrue("Exception message does not start as expected.", amqe.getMessage().startsWith(test.getMessage()));
- assertEquals("Test Exception is not set as the cause", test, amqe.getCause());
- assertEquals("Cause is not correct", test.getCause(), amqe.getCause().getCause());
-
- return amqe;
- }
-
- /**
- * Private class that extends AMQException but does not have a default exception.
- */
- private class AMQExceptionSubclass extends AMQException
- {
-
- public AMQExceptionSubclass(String msg)
- {
- super(null, msg, null);
- }
- }
-}
-
diff --git a/java/common/src/test/java/org/apache/qpid/codec/AMQDecoderTest.java b/java/common/src/test/java/org/apache/qpid/codec/AMQDecoderTest.java
deleted file mode 100644
index 62e25e7d79..0000000000
--- a/java/common/src/test/java/org/apache/qpid/codec/AMQDecoderTest.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package org.apache.qpid.codec;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-
-import junit.framework.TestCase;
-
-import org.apache.qpid.framing.AMQDataBlock;
-import org.apache.qpid.framing.AMQFrame;
-import org.apache.qpid.framing.AMQFrameDecodingException;
-import org.apache.qpid.framing.AMQProtocolVersionException;
-import org.apache.qpid.framing.HeartbeatBody;
-
-public class AMQDecoderTest extends TestCase
-{
-
- private AMQCodecFactory _factory;
- private AMQDecoder _decoder;
-
-
- public void setUp()
- {
- _factory = new AMQCodecFactory(false, null);
- _decoder = _factory.getDecoder();
- }
-
-
- public void testSingleFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException
- {
- ByteBuffer msg = HeartbeatBody.FRAME.toNioByteBuffer();
- ArrayList<AMQDataBlock> frames = _decoder.decodeBuffer(msg);
- if (frames.get(0) instanceof AMQFrame)
- {
- assertEquals(HeartbeatBody.FRAME.getBodyFrame().getFrameType(), ((AMQFrame) frames.get(0)).getBodyFrame().getFrameType());
- }
- else
- {
- fail("decode was not a frame");
- }
- }
-
- public void testPartialFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException
- {
- ByteBuffer msg = HeartbeatBody.FRAME.toNioByteBuffer();
- ByteBuffer msgA = msg.slice();
- int msgbPos = msg.remaining() / 2;
- int msgaLimit = msg.remaining() - msgbPos;
- msgA.limit(msgaLimit);
- msg.position(msgbPos);
- ByteBuffer msgB = msg.slice();
- ArrayList<AMQDataBlock> frames = _decoder.decodeBuffer(msgA);
- assertEquals(0, frames.size());
- frames = _decoder.decodeBuffer(msgB);
- assertEquals(1, frames.size());
- if (frames.get(0) instanceof AMQFrame)
- {
- assertEquals(HeartbeatBody.FRAME.getBodyFrame().getFrameType(), ((AMQFrame) frames.get(0)).getBodyFrame().getFrameType());
- }
- else
- {
- fail("decode was not a frame");
- }
- }
-
- public void testMultipleFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException
- {
- ByteBuffer msgA = HeartbeatBody.FRAME.toNioByteBuffer();
- ByteBuffer msgB = HeartbeatBody.FRAME.toNioByteBuffer();
- ByteBuffer msg = ByteBuffer.allocate(msgA.remaining() + msgB.remaining());
- msg.put(msgA);
- msg.put(msgB);
- msg.flip();
- ArrayList<AMQDataBlock> frames = _decoder.decodeBuffer(msg);
- assertEquals(2, frames.size());
- for (AMQDataBlock frame : frames)
- {
- if (frame instanceof AMQFrame)
- {
- assertEquals(HeartbeatBody.FRAME.getBodyFrame().getFrameType(), ((AMQFrame) frame).getBodyFrame().getFrameType());
- }
- else
- {
- fail("decode was not a frame");
- }
- }
- }
-
- public void testMultiplePartialFrameDecode() throws AMQProtocolVersionException, AMQFrameDecodingException
- {
- ByteBuffer msgA = HeartbeatBody.FRAME.toNioByteBuffer();
- ByteBuffer msgB = HeartbeatBody.FRAME.toNioByteBuffer();
- ByteBuffer msgC = HeartbeatBody.FRAME.toNioByteBuffer();
-
- ByteBuffer sliceA = ByteBuffer.allocate(msgA.remaining() + msgB.remaining() / 2);
- sliceA.put(msgA);
- int limit = msgB.limit();
- int pos = msgB.remaining() / 2;
- msgB.limit(pos);
- sliceA.put(msgB);
- sliceA.flip();
- msgB.limit(limit);
- msgB.position(pos);
-
- ByteBuffer sliceB = ByteBuffer.allocate(msgB.remaining() + pos);
- sliceB.put(msgB);
- msgC.limit(pos);
- sliceB.put(msgC);
- sliceB.flip();
- msgC.limit(limit);
-
- ArrayList<AMQDataBlock> frames = _decoder.decodeBuffer(sliceA);
- assertEquals(1, frames.size());
- frames = _decoder.decodeBuffer(sliceB);
- assertEquals(1, frames.size());
- frames = _decoder.decodeBuffer(msgC);
- assertEquals(1, frames.size());
- for (AMQDataBlock frame : frames)
- {
- if (frame instanceof AMQFrame)
- {
- assertEquals(HeartbeatBody.FRAME.getBodyFrame().getFrameType(), ((AMQFrame) frame).getBodyFrame().getFrameType());
- }
- else
- {
- fail("decode was not a frame");
- }
- }
- }
-
-}
diff --git a/java/common/src/test/java/org/apache/qpid/codec/MockAMQVersionAwareProtocolSession.java b/java/common/src/test/java/org/apache/qpid/codec/MockAMQVersionAwareProtocolSession.java
deleted file mode 100644
index 401848c21d..0000000000
--- a/java/common/src/test/java/org/apache/qpid/codec/MockAMQVersionAwareProtocolSession.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.apache.qpid.codec;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import java.nio.ByteBuffer;
-
-import org.apache.qpid.AMQException;
-import org.apache.qpid.framing.AMQDataBlock;
-import org.apache.qpid.framing.AMQMethodBody;
-import org.apache.qpid.framing.ContentBody;
-import org.apache.qpid.framing.ContentHeaderBody;
-import org.apache.qpid.framing.HeartbeatBody;
-import org.apache.qpid.framing.MethodRegistry;
-import org.apache.qpid.framing.ProtocolVersion;
-import org.apache.qpid.protocol.AMQVersionAwareProtocolSession;
-import org.apache.qpid.transport.Sender;
-
-public class MockAMQVersionAwareProtocolSession implements AMQVersionAwareProtocolSession
-{
-
- public void contentBodyReceived(int channelId, ContentBody body) throws AMQException
- {
- // TODO Auto-generated method stub
-
- }
-
- public void contentHeaderReceived(int channelId, ContentHeaderBody body) throws AMQException
- {
- // TODO Auto-generated method stub
-
- }
-
- public MethodRegistry getMethodRegistry()
- {
- return MethodRegistry.getMethodRegistry(ProtocolVersion.v0_9);
- }
-
- public void heartbeatBodyReceived(int channelId, HeartbeatBody body) throws AMQException
- {
- // TODO Auto-generated method stub
-
- }
-
- public void init()
- {
- // TODO Auto-generated method stub
-
- }
-
- public void methodFrameReceived(int channelId, AMQMethodBody body) throws AMQException
- {
- // TODO Auto-generated method stub
-
- }
-
- public void setSender(Sender<ByteBuffer> sender)
- {
- // TODO Auto-generated method stub
-
- }
-
- public void writeFrame(AMQDataBlock frame)
- {
- // TODO Auto-generated method stub
-
- }
-
- public byte getProtocolMajorVersion()
- {
- // TODO Auto-generated method stub
- return 0;
- }
-
- public byte getProtocolMinorVersion()
- {
- // TODO Auto-generated method stub
- return 0;
- }
-
- public ProtocolVersion getProtocolVersion()
- {
- // TODO Auto-generated method stub
- return null;
- }
-
-}
diff --git a/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java b/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java
deleted file mode 100644
index 92e7ce0a80..0000000000
--- a/java/common/src/test/java/org/apache/qpid/framing/AMQShortStringTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.framing;
-
-import junit.framework.TestCase;
-public class AMQShortStringTest extends TestCase
-{
-
- public static final AMQShortString HELLO = new AMQShortString("Hello");
- public static final AMQShortString HELL = new AMQShortString("Hell");
- public static final AMQShortString GOODBYE = new AMQShortString("Goodbye");
- public static final AMQShortString GOOD = new AMQShortString("Good");
- public static final AMQShortString BYE = new AMQShortString("BYE");
-
- public void testStartsWith()
- {
- assertTrue(HELLO.startsWith(HELL));
-
- assertFalse(HELL.startsWith(HELLO));
-
- assertTrue(GOODBYE.startsWith(GOOD));
-
- assertFalse(GOOD.startsWith(GOODBYE));
- }
-
- public void testEndWith()
- {
- assertFalse(HELL.endsWith(HELLO));
-
- assertTrue(GOODBYE.endsWith(new AMQShortString("bye")));
-
- assertFalse(GOODBYE.endsWith(BYE));
- }
-
-
- public void testTokenize()
- {
- AMQShortString dotSeparatedWords = new AMQShortString("this.is.a.test.with.1.2.3.-numbers-and-then--dashes-");
- AMQShortStringTokenizer dotTokenizer = dotSeparatedWords.tokenize((byte) '.');
-
- assertTrue(dotTokenizer.hasMoreTokens());
- assertEquals(new AMQShortString("this"),(dotTokenizer.nextToken()));
- assertTrue(dotTokenizer.hasMoreTokens());
- assertEquals(new AMQShortString("is"),(dotTokenizer.nextToken()));
- assertTrue(dotTokenizer.hasMoreTokens());
- assertEquals(new AMQShortString("a"),(dotTokenizer.nextToken()));
- assertTrue(dotTokenizer.hasMoreTokens());
- assertEquals(new AMQShortString("test"),(dotTokenizer.nextToken()));
- assertTrue(dotTokenizer.hasMoreTokens());
- assertEquals(new AMQShortString("with"),(dotTokenizer.nextToken()));
- assertTrue(dotTokenizer.hasMoreTokens());
- assertEquals(dotTokenizer.nextToken().toIntValue() , 1);
- assertTrue(dotTokenizer.hasMoreTokens());
- assertEquals(dotTokenizer.nextToken().toIntValue() , 2);
- assertTrue(dotTokenizer.hasMoreTokens());
- assertEquals(dotTokenizer.nextToken().toIntValue() , 3);
- assertTrue(dotTokenizer.hasMoreTokens());
- AMQShortString dashString = dotTokenizer.nextToken();
- assertEquals(new AMQShortString("-numbers-and-then--dashes-"),(dashString));
-
- AMQShortStringTokenizer dashTokenizer = dashString.tokenize((byte)'-');
- assertEquals(dashTokenizer.countTokens(), 7);
-
- AMQShortString[] expectedResults = new AMQShortString[]
- { AMQShortString.EMPTY_STRING,
- new AMQShortString("numbers"),
- new AMQShortString("and"),
- new AMQShortString("then"),
- AMQShortString.EMPTY_STRING,
- new AMQShortString("dashes"),
- AMQShortString.EMPTY_STRING };
-
- for(int i = 0; i < 7; i++)
- {
- assertTrue(dashTokenizer.hasMoreTokens());
- assertEquals(dashTokenizer.nextToken(), expectedResults[i]);
- }
-
- assertFalse(dotTokenizer.hasMoreTokens());
- }
-
-
- public void testEquals()
- {
- assertEquals(GOODBYE, new AMQShortString("Goodbye"));
- assertEquals(new AMQShortString("A"), new AMQShortString("A"));
- assertFalse(new AMQShortString("A").equals(new AMQShortString("a")));
- }
-
-
-}
diff --git a/java/common/src/test/java/org/apache/qpid/framing/BasicContentHeaderPropertiesTest.java b/java/common/src/test/java/org/apache/qpid/framing/BasicContentHeaderPropertiesTest.java
deleted file mode 100644
index 4fd1f60d69..0000000000
--- a/java/common/src/test/java/org/apache/qpid/framing/BasicContentHeaderPropertiesTest.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import junit.framework.TestCase;
-
-
-public class BasicContentHeaderPropertiesTest extends TestCase
-{
-
- BasicContentHeaderProperties _testProperties;
- FieldTable _testTable;
- String _testString = "This is a test string";
- int _testint = 666;
-
- /**
- * Currently only test setting/getting String, int and boolean props
- */
- public BasicContentHeaderPropertiesTest()
- {
- _testProperties = new BasicContentHeaderProperties();
- }
-
- public void setUp()
- {
- _testTable = new FieldTable();
- _testTable.setString("TestString", _testString);
- _testTable.setInteger("Testint", _testint);
- _testProperties = new BasicContentHeaderProperties();
- _testProperties.setHeaders(_testTable);
- }
-
- public void testGetPropertyListSize()
- {
- //needs a better test but at least we're exercising the code !
- // FT length is encoded in an int
- int expectedSize = EncodingUtils.encodedIntegerLength();
-
- expectedSize += EncodingUtils.encodedShortStringLength("TestInt");
- // 1 is for the Encoding Letter. here an 'i'
- expectedSize += 1 + EncodingUtils.encodedIntegerLength();
-
- expectedSize += EncodingUtils.encodedShortStringLength("TestString");
- // 1 is for the Encoding Letter. here an 'S'
- expectedSize += 1 + EncodingUtils.encodedLongStringLength(_testString);
-
-
- int size = _testProperties.getPropertyListSize();
-
- assertEquals(expectedSize, size);
- }
-
- public void testGetSetPropertyFlags()
- {
- _testProperties.setPropertyFlags(99);
- assertEquals(99, _testProperties.getPropertyFlags());
- }
-
- public void testWritePropertyListPayload()
- {
- ByteBuffer buf = ByteBuffer.allocate(300);
- _testProperties.writePropertyListPayload(buf);
- }
-
- public void testPopulatePropertiesFromBuffer() throws Exception
- {
- ByteBuffer buf = ByteBuffer.allocate(300);
- _testProperties.populatePropertiesFromBuffer(buf, 99, 99);
- }
-
- public void testSetGetContentType()
- {
- String contentType = "contentType";
- _testProperties.setContentType(contentType);
- assertEquals(contentType, _testProperties.getContentTypeAsString());
- }
-
- public void testSetGetEncoding()
- {
- String encoding = "encoding";
- _testProperties.setEncoding(encoding);
- assertEquals(encoding, _testProperties.getEncodingAsString());
- }
-
- public void testSetGetHeaders()
- {
- _testProperties.setHeaders(_testTable);
- assertEquals(_testTable, _testProperties.getHeaders());
- }
-
- public void testSetGetDeliveryMode()
- {
- byte deliveryMode = 1;
- _testProperties.setDeliveryMode(deliveryMode);
- assertEquals(deliveryMode, _testProperties.getDeliveryMode());
- }
-
- public void testSetGetPriority()
- {
- byte priority = 1;
- _testProperties.setPriority(priority);
- assertEquals(priority, _testProperties.getPriority());
- }
-
- public void testSetGetCorrelationId()
- {
- String correlationId = "correlationId";
- _testProperties.setCorrelationId(correlationId);
- assertEquals(correlationId, _testProperties.getCorrelationIdAsString());
- }
-
- public void testSetGetReplyTo()
- {
- String replyTo = "replyTo";
- _testProperties.setReplyTo(replyTo);
- assertEquals(replyTo, _testProperties.getReplyToAsString());
- }
-
- public void testSetGetExpiration()
- {
- long expiration = 999999999;
- _testProperties.setExpiration(expiration);
- assertEquals(expiration, _testProperties.getExpiration());
- }
-
- public void testSetGetMessageId()
- {
- String messageId = "messageId";
- _testProperties.setMessageId(messageId);
- assertEquals(messageId, _testProperties.getMessageIdAsString());
- }
-
- public void testSetGetTimestamp()
- {
- long timestamp = System.currentTimeMillis();
- _testProperties.setTimestamp(timestamp);
- assertEquals(timestamp, _testProperties.getTimestamp());
- }
-
- public void testSetGetType()
- {
- String type = "type";
- _testProperties.setType(type);
- assertEquals(type, _testProperties.getTypeAsString());
- }
-
- public void testSetGetUserId()
- {
- String userId = "userId";
- _testProperties.setUserId(userId);
- assertEquals(userId, _testProperties.getUserIdAsString());
- }
-
- public void testSetGetAppId()
- {
- String appId = "appId";
- _testProperties.setAppId(appId);
- assertEquals(appId, _testProperties.getAppIdAsString());
- }
-
- public void testSetGetClusterId()
- {
- String clusterId = "clusterId";
- _testProperties.setClusterId(clusterId);
- assertEquals(clusterId, _testProperties.getClusterIdAsString());
- }
-
-}
diff --git a/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java b/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java
deleted file mode 100644
index d4691ba097..0000000000
--- a/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java
+++ /dev/null
@@ -1,974 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.apache.qpid.AMQInvalidArgumentException;
-import org.apache.qpid.AMQPInvalidClassException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class PropertyFieldTableTest extends TestCase
-{
- private static final Logger _logger = LoggerFactory.getLogger(PropertyFieldTableTest.class);
-
- /**
- * Test that setting a similar named value replaces any previous value set on that name
- */
- public void testReplacement()
- {
- FieldTable table1 = new FieldTable();
- // Set a boolean value
- table1.setBoolean("value", true);
- // Check length of table is correct (<Value length> + <type> + <Boolean length>)
- int size = EncodingUtils.encodedShortStringLength("value") + 1 + EncodingUtils.encodedBooleanLength();
- Assert.assertEquals(size, table1.getEncodedSize());
-
- // reset value to an integer
- table1.setInteger("value", Integer.MAX_VALUE);
-
- // Check the length has changed accordingly (<Value length> + <type> + <Integer length>)
- size = EncodingUtils.encodedShortStringLength("value") + 1 + EncodingUtils.encodedIntegerLength();
- Assert.assertEquals(size, table1.getEncodedSize());
-
- // Check boolean value is null
- Assert.assertEquals(null, table1.getBoolean("value"));
- // ... and integer value is good
- Assert.assertEquals((Integer) Integer.MAX_VALUE, table1.getInteger("value"));
- }
-
- /**
- * Set a boolean and check that we can only get it back as a boolean and a string
- * Check that attempting to lookup a non existent value returns null
- */
- public void testBoolean()
- {
- FieldTable table1 = new FieldTable();
- table1.setBoolean("value", true);
- Assert.assertTrue(table1.propertyExists("value"));
-
- // Test Getting right value back
- Assert.assertEquals((Boolean) true, table1.getBoolean("value"));
-
- // Check we don't get anything back for other gets
- Assert.assertEquals(null, table1.getByte("value"));
- Assert.assertEquals(null, table1.getByte("value"));
- Assert.assertEquals(null, table1.getShort("value"));
- Assert.assertEquals(null, table1.getCharacter("value"));
- Assert.assertEquals(null, table1.getDouble("value"));
- Assert.assertEquals(null, table1.getFloat("value"));
- Assert.assertEquals(null, table1.getInteger("value"));
- Assert.assertEquals(null, table1.getLong("value"));
- Assert.assertEquals(null, table1.getBytes("value"));
-
- // except value as a string
- Assert.assertEquals("true", table1.getString("value"));
-
- table1.remove("value");
-
- // Table should now have zero length for encoding
- checkEmpty(table1);
-
- // Looking up an invalid value returns null
- Assert.assertEquals(null, table1.getBoolean("Rubbish"));
- }
-
- /**
- * Set a byte and check that we can only get it back as a byte and a string
- * Check that attempting to lookup a non existent value returns null
- */
- public void testByte()
- {
- FieldTable table1 = new FieldTable();
- table1.setByte("value", Byte.MAX_VALUE);
- Assert.assertTrue(table1.propertyExists("value"));
-
- // Tets lookups we shouldn't get anything back for other gets
- // we should get right value back for this type ....
- Assert.assertEquals(null, table1.getBoolean("value"));
- Assert.assertEquals(Byte.MAX_VALUE, (byte) table1.getByte("value"));
- Assert.assertEquals(null, table1.getShort("value"));
- Assert.assertEquals(null, table1.getCharacter("value"));
- Assert.assertEquals(null, table1.getDouble("value"));
- Assert.assertEquals(null, table1.getFloat("value"));
- Assert.assertEquals(null, table1.getInteger("value"));
- Assert.assertEquals(null, table1.getLong("value"));
- Assert.assertEquals(null, table1.getBytes("value"));
-
- // ... and a the string value of it.
- Assert.assertEquals("" + Byte.MAX_VALUE, table1.getString("value"));
-
- table1.remove("value");
- // Table should now have zero length for encoding
- checkEmpty(table1);
-
- // Looking up an invalid value returns null
- Assert.assertEquals(null, table1.getByte("Rubbish"));
- }
-
- /**
- * Set a short and check that we can only get it back as a short and a string
- * Check that attempting to lookup a non existent value returns null
- */
- public void testShort()
- {
- FieldTable table1 = new FieldTable();
- table1.setShort("value", Short.MAX_VALUE);
- Assert.assertTrue(table1.propertyExists("value"));
-
- // Tets lookups we shouldn't get anything back for other gets
- // we should get right value back for this type ....
- Assert.assertEquals(null, table1.getBoolean("value"));
- Assert.assertEquals(null, table1.getByte("value"));
- Assert.assertEquals(Short.MAX_VALUE, (short) table1.getShort("value"));
- Assert.assertEquals(null, table1.getCharacter("value"));
- Assert.assertEquals(null, table1.getDouble("value"));
- Assert.assertEquals(null, table1.getFloat("value"));
- Assert.assertEquals(null, table1.getInteger("value"));
- Assert.assertEquals(null, table1.getLong("value"));
- Assert.assertEquals(null, table1.getBytes("value"));
-
- // ... and a the string value of it.
- Assert.assertEquals("" + Short.MAX_VALUE, table1.getString("value"));
-
- table1.remove("value");
- // Table should now have zero length for encoding
- checkEmpty(table1);
-
- // Looking up an invalid value returns null
- Assert.assertEquals(null, table1.getShort("Rubbish"));
- }
-
- /**
- * Set a char and check that we can only get it back as a char
- * Check that attempting to lookup a non existent value returns null
- */
- public void testChar()
- {
- FieldTable table1 = new FieldTable();
- table1.setChar("value", 'c');
- Assert.assertTrue(table1.propertyExists("value"));
-
- // Tets lookups we shouldn't get anything back for other gets
- // we should get right value back for this type ....
- Assert.assertEquals(null, table1.getBoolean("value"));
- Assert.assertEquals(null, table1.getByte("value"));
- Assert.assertEquals(null, table1.getShort("value"));
- Assert.assertEquals('c', (char) table1.getCharacter("value"));
- Assert.assertEquals(null, table1.getDouble("value"));
- Assert.assertEquals(null, table1.getFloat("value"));
- Assert.assertEquals(null, table1.getInteger("value"));
- Assert.assertEquals(null, table1.getLong("value"));
- Assert.assertEquals(null, table1.getBytes("value"));
-
- // ... and a the string value of it.
- Assert.assertEquals("c", table1.getString("value"));
-
- table1.remove("value");
-
- // Table should now have zero length for encoding
- checkEmpty(table1);
-
- // Looking up an invalid value returns null
- Assert.assertEquals(null, table1.getCharacter("Rubbish"));
- }
-
- /**
- * Set a double and check that we can only get it back as a double
- * Check that attempting to lookup a non existent value returns null
- */
- public void testDouble()
- {
- FieldTable table1 = new FieldTable();
- table1.setDouble("value", Double.MAX_VALUE);
- Assert.assertTrue(table1.propertyExists("value"));
-
- // Tets lookups we shouldn't get anything back for other gets
- // we should get right value back for this type ....
- Assert.assertEquals(null, table1.getBoolean("value"));
- Assert.assertEquals(null, table1.getByte("value"));
- Assert.assertEquals(null, table1.getShort("value"));
- Assert.assertEquals(null, table1.getCharacter("value"));
- Assert.assertEquals(Double.MAX_VALUE, (double) table1.getDouble("value"));
- Assert.assertEquals(null, table1.getFloat("value"));
- Assert.assertEquals(null, table1.getInteger("value"));
- Assert.assertEquals(null, table1.getLong("value"));
- Assert.assertEquals(null, table1.getBytes("value"));
-
- // ... and a the string value of it.
- Assert.assertEquals("" + Double.MAX_VALUE, table1.getString("value"));
- table1.remove("value");
- // but after a removeKey it doesn't
- Assert.assertFalse(table1.containsKey("value"));
-
- // Table should now have zero length for encoding
- checkEmpty(table1);
-
- // Looking up an invalid value returns null
- Assert.assertEquals(null, table1.getDouble("Rubbish"));
- }
-
- /**
- * Set a float and check that we can only get it back as a float
- * Check that attempting to lookup a non existent value returns null
- */
- public void testFloat()
- {
- FieldTable table1 = new FieldTable();
- table1.setFloat("value", Float.MAX_VALUE);
- Assert.assertTrue(table1.propertyExists("value"));
-
- // Tets lookups we shouldn't get anything back for other gets
- // we should get right value back for this type ....
- Assert.assertEquals(null, table1.getBoolean("value"));
- Assert.assertEquals(null, table1.getByte("value"));
- Assert.assertEquals(null, table1.getShort("value"));
- Assert.assertEquals(null, table1.getCharacter("value"));
- Assert.assertEquals(null, table1.getDouble("value"));
- Assert.assertEquals(Float.MAX_VALUE, (float) table1.getFloat("value"));
- Assert.assertEquals(null, table1.getInteger("value"));
- Assert.assertEquals(null, table1.getLong("value"));
- Assert.assertEquals(null, table1.getBytes("value"));
-
- // ... and a the string value of it.
- Assert.assertEquals("" + Float.MAX_VALUE, table1.getString("value"));
-
- table1.remove("value");
- // but after a removeKey it doesn't
- Assert.assertFalse(table1.containsKey("value"));
-
- // Table should now have zero length for encoding
- checkEmpty(table1);
-
- // Looking up an invalid value returns null
- Assert.assertEquals(null, table1.getFloat("Rubbish"));
- }
-
- /**
- * Set an int and check that we can only get it back as an int
- * Check that attempting to lookup a non existent value returns null
- */
- public void testInt()
- {
- FieldTable table1 = new FieldTable();
- table1.setInteger("value", Integer.MAX_VALUE);
- Assert.assertTrue(table1.propertyExists("value"));
-
- // Tets lookups we shouldn't get anything back for other gets
- // we should get right value back for this type ....
- Assert.assertEquals(null, table1.getBoolean("value"));
- Assert.assertEquals(null, table1.getByte("value"));
- Assert.assertEquals(null, table1.getShort("value"));
- Assert.assertEquals(null, table1.getCharacter("value"));
- Assert.assertEquals(null, table1.getDouble("value"));
- Assert.assertEquals(null, table1.getFloat("value"));
- Assert.assertEquals(Integer.MAX_VALUE, (int) table1.getInteger("value"));
- Assert.assertEquals(null, table1.getLong("value"));
- Assert.assertEquals(null, table1.getBytes("value"));
-
- // ... and a the string value of it.
- Assert.assertEquals("" + Integer.MAX_VALUE, table1.getString("value"));
-
- table1.remove("value");
- // but after a removeKey it doesn't
- Assert.assertFalse(table1.containsKey("value"));
-
- // Table should now have zero length for encoding
- checkEmpty(table1);
-
- // Looking up an invalid value returns null
- Assert.assertEquals(null, table1.getInteger("Rubbish"));
- }
-
- /**
- * Set a long and check that we can only get it back as a long
- * Check that attempting to lookup a non existent value returns null
- */
- public void testLong()
- {
- FieldTable table1 = new FieldTable();
- table1.setLong("value", Long.MAX_VALUE);
- Assert.assertTrue(table1.propertyExists("value"));
-
- // Tets lookups we shouldn't get anything back for other gets
- // we should get right value back for this type ....
- Assert.assertEquals(null, table1.getBoolean("value"));
- Assert.assertEquals(null, table1.getByte("value"));
- Assert.assertEquals(null, table1.getShort("value"));
- Assert.assertEquals(null, table1.getCharacter("value"));
- Assert.assertEquals(null, table1.getDouble("value"));
- Assert.assertEquals(null, table1.getFloat("value"));
- Assert.assertEquals(null, table1.getInteger("value"));
- Assert.assertEquals(Long.MAX_VALUE, (long) table1.getLong("value"));
- Assert.assertEquals(null, table1.getBytes("value"));
-
- // ... and a the string value of it.
- Assert.assertEquals("" + Long.MAX_VALUE, table1.getString("value"));
-
- table1.remove("value");
- // but after a removeKey it doesn't
- Assert.assertFalse(table1.containsKey("value"));
-
- // Table should now have zero length for encoding
- checkEmpty(table1);
-
- // Looking up an invalid value returns null
- Assert.assertEquals(null, table1.getLong("Rubbish"));
- }
-
- /**
- * Set a double and check that we can only get it back as a double
- * Check that attempting to lookup a non existent value returns null
- */
- public void testBytes()
- {
- byte[] bytes = { 99, 98, 97, 96, 95 };
-
- FieldTable table1 = new FieldTable();
- table1.setBytes("value", bytes);
- Assert.assertTrue(table1.propertyExists("value"));
-
- // Tets lookups we shouldn't get anything back for other gets
- // we should get right value back for this type ....
- Assert.assertEquals(null, table1.getBoolean("value"));
- Assert.assertEquals(null, table1.getByte("value"));
- Assert.assertEquals(null, table1.getShort("value"));
- Assert.assertEquals(null, table1.getCharacter("value"));
- Assert.assertEquals(null, table1.getDouble("value"));
- Assert.assertEquals(null, table1.getFloat("value"));
- Assert.assertEquals(null, table1.getInteger("value"));
- Assert.assertEquals(null, table1.getLong("value"));
- assertBytesEqual(bytes, table1.getBytes("value"));
-
- // ... and a the string value of it is null
- Assert.assertEquals(null, table1.getString("value"));
-
- table1.remove("value");
- // but after a removeKey it doesn't
- Assert.assertFalse(table1.containsKey("value"));
-
- // Table should now have zero length for encoding
- checkEmpty(table1);
-
- // Looking up an invalid value returns null
- Assert.assertEquals(null, table1.getBytes("Rubbish"));
- }
-
- /**
- * Calls all methods that can be used to check the table is empty
- * - getEncodedSize
- * - isEmpty
- * - length
- *
- * @param table to check is empty
- */
- private void checkEmpty(FieldTable table)
- {
- Assert.assertEquals(0, table.getEncodedSize());
- Assert.assertTrue(table.isEmpty());
- Assert.assertEquals(0, table.size());
-
- Assert.assertEquals(0, table.keySet().size());
- }
-
- /**
- * Set a String and check that we can only get it back as a String
- * Check that attempting to lookup a non existent value returns null
- */
- public void testString()
- {
- FieldTable table1 = new FieldTable();
- table1.setString("value", "Hello");
- Assert.assertTrue(table1.propertyExists("value"));
-
- // Tets lookups we shouldn't get anything back for other gets
- // we should get right value back for this type ....
- Assert.assertEquals(null, table1.getBoolean("value"));
- Assert.assertEquals(null, table1.getByte("value"));
- Assert.assertEquals(null, table1.getShort("value"));
- Assert.assertEquals(null, table1.getCharacter("value"));
- Assert.assertEquals(null, table1.getDouble("value"));
- Assert.assertEquals(null, table1.getFloat("value"));
- Assert.assertEquals(null, table1.getInteger("value"));
- Assert.assertEquals(null, table1.getLong("value"));
- Assert.assertEquals(null, table1.getBytes("value"));
- Assert.assertEquals("Hello", table1.getString("value"));
-
- // Try setting a null value and read it back
- table1.setString("value", null);
-
- Assert.assertEquals(null, table1.getString("value"));
-
- // but still contains the value
- Assert.assertTrue(table1.containsKey("value"));
-
- table1.remove("value");
- // but after a removeKey it doesn't
- Assert.assertFalse(table1.containsKey("value"));
-
- checkEmpty(table1);
-
- // Looking up an invalid value returns null
- Assert.assertEquals(null, table1.getString("Rubbish"));
-
- // Additional Test that haven't been covered for string
- table1.setObject("value", "Hello");
- // Check that it was set correctly
- Assert.assertEquals("Hello", table1.getString("value"));
- }
-
- /** Check that a nested field table parameter correctly encodes and decodes to a byte buffer. */
- public void testNestedFieldTable()
- {
- byte[] testBytes = new byte[] { 0, 1, 2, 3, 4, 5 };
-
- FieldTable outerTable = new FieldTable();
- FieldTable innerTable = new FieldTable();
-
- // Put some stuff in the inner table.
- innerTable.setBoolean("bool", true);
- innerTable.setByte("byte", Byte.MAX_VALUE);
- innerTable.setBytes("bytes", testBytes);
- innerTable.setChar("char", 'c');
- innerTable.setDouble("double", Double.MAX_VALUE);
- innerTable.setFloat("float", Float.MAX_VALUE);
- innerTable.setInteger("int", Integer.MAX_VALUE);
- innerTable.setLong("long", Long.MAX_VALUE);
- innerTable.setShort("short", Short.MAX_VALUE);
- innerTable.setString("string", "hello");
- innerTable.setString("null-string", null);
-
- // Put the inner table in the outer one.
- outerTable.setFieldTable("innerTable", innerTable);
-
- // Write the outer table into the buffer.
- final ByteBuffer buffer = ByteBuffer.allocate((int) outerTable.getEncodedSize() + 4);
- outerTable.writeToBuffer(buffer);
- buffer.flip();
-
- // Extract the table back from the buffer again.
- try
- {
- FieldTable extractedOuterTable = EncodingUtils.readFieldTable(buffer);
-
- FieldTable extractedTable = extractedOuterTable.getFieldTable("innerTable");
-
- Assert.assertEquals((Boolean) true, extractedTable.getBoolean("bool"));
- Assert.assertEquals((Byte) Byte.MAX_VALUE, extractedTable.getByte("byte"));
- assertBytesEqual(testBytes, extractedTable.getBytes("bytes"));
- Assert.assertEquals((Character) 'c', extractedTable.getCharacter("char"));
- Assert.assertEquals(Double.MAX_VALUE, extractedTable.getDouble("double"));
- Assert.assertEquals(Float.MAX_VALUE, extractedTable.getFloat("float"));
- Assert.assertEquals((Integer) Integer.MAX_VALUE, extractedTable.getInteger("int"));
- Assert.assertEquals((Long) Long.MAX_VALUE, extractedTable.getLong("long"));
- Assert.assertEquals((Short) Short.MAX_VALUE, extractedTable.getShort("short"));
- Assert.assertEquals("hello", extractedTable.getString("string"));
- Assert.assertEquals(null, extractedTable.getString("null-string"));
- }
- catch (AMQFrameDecodingException e)
- {
- fail("Failed to decode field table with nested inner table.");
- }
- }
-
- public void testValues()
- {
- FieldTable table = new FieldTable();
- table.setBoolean("bool", true);
- table.setByte("byte", Byte.MAX_VALUE);
- byte[] bytes = { 99, 98, 97, 96, 95 };
- table.setBytes("bytes", bytes);
- table.setChar("char", 'c');
- table.setDouble("double", Double.MAX_VALUE);
- table.setFloat("float", Float.MAX_VALUE);
- table.setInteger("int", Integer.MAX_VALUE);
- table.setLong("long", Long.MAX_VALUE);
- table.setShort("short", Short.MAX_VALUE);
- table.setString("string", "Hello");
- table.setString("null-string", null);
-
- table.setObject("object-bool", true);
- table.setObject("object-byte", Byte.MAX_VALUE);
- table.setObject("object-bytes", bytes);
- table.setObject("object-char", 'c');
- table.setObject("object-double", Double.MAX_VALUE);
- table.setObject("object-float", Float.MAX_VALUE);
- table.setObject("object-int", Integer.MAX_VALUE);
- table.setObject("object-long", Long.MAX_VALUE);
- table.setObject("object-short", Short.MAX_VALUE);
- table.setObject("object-string", "Hello");
-
- try
- {
- table.setObject("Null-object", null);
- fail("null values are not allowed");
- }
- catch (AMQPInvalidClassException aice)
- {
- assertEquals("Null values are not allowed to be set",
- AMQPInvalidClassException.INVALID_OBJECT_MSG + "null", aice.getMessage());
- }
-
- try
- {
- table.setObject("Unsupported-object", new Exception());
- fail("Non primitive values are not allowed");
- }
- catch (AMQPInvalidClassException aice)
- {
- assertEquals("Non primitive values are not allowed to be set",
- AMQPInvalidClassException.INVALID_OBJECT_MSG + Exception.class, aice.getMessage());
- }
-
- Assert.assertEquals((Boolean) true, table.getBoolean("bool"));
- Assert.assertEquals((Byte) Byte.MAX_VALUE, table.getByte("byte"));
- assertBytesEqual(bytes, table.getBytes("bytes"));
- Assert.assertEquals((Character) 'c', table.getCharacter("char"));
- Assert.assertEquals(Double.MAX_VALUE, table.getDouble("double"));
- Assert.assertEquals(Float.MAX_VALUE, table.getFloat("float"));
- Assert.assertEquals((Integer) Integer.MAX_VALUE, table.getInteger("int"));
- Assert.assertEquals((Long) Long.MAX_VALUE, table.getLong("long"));
- Assert.assertEquals((Short) Short.MAX_VALUE, table.getShort("short"));
- Assert.assertEquals("Hello", table.getString("string"));
- Assert.assertEquals(null, table.getString("null-string"));
-
- Assert.assertEquals(true, table.getObject("object-bool"));
- Assert.assertEquals(Byte.MAX_VALUE, table.getObject("object-byte"));
- assertBytesEqual(bytes, (byte[]) table.getObject("object-bytes"));
- Assert.assertEquals('c', table.getObject("object-char"));
- Assert.assertEquals(Double.MAX_VALUE, table.getObject("object-double"));
- Assert.assertEquals(Float.MAX_VALUE, table.getObject("object-float"));
- Assert.assertEquals(Integer.MAX_VALUE, table.getObject("object-int"));
- Assert.assertEquals(Long.MAX_VALUE, table.getObject("object-long"));
- Assert.assertEquals(Short.MAX_VALUE, table.getObject("object-short"));
- Assert.assertEquals("Hello", table.getObject("object-string"));
- }
-
- public void testwriteBuffer()
- {
- byte[] bytes = { 99, 98, 97, 96, 95 };
-
- FieldTable table = new FieldTable();
- table.setBoolean("bool", true);
- table.setByte("byte", Byte.MAX_VALUE);
-
- table.setBytes("bytes", bytes);
- table.setChar("char", 'c');
- table.setDouble("double", Double.MAX_VALUE);
- table.setFloat("float", Float.MAX_VALUE);
- table.setInteger("int", Integer.MAX_VALUE);
- table.setLong("long", Long.MAX_VALUE);
- table.setShort("short", Short.MAX_VALUE);
- table.setString("string", "hello");
- table.setString("null-string", null);
-
- final ByteBuffer buffer = ByteBuffer.allocate((int) table.getEncodedSize() + 4); // FIXME XXX: Is cast a problem?
-
- table.writeToBuffer(buffer);
-
- buffer.flip();
-
- long length = buffer.getUnsignedInt();
-
- FieldTable table2 = new FieldTable(buffer, length);
-
- Assert.assertEquals((Boolean) true, table2.getBoolean("bool"));
- Assert.assertEquals((Byte) Byte.MAX_VALUE, table2.getByte("byte"));
- assertBytesEqual(bytes, table2.getBytes("bytes"));
- Assert.assertEquals((Character) 'c', table2.getCharacter("char"));
- Assert.assertEquals(Double.MAX_VALUE, table2.getDouble("double"));
- Assert.assertEquals(Float.MAX_VALUE, table2.getFloat("float"));
- Assert.assertEquals((Integer) Integer.MAX_VALUE, table2.getInteger("int"));
- Assert.assertEquals((Long) Long.MAX_VALUE, table2.getLong("long"));
- Assert.assertEquals((Short) Short.MAX_VALUE, table2.getShort("short"));
- Assert.assertEquals("hello", table2.getString("string"));
- Assert.assertEquals(null, table2.getString("null-string"));
- }
-
- public void testEncodingSize()
- {
- FieldTable result = new FieldTable();
- int size = 0;
-
- result.setBoolean("boolean", true);
- size += 1 + EncodingUtils.encodedShortStringLength("boolean") + EncodingUtils.encodedBooleanLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setByte("byte", (byte) Byte.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("byte") + EncodingUtils.encodedByteLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- byte[] _bytes = { 99, 98, 97, 96, 95 };
-
- result.setBytes("bytes", _bytes);
- size += 1 + EncodingUtils.encodedShortStringLength("bytes") + 4 + _bytes.length;
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setChar("char", (char) 'c');
- size += 1 + EncodingUtils.encodedShortStringLength("char") + EncodingUtils.encodedCharLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setDouble("double", (double) Double.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("double") + EncodingUtils.encodedDoubleLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setFloat("float", (float) Float.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("float") + EncodingUtils.encodedFloatLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setInteger("int", (int) Integer.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("int") + EncodingUtils.encodedIntegerLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setLong("long", (long) Long.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("long") + EncodingUtils.encodedLongLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setShort("short", (short) Short.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("short") + EncodingUtils.encodedShortLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setString("result", "Hello");
- size += 1 + EncodingUtils.encodedShortStringLength("result") + EncodingUtils.encodedLongStringLength("Hello");
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setObject("object-bool", true);
- size += 1 + EncodingUtils.encodedShortStringLength("object-bool") + EncodingUtils.encodedBooleanLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setObject("object-byte", Byte.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("object-byte") + EncodingUtils.encodedByteLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setObject("object-bytes", _bytes);
- size += 1 + EncodingUtils.encodedShortStringLength("object-bytes") + 4 + _bytes.length;
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setObject("object-char", 'c');
- size += 1 + EncodingUtils.encodedShortStringLength("object-char") + EncodingUtils.encodedCharLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setObject("object-double", Double.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("object-double") + EncodingUtils.encodedDoubleLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setObject("object-float", Float.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("object-float") + EncodingUtils.encodedFloatLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setObject("object-int", Integer.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("object-int") + EncodingUtils.encodedIntegerLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setObject("object-long", Long.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("object-long") + EncodingUtils.encodedLongLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- result.setObject("object-short", Short.MAX_VALUE);
- size += 1 + EncodingUtils.encodedShortStringLength("object-short") + EncodingUtils.encodedShortLength();
- Assert.assertEquals(size, result.getEncodedSize());
-
- }
-
- // public void testEncodingSize1()
- // {
- // PropertyFieldTable table = new PropertyFieldTable();
- // int length = 0;
- // result.put("one", 1L);
- // length = EncodingUtils.encodedShortStringLength("one");
- // length += 1 + EncodingUtils.encodedLongLength();
- // assertEquals(length, result.getEncodedSize());
- //
- // result.put("two", 2L);
- // length += EncodingUtils.encodedShortStringLength("two");
- // length += 1 + EncodingUtils.encodedLongLength();
- // assertEquals(length, result.getEncodedSize());
- //
- // result.put("three", 3L);
- // length += EncodingUtils.encodedShortStringLength("three");
- // length += 1 + EncodingUtils.encodedLongLength();
- // assertEquals(length, result.getEncodedSize());
- //
- // result.put("four", 4L);
- // length += EncodingUtils.encodedShortStringLength("four");
- // length += 1 + EncodingUtils.encodedLongLength();
- // assertEquals(length, result.getEncodedSize());
- //
- // result.put("five", 5L);
- // length += EncodingUtils.encodedShortStringLength("five");
- // length += 1 + EncodingUtils.encodedLongLength();
- // assertEquals(length, result.getEncodedSize());
- //
- // //fixme should perhaps be expanded to incorporate all types.
- //
- // final ByteBuffer buffer = ByteBuffer.allocate((int) result.getEncodedSize()); // FIXME XXX: Is cast a problem?
- //
- // result.writeToBuffer(buffer);
- //
- // buffer.flip();
- //
- // long length = buffer.getUnsignedInt();
- //
- // try
- // {
- // PropertyFieldTable table2 = new PropertyFieldTable(buffer, length);
- //
- // Assert.assertEquals((Long) 1L, table2.getLong("one"));
- // Assert.assertEquals((Long) 2L, table2.getLong("two"));
- // Assert.assertEquals((Long) 3L, table2.getLong("three"));
- // Assert.assertEquals((Long) 4L, table2.getLong("four"));
- // Assert.assertEquals((Long) 5L, table2.getLong("five"));
- // }
- // catch (AMQFrameDecodingException e)
- // {
- // e.printStackTrace();
- // fail("PFT should be instantiated from bytes." + e.getCause());
- // }
- //
- // }
-
- /**
- * Additional test for setObject
- */
- public void testSetObject()
- {
- FieldTable table = new FieldTable();
-
- // Try setting a non primative object
-
- try
- {
- table.setObject("value", this);
- fail("Only primative values allowed in setObject");
- }
- catch (AMQPInvalidClassException iae)
- {
- // normal path
- }
- // so length should be zero
- Assert.assertEquals(0, table.getEncodedSize());
- }
-
- /**
- * Additional test checkPropertyName doesn't accept Null
- */
- public void testCheckPropertyNameasNull()
- {
- FieldTable table = new FieldTable();
-
- try
- {
- table.setObject((String) null, "String");
- fail("Null property name is not allowed");
- }
- catch (IllegalArgumentException iae)
- {
- // normal path
- }
- // so length should be zero
- Assert.assertEquals(0, table.getEncodedSize());
- }
-
- /**
- * Additional test checkPropertyName doesn't accept an empty String
- */
- public void testCheckPropertyNameasEmptyString()
- {
- FieldTable table = new FieldTable();
-
- try
- {
- table.setObject("", "String");
- fail("empty property name is not allowed");
- }
- catch (IllegalArgumentException iae)
- {
- // normal path
- }
- // so length should be zero
- Assert.assertEquals(0, table.getEncodedSize());
- }
-
- /**
- * Additional test checkPropertyName doesn't accept an empty String
- */
- public void testCheckPropertyNamehasMaxLength()
- {
- String oldVal = System.getProperty("STRICT_AMQP");
- System.setProperty("STRICT_AMQP", "true");
- FieldTable table = new FieldTable();
-
- StringBuffer longPropertyName = new StringBuffer(129);
-
- for (int i = 0; i < 129; i++)
- {
- longPropertyName.append("x");
- }
-
- try
- {
- table.setObject(longPropertyName.toString(), "String");
- fail("property name must be < 128 characters");
- }
- catch (IllegalArgumentException iae)
- {
- // normal path
- }
- // so length should be zero
- Assert.assertEquals(0, table.getEncodedSize());
- if (oldVal != null)
- {
- System.setProperty("STRICT_AMQP", oldVal);
- }
- else
- {
- System.clearProperty("STRICT_AMQP");
- }
- }
-
- /**
- * Additional test checkPropertyName starts with a letter
- */
- public void testCheckPropertyNameStartCharacterIsLetter()
- {
- String oldVal = System.getProperty("STRICT_AMQP");
- System.setProperty("STRICT_AMQP", "true");
- FieldTable table = new FieldTable();
-
- // Try a name that starts with a number
- try
- {
- table.setObject("1", "String");
- fail("property name must start with a letter");
- }
- catch (IllegalArgumentException iae)
- {
- // normal path
- }
- // so length should be zero
- Assert.assertEquals(0, table.getEncodedSize());
- if (oldVal != null)
- {
- System.setProperty("STRICT_AMQP", oldVal);
- }
- else
- {
- System.clearProperty("STRICT_AMQP");
- }
- }
-
- /**
- * Additional test checkPropertyName starts with a hash or a dollar
- */
- public void testCheckPropertyNameStartCharacterIsHashorDollar()
- {
- String oldVal = System.getProperty("STRICT_AMQP");
- System.setProperty("STRICT_AMQP", "true");
- FieldTable table = new FieldTable();
-
- // Try a name that starts with a number
- try
- {
- table.setObject("#", "String");
- table.setObject("$", "String");
- }
- catch (IllegalArgumentException iae)
- {
- fail("property name are allowed to start with # and $s");
- }
-
- if (oldVal != null)
- {
- System.setProperty("STRICT_AMQP", oldVal);
- }
- else
- {
- System.clearProperty("STRICT_AMQP");
- }
- }
-
- /**
- * Additional test to test the contents of the table
- */
- public void testContents()
- {
- FieldTable table = new FieldTable();
-
- table.setObject("StringProperty", "String");
-
- Assert.assertEquals("String", table.getString("StringProperty"));
-
- // Test Clear
-
- table.clear();
-
- checkEmpty(table);
- }
-
- /**
- * Test the contents of the sets
- */
- public void testSets()
- {
-
- FieldTable table = new FieldTable();
-
- table.setObject("n1", "1");
- table.setObject("n2", "2");
- table.setObject("n3", "3");
-
- Assert.assertEquals("1", table.getObject("n1"));
- Assert.assertEquals("2", table.getObject("n2"));
- Assert.assertEquals("3", table.getObject("n3"));
-
- }
-
- private void assertBytesEqual(byte[] expected, byte[] actual)
- {
- Assert.assertEquals(expected.length, actual.length);
-
- for (int index = 0; index < expected.length; index++)
- {
- Assert.assertEquals(expected[index], actual[index]);
- }
- }
-
- private void assertBytesNotEqual(byte[] expected, byte[] actual)
- {
- Assert.assertEquals(expected.length, actual.length);
-
- for (int index = 0; index < expected.length; index++)
- {
- Assert.assertFalse(expected[index] == actual[index]);
- }
- }
-
- public static junit.framework.Test suite()
- {
- return new junit.framework.TestSuite(PropertyFieldTableTest.class);
- }
-
-}
diff --git a/java/common/src/test/java/org/apache/qpid/framing/abstraction/MessagePublishInfoImplTest.java b/java/common/src/test/java/org/apache/qpid/framing/abstraction/MessagePublishInfoImplTest.java
deleted file mode 100644
index 3243136287..0000000000
--- a/java/common/src/test/java/org/apache/qpid/framing/abstraction/MessagePublishInfoImplTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.framing.abstraction;
-
-import junit.framework.TestCase;
-import org.apache.qpid.framing.AMQShortString;
-import org.apache.qpid.framing.abstraction.MessagePublishInfoImpl;
-
-public class MessagePublishInfoImplTest extends TestCase
-{
- MessagePublishInfoImpl _mpi;
- final AMQShortString _exchange = new AMQShortString("exchange");
- final AMQShortString _routingKey = new AMQShortString("routingKey");
-
- public void setUp()
- {
- _mpi = new MessagePublishInfoImpl(_exchange, true, true, _routingKey);
- }
-
- /** Test that we can update the exchange value. */
- public void testExchange()
- {
- assertEquals(_exchange, _mpi.getExchange());
- AMQShortString newExchange = new AMQShortString("newExchange");
- //Check we can update the exchange
- _mpi.setExchange(newExchange);
- assertEquals(newExchange, _mpi.getExchange());
- //Ensure that the new exchange doesn't equal the old one
- assertFalse(_exchange.equals(_mpi.getExchange()));
- }
-
- /**
- * Check that the immedate value is set correctly and defaulted correctly
- */
- public void testIsImmediate()
- {
- //Check that the set value is correct
- assertTrue("Set value for immediate not as expected", _mpi.isImmediate());
-
- MessagePublishInfoImpl mpi = new MessagePublishInfoImpl();
-
- assertFalse("Default value for immediate should be false", mpi.isImmediate());
-
- mpi.setImmediate(true);
-
- assertTrue("Updated value for immediate not as expected", mpi.isImmediate());
-
- }
-
- /**
- * Check that the mandatory value is set correctly and defaulted correctly
- */
- public void testIsMandatory()
- {
- assertTrue("Set value for mandatory not as expected", _mpi.isMandatory());
-
- MessagePublishInfoImpl mpi = new MessagePublishInfoImpl();
-
- assertFalse("Default value for mandatory should be false", mpi.isMandatory());
-
- mpi.setMandatory(true);
-
- assertTrue("Updated value for mandatory not as expected", mpi.isMandatory());
- }
-
- /**
- * Check that the routingKey value is perserved
- */
- public void testRoutingKey()
- {
- assertEquals(_routingKey, _mpi.getRoutingKey());
- AMQShortString newRoutingKey = new AMQShortString("newRoutingKey");
-
- //Check we can update the routingKey
- _mpi.setRoutingKey(newRoutingKey);
- assertEquals(newRoutingKey, _mpi.getRoutingKey());
- //Ensure that the new routingKey doesn't equal the old one
- assertFalse(_routingKey.equals(_mpi.getRoutingKey()));
-
- }
-}
diff --git a/java/common/src/test/java/org/apache/qpid/pool/ReferenceCountingExecutorServiceTest.java b/java/common/src/test/java/org/apache/qpid/pool/ReferenceCountingExecutorServiceTest.java
deleted file mode 100644
index 35998de3a1..0000000000
--- a/java/common/src/test/java/org/apache/qpid/pool/ReferenceCountingExecutorServiceTest.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.pool;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
-
-import junit.framework.TestCase;
-
-
-public class ReferenceCountingExecutorServiceTest extends TestCase
-{
-
-
- private ReferenceCountingExecutorService _executorService = ReferenceCountingExecutorService.getInstance(); // Class under test
- private ThreadFactory _beforeExecutorThreadFactory;
-
-
- @Override
- protected void setUp() throws Exception
- {
- super.setUp();
- _beforeExecutorThreadFactory = _executorService.getThreadFactory();
- }
-
- @Override
- protected void tearDown() throws Exception
- {
- super.tearDown();
- _executorService.setThreadFactory(_beforeExecutorThreadFactory);
- }
-
-
-
- /**
- * Tests that the ReferenceCountingExecutorService correctly manages the reference count.
- */
- public void testReferenceCounting() throws Exception
- {
- final int countBefore = _executorService.getReferenceCount();
-
- try
- {
- _executorService.acquireExecutorService();
- _executorService.acquireExecutorService();
-
- assertEquals("Reference count should now be +2", countBefore + 2, _executorService.getReferenceCount());
- }
- finally
- {
- _executorService.releaseExecutorService();
- _executorService.releaseExecutorService();
- }
- assertEquals("Reference count should have returned to the initial value", countBefore, _executorService.getReferenceCount());
- }
-
- /**
- * Tests that the executor creates and executes a task using the default thread pool.
- */
- public void testExecuteCommandWithDefaultExecutorThreadFactory() throws Exception
- {
- final CountDownLatch latch = new CountDownLatch(1);
- final Set<ThreadGroup> threadGroups = new HashSet<ThreadGroup>();
-
- _executorService.acquireExecutorService();
-
- try
- {
- _executorService.getPool().execute(createRunnable(latch, threadGroups));
-
- latch.await(3, TimeUnit.SECONDS);
-
- assertTrue("Expect that executor created a thread using default thread factory",
- threadGroups.contains(Thread.currentThread().getThreadGroup()));
- }
- finally
- {
- _executorService.releaseExecutorService();
- }
- }
-
- /**
- * Tests that the executor creates and executes a task using an overridden thread pool.
- */
- public void testExecuteCommandWithOverriddenExecutorThreadFactory() throws Exception
- {
- final CountDownLatch latch = new CountDownLatch(1);
- final ThreadGroup expectedThreadGroup = new ThreadGroup("junit");
- _executorService.setThreadFactory(new ThreadGroupChangingThreadFactory(expectedThreadGroup));
- _executorService.acquireExecutorService();
-
- final Set<ThreadGroup> threadGroups = new HashSet<ThreadGroup>();
-
- try
- {
- _executorService.getPool().execute(createRunnable(latch, threadGroups));
-
- latch.await(3, TimeUnit.SECONDS);
-
- assertTrue("Expect that executor created a thread using overridden thread factory",
- threadGroups.contains(expectedThreadGroup));
- }
- finally
- {
- _executorService.releaseExecutorService();
- }
- }
-
- private Runnable createRunnable(final CountDownLatch latch, final Set<ThreadGroup> threadGroups)
- {
- return new Runnable()
- {
-
- public void run()
- {
- threadGroups.add(Thread.currentThread().getThreadGroup());
- latch.countDown();
- }
-
- };
- }
-
- private final class ThreadGroupChangingThreadFactory implements ThreadFactory
- {
- private final ThreadGroup _newGroup;
-
- private ThreadGroupChangingThreadFactory(final ThreadGroup newGroup)
- {
- this._newGroup = newGroup;
- }
-
- public Thread newThread(Runnable r)
- {
- return new Thread(_newGroup, r);
- }
- }
-
-}
diff --git a/java/common/src/test/java/org/apache/qpid/session/TestSession.java b/java/common/src/test/java/org/apache/qpid/session/TestSession.java
deleted file mode 100644
index aafc91b03b..0000000000
--- a/java/common/src/test/java/org/apache/qpid/session/TestSession.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.session;
-
-import org.apache.mina.common.*;
-
-import java.net.SocketAddress;
-import java.util.Set;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ConcurrentHashMap;
-
-public class TestSession implements IoSession
-{
- private final ConcurrentMap attributes = new ConcurrentHashMap();
-
- public TestSession()
- {
- }
-
- public IoService getService()
- {
- return null; //TODO
- }
-
- public IoServiceConfig getServiceConfig()
- {
- return null; //TODO
- }
-
- public IoHandler getHandler()
- {
- return null; //TODO
- }
-
- public IoSessionConfig getConfig()
- {
- return null; //TODO
- }
-
- public IoFilterChain getFilterChain()
- {
- return null; //TODO
- }
-
- public WriteFuture write(Object message)
- {
- return null; //TODO
- }
-
- public CloseFuture close()
- {
- return null; //TODO
- }
-
- public Object getAttachment()
- {
- return getAttribute("");
- }
-
- public Object setAttachment(Object attachment)
- {
- return setAttribute("",attachment);
- }
-
- public Object getAttribute(String key)
- {
- return attributes.get(key);
- }
-
- public Object setAttribute(String key, Object value)
- {
- return attributes.put(key,value);
- }
-
- public Object setAttribute(String key)
- {
- return attributes.put(key, Boolean.TRUE);
- }
-
- public Object removeAttribute(String key)
- {
- return attributes.remove(key);
- }
-
- public boolean containsAttribute(String key)
- {
- return attributes.containsKey(key);
- }
-
- public Set getAttributeKeys()
- {
- return attributes.keySet();
- }
-
- public TransportType getTransportType()
- {
- return null; //TODO
- }
-
- public boolean isConnected()
- {
- return false; //TODO
- }
-
- public boolean isClosing()
- {
- return false; //TODO
- }
-
- public CloseFuture getCloseFuture()
- {
- return null; //TODO
- }
-
- public SocketAddress getRemoteAddress()
- {
- return null; //TODO
- }
-
- public SocketAddress getLocalAddress()
- {
- return null; //TODO
- }
-
- public SocketAddress getServiceAddress()
- {
- return null; //TODO
- }
-
- public int getIdleTime(IdleStatus status)
- {
- return 0; //TODO
- }
-
- public long getIdleTimeInMillis(IdleStatus status)
- {
- return 0; //TODO
- }
-
- public void setIdleTime(IdleStatus status, int idleTime)
- {
- //TODO
- }
-
- public int getWriteTimeout()
- {
- return 0; //TODO
- }
-
- public long getWriteTimeoutInMillis()
- {
- return 0; //TODO
- }
-
- public void setWriteTimeout(int writeTimeout)
- {
- //TODO
- }
-
- public TrafficMask getTrafficMask()
- {
- return null; //TODO
- }
-
- public void setTrafficMask(TrafficMask trafficMask)
- {
- //TODO
- }
-
- public void suspendRead()
- {
- //TODO
- }
-
- public void suspendWrite()
- {
- //TODO
- }
-
- public void resumeRead()
- {
- //TODO
- }
-
- public void resumeWrite()
- {
- //TODO
- }
-
- public long getReadBytes()
- {
- return 0; //TODO
- }
-
- public long getWrittenBytes()
- {
- return 0; //TODO
- }
-
- public long getReadMessages()
- {
- return 0;
- }
-
- public long getWrittenMessages()
- {
- return 0;
- }
-
- public long getWrittenWriteRequests()
- {
- return 0; //TODO
- }
-
- public int getScheduledWriteRequests()
- {
- return 0; //TODO
- }
-
- public int getScheduledWriteBytes()
- {
- return 0; //TODO
- }
-
- public long getCreationTime()
- {
- return 0; //TODO
- }
-
- public long getLastIoTime()
- {
- return 0; //TODO
- }
-
- public long getLastReadTime()
- {
- return 0; //TODO
- }
-
- public long getLastWriteTime()
- {
- return 0; //TODO
- }
-
- public boolean isIdle(IdleStatus status)
- {
- return false; //TODO
- }
-
- public int getIdleCount(IdleStatus status)
- {
- return 0; //TODO
- }
-
- public long getLastIdleTime(IdleStatus status)
- {
- return 0; //TODO
- }
-}
diff --git a/java/common/src/test/java/org/apache/qpid/test/utils/QpidTestCase.java b/java/common/src/test/java/org/apache/qpid/test/utils/QpidTestCase.java
deleted file mode 100644
index 8b470d555e..0000000000
--- a/java/common/src/test/java/org/apache/qpid/test/utils/QpidTestCase.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.test.utils;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-import junit.framework.TestResult;
-
-import org.apache.log4j.Logger;
-
-public class QpidTestCase extends TestCase
-{
- protected static final Logger _logger = Logger.getLogger(QpidTestCase.class);
-
- /**
- * Some tests are excluded when the property test.excludes is set to true.
- * An exclusion list is either a file (prop test.excludesfile) which contains one test name
- * to be excluded per line or a String (prop test.excludeslist) where tests to be excluded are
- * separated by " ". Excluded tests are specified following the format:
- * className#testName where className is the class of the test to be
- * excluded and testName is the name of the test to be excluded.
- * className#* excludes all the tests of the specified class.
- */
- static
- {
- if (Boolean.getBoolean("test.exclude"))
- {
- _logger.info("Some tests should be excluded, building the exclude list");
- String exclusionListURIs = System.getProperties().getProperty("test.excludefiles", "");
- String exclusionListString = System.getProperties().getProperty("test.excludelist", "");
- List<String> exclusionList = new ArrayList<String>();
-
- for (String uri : exclusionListURIs.split("\\s+"))
- {
- File file = new File(uri);
- if (file.exists())
- {
- _logger.info("Using exclude file: " + uri);
- try
- {
- BufferedReader in = new BufferedReader(new FileReader(file));
- String excludedTest = in.readLine();
- do
- {
- exclusionList.add(excludedTest);
- excludedTest = in.readLine();
- }
- while (excludedTest != null);
- }
- catch (IOException e)
- {
- _logger.warn("Exception when reading exclusion list", e);
- }
- }
- }
-
- if (!exclusionListString.equals(""))
- {
- _logger.info("Using excludeslist: " + exclusionListString);
- for (String test : exclusionListString.split("\\s+"))
- {
- exclusionList.add(test);
- }
- }
-
- _exclusionList = exclusionList;
- }
- }
-
- protected static final String MS_CLASS_NAME_KEY = "messagestore.class.name";
- protected static final String MEMORY_STORE_CLASS_NAME = "org.apache.qpid.server.store.MemoryMessageStore";
-
- private static List<String> _exclusionList;
-
- public QpidTestCase()
- {
- this("QpidTestCase");
- }
-
- public QpidTestCase(String name)
- {
- super(name);
- }
-
- public void run(TestResult testResult)
- {
- if (_exclusionList != null && (_exclusionList.contains(getClass().getPackage().getName() + ".*") ||
- _exclusionList.contains(getClass().getName() + "#*") ||
- _exclusionList.contains(getClass().getName() + "#" + getName())))
- {
- _logger.info("Test: " + getName() + " is excluded");
- testResult.endTest(this);
- }
- else
- {
- super.run(testResult);
- }
- }
-
- public String getTestProfileMessageStoreClassName()
- {
- String storeClass = System.getProperty(MS_CLASS_NAME_KEY);
-
- return storeClass != null ? storeClass : MEMORY_STORE_CLASS_NAME ;
- }
-}
diff --git a/java/common/src/test/java/org/apache/qpid/thread/ThreadFactoryTest.java b/java/common/src/test/java/org/apache/qpid/thread/ThreadFactoryTest.java
deleted file mode 100644
index 7b0f93700a..0000000000
--- a/java/common/src/test/java/org/apache/qpid/thread/ThreadFactoryTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.thread;
-
-import junit.framework.TestCase;
-
-/**
- * Tests the ThreadFactory.
- */
-public class ThreadFactoryTest extends TestCase
-{
- public void testThreadFactory()
- {
- Class<? extends ThreadFactory> threadFactoryClass = null;
- try
- {
- threadFactoryClass = Class.forName(System.getProperty("qpid.thread_factory",
- "org.apache.qpid.thread.DefaultThreadFactory")).asSubclass(ThreadFactory.class);
- }
- // If the thread factory class was wrong it will flagged way before it gets here.
- catch(Exception e)
- {
- fail("Invalid thread factory class");
- }
-
- assertEquals(threadFactoryClass, Threading.getThreadFactory().getClass());
- }
-
- /**
- * Tests creating a thread without a priority. Also verifies that the factory sets the
- * uncaught exception handler so uncaught exceptions are logged to SLF4J.
- */
- public void testCreateThreadWithDefaultPriority()
- {
- Runnable r = createRunnable();
-
- Thread t = null;
- try
- {
- t = Threading.getThreadFactory().createThread(r);
- }
- catch(Exception e)
- {
- fail("Error creating thread using Qpid thread factory");
- }
-
- assertNotNull(t);
- assertEquals(Thread.NORM_PRIORITY, t.getPriority());
- assertTrue(t.getUncaughtExceptionHandler() instanceof LoggingUncaughtExceptionHandler);
- }
-
- /**
- * Tests creating thread with a priority. Also verifies that the factory sets the
- * uncaught exception handler so uncaught exceptions are logged to SLF4J.
- */
- public void testCreateThreadWithSpecifiedPriority()
- {
- Runnable r = createRunnable();
-
- Thread t = null;
- try
- {
- t = Threading.getThreadFactory().createThread(r, 4);
- }
- catch(Exception e)
- {
- fail("Error creating thread using Qpid thread factory");
- }
-
- assertNotNull(t);
- assertEquals(4, t.getPriority());
- assertTrue(t.getUncaughtExceptionHandler() instanceof LoggingUncaughtExceptionHandler);
- }
-
- private Runnable createRunnable()
- {
- Runnable r = new Runnable(){
-
- public void run(){
-
- }
- };
- return r;
- }
-}
diff --git a/java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java b/java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java
deleted file mode 100644
index 375a326654..0000000000
--- a/java/common/src/test/java/org/apache/qpid/transport/ConnectionTest.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import org.apache.mina.util.AvailablePortFinder;
-
-import org.apache.qpid.test.utils.QpidTestCase;
-import org.apache.qpid.transport.network.ConnectionBinding;
-import org.apache.qpid.transport.network.io.IoAcceptor;
-import org.apache.qpid.transport.util.Logger;
-import org.apache.qpid.transport.util.Waiter;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Collections;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import java.io.IOException;
-
-import static org.apache.qpid.transport.Option.*;
-
-/**
- * ConnectionTest
- */
-
-public class ConnectionTest extends QpidTestCase implements SessionListener
-{
-
- private static final Logger log = Logger.get(ConnectionTest.class);
-
- private int port;
- private volatile boolean queue = false;
- private List<MessageTransfer> messages = new ArrayList<MessageTransfer>();
- private List<MessageTransfer> incoming = new ArrayList<MessageTransfer>();
-
- private IoAcceptor _ioa = null;
-
-
- protected void setUp() throws Exception
- {
- super.setUp();
-
- port = AvailablePortFinder.getNextAvailable(12000);
- }
-
- protected void tearDown() throws Exception
- {
- if (_ioa != null)
- {
- _ioa.close();
- }
-
- super.tearDown();
- }
-
- public void opened(Session ssn) {}
-
- public void resumed(Session ssn) {}
-
- public void message(final Session ssn, MessageTransfer xfr)
- {
- if (queue)
- {
- messages.add(xfr);
- ssn.processed(xfr);
- return;
- }
-
- String body = xfr.getBodyString();
-
- if (body.startsWith("CLOSE"))
- {
- ssn.getConnection().close();
- }
- else if (body.startsWith("DELAYED_CLOSE"))
- {
- ssn.processed(xfr);
- new Thread()
- {
- public void run()
- {
- try
- {
- sleep(3000);
- }
- catch (InterruptedException e)
- {
- throw new RuntimeException(e);
- }
- ssn.getConnection().close();
- }
- }.start();
- }
- else if (body.startsWith("ECHO"))
- {
- int id = xfr.getId();
- ssn.invoke(xfr);
- ssn.processed(id);
- }
- else if (body.startsWith("SINK"))
- {
- ssn.processed(xfr);
- }
- else if (body.startsWith("DROP"))
- {
- // do nothing
- }
- else if (body.startsWith("EXCP"))
- {
- ExecutionException exc = new ExecutionException();
- exc.setDescription("intentional exception for testing");
- ssn.invoke(exc);
- ssn.close();
- }
- else
- {
- throw new IllegalArgumentException
- ("unrecognized message: " + body);
- }
- }
-
- public void exception(Session ssn, SessionException exc)
- {
- throw exc;
- }
-
- public void closed(Session ssn) {}
-
- private void send(Session ssn, String msg)
- {
- send(ssn, msg, false);
- }
-
- private void send(Session ssn, String msg, boolean sync)
- {
- ssn.messageTransfer
- ("xxx", MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED,
- null, msg, sync ? SYNC : NONE);
- }
-
- private Connection connect(final CountDownLatch closed)
- {
- Connection conn = new Connection();
- conn.addConnectionListener(new ConnectionListener()
- {
- public void opened(Connection conn) {}
- public void exception(Connection conn, ConnectionException exc)
- {
- exc.printStackTrace();
- }
- public void closed(Connection conn)
- {
- if (closed != null)
- {
- closed.countDown();
- }
- }
- });
- conn.connect("localhost", port, null, "guest", "guest", false);
- return conn;
- }
-
- public void testProtocolNegotiationExceptionOverridesCloseException() throws Exception
- {
- // Force os.name to be windows to exercise code in IoReceiver
- // that looks for the value of os.name
- System.setProperty("os.name","windows");
-
- // Start server as 0-9 to froce a ProtocolVersionException
- startServer(new ProtocolHeader(1, 0, 9));
-
- CountDownLatch closed = new CountDownLatch(1);
-
- try
- {
- connect(closed);
- fail("ProtocolVersionException expected");
- }
- catch (ProtocolVersionException pve)
- {
- //Expected code path
- }
- catch (Exception e)
- {
- fail("ProtocolVersionException expected. Got:" + e.getMessage());
- }
- }
-
- private void startServer()
- {
- startServer(new ProtocolHeader(1, 0, 10));
- }
-
- private void startServer(final ProtocolHeader protocolHeader)
- {
- ConnectionDelegate server = new ServerDelegate()
- {
- @Override
- public void init(Connection conn, ProtocolHeader hdr)
- {
- conn.send(protocolHeader);
- List<Object> utf8 = new ArrayList<Object>();
- utf8.add("utf8");
- conn.connectionStart(null, Collections.EMPTY_LIST, utf8);
- }
-
- @Override
- public Session getSession(Connection conn, SessionAttach atc)
- {
- Session ssn = super.getSession(conn, atc);
- ssn.setSessionListener(ConnectionTest.this);
- return ssn;
- }
- };
-
- try
- {
- _ioa = new IoAcceptor("localhost", port, ConnectionBinding.get(server));
- }
- catch (IOException e)
- {
- e.printStackTrace();
- fail("Unable to start Server for test due to:" + e.getMessage());
- }
-
- _ioa.start();
- }
-
- public void testClosedNotificationAndWriteToClosed() throws Exception
- {
- startServer();
-
- CountDownLatch closed = new CountDownLatch(1);
- Connection conn = connect(closed);
-
- Session ssn = conn.createSession(1);
- send(ssn, "CLOSE");
-
- if (!closed.await(3, TimeUnit.SECONDS))
- {
- fail("never got notified of connection close");
- }
-
- try
- {
- conn.connectionCloseOk();
- fail("writing to a closed socket succeeded");
- }
- catch (TransportException e)
- {
- // expected
- }
- }
-
- class FailoverConnectionListener implements ConnectionListener
- {
- public void opened(Connection conn) {}
-
- public void exception(Connection conn, ConnectionException e)
- {
- throw e;
- }
-
- public void closed(Connection conn)
- {
- queue = true;
- conn.connect("localhost", port, null, "guest", "guest");
- conn.resume();
- }
- }
-
- class TestSessionListener implements SessionListener
- {
- public void opened(Session s) {}
- public void resumed(Session s) {}
- public void exception(Session s, SessionException e) {}
- public void message(Session s, MessageTransfer xfr)
- {
- synchronized (incoming)
- {
- incoming.add(xfr);
- incoming.notifyAll();
- }
-
- s.processed(xfr);
- }
- public void closed(Session s) {}
- }
-
- public void testResumeNonemptyReplayBuffer() throws Exception
- {
- startServer();
-
- Connection conn = new Connection();
- conn.addConnectionListener(new FailoverConnectionListener());
- conn.connect("localhost", port, null, "guest", "guest");
- Session ssn = conn.createSession(1);
- ssn.setSessionListener(new TestSessionListener());
-
- send(ssn, "SINK 0");
- send(ssn, "ECHO 1");
- send(ssn, "ECHO 2");
-
- ssn.sync();
-
- String[] msgs = { "DROP 3", "DROP 4", "DROP 5", "CLOSE 6", "SINK 7" };
- for (String m : msgs)
- {
- send(ssn, m);
- }
-
- ssn.sync();
-
- assertEquals(msgs.length, messages.size());
- for (int i = 0; i < msgs.length; i++)
- {
- assertEquals(msgs[i], messages.get(i).getBodyString());
- }
-
- queue = false;
-
- send(ssn, "ECHO 8");
- send(ssn, "ECHO 9");
-
- synchronized (incoming)
- {
- Waiter w = new Waiter(incoming, 30000);
- while (w.hasTime() && incoming.size() < 4)
- {
- w.await();
- }
-
- assertEquals(4, incoming.size());
- assertEquals("ECHO 1", incoming.get(0).getBodyString());
- assertEquals(0, incoming.get(0).getId());
- assertEquals("ECHO 2", incoming.get(1).getBodyString());
- assertEquals(1, incoming.get(1).getId());
- assertEquals("ECHO 8", incoming.get(2).getBodyString());
- assertEquals(0, incoming.get(0).getId());
- assertEquals("ECHO 9", incoming.get(3).getBodyString());
- assertEquals(1, incoming.get(1).getId());
- }
- }
-
- public void testResumeEmptyReplayBuffer() throws InterruptedException
- {
- startServer();
-
- Connection conn = new Connection();
- conn.addConnectionListener(new FailoverConnectionListener());
- conn.connect("localhost", port, null, "guest", "guest");
- Session ssn = conn.createSession(1);
- ssn.setSessionListener(new TestSessionListener());
-
- send(ssn, "SINK 0");
- send(ssn, "SINK 1");
- send(ssn, "DELAYED_CLOSE 2");
- ssn.sync();
- Thread.sleep(6000);
- send(ssn, "SINK 3");
- ssn.sync();
- System.out.println(messages);
- assertEquals(1, messages.size());
- assertEquals("SINK 3", messages.get(0).getBodyString());
- }
-
- public void testFlushExpected() throws InterruptedException
- {
- startServer();
-
- Connection conn = new Connection();
- conn.connect("localhost", port, null, "guest", "guest");
- Session ssn = conn.createSession();
- ssn.sessionFlush(EXPECTED);
- send(ssn, "SINK 0");
- ssn.sessionFlush(EXPECTED);
- send(ssn, "SINK 1");
- ssn.sync();
- }
-
- public void testHeartbeat()
- {
- startServer();
- Connection conn = new Connection();
- conn.connect("localhost", port, null, "guest", "guest");
- conn.connectionHeartbeat();
- conn.close();
- }
-
- public void testExecutionExceptionInvoke() throws Exception
- {
- startServer();
-
- Connection conn = new Connection();
- conn.connect("localhost", port, null, "guest", "guest");
- Session ssn = conn.createSession();
- send(ssn, "EXCP 0");
- Thread.sleep(3000);
- try
- {
- send(ssn, "SINK 1");
- }
- catch (SessionException exc)
- {
- assertNotNull(exc.getException());
- }
- }
-
- public void testExecutionExceptionSync() throws Exception
- {
- startServer();
-
- Connection conn = new Connection();
- conn.connect("localhost", port, null, "guest", "guest");
- Session ssn = conn.createSession();
- send(ssn, "EXCP 0", true);
- try
- {
- ssn.sync();
- fail("this should have failed");
- }
- catch (SessionException exc)
- {
- assertNotNull(exc.getException());
- }
- }
-
-}
diff --git a/java/common/src/test/java/org/apache/qpid/transport/GenTest.java b/java/common/src/test/java/org/apache/qpid/transport/GenTest.java
deleted file mode 100644
index 512a0a29a6..0000000000
--- a/java/common/src/test/java/org/apache/qpid/transport/GenTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import junit.framework.TestCase;
-
-/**
- * GenTest
- *
- */
-
-public class GenTest extends TestCase
-{
-
- public void testBooleans()
- {
- QueueDeclare qd = new QueueDeclare().queue("test-queue").durable(false);
- assertEquals(qd.getQueue(), "test-queue");
- assertFalse("durable should be false", qd.getDurable());
- qd.setDurable(true);
- assertTrue("durable should be true", qd.getDurable());
- qd.setDurable(false);
- assertFalse("durable should be false again", qd.getDurable());
- }
-
-}
diff --git a/java/common/src/test/java/org/apache/qpid/transport/RangeSetTest.java b/java/common/src/test/java/org/apache/qpid/transport/RangeSetTest.java
deleted file mode 100644
index ad45d00e46..0000000000
--- a/java/common/src/test/java/org/apache/qpid/transport/RangeSetTest.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import static org.apache.qpid.util.Serial.*;
-
-/**
- * RangeSetTest
- *
- */
-
-public class RangeSetTest extends TestCase
-{
-
- private void check(RangeSet ranges)
- {
- List<Integer> posts = new ArrayList<Integer>();
- for (Range range : ranges)
- {
- posts.add(range.getLower());
- posts.add(range.getUpper());
- }
-
- List<Integer> sorted = new ArrayList<Integer>(posts);
- Collections.sort(sorted, COMPARATOR);
-
- assertEquals(posts, sorted);
-
- int idx = 1;
- while (idx + 1 < posts.size())
- {
- assertTrue(!eq(posts.get(idx) + 1, posts.get(idx+1)));
- idx += 2;
- }
- }
-
- public void test1()
- {
- RangeSet ranges = new RangeSet();
- ranges.add(5, 10);
- check(ranges);
- ranges.add(15, 20);
- check(ranges);
- ranges.add(23, 25);
- check(ranges);
- ranges.add(12, 14);
- check(ranges);
- ranges.add(0, 1);
- check(ranges);
- ranges.add(3, 11);
- check(ranges);
- }
-
- public void test2()
- {
- RangeSet rs = new RangeSet();
- check(rs);
-
- rs.add(1);
- assertTrue(rs.includes(1));
- assertTrue(!rs.includes(2));
- assertTrue(!rs.includes(0));
- check(rs);
-
- rs.add(2);
- assertTrue(!rs.includes(0));
- assertTrue(rs.includes(1));
- assertTrue(rs.includes(2));
- assertTrue(!rs.includes(3));
- check(rs);
-
- rs.add(0);
-
- assertTrue(!rs.includes(-1));
- assertTrue(rs.includes(0));
- assertTrue(rs.includes(1));
- assertTrue(rs.includes(2));
- assertTrue(!rs.includes(3));
- check(rs);
-
- rs.add(37);
-
- assertTrue(!rs.includes(-1));
- assertTrue(rs.includes(0));
- assertTrue(rs.includes(1));
- assertTrue(rs.includes(2));
- assertTrue(!rs.includes(3));
- assertTrue(!rs.includes(36));
- assertTrue(rs.includes(37));
- assertTrue(!rs.includes(38));
- check(rs);
-
- rs.add(-1);
- check(rs);
-
- rs.add(-3);
- check(rs);
-
- rs.add(1, 20);
- assertTrue(!rs.includes(21));
- assertTrue(rs.includes(20));
- check(rs);
- }
-
- public void testAddSelf()
- {
- RangeSet a = new RangeSet();
- a.add(0, 8);
- check(a);
- a.add(0, 8);
- check(a);
- assertEquals(a.size(), 1);
- Range range = a.iterator().next();
- assertEquals(range.getLower(), 0);
- assertEquals(range.getUpper(), 8);
- }
-
- public void testIntersect1()
- {
- Range a = new Range(0, 10);
- Range b = new Range(9, 20);
- Range i1 = a.intersect(b);
- Range i2 = b.intersect(a);
- assertEquals(i1.getUpper(), 10);
- assertEquals(i2.getUpper(), 10);
- assertEquals(i1.getLower(), 9);
- assertEquals(i2.getLower(), 9);
- }
-
- public void testIntersect2()
- {
- Range a = new Range(0, 10);
- Range b = new Range(11, 20);
- assertNull(a.intersect(b));
- assertNull(b.intersect(a));
- }
-
- public void testIntersect3()
- {
- Range a = new Range(0, 10);
- Range b = new Range(3, 5);
- Range i1 = a.intersect(b);
- Range i2 = b.intersect(a);
- assertEquals(i1.getUpper(), 5);
- assertEquals(i2.getUpper(), 5);
- assertEquals(i1.getLower(), 3);
- assertEquals(i2.getLower(), 3);
- }
-
- public void testSubtract1()
- {
- Range a = new Range(0, 10);
- assertTrue(a.subtract(a).isEmpty());
- }
-
- public void testSubtract2()
- {
- Range a = new Range(0, 10);
- Range b = new Range(20, 30);
- List<Range> ranges = a.subtract(b);
- assertEquals(ranges.size(), 1);
- Range d = ranges.get(0);
- assertEquals(d.getLower(), a.getLower());
- assertEquals(d.getUpper(), a.getUpper());
- }
-
- public void testSubtract3()
- {
- Range a = new Range(20, 30);
- Range b = new Range(0, 10);
- List<Range> ranges = a.subtract(b);
- assertEquals(ranges.size(), 1);
- Range d = ranges.get(0);
- assertEquals(d.getLower(), a.getLower());
- assertEquals(d.getUpper(), a.getUpper());
- }
-
- public void testSubtract4()
- {
- Range a = new Range(0, 10);
- Range b = new Range(3, 5);
- List<Range> ranges = a.subtract(b);
- assertEquals(ranges.size(), 2);
- Range low = ranges.get(0);
- Range high = ranges.get(1);
- assertEquals(low.getLower(), 0);
- assertEquals(low.getUpper(), 2);
- assertEquals(high.getLower(), 6);
- assertEquals(high.getUpper(), 10);
- }
-
- public void testSubtract5()
- {
- Range a = new Range(0, 10);
- Range b = new Range(3, 20);
- List<Range> ranges = a.subtract(b);
- assertEquals(ranges.size(), 1);
- Range d = ranges.get(0);
- assertEquals(d.getLower(), 0);
- assertEquals(d.getUpper(), 2);
- }
-
- public void testSubtract6()
- {
- Range a = new Range(0, 10);
- Range b = new Range(-10, 5);
- List<Range> ranges = a.subtract(b);
- assertEquals(ranges.size(), 1);
- Range d = ranges.get(0);
- assertEquals(d.getLower(), 6);
- assertEquals(d.getUpper(), 10);
- }
-
-}
diff --git a/java/common/src/test/java/org/apache/qpid/transport/TestNetworkDriver.java b/java/common/src/test/java/org/apache/qpid/transport/TestNetworkDriver.java
deleted file mode 100644
index 957a7190ee..0000000000
--- a/java/common/src/test/java/org/apache/qpid/transport/TestNetworkDriver.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport;
-
-import java.net.BindException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.nio.ByteBuffer;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import org.apache.qpid.protocol.ProtocolEngine;
-import org.apache.qpid.protocol.ProtocolEngineFactory;
-import org.apache.qpid.ssl.SSLContextFactory;
-
-/**
- * Test implementation of IoSession, which is required for some tests. Methods not being used are not implemented,
- * so if this class is being used and some methods are to be used, then please update those.
- */
-public class TestNetworkDriver implements NetworkDriver
-{
- private final ConcurrentMap attributes = new ConcurrentHashMap();
- private String _remoteHost = "127.0.0.1";
- private String _localHost = "127.0.0.1";
- private int _port = 1;
- private SocketAddress _localAddress = null;
- private SocketAddress _remoteAddress = null;
-
- public TestNetworkDriver()
- {
- }
-
- public void bind(int port, InetAddress[] addresses, ProtocolEngineFactory protocolFactory,
- NetworkDriverConfiguration config, SSLContextFactory sslFactory) throws BindException
- {
-
- }
-
- public SocketAddress getLocalAddress()
- {
- return (_localAddress != null) ? _localAddress : new InetSocketAddress(_localHost, _port);
- }
-
- public SocketAddress getRemoteAddress()
- {
- return (_remoteAddress != null) ? _remoteAddress : new InetSocketAddress(_remoteHost, _port);
- }
-
- public void open(int port, InetAddress destination, ProtocolEngine engine, NetworkDriverConfiguration config,
- SSLContextFactory sslFactory) throws OpenException
- {
-
- }
-
- public void setMaxReadIdle(int idleTime)
- {
-
- }
-
- public void setMaxWriteIdle(int idleTime)
- {
-
- }
-
- public void close()
- {
-
- }
-
- public void flush()
- {
-
- }
-
- public void send(ByteBuffer msg)
- {
-
- }
-
- public void setIdleTimeout(int i)
- {
-
- }
-
- public void setPort(int port)
- {
- _port = port;
- }
-
- public int getPort()
- {
- return _port;
- }
-
- public void setLocalHost(String host)
- {
- _localHost = host;
- }
-
- public void setRemoteHost(String host)
- {
- _remoteHost = host;
- }
-
- public void setLocalAddress(SocketAddress address)
- {
- _localAddress = address;
- }
-
- public void setRemoteAddress(SocketAddress address)
- {
- _remoteAddress = address;
- }
-}
diff --git a/java/common/src/test/java/org/apache/qpid/transport/codec/BBEncoderTest.java b/java/common/src/test/java/org/apache/qpid/transport/codec/BBEncoderTest.java
deleted file mode 100644
index 79bf184fe2..0000000000
--- a/java/common/src/test/java/org/apache/qpid/transport/codec/BBEncoderTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.transport.codec;
-
-import junit.framework.TestCase;
-
-import java.nio.ByteBuffer;
-
-/**
- * BBEncoderTest
- *
- */
-
-public class BBEncoderTest extends TestCase
-{
-
- public void testGrow()
- {
- BBEncoder enc = new BBEncoder(4);
- enc.writeInt32(0xDEADBEEF);
- ByteBuffer buf = enc.buffer();
- assertEquals(0xDEADBEEF, buf.getInt(0));
- enc.writeInt32(0xBEEFDEAD);
- buf = enc.buffer();
- assertEquals(0xDEADBEEF, buf.getInt(0));
- assertEquals(0xBEEFDEAD, buf.getInt(4));
- }
-
-}
diff --git a/java/common/src/test/java/org/apache/qpid/transport/network/mina/MINANetworkDriverTest.java b/java/common/src/test/java/org/apache/qpid/transport/network/mina/MINANetworkDriverTest.java
deleted file mode 100644
index fc8e689ca4..0000000000
--- a/java/common/src/test/java/org/apache/qpid/transport/network/mina/MINANetworkDriverTest.java
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.transport.network.mina;
-
-import java.net.BindException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.net.UnknownHostException;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-import junit.framework.TestCase;
-
-import org.apache.qpid.framing.AMQDataBlock;
-import org.apache.qpid.protocol.ProtocolEngine;
-import org.apache.qpid.protocol.ProtocolEngineFactory;
-import org.apache.qpid.transport.NetworkDriver;
-import org.apache.qpid.transport.OpenException;
-
-public class MINANetworkDriverTest extends TestCase
-{
-
- private static final String TEST_DATA = "YHALOTHAR";
- private static int TEST_PORT = 2323;
- private NetworkDriver _server;
- private NetworkDriver _client;
- private CountingProtocolEngine _countingEngine; // Keeps a count of how many bytes it's read
- private Exception _thrownEx;
-
- @Override
- public void setUp()
- {
- _server = new MINANetworkDriver();
- _client = new MINANetworkDriver();
- _thrownEx = null;
- _countingEngine = new CountingProtocolEngine();
- // increment the port to prevent tests clashing with each other when
- // the port is in TIMED_WAIT state.
- TEST_PORT++;
- }
-
- @Override
- public void tearDown()
- {
- if (_server != null)
- {
- _server.close();
- }
-
- if (_client != null)
- {
- _client.close();
- }
- }
-
- /**
- * Tests that a socket can't be opened if a driver hasn't been bound
- * to the port and can be opened if a driver has been bound.
- * @throws BindException
- * @throws UnknownHostException
- * @throws OpenException
- */
- public void testBindOpen() throws BindException, UnknownHostException, OpenException
- {
- try
- {
- _client.open(TEST_PORT, InetAddress.getLocalHost(), _countingEngine, null, null);
- }
- catch (OpenException e)
- {
- _thrownEx = e;
- }
-
- assertNotNull("Open should have failed since no engine bound", _thrownEx);
-
- _server.bind(TEST_PORT, null, new EchoProtocolEngineSingletonFactory(), null, null);
-
- _client.open(TEST_PORT, InetAddress.getLocalHost(), _countingEngine, null, null);
- }
-
- /**
- * Tests that a socket can't be opened after a bound NetworkDriver has been closed
- * @throws BindException
- * @throws UnknownHostException
- * @throws OpenException
- */
- public void testBindOpenCloseOpen() throws BindException, UnknownHostException, OpenException
- {
- _server.bind(TEST_PORT, null, new EchoProtocolEngineSingletonFactory(), null, null);
- _client.open(TEST_PORT, InetAddress.getLocalHost(), _countingEngine, null, null);
- _client.close();
- _server.close();
-
- try
- {
- _client.open(TEST_PORT, InetAddress.getLocalHost(), _countingEngine, null, null);
- }
- catch (OpenException e)
- {
- _thrownEx = e;
- }
- assertNotNull("Open should have failed", _thrownEx);
- }
-
- /**
- * Checks that the right exception is thrown when binding a NetworkDriver to an already
- * existing socket.
- */
- public void testBindPortInUse()
- {
- try
- {
- _server.bind(TEST_PORT, null, new EchoProtocolEngineSingletonFactory(), null, null);
- }
- catch (BindException e)
- {
- fail("First bind should not fail");
- }
-
- try
- {
- _client.bind(TEST_PORT, null, new EchoProtocolEngineSingletonFactory(), null, null);
- }
- catch (BindException e)
- {
- _thrownEx = e;
- }
- assertNotNull("Second bind should throw BindException", _thrownEx);
- }
-
- /**
- * tests that bytes sent on a network driver are received at the other end
- *
- * @throws UnknownHostException
- * @throws OpenException
- * @throws InterruptedException
- * @throws BindException
- */
- public void testSend() throws UnknownHostException, OpenException, InterruptedException, BindException
- {
- // Open a connection from a counting engine to an echo engine
- _server.bind(TEST_PORT, null, new EchoProtocolEngineSingletonFactory(), null, null);
- _client.open(TEST_PORT, InetAddress.getLocalHost(), _countingEngine, null, null);
-
- // Tell the counting engine how much data we're sending
- _countingEngine.setNewLatch(TEST_DATA.getBytes().length);
-
- // Send the data and wait for up to 2 seconds to get it back
- _client.send(ByteBuffer.wrap(TEST_DATA.getBytes()));
- _countingEngine.getLatch().await(2, TimeUnit.SECONDS);
-
- // Check what we got
- assertEquals("Wrong amount of data recieved", TEST_DATA.getBytes().length, _countingEngine.getReadBytes());
- }
-
- /**
- * Opens a connection with a low read idle and check that it gets triggered
- * @throws BindException
- * @throws OpenException
- * @throws UnknownHostException
- *
- */
- public void testSetReadIdle() throws BindException, UnknownHostException, OpenException
- {
- // Open a connection from a counting engine to an echo engine
- _server.bind(TEST_PORT, null, new EchoProtocolEngineSingletonFactory(), null, null);
- _client.open(TEST_PORT, InetAddress.getLocalHost(), _countingEngine, null, null);
- assertFalse("Reader should not have been idle", _countingEngine.getReaderHasBeenIdle());
- _client.setMaxReadIdle(1);
- sleepForAtLeast(1500);
- assertTrue("Reader should have been idle", _countingEngine.getReaderHasBeenIdle());
- }
-
- /**
- * Opens a connection with a low write idle and check that it gets triggered
- * @throws BindException
- * @throws OpenException
- * @throws UnknownHostException
- *
- */
- public void testSetWriteIdle() throws BindException, UnknownHostException, OpenException
- {
- // Open a connection from a counting engine to an echo engine
- _server.bind(TEST_PORT, null, new EchoProtocolEngineSingletonFactory(), null, null);
- _client.open(TEST_PORT, InetAddress.getLocalHost(), _countingEngine, null, null);
- assertFalse("Reader should not have been idle", _countingEngine.getWriterHasBeenIdle());
- _client.setMaxWriteIdle(1);
- sleepForAtLeast(1500);
- assertTrue("Reader should have been idle", _countingEngine.getWriterHasBeenIdle());
- }
-
-
- /**
- * Creates and then closes a connection from client to server and checks that the server
- * has its closed() method called. Then creates a new client and closes the server to check
- * that the client has its closed() method called.
- * @throws BindException
- * @throws UnknownHostException
- * @throws OpenException
- */
- public void testClosed() throws BindException, UnknownHostException, OpenException
- {
- // Open a connection from a counting engine to an echo engine
- EchoProtocolEngineSingletonFactory factory = new EchoProtocolEngineSingletonFactory();
- _server.bind(TEST_PORT, null, factory, null, null);
- _client.open(TEST_PORT, InetAddress.getLocalHost(), _countingEngine, null, null);
- EchoProtocolEngine serverEngine = null;
- while (serverEngine == null)
- {
- serverEngine = factory.getEngine();
- if (serverEngine == null)
- {
- try
- {
- Thread.sleep(10);
- }
- catch (InterruptedException e)
- {
- }
- }
- }
- assertFalse("Server should not have been closed", serverEngine.getClosed());
- serverEngine.setNewLatch(1);
- _client.close();
- try
- {
- serverEngine.getLatch().await(2, TimeUnit.SECONDS);
- }
- catch (InterruptedException e)
- {
- }
- assertTrue("Server should have been closed", serverEngine.getClosed());
-
- _client.open(TEST_PORT, InetAddress.getLocalHost(), _countingEngine, null, null);
- _countingEngine.setClosed(false);
- assertFalse("Client should not have been closed", _countingEngine.getClosed());
- _countingEngine.setNewLatch(1);
- _server.close();
- try
- {
- _countingEngine.getLatch().await(2, TimeUnit.SECONDS);
- }
- catch (InterruptedException e)
- {
- }
- assertTrue("Client should have been closed", _countingEngine.getClosed());
- }
-
- /**
- * Create a connection and instruct the client to throw an exception when it gets some data
- * and that the latch gets counted down.
- * @throws BindException
- * @throws UnknownHostException
- * @throws OpenException
- * @throws InterruptedException
- */
- public void testExceptionCaught() throws BindException, UnknownHostException, OpenException, InterruptedException
- {
- _server.bind(TEST_PORT, null, new EchoProtocolEngineSingletonFactory(), null, null);
- _client.open(TEST_PORT, InetAddress.getLocalHost(), _countingEngine, null, null);
-
-
- assertEquals("Exception should not have been thrown", 1,
- _countingEngine.getExceptionLatch().getCount());
- _countingEngine.setErrorOnNextRead(true);
- _countingEngine.setNewLatch(TEST_DATA.getBytes().length);
- _client.send(ByteBuffer.wrap(TEST_DATA.getBytes()));
- _countingEngine.getExceptionLatch().await(2, TimeUnit.SECONDS);
- assertEquals("Exception should have been thrown", 0,
- _countingEngine.getExceptionLatch().getCount());
- }
-
- /**
- * Opens a connection and checks that the remote address is the one that was asked for
- * @throws BindException
- * @throws UnknownHostException
- * @throws OpenException
- */
- public void testGetRemoteAddress() throws BindException, UnknownHostException, OpenException
- {
- _server.bind(TEST_PORT, null, new EchoProtocolEngineSingletonFactory(), null, null);
- _client.open(TEST_PORT, InetAddress.getLocalHost(), _countingEngine, null, null);
- assertEquals(new InetSocketAddress(InetAddress.getLocalHost(), TEST_PORT),
- _client.getRemoteAddress());
- }
-
- private class EchoProtocolEngineSingletonFactory implements ProtocolEngineFactory
- {
- EchoProtocolEngine _engine = null;
-
- public ProtocolEngine newProtocolEngine(NetworkDriver driver)
- {
- if (_engine == null)
- {
- _engine = new EchoProtocolEngine();
- _engine.setNetworkDriver(driver);
- }
- return getEngine();
- }
-
- public EchoProtocolEngine getEngine()
- {
- return _engine;
- }
- }
-
- public class CountingProtocolEngine implements ProtocolEngine
- {
-
- protected NetworkDriver _driver;
- public ArrayList<ByteBuffer> _receivedBytes = new ArrayList<ByteBuffer>();
- private int _readBytes;
- private CountDownLatch _latch = new CountDownLatch(0);
- private boolean _readerHasBeenIdle;
- private boolean _writerHasBeenIdle;
- private boolean _closed = false;
- private boolean _nextReadErrors = false;
- private CountDownLatch _exceptionLatch = new CountDownLatch(1);
-
- public void closed()
- {
- setClosed(true);
- _latch.countDown();
- }
-
- public void setErrorOnNextRead(boolean b)
- {
- _nextReadErrors = b;
- }
-
- public void setNewLatch(int length)
- {
- _latch = new CountDownLatch(length);
- }
-
- public long getReadBytes()
- {
- return _readBytes;
- }
-
- public SocketAddress getRemoteAddress()
- {
- if (_driver != null)
- {
- return _driver.getRemoteAddress();
- }
- else
- {
- return null;
- }
- }
-
- public SocketAddress getLocalAddress()
- {
- if (_driver != null)
- {
- return _driver.getLocalAddress();
- }
- else
- {
- return null;
- }
- }
-
- public long getWrittenBytes()
- {
- return 0;
- }
-
- public void readerIdle()
- {
- _readerHasBeenIdle = true;
- }
-
- public void setNetworkDriver(NetworkDriver driver)
- {
- _driver = driver;
- }
-
- public void writeFrame(AMQDataBlock frame)
- {
-
- }
-
- public void writerIdle()
- {
- _writerHasBeenIdle = true;
- }
-
- public void exception(Throwable t)
- {
- _exceptionLatch.countDown();
- }
-
- public CountDownLatch getExceptionLatch()
- {
- return _exceptionLatch;
- }
-
- public void received(ByteBuffer msg)
- {
- // increment read bytes and count down the latch for that many
- int bytes = msg.remaining();
- _readBytes += bytes;
- for (int i = 0; i < bytes; i++)
- {
- _latch.countDown();
- }
-
- // Throw an error if we've been asked too, but we can still count
- if (_nextReadErrors)
- {
- throw new RuntimeException("Was asked to error");
- }
- }
-
- public CountDownLatch getLatch()
- {
- return _latch;
- }
-
- public boolean getWriterHasBeenIdle()
- {
- return _writerHasBeenIdle;
- }
-
- public boolean getReaderHasBeenIdle()
- {
- return _readerHasBeenIdle;
- }
-
- public void setClosed(boolean _closed)
- {
- this._closed = _closed;
- }
-
- public boolean getClosed()
- {
- return _closed;
- }
-
- }
-
- private class EchoProtocolEngine extends CountingProtocolEngine
- {
-
- public void received(ByteBuffer msg)
- {
- super.received(msg);
- msg.rewind();
- _driver.send(msg);
- }
- }
-
- public static void sleepForAtLeast(long period)
- {
- long start = System.currentTimeMillis();
- long timeLeft = period;
- while (timeLeft > 0)
- {
- try
- {
- Thread.sleep(timeLeft);
- }
- catch (InterruptedException e)
- {
- // Ignore it
- }
- timeLeft = period - (System.currentTimeMillis() - start);
- }
- }
-} \ No newline at end of file
diff --git a/java/common/src/test/java/org/apache/qpid/util/CommandLineParserTest.java b/java/common/src/test/java/org/apache/qpid/util/CommandLineParserTest.java
deleted file mode 100644
index 942901f1c0..0000000000
--- a/java/common/src/test/java/org/apache/qpid/util/CommandLineParserTest.java
+++ /dev/null
@@ -1,554 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-package org.apache.qpid.util;
-
-import junit.framework.*;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Properties;
-
-/**
- * Unit tests the {@link CommandLineParser} class.
- *
- * <p><table id="crc"><caption>CRC Card</caption>
- * <tr><th> Responsibilities <th> Collaborations
- * <tr><td> Check that parsing a single flag works ok.
- * <tr><td> Check that parsing multiple flags condensed together works ok.
- * <tr><td> Check that parsing an option with a space between it and its argument works ok.
- * <tr><td> Check that parsing an option with no space between it and its argument works ok.
- * <tr><td> Check that parsing an option with specific argument format works ok.
- * <tr><td> Check that parsing an option with specific argument format fails on bad argument.
- * <tr><td> Check that parsing a flag condensed together with an option fails.
- * <tr><td> Check that parsing a free argument works ok.
- * <tr><td> Check that parsing a free argument with specific format works ok.
- * <tr><td> Check that parsing a free argument with specific format fails on bad argument.
- * <tr><td> Check that parsing a mandatory option works ok.
- * <tr><td> Check that parsing a mandatory free argument works ok.
- * <tr><td> Check that parsing a mandatory option fails when no option is set.
- * <tr><td> Check that parsing a mandatory free argument fails when no argument is specified.
- * <tr><td> Check that parsing an unknown option works when unknowns not errors.
- * <tr><td> Check that parsing an unknown flag fails when unknowns are to be reported as errors.
- * <tr><td> Check that parsing an unknown option fails when unknowns are to be reported as errors.
- * <tr><td> Check that get errors returns a string on errors.
- * <tr><td> Check that get errors returns an empty string on no errors.
- * <tr><td> Check that get usage returns a string.
- * <tr><td> Check that get options in force returns an empty string before parsing.
- * <tr><td> Check that get options in force return a non-empty string after parsing.
- * </table>
- */
-public class CommandLineParserTest extends TestCase
-{
- private static final Logger log = LoggerFactory.getLogger(CommandLineParserTest.class);
-
- public CommandLineParserTest(String name)
- {
- super(name);
- }
-
- /**
- * Compile all the tests for the default test implementation of a traversable state into a test suite.
- */
- public static Test suite()
- {
- // Build a new test suite
- TestSuite suite = new TestSuite("CommandLineParser Tests");
-
- // Add all the tests defined in this class (using the default constructor)
- suite.addTestSuite(CommandLineParserTest.class);
-
- return suite;
- }
-
- /** Check that get errors returns an empty string on no errors. */
- public void testGetErrorsReturnsEmptyStringOnNoErrors() throws Exception
- {
- // Create a command line parser for some flags and options.
- CommandLineParser parser =
- new CommandLineParser(
- new String[][]
- {
- { "t1", "Test Flag 1." },
- { "t2", "Test Option 2.", "test" },
- { "t3", "Test Option 3.", "test", "true" },
- { "t4", "Test Option 4.", "test", null, "^test$" }
- });
-
- // Do some legal parsing.
- parser.parseCommandLine(new String[] { "-t1", "-t2test", "-t3test", "-t4test" });
-
- // Check that the get errors message returns an empty string.
- assertTrue("The errors method did not return an empty string.", "".equals(parser.getErrors()));
- }
-
- /** Check that get errors returns a string on errors. */
- public void testGetErrorsReturnsStringOnErrors() throws Exception
- {
- // Create a command line parser for some flags and options.
- CommandLineParser parser =
- new CommandLineParser(
- new String[][]
- {
- { "t1", "Test Flag 1." },
- { "t2", "Test Option 2.", "test" },
- { "t3", "Test Option 3.", "test", "true" },
- { "t4", "Test Option 4.", "test", null, "^test$" }
- });
-
- try
- {
- // Do some illegal parsing.
- parser.parseCommandLine(new String[] { "-t1", "-t1t2test", "-t4fail" });
- }
- catch (IllegalArgumentException e)
- { }
-
- // Check that the get errors message returns a string.
- assertTrue("The errors method returned an empty string.",
- !((parser.getErrors() == null) || "".equals(parser.getErrors())));
-
- }
-
- /** Check that get options in force returns an empty string before parsing. */
- public void testGetOptionsInForceReturnsEmptyStringBeforeParsing() throws Exception
- {
- // Create a command line parser for some flags and options.
- CommandLineParser parser =
- new CommandLineParser(
- new String[][]
- {
- { "t1", "Test Flag 1." },
- { "t2", "Test Option 2.", "test" },
- { "t3", "Test Option 3.", "test", "true" },
- { "t4", "Test Option 4.", "test", null, "^test$" }
- });
-
- // Check that the options in force method returns an empty string.
- assertTrue("The options in force method did not return an empty string.", "".equals(parser.getOptionsInForce()));
- }
-
- /** Check that get options in force return a non-empty string after parsing. */
- public void testGetOptionsInForceReturnsNonEmptyStringAfterParsing() throws Exception
- {
- // Create a command line parser for some flags and options.
- CommandLineParser parser =
- new CommandLineParser(
- new String[][]
- {
- { "t1", "Test Flag 1." },
- { "t2", "Test Option 2.", "test" },
- { "t3", "Test Option 3.", "test", "true" },
- { "t4", "Test Option 4.", "test", null, "^test$" }
- });
-
- // Do some parsing.
- parser.parseCommandLine(new String[] { "-t1", "-t2test", "-t3test", "-t4test" });
-
- // Check that the options in force method returns a string.
- assertTrue("The options in force method did not return a non empty string.",
- !((parser.getOptionsInForce() == null) || "".equals(parser.getOptionsInForce())));
- }
-
- /** Check that get usage returns a string. */
- public void testGetUsageReturnsString() throws Exception
- {
- // Create a command line parser for some flags and options.
- CommandLineParser parser =
- new CommandLineParser(
- new String[][]
- {
- { "t1", "Test Flag 1." },
- { "t2", "Test Option 2.", "test" },
- { "t3", "Test Option 3.", "test", "true" },
- { "t4", "Test Option 4.", "test", null, "^test$" }
- });
-
- // Check that the usage method returns a string.
- assertTrue("The usage method did not return a non empty string.",
- !((parser.getUsage() == null) || "".equals(parser.getUsage())));
- }
-
- /** Check that parsing multiple flags condensed together works ok. */
- public void testParseCondensedFlagsOk() throws Exception
- {
- // Create a command line parser for multiple flags.
- CommandLineParser parser =
- new CommandLineParser(
- new String[][]
- {
- { "t1", "Test Flag 1." },
- { "t2", "Test Flag 2." },
- { "t3", "Test Flag 3." }
- });
-
- // Parse a command line with the flags set and condensed together.
- Properties testProps = parser.parseCommandLine(new String[] { "-t1t2t3" });
-
- // Check that the flags were set in the parsed properties.
- assertTrue("The t1 flag was not \"true\", it was: " + testProps.get("t1"), "true".equals(testProps.get("t1")));
- assertTrue("The t2 flag was not \"true\", it was: " + testProps.get("t2"), "true".equals(testProps.get("t2")));
- assertTrue("The t3 flag was not \"true\", it was: " + testProps.get("t3"), "true".equals(testProps.get("t3")));
- }
-
- /** Check that parsing a flag condensed together with an option fails. */
- public void testParseFlagCondensedWithOptionFails() throws Exception
- {
- // Create a command line parser for a flag and an option.
- CommandLineParser parser =
- new CommandLineParser(new String[][]
- {
- { "t1", "Test Flag 1." },
- { "t2", "Test Option 2.", "test" }
- });
-
- // Check that the parser reports an error.
- boolean testPassed = false;
-
- try
- {
- // Parse a command line with the flag and option condensed together.
- Properties testProps = parser.parseCommandLine(new String[] { "-t1t2" });
- }
- catch (IllegalArgumentException e)
- {
- testPassed = true;
- }
-
- assertTrue("IllegalArgumentException not thrown when a flag and option are condensed together.", testPassed);
- }
-
- /** Check that parsing a free argument with specific format fails on bad argument. */
- public void testParseFormattedFreeArgumentFailsBadArgument() throws Exception
- {
- // Create a command line parser for a formatted free argument.
- CommandLineParser parser =
- new CommandLineParser(new String[][]
- {
- { "1", "Test Free Argument.", "test", null, "^test$" }
- });
-
- // Check that the parser signals an error for a badly formatted argument.
- boolean testPassed = false;
-
- try
- {
- // Parse a command line with this option set incorrectly.
- Properties testProps = parser.parseCommandLine(new String[] { "fail" });
- }
- catch (IllegalArgumentException e)
- {
- testPassed = true;
- }
-
- assertTrue("IllegalArgumentException not thrown when a badly formatted argument was set.", testPassed);
- }
-
- /** Check that parsing a free argument with specific format works ok. */
- public void testParseFormattedFreeArgumentOk() throws Exception
- {
- // Create a command line parser for a formatted free argument.
- CommandLineParser parser =
- new CommandLineParser(new String[][]
- {
- { "1", "Test Free Argument.", "test", null, "^test$" }
- });
-
- // Parse a command line with this argument set correctly.
- Properties testProps = parser.parseCommandLine(new String[] { "test" });
-
- // Check that the resultant properties contains the correctly parsed option.
- assertTrue("The first free argument was not equal to \"test\" but was: " + testProps.get("1"),
- "test".equals(testProps.get("1")));
- }
-
- /** Check that parsing an option with specific argument format fails on bad argument. */
- public void testParseFormattedOptionArgumentFailsBadArgument() throws Exception
- {
- // Create a command line parser for a formatted option.
- CommandLineParser parser = new CommandLineParser(new String[][]
- {
- { "t", "Test Option.", "test", null, "^test$" }
- });
-
- // Check that the parser signals an error for a badly formatted argument.
- boolean testPassed = false;
-
- try
- {
- // Parse a command line with this option set incorrectly.
- Properties testProps = parser.parseCommandLine(new String[] { "-t", "fail" });
- }
- catch (IllegalArgumentException e)
- {
- testPassed = true;
- }
-
- assertTrue("IllegalArgumentException not thrown when a badly formatted argument was set.", testPassed);
- }
-
- /** Check that parsing an option with specific argument format works ok. */
- public void testParseFormattedOptionArgumentOk() throws Exception
- {
- // Create a command line parser for a formatted option.
- CommandLineParser parser = new CommandLineParser(new String[][]
- {
- { "t", "Test Option.", "test", null, "^test$" }
- });
-
- // Parse a command line with this option set correctly.
- Properties testProps = parser.parseCommandLine(new String[] { "-t", "test" });
-
- // Check that the resultant properties contains the correctly parsed option.
- assertTrue("The test option was not equal to \"test\" but was: " + testProps.get("t"),
- "test".equals(testProps.get("t")));
- }
-
- /** Check that parsing a free argument works ok. */
- public void testParseFreeArgumentOk() throws Exception
- {
- // Create a command line parser for a free argument.
- CommandLineParser parser = new CommandLineParser(new String[][]
- {
- { "1", "Test Free Argument.", "test" }
- });
-
- // Parse a command line with this argument set.
- Properties testProps = parser.parseCommandLine(new String[] { "test" });
-
- // Check that the resultant properties contains the correctly parsed option.
- assertTrue("The first free argument was not equal to \"test\" but was: " + testProps.get("1"),
- "test".equals(testProps.get("1")));
- }
-
- /** Check that parsing a mandatory option works ok. */
- public void testParseMandatoryOptionOk() throws Exception
- {
- // Create a command line parser for a mandatory option.
- CommandLineParser parser = new CommandLineParser(new String[][]
- {
- { "t", "Test Option.", "test", "true" }
- });
-
- // Parse a command line with this option set correctly.
- Properties testProps = parser.parseCommandLine(new String[] { "-t", "test" });
-
- // Check that the resultant properties contains the correctly parsed option.
- assertTrue("The test option was not equal to \"test\" but was: " + testProps.get("t"),
- "test".equals(testProps.get("t")));
- }
-
- /** Check that parsing a mandatory free argument works ok. */
- public void testParseMandatoryFreeArgumentOk() throws Exception
- {
- // Create a command line parser for a mandatory free argument.
- CommandLineParser parser = new CommandLineParser(new String[][]
- {
- { "1", "Test Option.", "test", "true" }
- });
-
- // Parse a command line with this argument set.
- Properties testProps = parser.parseCommandLine(new String[] { "test" });
-
- // Check that the resultant properties contains the correctly parsed option.
- assertTrue("The first free argument was not equal to \"test\" but was: " + testProps.get("1"),
- "test".equals(testProps.get("1")));
- }
-
- /** Check that parsing a mandatory free argument fails when no argument is specified. */
- public void testParseManadatoryFreeArgumentFailsNoArgument() throws Exception
- {
- // Create a command line parser for a mandatory free argument.
- CommandLineParser parser = new CommandLineParser(new String[][]
- {
- { "1", "Test Option.", "test", "true" }
- });
-
- // Check that parsing fails when this mandatory free argument is missing.
- boolean testPassed = false;
-
- try
- {
- // Parse a command line with this free argument not set.
- Properties testProps = parser.parseCommandLine(new String[] {});
- }
- catch (IllegalArgumentException e)
- {
- testPassed = true;
- }
-
- // Check that the resultant properties contains the correctly parsed option.
- assertTrue("IllegalArgumentException not thrown for a missing mandatory option.", testPassed);
- }
-
- /** Check that parsing a mandatory option fails when no option is set. */
- public void testParseMandatoryFailsNoOption() throws Exception
- {
- // Create a command line parser for a mandatory option.
- CommandLineParser parser = new CommandLineParser(new String[][]
- {
- { "t", "Test Option.", "test", "true" }
- });
-
- // Check that parsing fails when this mandatory option is missing.
- boolean testPassed = false;
-
- try
- {
- // Parse a command line with this option not set.
- Properties testProps = parser.parseCommandLine(new String[] {});
- }
- catch (IllegalArgumentException e)
- {
- testPassed = true;
- }
-
- // Check that the resultant properties contains the correctly parsed option.
- assertTrue("IllegalArgumentException not thrown for a missing mandatory option.", testPassed);
- }
-
- /** Check that parsing an option with no space between it and its argument works ok. */
- public void testParseOptionWithNoSpaceOk() throws Exception
- {
- // Create a command line parser for an option.
- CommandLineParser parser = new CommandLineParser(new String[][]
- {
- { "t", "Test Option.", "test" }
- });
-
- // Parse a command line with this option set with no space.
- Properties testProps = parser.parseCommandLine(new String[] { "-ttest" });
-
- // Check that the resultant properties contains the correctly parsed option.
- assertTrue("The test option was not equal to \"test\" but was: " + testProps.get("t"),
- "test".equals(testProps.get("t")));
- }
-
- /** Check that parsing an option with a space between it and its argument works ok. */
- public void testParseOptionWithSpaceOk() throws Exception
- {
- // Create a command line parser for an option.
- CommandLineParser parser = new CommandLineParser(new String[][]
- {
- { "t", "Test Option.", "test" }
- });
-
- // Parse a command line with this option set with a space.
- Properties testProps = parser.parseCommandLine(new String[] { "-t", "test" });
-
- // Check that the resultant properties contains the correctly parsed option.
- assertTrue("The test option was not equal to \"test\" but was: " + testProps.get("t"),
- "test".equals(testProps.get("t")));
- }
-
- /** Check that parsing a single flag works ok. */
- public void testParseSingleFlagOk() throws Exception
- {
- // Create a command line parser for a single flag.
- CommandLineParser parser = new CommandLineParser(new String[][]
- {
- { "t", "Test Flag." }
- });
-
- // Parse a command line with the single flag set.
- Properties testProps = parser.parseCommandLine(new String[] { "-t" });
-
- // Check that the flag is set in the parsed properties.
- assertTrue("The t flag was not \"true\", it was: " + testProps.get("t"), "true".equals(testProps.get("t")));
-
- // Reset the parser.
- parser.reset();
-
- // Parse a command line with the single flag not set.
- testProps = parser.parseCommandLine(new String[] {});
-
- // Check that the flag is cleared in the parsed properties.
- assertTrue("The t flag was not \"false\", it was: " + testProps.get("t"), "false".equals(testProps.get("t")));
- }
-
- /** Check that parsing an unknown option works when unknowns not errors. */
- public void testParseUnknownOptionOk() throws Exception
- {
- // Create a command line parser for no flags or options
- CommandLineParser parser = new CommandLineParser(new String[][] {});
-
- // Check that parsing does not fail on an unknown flag.
- try
- {
- parser.parseCommandLine(new String[] { "-t" });
- }
- catch (IllegalArgumentException e)
- {
- fail("The parser threw an IllegalArgumentException on an unknown flag when errors on unkowns is off.");
- }
- }
-
- /** Check that parsing an unknown flag fails when unknowns are to be reported as errors. */
- public void testParseUnknownFlagFailsWhenUnknownsAreErrors() throws Exception
- {
- // Create a command line parser for no flags or options
- CommandLineParser parser = new CommandLineParser(new String[][] {});
-
- // Turn on fail on unknowns mode.
- parser.setErrorsOnUnknowns(true);
-
- // Check that parsing fails on an unknown flag.
- boolean testPassed = false;
-
- try
- {
- parser.parseCommandLine(new String[] { "-t" });
- }
- catch (IllegalArgumentException e)
- {
- testPassed = true;
- }
-
- assertTrue("IllegalArgumentException not thrown for an unknown flag when errors on unknowns mode is on.",
- testPassed);
- }
-
- /** Check that parsing an unknown option fails when unknowns are to be reported as errors. */
- public void testParseUnknownOptionFailsWhenUnknownsAreErrors() throws Exception
- {
- // Create a command line parser for no flags or options
- CommandLineParser parser = new CommandLineParser(new String[][] {});
-
- // Turn on fail on unknowns mode.
- parser.setErrorsOnUnknowns(true);
-
- // Check that parsing fails on an unknown flag.
- boolean testPassed = false;
-
- try
- {
- parser.parseCommandLine(new String[] { "-t", "test" });
- }
- catch (IllegalArgumentException e)
- {
- testPassed = true;
- }
-
- assertTrue("IllegalArgumentException not thrown for an unknown option when errors on unknowns mode is on.",
- testPassed);
- }
-}
diff --git a/java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java b/java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java
deleted file mode 100644
index 7eba5f092e..0000000000
--- a/java/common/src/test/java/org/apache/qpid/util/FileUtilsTest.java
+++ /dev/null
@@ -1,612 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-import junit.framework.TestCase;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.List;
-
-public class FileUtilsTest extends TestCase
-{
- private static final String COPY = "-Copy";
- private static final String SUB = "-Sub";
-
- /**
- * Additional test for the copy method.
- * Ensures that the directory count did increase by more than 1 after the copy.
- */
- public void testCopyFile()
- {
- final String TEST_DATA = "FileUtilsTest-testCopy-TestDataTestDataTestDataTestDataTestDataTestData";
- String fileName = "FileUtilsTest-testCopy";
- String fileNameCopy = fileName + COPY;
-
- File[] beforeCopyFileList = null;
-
- //Create initial file
- File test = createTestFile(fileName, TEST_DATA);
-
- try
- {
- //Check number of files before copy
- beforeCopyFileList = test.getAbsoluteFile().getParentFile().listFiles();
- int beforeCopy = beforeCopyFileList.length;
-
- //Perform Copy
- File destination = new File(fileNameCopy);
- FileUtils.copy(test, destination);
- //Ensure the JVM cleans up if cleanup failues
- destination.deleteOnExit();
-
- //Retrieve counts after copy
- int afterCopy = test.getAbsoluteFile().getParentFile().listFiles().length;
-
- int afterCopyFromCopy = new File(fileNameCopy).getAbsoluteFile().getParentFile().listFiles().length;
-
- // Validate the copy counts
- assertEquals("The file listing from the original and the copy differ in length.", afterCopy, afterCopyFromCopy);
- assertEquals("The number of files did not increase.", beforeCopy + 1, afterCopy);
- assertEquals("The number of files did not increase.", beforeCopy + 1, afterCopyFromCopy);
-
- //Validate copy
- // Load content
- String copiedFileContent = FileUtils.readFileAsString(fileNameCopy);
- assertEquals(TEST_DATA, copiedFileContent);
- }
- finally // Ensure clean
- {
- //Clean up
- assertTrue("Unable to cleanup", FileUtils.deleteFile(fileNameCopy));
-
- //Check file list after cleanup
- File[] afterCleanup = new File(test.getAbsoluteFile().getParent()).listFiles();
- checkFileLists(beforeCopyFileList, afterCleanup);
-
- //Remove original file
- assertTrue("Unable to cleanup", test.delete());
- }
- }
-
- /**
- * Create and Copy the following structure:
- *
- * testDirectory --+
- * +-- testSubDirectory --+
- * +-- testSubFile
- * +-- File
- *
- * to testDirectory-Copy
- *
- * Validate that the file count in the copy is correct and contents of the copied files is correct.
- */
- public void testCopyRecursive()
- {
- final String TEST_DATA = "FileUtilsTest-testDirectoryCopy-TestDataTestDataTestDataTestDataTestDataTestData";
- String fileName = "FileUtilsTest-testCopy";
- String TEST_DIR = "testDirectoryCopy";
-
- //Create Initial Structure
- File testDir = new File(TEST_DIR);
-
- //Check number of files before copy
- File[] beforeCopyFileList = testDir.getAbsoluteFile().getParentFile().listFiles();
-
- try
- {
- //Create Directories
- assertTrue("Test directory already exists cannot test.", !testDir.exists());
-
- if (!testDir.mkdir())
- {
- fail("Unable to make test Directory");
- }
-
- File testSubDir = new File(TEST_DIR + File.separator + TEST_DIR + SUB);
- if (!testSubDir.mkdir())
- {
- fail("Unable to make test sub Directory");
- }
-
- //Create Files
- createTestFile(testDir.toString() + File.separator + fileName, TEST_DATA);
- createTestFile(testSubDir.toString() + File.separator + fileName + SUB, TEST_DATA);
-
- //Ensure the JVM cleans up if cleanup failues
- testSubDir.deleteOnExit();
- testDir.deleteOnExit();
-
- //Perform Copy
- File copyDir = new File(testDir.toString() + COPY);
- try
- {
- FileUtils.copyRecursive(testDir, copyDir);
- }
- catch (FileNotFoundException e)
- {
- fail(e.getMessage());
- }
- catch (FileUtils.UnableToCopyException e)
- {
- fail(e.getMessage());
- }
-
- //Validate Copy
- assertEquals("Copied directory should only have one file and one directory in it.", 2, copyDir.listFiles().length);
-
- //Validate Copy File Contents
- String copiedFileContent = FileUtils.readFileAsString(copyDir.toString() + File.separator + fileName);
- assertEquals(TEST_DATA, copiedFileContent);
-
- //Validate Name of Sub Directory
- assertTrue("Expected subdirectory is not a directory", new File(copyDir.toString() + File.separator + TEST_DIR + SUB).isDirectory());
-
- //Assert that it contains only one item
- assertEquals("Copied sub directory should only have one directory in it.", 1, new File(copyDir.toString() + File.separator + TEST_DIR + SUB).listFiles().length);
-
- //Validate content of Sub file
- copiedFileContent = FileUtils.readFileAsString(copyDir.toString() + File.separator + TEST_DIR + SUB + File.separator + fileName + SUB);
- assertEquals(TEST_DATA, copiedFileContent);
- }
- finally
- {
- //Clean up source and copy directory.
- assertTrue("Unable to cleanup", FileUtils.delete(testDir, true));
- assertTrue("Unable to cleanup", FileUtils.delete(new File(TEST_DIR + COPY), true));
-
- //Check file list after cleanup
- File[] afterCleanup = testDir.getAbsoluteFile().getParentFile().listFiles();
- checkFileLists(beforeCopyFileList, afterCleanup);
- }
- }
-
- /**
- * Helper method to create a test file with a string content
- *
- * @param fileName The fileName to use in the creation
- * @param test_data The data to store in the file
- *
- * @return The File reference
- */
- private File createTestFile(String fileName, String test_data)
- {
- File test = new File(fileName);
-
- try
- {
- test.createNewFile();
- //Ensure the JVM cleans up if cleanup failues
- test.deleteOnExit();
- }
- catch (IOException e)
- {
- fail(e.getMessage());
- }
-
- BufferedWriter writer = null;
- try
- {
- writer = new BufferedWriter(new FileWriter(test));
- try
- {
- writer.write(test_data);
- }
- catch (IOException e)
- {
- fail(e.getMessage());
- }
- }
- catch (IOException e)
- {
- fail(e.getMessage());
- }
- finally
- {
- try
- {
- if (writer != null)
- {
- writer.close();
- }
- }
- catch (IOException e)
- {
- fail(e.getMessage());
- }
- }
-
- return test;
- }
-
- /** Test that deleteFile only deletes the specified file */
- public void testDeleteFile()
- {
- File test = new File("FileUtilsTest-testDelete");
- //Record file count in parent directory to check it is not changed by delete
- String path = test.getAbsolutePath();
- File[] filesBefore = new File(path.substring(0, path.lastIndexOf(File.separator))).listFiles();
- int fileCountBefore = filesBefore.length;
-
- try
- {
- test.createNewFile();
- //Ensure the JVM cleans up if cleanup failues
- test.deleteOnExit();
- }
- catch (IOException e)
- {
- fail(e.getMessage());
- }
-
- assertTrue("File does not exists", test.exists());
- assertTrue("File is not a file", test.isFile());
-
- //Check that file creation can be seen on disk
- int fileCountCreated = new File(path.substring(0, path.lastIndexOf(File.separator))).listFiles().length;
- assertEquals("File creation was no registered", fileCountBefore + 1, fileCountCreated);
-
- //Perform Delete
- assertTrue("Unable to cleanup", FileUtils.deleteFile("FileUtilsTest-testDelete"));
-
- assertTrue("File exists after delete", !test.exists());
-
- //Check that after deletion the file count is now accurate
- File[] filesAfter = new File(path.substring(0, path.lastIndexOf(File.separator))).listFiles();
- int fileCountAfter = filesAfter.length;
- assertEquals("File creation was no registered", fileCountBefore, fileCountAfter);
-
- checkFileLists(filesBefore, filesAfter);
- }
-
- public void testDeleteNonExistentFile()
- {
- File test = new File("FileUtilsTest-testDelete-" + System.currentTimeMillis());
-
- assertTrue("File exists", !test.exists());
- assertFalse("File is a directory", test.isDirectory());
-
- assertTrue("Delete Succeeded ", !FileUtils.delete(test, true));
- }
-
- public void testDeleteNull()
- {
- try
- {
- FileUtils.delete(null, true);
- fail("Delete with null value should throw NPE.");
- }
- catch (NullPointerException npe)
- {
- // expected path
- }
- }
-
- /**
- * Given two lists of File arrays ensure they are the same length and all entries in Before are in After
- *
- * @param filesBefore File[]
- * @param filesAfter File[]
- */
- private void checkFileLists(File[] filesBefore, File[] filesAfter)
- {
- assertNotNull("Before file list cannot be null", filesBefore);
- assertNotNull("After file list cannot be null", filesAfter);
-
- assertEquals("File lists are unequal", filesBefore.length, filesAfter.length);
-
- for (File fileBefore : filesBefore)
- {
- boolean found = false;
-
- for (File fileAfter : filesAfter)
- {
- if (fileBefore.getAbsolutePath().equals(fileAfter.getAbsolutePath()))
- {
- found = true;
- break;
- }
- }
-
- assertTrue("File'" + fileBefore.getName() + "' was not in directory afterwards", found);
- }
- }
-
- public void testNonRecursiveNonEmptyDirectoryDeleteFails()
- {
- String directoryName = "FileUtilsTest-testRecursiveDelete";
- File test = new File(directoryName);
-
- //Record file count in parent directory to check it is not changed by delete
- String path = test.getAbsolutePath();
- File[] filesBefore = new File(path.substring(0, path.lastIndexOf(File.separator))).listFiles();
- int fileCountBefore = filesBefore.length;
-
- assertTrue("Directory exists", !test.exists());
-
- test.mkdir();
-
- //Create a file in the directory
- String fileName = test.getAbsolutePath() + File.separatorChar + "testFile";
- File subFile = new File(fileName);
- try
- {
- subFile.createNewFile();
- //Ensure the JVM cleans up if cleanup failues
- subFile.deleteOnExit();
- }
- catch (IOException e)
- {
- fail(e.getMessage());
- }
- //Ensure the JVM cleans up if cleanup failues
- // This must be after the subFile as the directory must be empty before
- // the delete is performed
- test.deleteOnExit();
-
- //Try and delete the non-empty directory
- assertFalse("Non Empty Directory was successfully deleted.", FileUtils.deleteDirectory(directoryName));
-
- //Check directory is still there
- assertTrue("Directory was deleted.", test.exists());
-
- // Clean up
- assertTrue("Unable to cleanup", FileUtils.delete(test, true));
-
- //Check that after deletion the file count is now accurate
- File[] filesAfter = new File(path.substring(0, path.lastIndexOf(File.separator))).listFiles();
- int fileCountAfter = filesAfter.length;
- assertEquals("File creation was no registered", fileCountBefore, fileCountAfter);
-
- checkFileLists(filesBefore, filesAfter);
- }
-
- /** Test that an empty directory can be deleted with deleteDirectory */
- public void testEmptyDirectoryDelete()
- {
- String directoryName = "FileUtilsTest-testRecursiveDelete";
- File test = new File(directoryName);
-
- //Record file count in parent directory to check it is not changed by delete
- String path = test.getAbsolutePath();
- File[] filesBefore = new File(path.substring(0, path.lastIndexOf(File.separator))).listFiles();
- int fileCountBefore = filesBefore.length;
-
- assertTrue("Directory exists", !test.exists());
-
- test.mkdir();
- //Ensure the JVM cleans up if cleanup failues
- test.deleteOnExit();
-
- //Try and delete the empty directory
- assertTrue("Non Empty Directory was successfully deleted.", FileUtils.deleteDirectory(directoryName));
-
- //Check directory is still there
- assertTrue("Directory was deleted.", !test.exists());
-
- //Check that after deletion the file count is now accurate
- File[] filesAfter = new File(path.substring(0, path.lastIndexOf(File.separator))).listFiles();
- int fileCountAfter = filesAfter.length;
- assertEquals("File creation was no registered", fileCountBefore, fileCountAfter);
-
- checkFileLists(filesBefore, filesAfter);
-
- }
-
- /** Test that deleteDirectory on a non empty directory to complete */
- public void testNonEmptyDirectoryDelete()
- {
- String directoryName = "FileUtilsTest-testRecursiveDelete";
- File test = new File(directoryName);
-
- assertTrue("Directory exists", !test.exists());
-
- //Record file count in parent directory to check it is not changed by delete
- String path = test.getAbsolutePath();
- File[] filesBefore = new File(path.substring(0, path.lastIndexOf(File.separator))).listFiles();
- int fileCountBefore = filesBefore.length;
-
- test.mkdir();
-
- //Create a file in the directory
- String fileName = test.getAbsolutePath() + File.separatorChar + "testFile";
- File subFile = new File(fileName);
- try
- {
- subFile.createNewFile();
- //Ensure the JVM cleans up if cleanup failues
- subFile.deleteOnExit();
- }
- catch (IOException e)
- {
- fail(e.getMessage());
- }
-
- // Ensure the JVM cleans up if cleanup failues
- // This must be after the subFile as the directory must be empty before
- // the delete is performed
- test.deleteOnExit();
-
- //Try and delete the non-empty directory non-recursively
- assertFalse("Non Empty Directory was successfully deleted.", FileUtils.delete(test, false));
-
- //Check directory is still there
- assertTrue("Directory was deleted.", test.exists());
-
- // Clean up
- assertTrue("Unable to cleanup", FileUtils.delete(test, true));
-
- //Check that after deletion the file count is now accurate
- File[] filesAfter = new File(path.substring(0, path.lastIndexOf(File.separator))).listFiles();
- int fileCountAfter = filesAfter.length;
- assertEquals("File creation was no registered", fileCountBefore, fileCountAfter);
-
- checkFileLists(filesBefore, filesAfter);
-
- }
-
- /** Test that a recursive delete successeds */
- public void testRecursiveDelete()
- {
- String directoryName = "FileUtilsTest-testRecursiveDelete";
- File test = new File(directoryName);
-
- assertTrue("Directory exists", !test.exists());
-
- //Record file count in parent directory to check it is not changed by delete
- String path = test.getAbsolutePath();
- File[] filesBefore = new File(path.substring(0, path.lastIndexOf(File.separator))).listFiles();
- int fileCountBefore = filesBefore.length;
-
- test.mkdir();
-
- createSubDir(directoryName, 2, 4);
-
- //Ensure the JVM cleans up if cleanup failues
- // This must be after the sub dir creation as the delete order is
- // recorded and the directory must be empty to be deleted.
- test.deleteOnExit();
-
- assertFalse("Non recursive delete was able to directory", FileUtils.delete(test, false));
-
- assertTrue("File does not exist after non recursive delete", test.exists());
-
- assertTrue("Unable to cleanup", FileUtils.delete(test, true));
-
- assertTrue("File exist after recursive delete", !test.exists());
-
- //Check that after deletion the file count is now accurate
- File[] filesAfter = new File(path.substring(0, path.lastIndexOf(File.separator))).listFiles();
- int fileCountAfter = filesAfter.length;
- assertEquals("File creation was no registered", fileCountBefore, fileCountAfter);
-
- checkFileLists(filesBefore, filesAfter);
-
- }
-
- private void createSubDir(String path, int directories, int files)
- {
- File directory = new File(path);
-
- assertTrue("Directory" + path + " does not exists", directory.exists());
-
- for (int dir = 0; dir < directories; dir++)
- {
- String subDirName = path + File.separatorChar + "sub" + dir;
- File subDir = new File(subDirName);
-
- subDir.mkdir();
-
- createSubDir(subDirName, directories - 1, files);
- //Ensure the JVM cleans up if cleanup failues
- // This must be after the sub dir creation as the delete order is
- // recorded and the directory must be empty to be deleted.
- subDir.deleteOnExit();
- }
-
- for (int file = 0; file < files; file++)
- {
- String subDirName = path + File.separatorChar + "file" + file;
- File subFile = new File(subDirName);
- try
- {
- subFile.createNewFile();
- //Ensure the JVM cleans up if cleanup failues
- subFile.deleteOnExit();
- }
- catch (IOException e)
- {
- fail(e.getMessage());
- }
- }
- }
-
- public static final String SEARCH_STRING = "testSearch";
-
- /**
- * Test searchFile(File file, String search) will find a match when it
- * exists.
- *
- * @throws java.io.IOException if unable to perform test setup
- */
- public void testSearchSucceed() throws IOException
- {
- File _logfile = File.createTempFile("FileUtilsTest-testSearchSucceed", ".out");
-
- prepareFileForSearchTest(_logfile);
-
- List<String> results = FileUtils.searchFile(_logfile, SEARCH_STRING);
-
- assertNotNull("Null result set returned", results);
-
- assertEquals("Results do not contain expected count", 1, results.size());
- }
-
- /**
- * Test searchFile(File file, String search) will not find a match when the
- * test string does not exist.
- *
- * @throws java.io.IOException if unable to perform test setup
- */
- public void testSearchFail() throws IOException
- {
- File _logfile = File.createTempFile("FileUtilsTest-testSearchFail", ".out");
-
- prepareFileForSearchTest(_logfile);
-
- List<String> results = FileUtils.searchFile(_logfile, "Hello");
-
- assertNotNull("Null result set returned", results);
-
- //Validate we only got one message
- if (results.size() > 0)
- {
- System.err.println("Unexpected messages");
-
- for (String msg : results)
- {
- System.err.println(msg);
- }
- }
-
- assertEquals("Results contains data when it was not expected",
- 0, results.size());
- }
-
- /**
- * Write the SEARCH_STRING in to the given file.
- *
- * @param logfile The file to write the SEARCH_STRING into
- *
- * @throws IOException if an error occurs
- */
- private void prepareFileForSearchTest(File logfile) throws IOException
- {
- BufferedWriter writer = new BufferedWriter(new FileWriter(logfile));
- writer.append(SEARCH_STRING);
- writer.flush();
- writer.close();
- }
-
-}
diff --git a/java/common/src/test/java/org/apache/qpid/util/PropertyUtilsTest.java b/java/common/src/test/java/org/apache/qpid/util/PropertyUtilsTest.java
deleted file mode 100644
index 9fd18d461a..0000000000
--- a/java/common/src/test/java/org/apache/qpid/util/PropertyUtilsTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-package org.apache.qpid.util;
-
-import org.apache.qpid.configuration.PropertyException;
-import org.apache.qpid.configuration.PropertyUtils;
-import org.apache.qpid.test.utils.QpidTestCase;
-
-public class PropertyUtilsTest extends QpidTestCase
-{
- public void testSimpleExpansion() throws PropertyException
- {
- System.setProperty("banana", "fruity");
- String expandedProperty = PropertyUtils.replaceProperties("${banana}");
- assertEquals(expandedProperty, "fruity");
- }
-
- public void testDualExpansion() throws PropertyException
- {
- System.setProperty("banana", "fruity");
- System.setProperty("concrete", "horrible");
- String expandedProperty = PropertyUtils.replaceProperties("${banana}xyz${concrete}");
- assertEquals(expandedProperty, "fruityxyzhorrible");
- }
-
- public static junit.framework.Test suite()
- {
- return new junit.framework.TestSuite(PropertyUtilsTest.class);
- }
-}
diff --git a/java/common/src/test/java/org/apache/qpid/util/SerialTest.java b/java/common/src/test/java/org/apache/qpid/util/SerialTest.java
deleted file mode 100644
index b2578563e0..0000000000
--- a/java/common/src/test/java/org/apache/qpid/util/SerialTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.apache.qpid.util;
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-
-import junit.framework.TestCase;
-
-import java.util.Random;
-
-import org.apache.qpid.SerialException;
-
-/**
- *Junit tests for the Serial class
- */
-public class SerialTest extends TestCase
-{
-
- /**
- * Test the key boundaries where wraparound occurs.
- */
- public void testBoundaries()
- {
- assertTrue(Serial.gt(1, 0));
- assertTrue(Serial.lt(0, 1));
-
- assertTrue(Serial.gt(Integer.MAX_VALUE+1, Integer.MAX_VALUE));
- assertTrue(Serial.lt(Integer.MAX_VALUE, Integer.MAX_VALUE+1));
-
- assertTrue(Serial.gt(0xFFFFFFFF + 1, 0xFFFFFFFF));
- assertTrue(Serial.lt(0xFFFFFFFF, 0xFFFFFFFF + 1));
- }
-
- /**
- * Test the first Corollary of RFC 1982
- * For any sequence number s and any integer n such that addition of n
- * to s is well defined, (s + n) >= s. Further (s + n) == s only when
- * n == 0, in all other defined cases, (s + n) > s.
- */
- public void testCorollary1()
- {
- int wrapcount = 0;
-
- int s = 0;
-
- for (int i = 0; i < 67108664; i++)
- {
- for (int n = 1; n < 4096; n += 512)
- {
- assertTrue(Serial.gt(s+n, s));
- assertTrue(Serial.lt(s, s+n));
- }
-
- s += 1024;
-
- if (s == 0)
- {
- wrapcount += 1;
- }
- }
-
- assertTrue(wrapcount > 0);
- }
-
-}
diff --git a/java/common/templates/method/MethodBodyInterface.vm b/java/common/templates/method/MethodBodyInterface.vm
deleted file mode 100644
index d5feba12de..0000000000
--- a/java/common/templates/method/MethodBodyInterface.vm
+++ /dev/null
@@ -1,62 +0,0 @@
-#macro( UpperCamel $name )
-#set( $name = "${name.substring(0,1).toUpperCase()}${name.substring(1)}" )
-#end
-#macro( toUpperCamel $name )${name.substring(0,1).toUpperCase()}${name.substring(1)}#end
-
-
-
-#set( $amqp_ClassName = $amqpClass.Name)
-#UpperCamel( $amqp_ClassName )
-#set( $amqp_MethodName = $amqpMethod.Name )
-#UpperCamel( $amqp_MethodName )
-#set( $javaClassName = "${amqp_ClassName}${amqp_MethodName}Body" )
-
-
-#set( $filename = "${javaClassName}.java")
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * This file is auto-generated by ${generator} - do not modify.
- * Supported AMQP version:
- #foreach( $supportedVersion in $model.VersionSet )
- * $supportedVersion.getMajor()-$supportedVersion.getMinor()
- #end
- */
-
-
-package org.apache.qpid.framing;
-
-
-public interface ${javaClassName} extends EncodableAMQDataBlock, AMQMethodBody
-{
-
-
-#foreach( $field in $amqpMethod.Fields )
-
-#if( $amqpMethod.isCommon( $field ) )
- public $field.ConsistentNativeType get#toUpperCamel( ${field.Name} )();
-#end
-#end
-
-
-
-}
diff --git a/java/common/templates/method/version/MethodBodyClass.vm b/java/common/templates/method/version/MethodBodyClass.vm
deleted file mode 100644
index a739110d70..0000000000
--- a/java/common/templates/method/version/MethodBodyClass.vm
+++ /dev/null
@@ -1,213 +0,0 @@
-#macro( UpperCamel $name )
-#set( $name = "${name.substring(0,1).toUpperCase()}${name.substring(1)}" )
-#end
-#macro( toUpperCamel $name )${name.substring(0,1).toUpperCase()}${name.substring(1)}#end
-
-
-
-#set( $amqp_ClassName = $amqpClass.Name)
-#UpperCamel( $amqp_ClassName )
-#set( $amqp_MethodName = $amqpMethod.Name )
-#UpperCamel( $amqp_MethodName )
-#set( $javaClassName = "${amqp_ClassName}${amqp_MethodName}BodyImpl" )
-#set( $interfaceName = "${amqp_ClassName}${amqp_MethodName}Body" )
-#set( $amqpPackageName = "amqp_$version.getMajor()_$version.getMinor()" )
-
-#set( $filename = "${amqpPackageName}/${javaClassName}.java")
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * This file is auto-generated by ${generator} - do not modify.
- * Supported AMQP version:
- * $version.getMajor()-$version.getMinor()
- */
-
-#set( $clazz = $amqpClass.asSingleVersionClass( $version ) )
-#set( $method = $amqpMethod.asSingleVersionMethod( $version ) )
-
-package org.apache.qpid.framing.amqp_$version.getMajor()_$version.getMinor();
-
-import java.util.HashMap;
-
-import org.apache.mina.common.ByteBuffer;
-import org.apache.qpid.framing.*;
-import org.apache.qpid.AMQException;
-
-public class ${javaClassName} extends AMQMethodBody_$version.getMajor()_$version.getMinor() implements $interfaceName
-{
- private static final AMQMethodBodyInstanceFactory FACTORY_INSTANCE = new AMQMethodBodyInstanceFactory()
- {
- public AMQMethodBody newInstance(ByteBuffer in, long size) throws AMQFrameDecodingException
- {
- return new ${javaClassName}(in);
- }
-
-
- };
-
-
- public static AMQMethodBodyInstanceFactory getFactory()
- {
- return FACTORY_INSTANCE;
- }
-
- public static final int CLASS_ID = $clazz.ClassId;
-
- public static final int METHOD_ID = $method.MethodId;
-
-
-
- // Fields declared in specification
-#foreach( $field in $method.ConsolidatedFields )
- private final $field.NativeType _$field.getName(); // $field.UnderlyingFields
-#end
-
-
- // Constructor
-
- public ${javaClassName}(ByteBuffer buffer) throws AMQFrameDecodingException
- {
-#foreach( $field in $method.ConsolidatedFields )
- _$field.Name = read$field.getEncodingType()( buffer );
-#end
- }
-
- public ${javaClassName}(
-#foreach( $field in $method.FieldList )
-#if( $velocityCount == $method.getFieldList().size() )
- $field.NativeType $field.Name
-#else
- $field.NativeType $field.Name,
-#end
-#end
- )
- {
-#set( $consolidatedFieldName = "" )
-#foreach( $field in $method.FieldList )
-#if( $method.isConsolidated( $field.Name ) )
-#if( !$method.getConsolidatedFieldName( $field.Name ).equals( $consolidatedFieldName ) )
-#if( !$consolidatedFieldName.equals("") )
- _$consolidatedFieldName = $consolidatedFieldName; // 1
-#end
-#set( $consolidatedFieldName = $method.getConsolidatedFieldName( $field.Name ) )
- byte $consolidatedFieldName = (byte)0;
-#end
- if( $field.Name )
- {
- $consolidatedFieldName = (byte) (((int) $consolidatedFieldName) | (1 << $method.getPositionInBitField( $field.Name )));
- }
-#if( $velocityCount == $method.getFieldList().size())
- _$consolidatedFieldName = $consolidatedFieldName;
-#else
-
-#end
-#else
-#if( !$consolidatedFieldName.equals("") )
- _$consolidatedFieldName = $consolidatedFieldName;
-#end
-#set( $consolidatedFieldName = "" )
- _$field.Name = $field.Name;
-#end
-#end
- }
-
- public int getClazz()
- {
- return CLASS_ID;
- }
-
- public int getMethod()
- {
- return METHOD_ID;
- }
-
-
-#foreach( $field in $method.FieldList )
- public final $field.NativeType get#toUpperCamel( ${field.Name} )()
- {
-#if( $method.isConsolidated( $field.Name ) )
- return (((int)(_$method.getConsolidatedFieldName( $field.Name ))) & ( 1 << $method.getPositionInBitField( $field.Name ))) != 0;
-#else
- return _$field.Name;
-#end
- }
-#end
-
- protected int getBodySize()
- {
-#set( $fixedSize = 0 )
-#foreach( $field in $method.ConsolidatedFields )
-#if( $field.isFixedSize() )
-#set( $fixedSize = $fixedSize + $field.Size )
-#end
-#end
- int size = $fixedSize;
-#foreach( $field in $method.ConsolidatedFields )
-#if( ! $field.isFixedSize() )
- size += getSizeOf( _$field.Name );
-#end
-#end
- return size;
- }
-
- public void writeMethodPayload(ByteBuffer buffer)
- {
-#foreach( $field in $method.ConsolidatedFields )
- write$field.getEncodingType()( buffer, _$field.Name );
-#end
- }
-
- public boolean execute(MethodDispatcher dispatcher, int channelId) throws AMQException
- {
-#set( $amqpMethodNameFirstChar = $amqpMethod.getName().substring(0,1) )
-#set( $amqpMethodNameFirstCharU = $amqpMethodNameFirstChar.toUpperCase() )
-#set( $amqpMethodNameUpperCamel = "$amqpMethodNameFirstCharU$amqpMethod.getName().substring(1)" )
-#if( $amqpMethod.inAllVersions() )
- return dispatcher.dispatch${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}(this, channelId);
-#else
- return ((MethodDispatcher_$version.getMajor()_$version.getMinor())dispatcher).dispatch${amqp_ClassName}${amqpMethodNameUpperCamel}(this, channelId);
-
-#end
-
- }
-
-
- public String toString()
- {
- StringBuilder buf = new StringBuilder("[$javaClassName: ");
-#foreach( $field in $method.FieldList )
- buf.append( "$field.Name=" );
-#if( $field.NativeType == "byte[]" )
- buf.append( get#toUpperCamel( $field.Name )() == null ? "null" : java.util.Arrays.toString( get#toUpperCamel( $field.Name )() ) );
-#else
- buf.append( get#toUpperCamel( $field.Name )() );
-#end
-#if( $velocityCount != $method.FieldList.size() )
- buf.append( ", " );
-#end
-#end
- buf.append("]");
- return buf.toString();
- }
-
-
-}
diff --git a/java/common/templates/model/ClientMethodDispatcherInterface.vm b/java/common/templates/model/ClientMethodDispatcherInterface.vm
deleted file mode 100644
index 9e4aee7dee..0000000000
--- a/java/common/templates/model/ClientMethodDispatcherInterface.vm
+++ /dev/null
@@ -1,56 +0,0 @@
-#set( $filename = "ClientMethodDispatcher.java")
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * This file is auto-generated by $generator - do not modify.
- * Supported AMQP version:
- #foreach( $supportedVersion in $model.VersionSet )
- * $supportedVersion.getMajor()-$supportedVersion.getMinor()
- #end
- */
-
-package org.apache.qpid.framing;
-
-import org.apache.qpid.AMQException;
-
-
-public interface ClientMethodDispatcher
-{
-
-#foreach( $amqpClass in $model.getClasses() )
-#set( $amqpClassNameFirstChar = $amqpClass.getName().substring(0,1) )
-#set( $amqpClassNameFirstCharU = $amqpClassNameFirstChar.toUpperCase() )
-#set( $amqpClassNameUpperCamel = "$amqpClassNameFirstCharU$amqpClass.getName().substring(1)" )
-#foreach( $amqpMethodVersions in $amqpClass.getMethods() )
-#if( $amqpMethodVersions.inAllVersions() )
-#set( $amqpMethod = $amqpMethodVersions.asSingleVersionMethod($amqpMethodVersions.getVersionSet().first()) )
-#if( $amqpMethod.isClientMethod() )
-#set( $amqpMethodNameFirstChar = $amqpMethod.getName().substring(0,1) )
-#set( $amqpMethodNameFirstCharU = $amqpMethodNameFirstChar.toUpperCase() )
-#set( $amqpMethodNameUpperCamel = "$amqpMethodNameFirstCharU$amqpMethod.getName().substring(1)" )
- public boolean dispatch${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}(${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body body, int channelId) throws AMQException;
-#end
-#end
-#end
-#end
-
-} \ No newline at end of file
diff --git a/java/common/templates/model/MethodDispatcherInterface.vm b/java/common/templates/model/MethodDispatcherInterface.vm
deleted file mode 100644
index ff14715fef..0000000000
--- a/java/common/templates/model/MethodDispatcherInterface.vm
+++ /dev/null
@@ -1,39 +0,0 @@
-#set( $filename = "MethodDispatcher.java")
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * This file is auto-generated by $generator - do not modify.
- * Supported AMQP version:
- #foreach( $supportedVersion in $model.VersionSet )
- * $supportedVersion.getMajor()-$supportedVersion.getMinor()
- #end
- */
-
-package org.apache.qpid.framing;
-
-import org.apache.qpid.AMQException;
-
-
-public interface MethodDispatcher extends
- ClientMethodDispatcher, ServerMethodDispatcher
-{
-} \ No newline at end of file
diff --git a/java/common/templates/model/MethodRegistryClass.vm b/java/common/templates/model/MethodRegistryClass.vm
deleted file mode 100644
index 759e5e4a42..0000000000
--- a/java/common/templates/model/MethodRegistryClass.vm
+++ /dev/null
@@ -1,104 +0,0 @@
-#set( $filename = "MethodRegistry.java")
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * This file is auto-generated by $generator - do not modify.
- * Supported AMQP version:
- #foreach( $supportedVersion in $model.VersionSet )
- * $supportedVersion.getMajor()-$supportedVersion.getMinor()
- #end
- */
-
-package org.apache.qpid.framing;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter;
-
-import java.util.Map;
-import java.util.HashMap;
-
-
-public abstract class MethodRegistry
-{
- private static final Map<ProtocolVersion, MethodRegistry> _registries =
- new HashMap<ProtocolVersion, MethodRegistry>();
-
-#foreach( $supportedVersion in $model.VersionSet )
-
-#set( $verName = "_$supportedVersion.getMajor()_$supportedVersion.getMinor()" )
-#set( $regPackage = "org.apache.qpid.framing.amqp$verName" )
- public static final MethodRegistry registry_$supportedVersion.getMajor()_$supportedVersion.getMinor() =
- new ${regPackage}.MethodRegistry${verName}();
-
-#end
-
-
- public abstract AMQMethodBody convertToBody(ByteBuffer in, long size)
- throws AMQFrameDecodingException;
-
- public abstract int getMaxClassId();
-
- public abstract int getMaxMethodId(int classId);
-
-
- protected MethodRegistry(ProtocolVersion pv)
- {
- _registries.put(pv, this);
- }
-
- public static MethodRegistry getMethodRegistry(ProtocolVersion pv)
- {
- return _registries.get(pv);
- }
-
-#foreach( $amqpClass in $model.getClasses() )
-#set( $amqpClassNameFirstChar = $amqpClass.getName().substring(0,1) )
-#set( $amqpClassNameFirstCharU = $amqpClassNameFirstChar.toUpperCase() )
-#set( $amqpClassNameUpperCamel = "$amqpClassNameFirstCharU$amqpClass.getName().substring(1)" )
-
-#foreach( $amqpMethodVersions in $amqpClass.getMethods() )
-#if( $amqpMethodVersions.isVersionInterfaceConsistent() )
-#set( $amqpMethod = $amqpMethodVersions.asSingleVersionMethod($amqpMethodVersions.getVersionSet().first()) )
-
-#set( $amqpMethodNameFirstChar = $amqpMethod.getName().substring(0,1) )
-#set( $amqpMethodNameFirstCharU = $amqpMethodNameFirstChar.toUpperCase() )
-#set( $amqpMethodNameUpperCamel = "$amqpMethodNameFirstCharU$amqpMethod.getName().substring(1)" )
- public abstract ${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body create${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body(
-#foreach( $field in $amqpMethod.FieldList )
-#if( $velocityCount == $amqpMethod.getFieldList().size() )
- final $field.NativeType $field.Name
-#else
- final $field.NativeType $field.Name,
-#end
-#end
- );
-
-
-#end
-#end
-#end
-
-
- public abstract ProtocolVersionMethodConverter getProtocolVersionMethodConverter();
-
-} \ No newline at end of file
diff --git a/java/common/templates/model/ProtocolVersionListClass.vm b/java/common/templates/model/ProtocolVersionListClass.vm
deleted file mode 100644
index 78605c70ff..0000000000
--- a/java/common/templates/model/ProtocolVersionListClass.vm
+++ /dev/null
@@ -1,201 +0,0 @@
-#set( $filename = "ProtocolVersion.java" )
-/*
-*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing,
-* software distributed under the License is distributed on an
-* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-* KIND, either express or implied. See the License for the
-* specific language governing permissions and limitations
-* under the License.
-*
-*/
-
-/*
-* This file is auto-generated by $generator - do not modify.
-* Supported AMQP versions:
-#foreach( $version in $model.getVersionSet() )
-* $version.getMajor()-$version.getMinor()
-#end
-*/
-
-package org.apache.qpid.framing;
-
-import java.util.SortedSet;
-import java.util.Collections;
-import java.util.TreeSet;
-import java.util.Map;
-import java.util.HashMap;
-
-
-public class ProtocolVersion implements Comparable
-{
- private final byte _majorVersion;
- private final byte _minorVersion;
- private final String _stringFormat;
-
-
- public ProtocolVersion(byte majorVersion, byte minorVersion)
- {
- _majorVersion = majorVersion;
- _minorVersion = minorVersion;
- _stringFormat = _majorVersion+"-"+_minorVersion;
- }
-
- public byte getMajorVersion()
- {
- return _majorVersion;
- }
-
- public byte getMinorVersion()
- {
- return _minorVersion;
- }
-
- public byte getActualMinorVersion()
- {
- return _minorVersion > 90 ? (byte) (_minorVersion / 10) : _minorVersion;
- }
-
-
- public byte getRevisionVersion()
- {
- return _minorVersion > 90 ? (byte) (_minorVersion % 10) : (byte) 0;
- }
-
- public String toString()
- {
- return _stringFormat;
- }
-
-
- public int compareTo(Object o)
- {
- ProtocolVersion pv = (ProtocolVersion) o;
-
- /*
- * 0-8 has it's major and minor numbers the wrong way round (it's actually 8-0)...
- * so we need to deal with that case specially
- */
-
- if((_majorVersion == (byte) 8) && (_minorVersion == (byte) 0))
- {
- ProtocolVersion fixedThis = new ProtocolVersion(_minorVersion, _majorVersion);
- return fixedThis.compareTo(pv);
- }
-
- if((pv.getMajorVersion() == (byte) 8) && (pv.getMinorVersion() == (byte) 0))
- {
- ProtocolVersion fixedOther = new ProtocolVersion(pv.getMinorVersion(), pv.getMajorVersion());
- return this.compareTo(fixedOther);
- }
-
- if(_majorVersion > pv.getMajorVersion())
- {
- return 1;
- }
- else if(_majorVersion < pv.getMajorVersion())
- {
- return -1;
- }
- else if(_minorVersion > pv.getMinorVersion())
- {
- return 1;
- }
- else if(getMinorVersion() < pv.getMinorVersion())
- {
- return -1;
- }
- else
- {
- return 0;
- }
-
- }
-
- public boolean equals(Object o)
- {
- return o != null && (o == this || (compareTo(o) == 0));
- }
-
- public int hashCode()
- {
- return (0xFF & (int)_minorVersion) | ((0xFF & (int)_majorVersion) << 8);
- }
-
-
- public boolean isSupported()
- {
- return _supportedVersions.contains(this);
- }
-
- public static ProtocolVersion getLatestSupportedVersion()
- {
- return _supportedVersions.last();
- }
-
- private static final SortedSet<ProtocolVersion> _supportedVersions;
- private static final Map<String, ProtocolVersion> _nameToVersionMap =
- new HashMap<String, ProtocolVersion>();
- private static final ProtocolVersion _defaultVersion;
-
-
- public static final ProtocolVersion v0_10 = new ProtocolVersion((byte)0,(byte)10);
-
-#foreach( $version in $model.getVersionSet() )
-#set( $versionId = "v$version.getMajor()_$version.getMinor()" )
- public static final ProtocolVersion $versionId = new ProtocolVersion((byte)$version.getMajor(),(byte)$version.getMinor());
-#end
-
-
- static
- {
- SortedSet<ProtocolVersion> versions = new TreeSet<ProtocolVersion>();
-
- versions.add(v0_10);
- _nameToVersionMap.put("0-10", v0_10);
-#foreach( $version in $model.getVersionSet() )
-#set( $versionId = "v$version.getMajor()_$version.getMinor()" )
- versions.add($versionId);
- _nameToVersionMap.put("${version.getMajor()}-${version.getMinor()}", $versionId);
-#end
- _supportedVersions = Collections.unmodifiableSortedSet(versions);
-
-
- ProtocolVersion systemDefinedVersion =
- _nameToVersionMap.get(System.getProperty("org.apache.qpid.amqp_version"));
-
- _defaultVersion = (systemDefinedVersion == null)
- ? getLatestSupportedVersion()
- : systemDefinedVersion;
- }
-
-
- public static SortedSet<ProtocolVersion> getSupportedProtocolVersions()
- {
- return _supportedVersions;
- }
-
-
-
- public static ProtocolVersion parse(String name)
- {
- return _nameToVersionMap.get(name);
- }
-
- public static ProtocolVersion defaultProtocolVersion()
- {
- return _defaultVersion;
- }
-
-
-}
diff --git a/java/common/templates/model/ServerMethodDispatcherInterface.vm b/java/common/templates/model/ServerMethodDispatcherInterface.vm
deleted file mode 100644
index b80d6027b7..0000000000
--- a/java/common/templates/model/ServerMethodDispatcherInterface.vm
+++ /dev/null
@@ -1,56 +0,0 @@
-#set( $filename = "ServerMethodDispatcher.java")
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * This file is auto-generated by $generator - do not modify.
- * Supported AMQP version:
- #foreach( $supportedVersion in $model.VersionSet )
- * $supportedVersion.getMajor()-$supportedVersion.getMinor()
- #end
- */
-
-package org.apache.qpid.framing;
-
-import org.apache.qpid.AMQException;
-
-
-public interface ServerMethodDispatcher
-{
-
-#foreach( $amqpClass in $model.getClasses() )
-#set( $amqpClassNameFirstChar = $amqpClass.getName().substring(0,1) )
-#set( $amqpClassNameFirstCharU = $amqpClassNameFirstChar.toUpperCase() )
-#set( $amqpClassNameUpperCamel = "$amqpClassNameFirstCharU$amqpClass.getName().substring(1)" )
-#foreach( $amqpMethodVersions in $amqpClass.getMethods() )
-#if( $amqpMethodVersions.inAllVersions() )
-#set( $amqpMethod = $amqpMethodVersions.asSingleVersionMethod($amqpMethodVersions.getVersionSet().first()) )
-#if( $amqpMethod.isServerMethod() )
-#set( $amqpMethodNameFirstChar = $amqpMethod.getName().substring(0,1) )
-#set( $amqpMethodNameFirstCharU = $amqpMethodNameFirstChar.toUpperCase() )
-#set( $amqpMethodNameUpperCamel = "$amqpMethodNameFirstCharU$amqpMethod.getName().substring(1)" )
- public boolean dispatch${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}(${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body body, int channelId) throws AMQException;
-#end
-#end
-#end
-#end
-
-} \ No newline at end of file
diff --git a/java/common/templates/model/version/AmqpConstantsClass.vm b/java/common/templates/model/version/AmqpConstantsClass.vm
deleted file mode 100644
index 8d459f2977..0000000000
--- a/java/common/templates/model/version/AmqpConstantsClass.vm
+++ /dev/null
@@ -1,37 +0,0 @@
-&{AmqpConstants.java}
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * This file is auto-generated by ${GENERATOR} - do not modify.
- * Supported AMQP versions:
-%{VLIST} * ${major}-${minor}
- */
-
-package org.apache.qpid.framing;
-
-class AmqpConstants
-{
- // Constant getValue methods
-
-%{TLIST} ${const_get_method}
-
-}
diff --git a/java/common/templates/model/version/ClientMethodDispatcherInterface.vm b/java/common/templates/model/version/ClientMethodDispatcherInterface.vm
deleted file mode 100644
index 80705c1a39..0000000000
--- a/java/common/templates/model/version/ClientMethodDispatcherInterface.vm
+++ /dev/null
@@ -1,55 +0,0 @@
-#set( $filename = "amqp_$version.getMajor()_$version.getMinor()/ClientMethodDispatcher_${version.getMajor()}_${version.getMinor()}.java")
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * This file is auto-generated by $generator - do not modify.
- * Supported AMQP version:
- #foreach( $supportedVersion in $model.VersionSet )
- * $supportedVersion.getMajor()-$supportedVersion.getMinor()
- #end
- */
-
-package org.apache.qpid.framing.amqp_$version.getMajor()_$version.getMinor();
-
-import org.apache.qpid.AMQException;
-import org.apache.qpid.framing.*;
-
-
-public interface ClientMethodDispatcher_${version.getMajor()}_${version.getMinor()} extends ClientMethodDispatcher
-{
-
-#foreach( $amqpClass in $model.getClasses() )
-#set( $amqpClassNameFirstChar = $amqpClass.getName().substring(0,1) )
-#set( $amqpClassNameFirstCharU = $amqpClassNameFirstChar.toUpperCase() )
-#set( $amqpClassNameUpperCamel = "$amqpClassNameFirstCharU$amqpClass.getName().substring(1)" )
-#foreach( $amqpMethodVersions in $amqpClass.getMethods() )
-#set( $amqpMethod = $amqpMethodVersions.asSingleVersionMethod($amqpMethodVersions.getVersionSet().first()) )
-#if( $amqpMethod.isClientMethod() )
-#set( $amqpMethodNameFirstChar = $amqpMethod.getName().substring(0,1) )
-#set( $amqpMethodNameFirstCharU = $amqpMethodNameFirstChar.toUpperCase() )
-#set( $amqpMethodNameUpperCamel = "$amqpMethodNameFirstCharU$amqpMethod.getName().substring(1)" )
- public boolean dispatch${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}(${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body body, int channelId) throws AMQException;
-#end
-#end
-#end
-
-} \ No newline at end of file
diff --git a/java/common/templates/model/version/MethodDispatcherInterface.vm b/java/common/templates/model/version/MethodDispatcherInterface.vm
deleted file mode 100644
index 8a7b667a91..0000000000
--- a/java/common/templates/model/version/MethodDispatcherInterface.vm
+++ /dev/null
@@ -1,43 +0,0 @@
-#set( $filename = "amqp_$version.getMajor()_$version.getMinor()/MethodDispatcher_${version.getMajor()}_${version.getMinor()}.java")
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * This file is auto-generated by $generator - do not modify.
- * Supported AMQP version:
- #foreach( $supportedVersion in $model.VersionSet )
- * $supportedVersion.getMajor()-$supportedVersion.getMinor()
- #end
- */
-
-package org.apache.qpid.framing.amqp_$version.getMajor()_$version.getMinor();
-
-import org.apache.qpid.AMQException;
-import org.apache.qpid.framing.*;
-
-
-public interface MethodDispatcher_${version.getMajor()}_${version.getMinor()}
- extends MethodDispatcher,
- ServerMethodDispatcher_${version.getMajor()}_${version.getMinor()},
- ClientMethodDispatcher_${version.getMajor()}_${version.getMinor()}
-{
-
-} \ No newline at end of file
diff --git a/java/common/templates/model/version/MethodRegistryClass.vm b/java/common/templates/model/version/MethodRegistryClass.vm
deleted file mode 100644
index 277605e34b..0000000000
--- a/java/common/templates/model/version/MethodRegistryClass.vm
+++ /dev/null
@@ -1,193 +0,0 @@
-#set( $filename = "amqp_$version.getMajor()_$version.getMinor()/MethodRegistry_${version.getMajor()}_${version.getMinor()}.java")
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * This file is auto-generated by $generator - do not modify.
- * Supported AMQP version:
- * $version.getMajor()-$version.getMinor()
- */
-
-package org.apache.qpid.framing.amqp_${version.getMajor()}_${version.getMinor()};
-
-import org.apache.qpid.framing.*;
-import org.apache.qpid.protocol.AMQConstant;
-
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.mina.common.ByteBuffer;
-
-import org.apache.qpid.framing.abstraction.ProtocolVersionMethodConverter;
-
-
-public class MethodRegistry_$version.getMajor()_$version.getMinor() extends MethodRegistry
-{
-
- private static final Logger _log = LoggerFactory.getLogger(MethodRegistry.class);
-
- private ProtocolVersionMethodConverter _protocolVersionConverter = new MethodConverter_$version.getMajor()_$version.getMinor()();
-
-#set( $specificModel = $model.asSingleVersionModel() )
-
-
-#set( $maxClassId = $specificModel.getMaximumClassId()+1 )
- private final AMQMethodBodyInstanceFactory[][] _factories = new AMQMethodBodyInstanceFactory[$maxClassId][];
-
- public MethodRegistry_$version.getMajor()_$version.getMinor()()
- {
- this(new ProtocolVersion((byte)$version.getMajor(),(byte)$version.getMinor()));
- }
-
- public MethodRegistry_$version.getMajor()_$version.getMinor()(ProtocolVersion pv)
- {
- super(pv);
-#foreach( $amqpClass in $specificModel.getClassList() )
-#set( $amqpClassNameFirstChar = $amqpClass.getName().substring(0,1) )
-#set( $amqpClassNameFirstCharU = $amqpClassNameFirstChar.toUpperCase() )
-#set( $amqpClassNameUpperCamel = "$amqpClassNameFirstCharU$amqpClass.getName().substring(1)" )
-
-
-
- // Register method body instance factories for the $amqpClassNameUpperCamel class.
-
-#set( $maxMethodId = $amqpClass.getMaximumMethodId()+1 )
- _factories[$amqpClass.getClassId()] = new AMQMethodBodyInstanceFactory[$maxMethodId];
-
-#foreach( $amqpMethod in $amqpClass.getMethodList() )
-#set( $amqpMethodNameFirstChar = $amqpMethod.getName().substring(0,1) )
-#set( $amqpMethodNameFirstCharU = $amqpMethodNameFirstChar.toUpperCase() )
-#set( $amqpMethodNameUpperCamel = "$amqpMethodNameFirstCharU$amqpMethod.getName().substring(1)" )
- _factories[$amqpClass.getClassId()][$amqpMethod.getMethodId()] = ${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}BodyImpl.getFactory();
-#end
-
-#end
-
-
- }
-
-
- public AMQMethodBody convertToBody(ByteBuffer in, long size)
- throws AMQFrameDecodingException
- {
- int classId = in.getUnsignedShort();
- int methodId = in.getUnsignedShort();
-
- AMQMethodBodyInstanceFactory bodyFactory;
- try
- {
- bodyFactory = _factories[classId][methodId];
- }
- catch(NullPointerException e)
- {
- throw new AMQFrameDecodingException(AMQConstant.COMMAND_INVALID,
- "Class " + classId + " unknown in AMQP version $version.getMajor()-$version.getMinor()"
- + " (while trying to decode class " + classId + " method " + methodId + ".");
- }
- catch(IndexOutOfBoundsException e)
- {
- if(classId >= _factories.length)
- {
- throw new AMQFrameDecodingException(AMQConstant.COMMAND_INVALID,
- "Class " + classId + " unknown in AMQP version $version.getMajor()-$version.getMinor()"
- + " (while trying to decode class " + classId + " method " + methodId + ".");
-
- }
- else
- {
- throw new AMQFrameDecodingException(AMQConstant.COMMAND_INVALID,
- "Method " + methodId + " unknown in AMQP version $version.getMajor()-$version.getMinor()"
- + " (while trying to decode class " + classId + " method " + methodId + ".");
-
- }
- }
-
-
- if (bodyFactory == null)
- {
- throw new AMQFrameDecodingException(AMQConstant.COMMAND_INVALID,
- "Method " + methodId + " unknown in AMQP version $version.getMajor()-$version.getMinor()"
- + " (while trying to decode class " + classId + " method " + methodId + ".");
- }
-
-
- return bodyFactory.newInstance(in, size);
-
-
- }
-
-
- public int getMaxClassId()
- {
- return $specificModel.getMaximumClassId();
- }
-
- public int getMaxMethodId(int classId)
- {
- return _factories[classId].length - 1;
- }
-
-
-
-#foreach( $amqpClass in $specificModel.getClassList() )
-#set( $amqpClassNameFirstChar = $amqpClass.getName().substring(0,1) )
-#set( $amqpClassNameFirstCharU = $amqpClassNameFirstChar.toUpperCase() )
-#set( $amqpClassNameUpperCamel = "$amqpClassNameFirstCharU$amqpClass.getName().substring(1)" )
-
-
-#foreach( $amqpMethod in $amqpClass.getMethodList() )
-#set( $amqpMethodNameFirstChar = $amqpMethod.getName().substring(0,1) )
-#set( $amqpMethodNameFirstCharU = $amqpMethodNameFirstChar.toUpperCase() )
-#set( $amqpMethodNameUpperCamel = "$amqpMethodNameFirstCharU$amqpMethod.getName().substring(1)" )
- public ${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body create${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body(
-#foreach( $field in $amqpMethod.FieldList )
-#if( $velocityCount == $amqpMethod.getFieldList().size() )
- final $field.NativeType $field.Name
-#else
- final $field.NativeType $field.Name,
-#end
-#end
- )
- {
- return new ${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}BodyImpl(
-#foreach( $field in $amqpMethod.FieldList )
-#if( $velocityCount == $amqpMethod.getFieldList().size() )
- $field.Name
-#else
- $field.Name,
-#end
-#end
- );
- }
-
-#end
-
-#end
-
-
- public ProtocolVersionMethodConverter getProtocolVersionMethodConverter()
- {
- return _protocolVersionConverter;
- }
-
-
-}
diff --git a/java/common/templates/model/version/ServerMethodDispatcherInterface.vm b/java/common/templates/model/version/ServerMethodDispatcherInterface.vm
deleted file mode 100644
index db388fcc65..0000000000
--- a/java/common/templates/model/version/ServerMethodDispatcherInterface.vm
+++ /dev/null
@@ -1,55 +0,0 @@
-#set( $filename = "amqp_$version.getMajor()_$version.getMinor()/ServerMethodDispatcher_${version.getMajor()}_${version.getMinor()}.java")
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * This file is auto-generated by $generator - do not modify.
- * Supported AMQP version:
- #foreach( $supportedVersion in $model.VersionSet )
- * $supportedVersion.getMajor()-$supportedVersion.getMinor()
- #end
- */
-
-package org.apache.qpid.framing.amqp_$version.getMajor()_$version.getMinor();
-
-import org.apache.qpid.AMQException;
-import org.apache.qpid.framing.*;
-
-
-public interface ServerMethodDispatcher_${version.getMajor()}_${version.getMinor()} extends ServerMethodDispatcher
-{
-
-#foreach( $amqpClass in $model.getClasses() )
-#set( $amqpClassNameFirstChar = $amqpClass.getName().substring(0,1) )
-#set( $amqpClassNameFirstCharU = $amqpClassNameFirstChar.toUpperCase() )
-#set( $amqpClassNameUpperCamel = "$amqpClassNameFirstCharU$amqpClass.getName().substring(1)" )
-#foreach( $amqpMethodVersions in $amqpClass.getMethods() )
-#set( $amqpMethod = $amqpMethodVersions.asSingleVersionMethod($amqpMethodVersions.getVersionSet().first()) )
-#if( $amqpMethod.isServerMethod() )
-#set( $amqpMethodNameFirstChar = $amqpMethod.getName().substring(0,1) )
-#set( $amqpMethodNameFirstCharU = $amqpMethodNameFirstChar.toUpperCase() )
-#set( $amqpMethodNameUpperCamel = "$amqpMethodNameFirstCharU$amqpMethod.getName().substring(1)" )
- public boolean dispatch${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}(${amqpClassNameUpperCamel}${amqpMethodNameUpperCamel}Body body, int channelId) throws AMQException;
-#end
-#end
-#end
-
-} \ No newline at end of file
diff --git a/java/common/templating.py b/java/common/templating.py
deleted file mode 100644
index 732e96fa60..0000000000
--- a/java/common/templating.py
+++ /dev/null
@@ -1,119 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-class Parser:
-
- def __init__(self, **kwargs):
- self.output = ""
- self.environ = {"out": self.parse}
- for k, v in kwargs.items():
- self.environ[k] = v
- self.text = ""
- self.level = 0
- self.line = None
-
- def action(self, actor):
- text = self.text
- self.text = ""
- actor(text)
-
- def out(self, text):
- self.output += text
-
- def prefix_lines(self, text):
- return "%s%s" % ("\n"*(self.line - 1 - text.count("\n")), text)
-
- def evaluate(self, text):
- self.out(str(eval(self.prefix_lines(text), self.environ, self.environ)))
-
- def execute(self, text):
- exec self.prefix_lines(text) in self.environ, self.environ
-
- def parse(self, input):
- old_line = self.line
- try:
- state = self.start
- self.line = 1
- for ch in input:
- state = state(ch)
- if ch == "\n":
- self.line += 1
- if state == self.start:
- self.action(self.out)
- elif state == self.alnum:
- self.action(self.evaluate)
- else:
- raise ParseError()
- finally:
- self.line = old_line
-
- def start(self, ch):
- if ch == "$":
- return self.dollar
- else:
- self.text += ch
- return self.start
-
- def dollar(self, ch):
- if ch == "$":
- self.text += "$"
- return self.start
- elif ch == "(":
- self.action(self.out)
- return self.expression
- elif ch == "{":
- self.action(self.out)
- return self.block
- else:
- self.action(self.out)
- self.text += ch
- return self.alnum
-
- def alnum(self, ch):
- if ch.isalnum():
- self.text += ch
- return self.alnum
- else:
- self.action(self.evaluate)
- self.text += ch
- return self.start
-
- def match(self, ch, start, end):
- if ch == start:
- self.level += 1
- if ch == end:
- self.level -= 1
-
- def block(self, ch):
- if not self.level and ch == "}":
- self.action(self.execute)
- return self.start
- else:
- self.match(ch, "{", "}")
- self.text += ch
- return self.block
-
- def expression(self, ch):
- if not self.level and ch == ")":
- self.action(self.evaluate)
- return self.start
- else:
- self.match(ch, "(", ")")
- self.text += ch
- return self.expression