internal void xmitFillStart(PacketType type) { packetType = type; xmitBuf.clear(); xmitBuf.putInt(-1); xmitBuf.putInt(PT_MAGIC | (int)type); }
public ChabuReceiver(ChabuReceiver receiver, AbortMessage localAbortMessage) { this.localAbortMessage = localAbortMessage; if (receiver == null) { recvBuf = new ByteBuffer(Constants.MAX_RECV_LIMIT_LOW); recvBuf.order(ByteOrder.BIG_ENDIAN); recvBuf.clear(); recvBuf.limit(HEADER_RECV_SZ); } else { recvBuf = receiver.recvBuf; packetSize = receiver.packetSize; } }
protected override void processSeq(ByteChannel channel) { // is SEQ packet recvBuf.position(HEADER_RECV_SZ); int channelId = recvBuf.getInt(8); int seq = recvBuf.getInt(12); int pls = recvBuf.getInt(16); int padding = packetSize - HEADER_RECV_SZ - pls; ChabuChannelImpl chabuChannel = channels.get(channelId); if (seqPacketIndex == 0) { // first processing Utils.ensure(padding >= 0 && padding < 4, ChabuErrorCode.ASSERT, "padding inplausible packetSize:{0} pls:{1}", packetSize, pls); chabuChannel.verifySeq(seq); } if (seqPacketIndex < pls) { int toBeHandledLimit = pls - seqPacketIndex; int handledBytes = chabuChannel.handleRecvSeq(channel, toBeHandledLimit); seqPacketIndex += handledBytes; } if (seqPacketIndex >= pls && seqPacketIndex + ChabuImpl.SEQ_MIN_SZ < packetSize) { int paddingRemaining = packetSize - seqPacketIndex - ChabuImpl.SEQ_MIN_SZ; recvBufPadding.clear(); Utils.ensure(paddingRemaining <= 3 && paddingRemaining > 0, ChabuErrorCode.ASSERT, "paddingRemaining inplausible {0} ({1}, {2})", paddingRemaining, seqPacketIndex, packetSize); recvBufPadding.limit(paddingRemaining); seqPacketIndex += channel.read(recvBufPadding); } if (seqPacketIndex + ChabuImpl.SEQ_MIN_SZ >= packetSize) { seqPacketIndex = 0; recvBuf.clear(); recvBuf.limit(HEADER_RECV_SZ); packetType = PacketType.NONE; } else { Utils.ensure(recvBuf.position() == 20, ChabuErrorCode.ASSERT, ""); Utils.ensure(recvBuf.limit() == 20, ChabuErrorCode.ASSERT, ""); } }
private LoopCtrl xmitAction_EvalChannelData() { ChabuChannelImpl ch = PopNextPriorizedChannelRequest(xmitChannelRequestData); if (ch != null) { seqPacketPayload = ch.handleXmitData(this, xmitBuf, RemoteRecvPacketSize - ChabuImpl.SEQ_MIN_SZ); if (seqPacketPayload == null) { return(LoopCtrl.None); } seqChannel = ch; int paddingCount = (4 - (seqPacketPayload.remaining() & 3)) % 4; seqPadding.clear().limit(paddingCount); Utils.ensure(xmitBuf.getInt(0) == xmitBuf.remaining() + seqPacketPayload.remaining() + seqPadding.remaining(), ChabuErrorCode.ASSERT, "{0} = {1} + {2} + {3}", xmitBuf.getInt(0), xmitBuf.remaining(), seqPacketPayload.remaining(), seqPadding.remaining()); } return(xmitBuf.hasRemaining() ? LoopCtrl.Continue : LoopCtrl.None); }