// When the callback thead exist the native message will be destroy. To avoid such beh. we copy // the message for asyn. use internal MyXcapMessage(XcapMessage message) { if (message == null) { this.code = -1; this.phrase = String.Empty; this.contentType = String.Empty; } else { this.code = message.getCode(); this.phrase = message.getPhrase(); this.contentType = message.getXcapHeaderValue("Content-Type"); uint clen = message.getXcapContentLength(); if (clen > 0) { this.content = new byte[clen]; message.getXcapContent(this.content, clen); } else { this.content = null; } } }
internal MyXcapMessage(XcapMessage message) { if (message == null) { this.code = -1; this.phrase = string.Empty; this.contentType = string.Empty; } else { this.code = message.getCode(); this.phrase = message.getPhrase(); this.contentType = message.getXcapHeaderValue("Content-Type"); uint clen = message.getXcapContentLength(); if (clen > 0u) { this.content = new byte[clen]; System.IntPtr ptr = System.Runtime.InteropServices.Marshal.AllocHGlobal((int)clen); message.getXcapContent(ptr, clen); System.Runtime.InteropServices.Marshal.Copy(ptr, this.content, 0, this.content.Length); System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr); } else { this.content = null; } } }
public override int onEvent(XcapEvent e) { XcapMessage message = e.getXcapMessage(); String content_type; if (message == null) { Console.WriteLine("Invalid Xcap message"); return(-1); } Console.WriteLine("code={0} and Phrase={1}", message.getCode(), message.getPhrase()); if ((content_type = message.getXcapHeaderValue("Content-Type")) != null) { Console.WriteLine("Content-Type={0}", content_type); uint clen = message.getXcapContentLength(); if (clen > 0) { byte[] content = new byte[clen]; uint read = message.getXcapContent(content, (uint)content.Length); Console.WriteLine("Content-Value ==> {0}", Encoding.UTF8.GetString(content)); } } return(base.onEvent(e)); }