PageRenderTime 59ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/sipsorcery-core/SIPSorcery.SIP.Core/SIPEvents/Presence/SIPEventPresenceTuple.cs

https://github.com/thecc4re/sipsorcery-mono
C# | 85 lines | 72 code | 13 blank | 0 comment | 8 complexity | f07b7976b4eca255b709bd3d35dc558b MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Resources;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Xml;
  10. using System.Xml.Linq;
  11. using System.Xml.Schema;
  12. using SIPSorcery.Sys;
  13. using log4net;
  14. namespace SIPSorcery.SIP
  15. {
  16. public class SIPEventPresenceTuple
  17. {
  18. private static readonly string m_pidfXMLNS = SIPEventConsts.PIDF_XML_NAMESPACE_URN;
  19. public string ID;
  20. public SIPEventPresenceStateEnum Status;
  21. public SIPURI ContactURI;
  22. public decimal ContactPriority = Decimal.Zero;
  23. private SIPEventPresenceTuple()
  24. {}
  25. public SIPEventPresenceTuple(string id, SIPEventPresenceStateEnum status)
  26. {
  27. ID = id;
  28. Status = status;
  29. }
  30. public SIPEventPresenceTuple(string id, SIPEventPresenceStateEnum status, SIPURI contactURI, decimal contactPriority)
  31. {
  32. ID = id;
  33. Status = status;
  34. ContactURI = contactURI;
  35. ContactPriority = contactPriority;
  36. }
  37. public static SIPEventPresenceTuple Parse(string tupleXMLStr)
  38. {
  39. XElement tupleElement = XElement.Parse(tupleXMLStr);
  40. return Parse(tupleElement);
  41. }
  42. public static SIPEventPresenceTuple Parse(XElement tupleElement)
  43. {
  44. XNamespace ns = m_pidfXMLNS;
  45. SIPEventPresenceTuple tuple = new SIPEventPresenceTuple();
  46. tuple.ID = tupleElement.Attribute("id").Value;
  47. tuple.Status = (SIPEventPresenceStateEnum)Enum.Parse(typeof(SIPEventPresenceStateEnum), tupleElement.Element(ns + "status").Element(ns + "basic").Value, true);
  48. tuple.ContactURI = (tupleElement.Element(ns + "contact") != null) ? SIPURI.ParseSIPURI(tupleElement.Element(ns + "contact").Value) : null;
  49. tuple.ContactPriority = (tuple.ContactURI != null && tupleElement.Element(ns + "contact").Attribute("priority") != null) ? Decimal.Parse(tupleElement.Element(ns + "contact").Attribute("priority").Value) : Decimal.Zero;
  50. return tuple;
  51. }
  52. public XElement ToXML()
  53. {
  54. XNamespace ns = m_pidfXMLNS;
  55. XElement tupleElement = new XElement(ns + "tuple",
  56. new XAttribute("id", ID),
  57. new XElement(ns + "status",
  58. new XElement(ns + "basic", Status.ToString()))
  59. );
  60. if (ContactURI != null)
  61. {
  62. XElement contactElement = new XElement(ns + "contact", ContactURI.ToString());
  63. if (ContactPriority != Decimal.Zero)
  64. {
  65. contactElement.Add(new XAttribute("priority", ContactPriority.ToString("0.###")));
  66. }
  67. tupleElement.Add(contactElement);
  68. }
  69. return tupleElement;
  70. }
  71. }
  72. }