@Override long persistBufferTimeoutNsec(TunnelStreamPersistenceBuffer persistBuffer) { return _fileByteBuf.getLong(persistBuffer.filePosition() + MsgHeader.TIME_TO_LIVE_POS) * TunnelStreamUtil.NANO_PER_MILLI; } }
@Override long persistBufferTimeoutNsec(TunnelStreamPersistenceBuffer persistBuffer) { return _fileByteBuf.getLong(persistBuffer.filePosition() + MsgHeader.TIME_TO_LIVE_POS); } }
_fileByteBuf.putInt(prev.filePosition() + nextMsgPosOffset, next.filePosition()); else _fileByteBuf.putInt(prev.filePosition() + nextMsgPosOffset, 0); _fileByteBuf.putInt(oldListHeadPosition, next.filePosition()); else _fileByteBuf.putInt(oldListHeadPosition, 0); _fileByteBuf.putInt(persistBuffer.filePosition() + nextMsgPosOffset, next.filePosition()); else _fileByteBuf.putInt(persistBuffer.filePosition() + nextMsgPosOffset, 0); _fileByteBuf.putInt(prev.filePosition() + nextMsgPosOffset, persistBuffer.filePosition()); _fileByteBuf.putInt(newListHeadPosition, persistBuffer.filePosition());
@Override void setBufferAsTransmitted(TunnelStreamPersistenceBuffer persistenceBuffer) { if (persistenceBuffer.isTransmitted()) return; int seqNum; /* Assign a sequence number to the buffer and mark it as * transmitted. */ seqNum = _tunnelSubstream._lastOutSeqNum + 1; _fileByteBuf.putInt(persistenceBuffer.filePosition() + MsgHeader.FLAGS_POS, MsgHeaderFlags.TRANSMITTED); persistenceBuffer.isTransmitted(true); persistenceBuffer.seqNum(seqNum); lastOutSeqNum(seqNum); _fileByteBuf.force(); }
@Override void setBufferAsTransmitted(TunnelStreamPersistenceBuffer persistenceBuffer) { if (persistenceBuffer.isTransmitted()) return; int seqNum; /* Assign a sequence number to the buffer and mark it as * transmitted. */ seqNum = _tunnelSubstream._lastOutSeqNum + 1; _fileByteBuf.putInt(persistenceBuffer.filePosition() + MsgHeader.MSG_SEQNUM_POS, seqNum); persistenceBuffer.isTransmitted(true); persistenceBuffer.seqNum(seqNum); persistenceBufferListMove(_waitingTransmitList, Header.WAIT_TRANSMIT_HEAD_POS, _waitingQueueAckList, Header.WAITACK_LIST_HEAD_POS, persistenceBuffer); lastOutSeqNum(seqNum); }
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); }
persistBuffer.filePosition(position); _persistentBufferPool.push(persistBuffer, TunnelStreamPersistenceBuffer.SUBSTREAM_LINK); position = _fileByteBuf.getInt(position + MsgHeader.NEXT_MSG_POS); persistBuffer.filePosition(Header.LENGTH + i * (MsgHeader.LENGTH + _maxMsgLength + SlicedBufferPool.TUNNEL_STREAM_HDR_SIZE)); _persistentBufferPool.push(persistBuffer, TunnelStreamPersistenceBuffer.SUBSTREAM_LINK); _fileByteBuf.putInt(prevPersistBuffer.filePosition() + MsgHeader.NEXT_MSG_POS, persistBuffer.filePosition()); _fileByteBuf.putInt(persistBuffer.filePosition() + MsgHeader.NEXT_MSG_POS, 0); _fileByteBuf.putInt(Header.POOL_HEAD_POS, _persistentBufferPool.peek().filePosition()); _fileByteBuf.putInt(Header.WAIT_TRANSMIT_HEAD_POS, 0); _fileByteBuf.putInt(Header.WAITACK_LIST_HEAD_POS, 0);
persistBuffer.filePosition(position); _persistentBufferPool.push(persistBuffer, TunnelStreamPersistenceBuffer.SUBSTREAM_LINK); position = _fileByteBuf.getInt(position + MsgHeader.NEXT_MSG_POS); persistBuffer.length(length); persistBuffer.tunnelStreamHeaderLen(0); /* This format does not include a tunnel stream header. */ persistBuffer.filePosition(entryPosition); persistBuffer.isTransmitted((_fileByteBuf.getInt(entryPosition + MsgHeader.FLAGS_POS) & MsgHeaderFlags.TRANSMITTED) != 0); if (persistBuffer.isTransmitted()) persistBuffer.filePosition(Header.LENGTH + i * (MsgHeader.LENGTH + _maxMsgLength + SlicedBufferPool.TUNNEL_STREAM_HDR_SIZE)); _persistentBufferPool.push(persistBuffer, TunnelStreamPersistenceBuffer.SUBSTREAM_LINK); _fileByteBuf.putInt(prevPersistBuffer.filePosition() + MsgHeader.NEXT_MSG_POS, persistBuffer.filePosition()); _fileByteBuf.putInt(persistBuffer.filePosition() + MsgHeader.NEXT_MSG_POS, 0); _fileByteBuf.putInt(Header.POOL_HEAD_POS, _persistentBufferPool.peek().filePosition()); _fileByteBuf.putInt(Header.SAVED_HEAD_POS, 0);
entryPosition = persistenceBuffer.filePosition(); _fileByteBuf.putInt(persistenceBuffer.filePosition() + MsgHeader.FLAGS_POS, MsgHeaderFlags.NONE); _fileByteBuf.putInt(entryPosition + MsgHeader.MSG_LENGTH_POS, buffer.length()); if (!buffer.timeoutIsCode())
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; }
entryPosition = persistenceBuffer.filePosition();