Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        public SipUri DeepClone()
        {
            osip_uri_t *native = ToNative();

            try
            {
                return(FromNative(native));
            }
            finally
            {
                NativeMethods.osip_uri_free(native);
            }
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
 public static extern ErrorCode osip_uri_clone(osip_uri_t *url, osip_uri_t **dest);
Пример #6
0
 public static extern ErrorCode osip_uri_to_str(osip_uri_t *url, IntPtr *dest);
Пример #7
0
 public static extern ErrorCode osip_uri_parse(osip_uri_t *url, IntPtr buf);
Пример #8
0
 public static extern void osip_uri_free(osip_uri_t *url);