/// <summary>
        /// Creates a SIP request.
        /// </summary>
        /// <param name="method">The SIP method (invite etc.)</param>
        /// <param name="content">The SIP body contents.</param>
        /// <param name="contentType">The type of the SIP body.</param>
        /// <returns>Message.</returns>
        public virtual Message CreateRequest(string method, string content = "", string contentType = "")
        {
            Server = false;
            if (RemoteParty == null)
            {
                Debug.Assert(false, String.Format("No remoteParty for UAC\n"));
            }
            if (LocalParty == null)
            {
                LocalParty = new Address("\"Anonymous\" <sip:[email protected]>");
            }
            //TODO: Use Remote Party instead of Remote Target?
            SIPURI uri;

            if (RemoteTarget != null)
            {
                uri = new SIPURI(RemoteTarget.ToString());
            }
            else
            {
                uri = new SIPURI(RemoteParty.ToString());
            }

            if (method == "REGISTER")
            {
                //TODO: Is this right ?
                //uri.User = "";
            }
            if ((method != "ACK") && (method != "CANCEL"))
            {
                LocalSeq = ++LocalSeq;
            }
            //TODO: Use Remote Party instead of Remote Target?
            Header to;

            if (RemoteTarget != null)
            {
                to = new Header(RemoteTarget.ToString(), "To");
            }
            else
            {
                to = new Header(RemoteParty.ToString(), "To");
            }

            Header from = new Header(LocalParty.ToString(), "From");

            from.Attributes["tag"] = LocalTag;
            Header cSeq        = new Header(LocalSeq + " " + method, "CSeq");
            Header callId      = new Header(CallID, "Call-ID");
            Header maxForwards = new Header(MaxForwards.ToString(), "Max-Forwards");
            Header via         = Stack.CreateVia();
            Dictionary <string, object> branchParams = new Dictionary <string, object>
            {
                { "To", to.Value },
                { "From", @from.Value },
                { "CallId", callId.Value },
                { "CSeq", cSeq.Number }
            };

            via.Attributes["branch"] = Transaction.CreateBranch(branchParams, false);
            if (LocalTarget == null)
            {
                LocalTarget      = Stack.Uri.Dup();
                LocalTarget.User = LocalParty.Uri.User;
            }
            Header contact = new Header(LocalTarget.ToString(), "Contact");

            Header[]      headerList = { to, from, cSeq, callId, maxForwards, via, contact };
            List <Header> headers    = headerList.ToList();

            // Check this TODO
            //
            if (RouteSet.Count != 0)
            {
                headers.AddRange(RouteSet);
            }

            //app adds other headers such as Supported, Require and Proxy-Require
            if (!string.IsNullOrEmpty(contentType))
            {
                headers.Add(new Header(contentType, "Content-Type"));
            }
            Dictionary <string, List <Header> > headerDict = new Dictionary <string, List <Header> >();

            foreach (Header h in headers)
            {
                if (headerDict.ContainsKey(h.Name))
                {
                    headerDict[h.Name].Add(h);
                }
                else
                {
                    List <Header> temp = new List <Header> {
                        h
                    };
                    headerDict.Add(h.Name, temp);
                }
            }
            Request = Message.CreateRequest(method, uri, headerDict, content);
            return(Request);
        }
Exemple #2
0
        static int Main()
        {
            /*
             * Завдання:
             *  Створіть застосунок для демонстрації в коді наступних можливостей:
             *  1.	Роботу з масивами(одновимірним (+), двовимірним прямокутним (+) та двовимірним невирівняним () ). Студенти з парними номерами y варіанті
             *  підраховують суму елементів масивів, з непарними- добуток. Розмір масиву підраховується програмно. ()
             *  2.	За допомогою оператора foreach знайдіть в масиві елемент із заданим значенням(значення вводиться з клавіатури). (+)
             *  3.	Продемонструйте роботу основних методів класу Object ()
             *  4.	Продемонструйте використання модифікаторів доступу в межах однієї збірки. (+)
             *  5.	*Додаткове завдання: використання модифікатору private protected (+)
             */
            int prodOneDim = 1, prodMatrixRectangle = 1, prodMatrixJagged = 1;                // jagged array is an array whose elements are arrays

            Console.WriteLine("Type of products in all arrays is {0}", prodOneDim.GetType()); // Object.GetType()
            object oneO   = null;
            object twoO   = null;
            object threeO = new LocalParty();

            Console.WriteLine(LocalParty.ReferenceEquals(oneO, twoO));
            twoO = threeO;
            Console.WriteLine(LocalParty.ReferenceEquals(twoO, threeO));
            Console.WriteLine(LocalParty.ReferenceEquals(oneO, threeO));

            LocalParty objSMPL = new LocalParty();

            Console.WriteLine(objSMPL.ToString());


            //////////////////////////////////////////////////////////////////////

            /*
             * Console.Write("Enter the size of the 1-D array : ");
             * string sizeOneDTMP =  Console.ReadLine();
             * int sizeOneD = int.Parse(sizeOneDTMP);
             *
             * Console.Write("Enter the value you want to find in the 1-D array : ");
             * string valueSearchTMP = Console.ReadLine();
             * int valueSearch = int.Parse(valueSearchTMP);
             *
             *
             * Console.WriteLine("");
             * int[] arrOneDim = new int[sizeOneD]; // 1-D array
             * Random someRandOneD = new Random();
             * for(int i = 0; i < sizeOneD; i++)
             * {
             *  arrOneDim[i] = someRandOneD.Next(-20, 21);
             *  Console.Write($"{arrOneDim[i]} ");
             *  if(i % 4 == 0)
             *  {
             *      Console.WriteLine("");
             *  }
             *  prodOneDim = arrOneDim[i] * prodOneDim;
             * }
             * Console.WriteLine("");
             * Console.WriteLine($"\nProduct of all elements in the array is {prodOneDim}");
             *
             *
             * foreach(int element in arrOneDim) // foreach for 1-D array
             * {
             *  if(element == valueSearch)
             *  {
             *      Console.WriteLine($"\nCoinsidence!!! Your value {valueSearch} matches the value {element} in this array");
             *      break;
             *  }
             *  else
             *  {
             *      Console.WriteLine("\nWell, maybe next time");
             *      break;
             *  }
             * }
             */

            //////////////////////////////////////////////////////////////////////

            /*
             * Console.Write("\nEnter the lines of the 2-D (rechtangle) matrix : "); // 2-D matrix (rechtangle)
             * string sizeMatrixTMPOne = Console.ReadLine();
             *
             * Console.Write("Enter the columns of the 2-D (rechtangle) matrix : ");
             * string sizeMatrixTMPTwo = Console.ReadLine();
             *
             * int sizeMatrixLine = int.Parse(sizeMatrixTMPOne);
             * int sizeMatrixColumn = int.Parse(sizeMatrixTMPTwo);
             * int[,] arrMatrixRechtangle = new int[sizeMatrixLine, sizeMatrixColumn];
             * Random someRandMatrixOne = new Random();
             *
             *
             * for (int i = 0; i < sizeMatrixLine; i++)
             * {
             *  for(int j = 0; j < sizeMatrixColumn; j++)
             *  {
             *      arrMatrixRechtangle[i,j] = someRandMatrixOne.Next(-20, 21);
             *      Console.Write(String.Format("{0,3}", arrMatrixRechtangle[i, j]));
             *      prodMatrixRectangle = arrMatrixRechtangle[i, j] * prodMatrixRectangle;
             *  }
             *  Console.WriteLine();
             * }
             *
             * Console.WriteLine("");
             * Console.WriteLine($"\nProduct of all elements in the (rechtangle) matrix is {prodMatrixRectangle}");
             */

            //////////////////////////////////////////////////////////////////////

            /*
             * Console.Write("\nEnter the amount of arrays in the jagged array : "); // jagged array MUST_FINISH_LATER
             * string sizeJaggedTMP = Console.ReadLine();
             *
             * Console.Write("Enter the camount of elements in each array : ");
             * string sizeArrInJaggedTMP = Console.ReadLine();
             *
             * int sizeJagged = int.Parse(sizeJaggedTMP);
             * int sizeArrInJagged = int.Parse(sizeArrInJaggedTMP);
             * int[][] arrJagged = new int[sizeJagged][];
             * Random someRandMatrixTwo = new Random();
             */

            /*
             * for(int i = 0; i < arrJagged.Length; i++)
             * {
             *  for(int j = 0; j < arrJagged[i].Length; j++)
             *  {
             *      arrJagged[i][j] = someRandMatrixTwo.Next(-20, 21);
             *      //Console.Write("{0}{1}", arrJagged[i][j], j == (arrJagged[i].Length - 1) ? "" : " ");
             *  }
             * }
             */

            int[][] jaggedArr = new int[3][];
            jaggedArr[0] = new int[5] {
                1, 2, 3, 4, 5
            };
            jaggedArr[1] = new int[4] {
                3, 5, 7, 9
            };
            jaggedArr[2] = new int[3] {
                11, 13, 15
            };
            int minLength = jaggedArr[0].Length;


            for (int i = 0; i < jaggedArr.Length; i++)
            {
                Console.Write("Element ({0}): ", i);
                for (int j = 0; j < jaggedArr[i].Length; j++)
                {
                    Console.Write("{0}{1}", jaggedArr[i][j], j == (jaggedArr[i].Length - 1) ? "" : " ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();

            for (int i = 0; i < 3; i++)
            {
                if (jaggedArr[i].Length < minLength)
                {
                    minLength = jaggedArr[i].Length;
                }
            }
            Console.WriteLine($"Minimal length is {minLength}");
            Console.WriteLine();

            for (int i = 0; i < jaggedArr.Length; i++)
            {
                Console.Write("Element ({0}): ", i);
                for (int j = 0; j < minLength; j++)
                {
                    Console.Write("{0}{1}", jaggedArr[i][j], j == (jaggedArr[i].Length - 1) ? "" : " ");
                }
                Console.WriteLine();
            }
            Console.WriteLine();
            // add min and max value methods

            /*
             * int i = 0, j = 0;
             * int minValue = jaggedArr[i][j];
             * int maxValaue = jaggedArr[i][j];
             *
             *
             * for (i = 0; i < jaggedArr.Length; i++)
             * {
             *
             *  Console.Write("Element({0}): ", i);
             *  for (j = 0; j < minLength; j++)
             *  {
             *      if(jaggedArr[i][j] < minValue)
             *      {
             *          minValue = jaggedArr[i][j];
             *      }
             *      Console.Write("Min value = {0}", minValue);
             *
             *  }
             *
             *  Console.WriteLine();
             * }
             * Console.WriteLine();
             */


            //////////////////////////////////////////////////////////////////////

            Console.ReadKey();
            return(0);
        }