public int GetCSeq(Methods method, ByteArrayPart callId, int originalCSeq) { lock (sync) { if (method != Methods.Invitem && method != Methods.Byem && method != Methods.Ackm) { return(++cseq); } int hash = UsedCSeq.CalculateHash(callId, originalCSeq); if (method != Methods.Invitem) { int start = usedCSeqsIndex; for (int i = start; i >= 0; i--) { if (usedCSeqs[i].Hash == hash) { return(usedCSeqs[i].CSeq); } } for (int i = usedCSeqs.Length - 1; i > start; i--) { if (usedCSeqs[i].Hash == hash) { return(usedCSeqs[i].CSeq); } } } int newCSeq = ++inviteCseq; usedCSeqsIndex = (usedCSeqsIndex + 1) % usedCSeqs.Length; usedCSeqs[usedCSeqsIndex] = new UsedCSeq(hash, newCSeq); return(newCSeq); } }
public int GetCSeq(Methods method, ByteArrayPart callId, int originalCSeq) { lock (sync) { if (method != Methods.Invitem && method != Methods.Byem && method != Methods.Ackm) return ++cseq; int hash = UsedCSeq.CalculateHash(callId, originalCSeq); if (method != Methods.Invitem) { int start = usedCSeqsIndex; for (int i = start; i >= 0; i--) if (usedCSeqs[i].Hash == hash) return usedCSeqs[i].CSeq; for (int i = usedCSeqs.Length - 1; i > start; i--) if (usedCSeqs[i].Hash == hash) return usedCSeqs[i].CSeq; } int newCSeq = ++inviteCseq; usedCSeqsIndex = (usedCSeqsIndex + 1) % usedCSeqs.Length; usedCSeqs[usedCSeqsIndex] = new UsedCSeq(hash, newCSeq); return newCSeq; } }