void osipMessage(eXosip.Event eXosipEvent) { IntPtr ptr; XmlDocument TempDoc = new XmlDocument(); XmlDocument Request; Socket exoSocket; SipSocket temp; ptr = osip.Message.GetContentType(eXosipEvent.request); if (ptr == IntPtr.Zero) { return; } osip.ContentType content = (osip.ContentType)Marshal.PtrToStructure(ptr, typeof(osip.ContentType)); ptr = osip.Message.GetBody(eXosipEvent.request); if (ptr == IntPtr.Zero) { return; } osip.From pTo = osip.Message.GetTo(eXosipEvent.request); osip.From pFrom = osip.Message.GetFrom(eXosipEvent.request); osip.URI uriTo = (osip.URI)Marshal.PtrToStructure(osip.From.GetURL(pTo.url), typeof(osip.URI)); osip.URI uriFrom = (osip.URI)Marshal.PtrToStructure(osip.From.GetURL(pFrom.url), typeof(osip.URI)); string name = osip.URI.ToString(pTo.url); string name2 = osip.URI.ToString(pFrom.url); string resId = name.Substring(4, name.IndexOf('@') - 4); string userCode = name2.Substring(4, name2.IndexOf('@') - 4); string userId = resId.Substring(0, 10) + userCode; if ((exoSocket = SipSocket.FindSocket(resId.Substring(0, 6))) == null) { eXosip.Call.SendAnswer(eXosipEvent.tid, 404, IntPtr.Zero); eXosip.Unlock(); return; } osip.Body data = (osip.Body)Marshal.PtrToStructure(ptr, typeof(osip.Body)); if (Marshal.PtrToStringAnsi(content.type) != "application" || Marshal.PtrToStringAnsi(content.subtype) != "xml") { return; } string xml = Marshal.PtrToStringAnsi(data.body); Console.Write(xml); /*----------------------------分割线-----------------------------*/ TempDoc.LoadXml(xml); //SipSocket.CleanResult(exoSocket); //temp = SipSocket.FindSipSocket(exoSocket); //temp.Send(Request); }
void osipCallMessage(eXosip.Event eXosipEvent) { IntPtr ptr; XmlDocument TempDoc = new XmlDocument(); XmlDocument Request; Socket exoSocket; SipSocket temp; string[] result = new string[10]; System.Timers.Timer timer = new System.Timers.Timer(2000); ptr = osip.Message.GetContentType(eXosipEvent.request); if (ptr == IntPtr.Zero) { return; } osip.ContentType content = (osip.ContentType)Marshal.PtrToStructure(ptr, typeof(osip.ContentType)); ptr = osip.Message.GetBody(eXosipEvent.request); if (ptr == IntPtr.Zero) { return; } osip.From pTo = osip.Message.GetTo(eXosipEvent.request); osip.From pFrom = osip.Message.GetFrom(eXosipEvent.request); osip.URI uriTo = (osip.URI)Marshal.PtrToStructure(osip.From.GetURL(pTo.url), typeof(osip.URI)); osip.URI uriFrom = (osip.URI)Marshal.PtrToStructure(osip.From.GetURL(pFrom.url), typeof(osip.URI)); string name = osip.URI.ToString(pTo.url); string name2 = osip.URI.ToString(pFrom.url); string resId = name.Substring(4, name.IndexOf('@') - 4); string userCode = name2.Substring(4, name2.IndexOf('@') - 4); string userId = resId.Substring(0, 10) + userCode; if ((exoSocket = SipSocket.FindSocket(resId.Substring(0, 6))) == null) { eXosip.Call.SendAnswer(eXosipEvent.tid, 404, IntPtr.Zero); eXosip.Unlock(); return; } osip.Body data = (osip.Body)Marshal.PtrToStructure(ptr, typeof(osip.Body)); if (Marshal.PtrToStringAnsi(content.type) != "application" || Marshal.PtrToStringAnsi(content.subtype) != "xml") { return; } string xml = Marshal.PtrToStringAnsi(data.body); Console.Write(xml); /*----------------------------分割线-----------------------------*/ TempDoc.LoadXml(xml); temp = SipSocket.FindSipSocket(exoSocket); Request = InterfaceC.CallMessageTranslate(TempDoc, resId, userId);//提取参数并转为C类接口格式 SipSocket.CleanResult(exoSocket); temp.SendRequest(Request); result = WaitForResult(testsocket, timer, 2000); if (result != null) { for (int k = 0; k < result.Length; k++) { Console.WriteLine(result[k]); } } temp = SipSocket.FindSipSocket(exoSocket); temp.SendRequest(Request); }