private static ErrorCode TryParseCore(string str, out CSeqHeader header) { osip_cseq_t *native = null; var strPtr = Marshal.StringToHGlobalAnsi(str); try { ErrorCode errorCode = NativeMethods.osip_cseq_init(&native); if (!errorCode.EnsureSuccess()) { header = null; return(errorCode); } errorCode = NativeMethods.osip_cseq_parse(native, strPtr); if (!errorCode.EnsureSuccess()) { header = null; return(errorCode); } header = FromNative(native); return(errorCode); } finally { NativeMethods.osip_cseq_free(native); Marshal.FreeHGlobal(strPtr); } }
internal static CSeqHeader FromNative(osip_cseq_t *native) { var header = new CSeqHeader { Method = Marshal.PtrToStringAnsi(native->method), Number = Marshal.PtrToStringAnsi(native->number) }; return(header); }
public CSeqHeader DeepClone() { osip_cseq_t *native = ToNative(); try { return(FromNative(native)); } finally { NativeMethods.osip_cseq_free(native); } }
public override string ToString() { IntPtr ptr = IntPtr.Zero; osip_cseq_t *native = ToNative(); try { NativeMethods.osip_cseq_to_str(native, &ptr).ThrowOnError(); return(Marshal.PtrToStringAnsi(ptr)); } finally { NativeMethods.osip_cseq_free(native); Marshal.FreeHGlobal(ptr); } }
public static extern ErrorCode osip_cseq_clone(osip_cseq_t *header, osip_cseq_t **dest);
public static extern ErrorCode osip_cseq_to_str(osip_cseq_t *header, IntPtr *dest);
public static extern ErrorCode osip_cseq_parse(osip_cseq_t *header, IntPtr hvalue);
public static extern void osip_cseq_free(osip_cseq_t *header);