protected void copyToTunnelStreamBuffer(TunnelStreamPersistenceBuffer persistBuffer, TunnelStreamBuffer tunnelStreamBuffer) { int tmpLimit = _fileByteBuf.limit(); int startPos = persistBuffer.filePosition() + persistBufferMsgOffset() + persistBuffer.tunnelStreamHeaderLen(); int length = persistBuffer.length() - persistBuffer.tunnelStreamHeaderLen(); _fileByteBuf.limit(startPos + length); _fileByteBuf.position(startPos); tunnelStreamBuffer.data().put(_fileByteBuf); _fileByteBuf.limit(tmpLimit); tunnelStreamBuffer.setCurrentPositionAsEndOfEncoding(); tunnelStreamBuffer.persistenceBuffer(_tunnelSubstream, persistBuffer); }
private int loadMsg(int entryPosition, boolean isTransmitted, Msg tmpMsg, EncodeIterator tmpEncodeIter, DecodeIterator tmpDecodeIter, Error error) { int length; int ret; TunnelStreamPersistenceBuffer persistBuffer = new TunnelStreamPersistenceBuffer(); length = _fileByteBuf.getInt(entryPosition + MsgHeader.MSG_LENGTH_POS); persistBuffer.length(length); persistBuffer.filePosition(entryPosition); persistBuffer.seqNum(_fileByteBuf.getInt(entryPosition + MsgHeader.MSG_SEQNUM_POS)); persistBuffer.isTransmitted(isTransmitted); /* Get TunnelStreamHeader length. */ _tmpBuf.clear(); _tmpBuf.data(_fileByteBuf, entryPosition + MsgHeader.LENGTH, persistBuffer.length()); tmpDecodeIter.clear(); tmpDecodeIter.setBufferAndRWFVersion(_tmpBuf, _tunnelSubstream._tunnelStream.classOfService().common().protocolMajorVersion(), _tunnelSubstream._tunnelStream.classOfService().common().protocolMinorVersion()); if ((ret = tmpMsg.decode(tmpDecodeIter)) != CodecReturnCodes.SUCCESS) { error.errorId(ret); error.text("Failed to decode message while loading message from file."); return ReactorReturnCodes.FAILURE; } persistBuffer.tunnelStreamHeaderLen(tmpMsg.encodedDataBody().position() - (entryPosition + MsgHeader.LENGTH)); if (isTransmitted) _waitingQueueAckList.push(persistBuffer, TunnelStreamPersistenceBuffer.SUBSTREAM_LINK); else _waitingTransmitList.push(persistBuffer, TunnelStreamPersistenceBuffer.SUBSTREAM_LINK); return ReactorReturnCodes.SUCCESS; }
if (persistBuffer.length() - persistBuffer.tunnelStreamHeaderLen() > _tunnelSubstream._tunnelStream._classOfService.common().maxMsgSize()) tunnelStreamBuffer.clear(persistBuffer.length()); tunnelStreamBuffer.persistenceBuffer(_tunnelSubstream, persistBuffer); tunnelStreamBuffer = _tunnelSubstream._tunnelStream.getBuffer(persistBuffer.length() - persistBuffer.tunnelStreamHeaderLen(), false, true, error);
persistBuffer.length(length); persistBuffer.tunnelStreamHeaderLen(0); /* This format does not include a tunnel stream header. */ persistBuffer.filePosition(entryPosition);