private P2PMessage[] SetSequenceNumberAndRegisterAck(P2PSession session, Contact remote, P2PMessage p2pMessage, AckHandler ackHandler, int timeout) { if (p2pMessage.Header.Identifier == 0) { if (p2pMessage.Version == P2PVersion.P2PV1) { p2pMessage.Header.Identifier = ++sequenceId; } else if (p2pMessage.Version == P2PVersion.P2PV2) { p2pMessage.V2Header.Identifier = sequenceId; } } if (p2pMessage.Version == P2PVersion.P2PV1 && p2pMessage.V1Header.AckSessionId == 0) { p2pMessage.V1Header.AckSessionId = (uint)new Random().Next(50000, int.MaxValue); } if (p2pMessage.Version == P2PVersion.P2PV2 && p2pMessage.V2Header.PackageNumber == 0) { p2pMessage.V2Header.PackageNumber = packageNo; } P2PMessage[] msgs = p2pMessage.SplitMessage(MaxDataSize); if (p2pMessage.Version == P2PVersion.P2PV2) { // Correct local sequence no P2PMessage lastMsg = msgs[msgs.Length - 1]; SequenceId = lastMsg.V2Header.Identifier + lastMsg.V2Header.MessageSize; } if (ackHandler != null) { P2PMessage firstMessage = msgs[0]; RegisterAckHandler(new P2PAckMessageEventArgs(firstMessage, ackHandler, timeout)); } if (session != null) { session.LocalIdentifier = SequenceId; } return(msgs); }
private P2PMessage[] SetSequenceNumberAndRegisterAck(P2PSession session, Contact remote, P2PMessage p2pMessage, AckHandler ackHandler, int timeout) { if (p2pMessage.Header.Identifier == 0) { if (p2pMessage.Version == P2PVersion.P2PV1) { p2pMessage.Header.Identifier = ++sequenceId; } else if (p2pMessage.Version == P2PVersion.P2PV2) { p2pMessage.V2Header.Identifier = sequenceId; } } if (p2pMessage.Version == P2PVersion.P2PV1 && p2pMessage.V1Header.AckSessionId == 0) { p2pMessage.V1Header.AckSessionId = (uint)new Random().Next(50000, int.MaxValue); } if (p2pMessage.Version == P2PVersion.P2PV2 && p2pMessage.V2Header.PackageNumber == 0) { p2pMessage.V2Header.PackageNumber = packageNo; } P2PMessage[] msgs = p2pMessage.SplitMessage(MaxDataSize); if (p2pMessage.Version == P2PVersion.P2PV2) { // Correct local sequence no P2PMessage lastMsg = msgs[msgs.Length - 1]; SequenceId = lastMsg.V2Header.Identifier + lastMsg.V2Header.MessageSize; } if (ackHandler != null) { P2PMessage firstMessage = msgs[0]; RegisterAckHandler(new P2PAckMessageEventArgs(firstMessage, ackHandler, timeout)); } if (session != null) { session.LocalIdentifier = SequenceId; } return msgs; }