コード例 #1
0
ファイル: Trunk.cs プロジェクト: KhaledSMQ/SipServer
        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);
            }
        }
コード例 #2
0
ファイル: Trunk.cs プロジェクト: hungdluit/sipserver
		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;
			}
		}