private void activateAllChannels() { for (int i = 0; i < channels.size(); i++) { ChabuChannelImpl ch = channels.get(i); ch.activate(this, i); } }
private void HandleSeqCompletion() { seqChannel.seqPacketCompleted(); if (seqChannel.XmitRemaining > 0 && seqChannel.getXmitRemainingByRemote() > 0) { xmitChannelRequestData.request(seqChannel.Priority, seqChannel.ChannelId); callXmitRequestListener(); } seqPacketPayload = null; seqChannel = null; packetType = PacketType.NONE; }
protected override void processRecvArm() { Utils.ensure(setup.isRemoteAcceptReceived(), ChabuErrorCode.ASSERT, ""); if (packetSize != 16) { throw new ChabuException(string.Format("Packet type ARM with unexpected len field: {0}", packetSize)); } int channelId = recvBuf.getInt(); int arm = recvBuf.getInt(); ChabuChannelImpl channel = channels.get(channelId); channel.handleRecvArm(arm); }
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); }
public static void add(this List <ChabuChannelImpl> list, ChabuChannelImpl c) { list.Add(c); }