private boolean isClassOfServiceValid(ClassOfService classOfService) { return (classOfService.common().maxMsgSize() == _expectedClassOfService.common().maxMsgSize() && classOfService.common().protocolType() == _expectedClassOfService.common().protocolType() && classOfService.common().protocolMajorVersion() == _expectedClassOfService.common().protocolMajorVersion() && classOfService.common().protocolMinorVersion() == _expectedClassOfService.common().protocolMinorVersion() && (classOfService.authentication().type() == _expectedClassOfService.authentication().type() || classOfService.authentication().type() == ClassesOfService.AuthenticationTypes.NOT_REQUIRED) && classOfService.flowControl().type() == _expectedClassOfService.flowControl().type() && classOfService.dataIntegrity().type() == _expectedClassOfService.dataIntegrity().type() && classOfService.guarantee().type() == _expectedClassOfService.guarantee().type()); }
/** * Creates a provider-side tunnel stream. * * @param reactorChannel the reactor channel * @param event the event * @param options the options */ public TunnelStream(ReactorChannel reactorChannel, TunnelStreamRequestEvent event, TunnelStreamAcceptOptions options) { this(reactorChannel); _streamId = event.streamId(); _domainType = event.domainType(); _serviceId = event.serviceId(); _guaranteedOutputBuffers = options.guaranteedOutputBuffers(); options.classOfService().copy(_classOfService); _defaultMsgCallback = options.defaultMsgCallback(); _statusEventCallback = options.statusEventCallback(); _name = event.name(); _userSpecObject = options.userSpecObject(); _isProvider = true; _bigBufferPool = new TunnelStreamBigBufferPool(options.classOfService().common().maxFragmentSize(), options.guaranteedOutputBuffers()); }
@Override public int encodeRequestAsMsg(EncodeIterator encIter, Buffer classOfServiceBuffer, RequestMsg requestMsg) { int ret = CodecReturnCodes.SUCCESS; setupRequestMsgHeader(requestMsg); encIter.clear(); encIter.setBufferAndRWFVersion(classOfServiceBuffer, _classOfService.common().protocolMajorVersion(), _classOfService.common().protocolMinorVersion()); // encode class of service as payload if ((ret = _classOfService.encode(encIter)) < CodecReturnCodes.SUCCESS) { return ret; } requestMsg.encodedDataBody(classOfServiceBuffer); return CodecReturnCodes.SUCCESS; }
public TunnelStreamHandler() { // set the expected class of service for this provider (use defaults for common properties) _expectedClassOfService.authentication().type(ClassesOfService.AuthenticationTypes.OMM_LOGIN); _expectedClassOfService.flowControl().type(ClassesOfService.FlowControlTypes.BIDIRECTIONAL); _expectedClassOfService.dataIntegrity().type(ClassesOfService.DataIntegrityTypes.RELIABLE); }
/** * Checks if is send window open. * * @param buffer the buffer * @return true, if is send window open */ /* Determine if the recvWindow has room for sending data * (or, if no buffer is given, whether a message might be possible to send). */ boolean isSendWindowOpen(TunnelStreamBuffer buffer) { boolean retVal = true; if (_classOfService.flowControl().type() == ClassesOfService.FlowControlTypes.BIDIRECTIONAL) { if (_firstIsSendWindowOpenCall) { _firstIsSendWindowOpenCall = false; // always allow initial login if (_classOfService.authentication().type() == ClassesOfService.AuthenticationTypes.OMM_LOGIN) { return retVal; } } return _sendBytes + (buffer != null ? buffer.innerWriteBufferLength() : 0)<= _classOfService.flowControl().sendWindowSize(); } return retVal; }
int getMaxFragmentSize(TunnelStream tunnelStream) { return tunnelStream.classOfService().common().maxFragmentSize(); }
if (event.classOfService().common().streamVersion() > CosCommon.CURRENT_STREAM_VERSION) _tunnelStreamRejectOptions.state().text().data("Unsupported class of service stream version: " + event.classOfService().common().streamVersion()); _tunnelStreamRejectOptions.expectedClassOfService(_defaultClassOfService); ReactorReturnCodes.FAILURE, "ReactorChannel.acceptTunnelStream", "Unsupported class of service stream version: " + event.classOfService().common().streamVersion()); if (!event.classOfService().decodedProperly()) options.classOfService().common().streamVersion(event.classOfService().common().streamVersion()); if (!options.classOfService().isValid(isServer, errorInfo)) refreshMsg.containerType(DataTypes.FILTER_LIST); refreshMsg.msgKey().applyHasFilter(); refreshMsg.msgKey().filter(options.classOfService().filterFlags()); if (options.classOfService().flowControl().recvWindowSize() == -1) options.classOfService().flowControl().recvWindowSize(TunnelStream.DEFAULT_RECV_WINDOW); if (options.classOfService().flowControl().recvWindowSize() < options.classOfService().common().maxFragmentSize()) options.classOfService().flowControl().recvWindowSize(options.classOfService().common().maxFragmentSize()); refreshMsg.encodedDataBody(options.classOfService().encode(this)); tunnelStream.classOfService().flowControl().sendWindowSize(event.classOfService().flowControl().recvWindowSize()); if (tunnelStream.classOfService().flowControl().sendWindowSize() < tunnelStream.classOfService().common().maxFragmentSize()) tunnelStream.classOfService().flowControl().sendWindowSize(tunnelStream.classOfService().common().maxFragmentSize());
if ((ret = tunnelStream.classOfService().decode(_reactorChannel, refreshMsg.encodedDataBody(), errorInfo)) != ReactorReturnCodes.SUCCESS) if (tunnelStream.classOfService().flowControl().recvWindowSize() == -1) tunnelStream.classOfService().flowControl().recvWindowSize(TunnelStream.DEFAULT_RECV_WINDOW); if (tunnelStream.classOfService().flowControl().recvWindowSize() < tunnelStream.classOfService().common().maxFragmentSize()) tunnelStream.classOfService().flowControl().recvWindowSize(tunnelStream.classOfService().common().maxFragmentSize()); if (tunnelStream.classOfService().flowControl().sendWindowSize() == -1) tunnelStream.classOfService().flowControl().sendWindowSize(TunnelStream.DEFAULT_RECV_WINDOW); if (tunnelStream.classOfService().flowControl().sendWindowSize() < tunnelStream.classOfService().common().maxFragmentSize()) tunnelStream.classOfService().flowControl().sendWindowSize(tunnelStream.classOfService().common().maxFragmentSize()); CosCommon commonProperties = tunnelStream.classOfService().common(); if (commonProperties.streamVersion() <= CosCommon.CURRENT_STREAM_VERSION) if (tunnelStream.classOfService().authentication().type() != ClassesOfService.AuthenticationTypes.OMM_LOGIN)
_decodeIter.setBufferAndRWFVersion(event.transportBuffer(), event.tunnelStream().classOfService().common().protocolMajorVersion(), event.tunnelStream().classOfService().common().protocolMinorVersion()); if (event.containerType() == DataTypes.MSG) event.tunnelStream().classOfService().authentication().type() == ClassesOfService.AuthenticationTypes.OMM_LOGIN && _msg.domainType() == DomainTypes.LOGIN && _msg.msgClass() == MsgClasses.REQUEST) ret = _encodeIter.setBufferAndRWFVersion(buffer, event.tunnelStream().classOfService().common().protocolMajorVersion(), event.tunnelStream().classOfService().common().protocolMinorVersion()); if (ret != CodecReturnCodes.SUCCESS)
tsOpenOpts.queueMsgCallback(consumer); tsOpenOpts.defaultMsgCallback(consumer); tsOpenOpts.classOfService().dataIntegrity().type(DataIntegrityTypes.RELIABLE); tsOpenOpts.streamId(5); tsOpenOpts.serviceId(Provider.defaultService().serviceId()); int numberOfFragments = 25500/consTunnelStream._classOfService.common().maxFragmentSize() + 1; int fragmentNumber = 0; int messageId = 1; numberOfFragments = 25500/provTunnelStream._classOfService.common().maxFragmentSize() + 1; fragmentNumber = 0; messageId = 1;
tsOpenOpts.queueMsgCallback(consumer); tsOpenOpts.defaultMsgCallback(consumer); tsOpenOpts.classOfService().dataIntegrity().type(DataIntegrityTypes.RELIABLE); tsOpenOpts.streamId(5); tsOpenOpts.serviceId(Provider.defaultService().serviceId());
tsOpenOpts.queueMsgCallback(this); tsOpenOpts.defaultMsgCallback(this); tsOpenOpts.classOfService().dataIntegrity().type(DataIntegrityTypes.RELIABLE); tsOpenOpts.classOfService().flowControl().type(FlowControlTypes.BIDIRECTIONAL); tsOpenOpts.classOfService().guarantee().type(GuaranteeTypes.PERSISTENT_QUEUE); tsOpenOpts.classOfService().guarantee().persistLocally(persistLocally); tsOpenOpts.streamId(5); tsOpenOpts.serviceId(Provider.defaultService().serviceId());
if (tunnelBuffer.length() > _classOfService.common().maxMsgSize()) error.text("Submitted buffer cannot be larger than maxMsgSize of " + _classOfService.common().maxMsgSize()); return ReactorReturnCodes.PARAMETER_INVALID; _classOfService.guarantee().type() == ClassesOfService.GuaranteeTypes.PERSISTENT_QUEUE && _decSubMsgForSubmit.domainType() != DomainTypes.LOGIN && _decSubMsgForSubmit.domainType() != DomainTypes.SOURCE && _classOfService.authentication().type() == ClassesOfService.AuthenticationTypes.OMM_LOGIN && !_providerLoginRefreshSent)
requestMsg.msgKey().applyHasFilter(); TunnelStreamOpenOptions tsOpenOpts = ReactorFactory.createTunnelStreamOpenOptions(); tsOpenOpts.classOfService().dataIntegrity().type(DataIntegrityTypes.RELIABLE); requestMsg.msgKey().filter(tsOpenOpts.classOfService().filterFlags()); EncodeIterator encIter = CodecFactory.createEncodeIterator(); Buffer buffer = CodecFactory.createBuffer(); elemEntry.name(ClassesOfService.ElementNames.PROTOCOL_TYPE); elemEntry.dataType(DataTypes.UINT); tempUInt.value(tsOpenOpts.classOfService().common().protocolType()); assertTrue(elemEntry.encode(encIter, tempUInt) >= CodecReturnCodes.SUCCESS); elemEntry.name(ClassesOfService.ElementNames.PROTOCOL_MAJOR_VERSION); elemEntry.dataType(DataTypes.UINT); tempUInt.value(tsOpenOpts.classOfService().common().protocolMajorVersion()); assertTrue(elemEntry.encode(encIter, tempUInt) >= CodecReturnCodes.SUCCESS); elemEntry.name(ClassesOfService.ElementNames.PROTOCOL_MINOR_VERSION); elemEntry.dataType(DataTypes.UINT); tempUInt.value(tsOpenOpts.classOfService().common().protocolMinorVersion()); assertTrue(elemEntry.encode(encIter, tempUInt) >= CodecReturnCodes.SUCCESS); elemEntry.name(ClassesOfService.ElementNames.TYPE); elemEntry.dataType(DataTypes.UINT); tempUInt.value(tsOpenOpts.classOfService().dataIntegrity().type()); assertTrue(elemEntry.encode(encIter, tempUInt) >= CodecReturnCodes.SUCCESS);
_classOfService.common().streamVersion(_classOfService.common().streamVersion() - 1); _encIter.setBufferAndRWFVersion(tBuffer, _classOfService.common().protocolMajorVersion(), _classOfService.common().protocolMinorVersion()); _tunnelStreamMsg.domainType(_domainType); ackHeader.seqNum(_recvLastSeqNum); ackHeader.recvWindow(_classOfService.flowControl().recvWindowSize()); _encIter.setBufferAndRWFVersion(tBuffer, _classOfService.common().protocolMajorVersion(), _classOfService.common().protocolMinorVersion()); + _sendLastSeqNum + " out, " + _sendLastSeqNumAcked + " acked out, " + _classOfService.flowControl().recvWindowSize() + " recvWindow -->"); ackHeader.recvWindow(_classOfService.flowControl().recvWindowSize()); _encIter.setBufferAndRWFVersion(tBuffer, _classOfService.common().protocolMajorVersion(), _classOfService.common().protocolMinorVersion()); _tunnelStreamMsg.domainType(_domainType); ackHeader.seqNum(_recvLastSeqNum); ackHeader.recvWindow(_classOfService.flowControl().recvWindowSize()); _encIter.setBufferAndRWFVersion(tBuffer, _classOfService.common().protocolMajorVersion(), _classOfService.common().protocolMinorVersion()); ackHeader.recvWindow(_classOfService.flowControl().recvWindowSize()); _encIter.setBufferAndRWFVersion(tBuffer, _classOfService.common().protocolMajorVersion(), _classOfService.common().protocolMinorVersion()); ackHeader.recvWindow(_classOfService.flowControl().recvWindowSize());
assertEquals(CodecReturnCodes.SUCCESS, cos.decode(consumer.reactorChannel(), requestMsg.encodedDataBody(), _errorInfo)); cos.isServer(true); refreshMsg.containerType(DataTypes.FILTER_LIST); refreshMsg.msgKey().applyHasFilter(); refreshMsg.msgKey().filter(cos.filterFlags()); assertEquals(CodecReturnCodes.SUCCESS, cos.encode(_eIter));
/** * Gets the state info. * * @param info the info * @return the state info */ int getStateInfo(TunnelStreamStateInfo info) { try { info.set(_tunnelStreamState, _outboundTransmitList.count(), _outboundMsgAckList.count(), _classOfService.flowControl().sendWindowSize() - _sendBytes, _classOfService.flowControl().recvWindowSize() - _recvBytes); } catch (Exception e) { return ReactorReturnCodes.FAILURE; } catch (InternalError e) { return ReactorReturnCodes.FAILURE; } return ReactorReturnCodes.SUCCESS; }
msg.msgKey().checkHasFilter()) if ((ret = _tunnelStreamRequestEvent.classOfService().decodeCommonProperties(_reactorChannel, msg.encodedDataBody(), errorInfo)) == ReactorReturnCodes.SUCCESS) int requestedStreamVersion = _tunnelStreamRequestEvent.classOfService().common().streamVersion(); if (requestedStreamVersion <= CosCommon.CURRENT_STREAM_VERSION)
statusMsg.containerType(DataTypes.FILTER_LIST); statusMsg.msgKey().applyHasFilter(); statusMsg.msgKey().filter(options.expectedClassOfService().filterFlags()); statusMsg.encodedDataBody(options.expectedClassOfService().encode(this));