Example #1
0
        private Request GetRequest(IntPtr requestHandle)
        {
            IntPtr hostAddressPtr;
            int    ret = Interop.IoTConnectivity.Server.Request.GetHostAddress(requestHandle, out hostAddressPtr);

            if (ret != (int)IoTConnectivityError.None)
            {
                Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to Get host address");
                return(null);
            }

            IntPtr optionsHandle = IntPtr.Zero;

            ret = Interop.IoTConnectivity.Server.Request.GetOptions(requestHandle, out optionsHandle);
            if (ret != (int)IoTConnectivityError.None)
            {
                Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to Get options");
                return(null);
            }

            IntPtr queryHandle = IntPtr.Zero;

            ret = Interop.IoTConnectivity.Server.Request.GetQuery(requestHandle, out queryHandle);
            if (ret != (int)IoTConnectivityError.None)
            {
                Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to Get Query");
                return(null);
            }

            IntPtr representationHandle = IntPtr.Zero;

            ret = Interop.IoTConnectivity.Server.Request.GetRepresentation(requestHandle, out representationHandle);
            if (ret != (int)IoTConnectivityError.None)
            {
                Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to Get representation");
                return(null);
            }

            ResourceOptions opts           = null;
            ResourceQuery   query          = null;
            Representation  representation = null;

            try
            {
                opts = (optionsHandle == IntPtr.Zero) ? null : new ResourceOptions(optionsHandle);
            }
            catch (Exception exp)
            {
                Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to new ResourceOptions: " + exp.Message);
                return(null);
            }

            try
            {
                query = (queryHandle == IntPtr.Zero) ? null : new ResourceQuery(queryHandle);
            }
            catch (Exception exp)
            {
                Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to new ResourceQuery: " + exp.Message);
                opts?.Dispose();
                return(null);
            }

            try
            {
                representation = (representationHandle == IntPtr.Zero) ? null : new Representation(representationHandle);
            }
            catch (Exception exp)
            {
                Log.Error(IoTConnectivityErrorFactory.LogTag, "Failed to new Representation: " + exp.Message);
                opts?.Dispose();
                query?.Dispose();
                return(null);
            }

            return(new Request()
            {
                HostAddress = (hostAddressPtr != IntPtr.Zero) ? Marshal.PtrToStringAnsi(hostAddressPtr) : string.Empty,
                Options = opts,
                Query = query,
                Representation = representation
            });
        }