internal static SipUri FromNative(osip_uri_t *native) { var uri = new SipUri { Scheme = Marshal.PtrToStringAnsi(native->scheme), Host = Marshal.PtrToStringAnsi(native->host), Port = Marshal.PtrToStringAnsi(native->port), Username = Marshal.PtrToStringAnsi(native->username), Password = Marshal.PtrToStringAnsi(native->password) }; int size = NativeMethods.osip_list_size(&native->url_params); for (int i = 0; i < size; i++) { osip_uri_param_t *param = (osip_uri_param_t *)NativeMethods.osip_list_get(&native->url_params, i); uri.Parameters.Add(SipUriParameter.FromNative(param)); } size = NativeMethods.osip_list_size(&native->url_headers); for (int i = 0; i < size; i++) { osip_uri_param_t *header = (osip_uri_param_t *)NativeMethods.osip_list_get(&native->url_headers, i); uri.Headers.Add(SipUriParameter.FromNative(header)); } return(uri); }
private static ErrorCode TryParseCore(string str, out SipUri uri) { var strPtr = Marshal.StringToHGlobalAnsi(str); osip_uri_t *native = null; try { ErrorCode errorCode = NativeMethods.osip_uri_init(&native); if (!errorCode.EnsureSuccess()) { uri = default; return(errorCode); } errorCode = NativeMethods.osip_uri_parse(native, strPtr); if (!errorCode.EnsureSuccess()) { uri = default; return(errorCode); } uri = FromNative(native); return(errorCode); } finally { NativeMethods.osip_uri_free(native); Marshal.FreeHGlobal(strPtr); } }
public SipUri DeepClone() { osip_uri_t *native = ToNative(); try { return(FromNative(native)); } finally { NativeMethods.osip_uri_free(native); } }
public override string ToString() { osip_uri_t *native = ToNative(); IntPtr ptr = IntPtr.Zero; try { NativeMethods.osip_uri_to_str(native, &ptr).ThrowOnError(); return(Marshal.PtrToStringAnsi(ptr)); } finally { NativeMethods.osip_uri_free(native); Marshal.FreeHGlobal(ptr); } }
public static extern ErrorCode osip_uri_clone(osip_uri_t *url, osip_uri_t **dest);
public static extern ErrorCode osip_uri_to_str(osip_uri_t *url, IntPtr *dest);
public static extern ErrorCode osip_uri_parse(osip_uri_t *url, IntPtr buf);
public static extern void osip_uri_free(osip_uri_t *url);