示例#1
0
		static void TrampolineScheduleHandler (IntPtr block) 
		{
			var del = BlockLiteral.GetTarget<Action> (block);
			if (del != null) {
				del ();
			}
		}
示例#2
0
        static void TrampolineReceiveCompletion(IntPtr block, IntPtr dispatchDataPtr, IntPtr contentContext, bool isComplete, IntPtr error)
        {
            var del = BlockLiteral.GetTarget <NWConnectionReceiveCompletion> (block);

            if (del != null)
            {
                DispatchData?dispatchData = null, dataCopy = null;
                IntPtr       bufferAddress = IntPtr.Zero;
                nuint        bufferSize    = 0;

                if (dispatchDataPtr != IntPtr.Zero)
                {
                    dispatchData = new DispatchData(dispatchDataPtr, owns: false);
                    dataCopy     = dispatchData.CreateMap(out bufferAddress, out bufferSize);
                }

                del(bufferAddress,
                    bufferSize,
                    contentContext == IntPtr.Zero ? null : new NWContentContext(contentContext, owns: false),
                    isComplete,
                    error == IntPtr.Zero ? null : new NWError(error, owns: false));

                if (dispatchData != null)
                {
                    dataCopy?.Dispose();
                    dispatchData?.Dispose();
                }
            }
        }
示例#3
0
 		static void TrampolineSignatureAlgorithmsForPeer (IntPtr block, ushort signatureAlgorithm)
 		{
 			var del = BlockLiteral.GetTarget<Action<ushort>> (block);
 			if (del != null) {
 				del (signatureAlgorithm);
 			}
 		}
示例#4
0
        unsafe static bool TrampolineApplyHandler(IntPtr block, string key, NWTxtRecordFindKey found, IntPtr value, nuint valueLen)
        {
#if XAMCORE_4_0
            var del = BlockLiteral.GetTarget <NWTxtRecordApplyDelegate> (block);
#else
            var del = BlockLiteral.GetTarget <MulticastDelegate> (block);
#endif
            if (del == null)
            {
                return(false);
            }

            var mValue = new ReadOnlySpan <byte> ((void *)value, (int)valueLen);
#if XAMCORE_4_0
            return(del(key, found, mValue));
#else
            if (del is NWTxtRecordApplyDelegate apply)
            {
                apply(key, found, mValue);
                return(true);
            }
            if (del is NWTxtRecordApplyDelegate2 apply2)
            {
                return(apply2(key, found, mValue));
            }

            return(false);
#endif
        }
示例#5
0
        static void TrampolineReceiveCompletionData(IntPtr block, IntPtr dispatchDataPtr, IntPtr contentContext, bool isComplete, IntPtr error)
        {
            var del = BlockLiteral.GetTarget <NWConnectionReceiveDispatchDataCompletion> (block);

            if (del != null)
            {
                DispatchData dispatchData  = null;
                IntPtr       bufferAddress = IntPtr.Zero;

                if (dispatchDataPtr != IntPtr.Zero)
                {
                    dispatchData = new DispatchData(dispatchDataPtr, owns: false);
                }

                del(dispatchData,
                    contentContext == IntPtr.Zero ? null : new NWContentContext(contentContext, owns: false),
                    isComplete,
                    error == IntPtr.Zero ? null : new NWError(error, owns: false));

                if (dispatchData != null)
                {
                    dispatchData.Dispose();
                }
            }
        }
示例#6
0
        static void TrampolineReceiveCompletionReadOnlyData(IntPtr block, IntPtr dispatchDataPtr, IntPtr contentContext, bool isComplete, IntPtr error)
        {
            var del = BlockLiteral.GetTarget <NWConnectionReceiveReadOnlySpanCompletion> (block);

            if (del != null)
            {
                DispatchData dispatchData = null, dataCopy = null;
                IntPtr       bufferAddress = IntPtr.Zero;
                nuint        bufferSize    = 0;

                if (dispatchDataPtr != IntPtr.Zero)
                {
                    dispatchData = new DispatchData(dispatchDataPtr, owns: false);
                    dataCopy     = dispatchData.CreateMap(out bufferAddress, out bufferSize);
                }

                unsafe {
                    var spanData = new ReadOnlySpan <byte> ((void *)bufferAddress, (int)bufferSize);
                    del(spanData,
                        contentContext == IntPtr.Zero ? null : new NWContentContext(contentContext, owns: false),
                        isComplete,
                        error == IntPtr.Zero ? null : new NWError(error, owns: false));
                }

                if (dispatchData != null)
                {
                    dataCopy.Dispose();
                    dispatchData.Dispose();
                }
            }
        }
示例#7
0
 		static void TrampolineDistinguishedNamesForPeer (IntPtr block, IntPtr data)
 		{
 			var del = BlockLiteral.GetTarget<Action<DispatchData>> (block);
 			if (del != null) {
 				var dispatchData = new DispatchData (data, owns: false);
 				del (dispatchData);
 			}
 		}
示例#8
0
 		static void TrampolineCertificateChainForPeer (IntPtr block, IntPtr certificate)
 		{
 			var del = BlockLiteral.GetTarget<Action<SecCertificate>> (block);
 			if (del != null) {
 				var secCertificate = new SecCertificate (certificate, owns: false);
 				del (secCertificate);
 			}
 		}
示例#9
0
		static void TrampolineWakeupHandler (IntPtr block, OS_nw_framer framer)
		{
			var del = BlockLiteral.GetTarget<Action<NWFramer>> (block);
			if (del != null) {
				var nwFramer = new NWFramer (framer, owns: true);
				del (nwFramer);
			}
		}
        static void ScheduleBlockWrapper(IntPtr blockptr, IntPtr callback)
        {
            var completion = (CompletionHandler)((Result result) => {
                InvokeNativeCompletionBlock(callback, (int)result);
            });

            BlockLiteral.GetTarget <ScheduleBlock>(blockptr)?.Invoke(completion);
        }
示例#11
0
        static void TrampolineEnumerator(IntPtr block, IntPtr iface)
        {
            var del = BlockLiteral.GetTarget <Action <NWInterface> > (block);

            if (del != null)
            {
                del(new NWInterface(iface, owns: false));
            }
        }
示例#12
0
        static void TrampolineMonitorCanceled(IntPtr block)
        {
            var del = BlockLiteral.GetTarget <Action> (block);

            if (del != null)
            {
                del();
            }
        }
示例#13
0
		static void TrampolineOutputHandler (IntPtr block, OS_nw_framer framer, OS_nw_protocol_metadata message, nuint message_length, bool is_complete)
		{
			var del = BlockLiteral.GetTarget<Action<NWFramer, NWProtocolMetadata, nuint, bool>> (block);
			if (del != null) {
				var nwFramer = new NWFramer (framer, owns: true);
				var nwProtocolMetadata = new NWFramerMessage (message, owns: true);
				del (nwFramer, nwProtocolMetadata, message_length, is_complete);
			}
		}
示例#14
0
        static void TrampolineAccessPreSharedKeys(IntPtr block, IntPtr psk, IntPtr psk_identity)
        {
            var del = BlockLiteral.GetTarget <Action <DispatchData, DispatchData> > (block);

            if (del != null)
            {
                del(CreateDispatchData(psk), CreateDispatchData(psk_identity));
            }
        }
示例#15
0
		static nuint TrampolineInputHandler (IntPtr block, OS_nw_framer framer)
		{
			var del = BlockLiteral.GetTarget<NWFramerInputDelegate> (block);
			if (del != null) {
				var nwFramer = new NWFramer (framer, owns: true);
				return del (nwFramer);
			}
			return 0;
		}
示例#16
0
        static void TrampolineEnumerateSubprotocolHandler(IntPtr block, string subprotocol)
        {
            var del = BlockLiteral.GetTarget <Action <string> > (block);

            if (del != null)
            {
                del(subprotocol);
            }
        }
示例#17
0
        static void TrampolineEnumerateHeaderHandler(IntPtr block, string header, string value)
        {
            var del = BlockLiteral.GetTarget <Action <string, string> > (block);

            if (del != null)
            {
                del(header, value);
            }
        }
示例#18
0
        static void TrampolineAccessCertificates(IntPtr block, IntPtr cert)
        {
            var del = BlockLiteral.GetTarget <Action <SecCertificate2> > (block);

            if (del != null)
            {
                del(new SecCertificate2(cert, false));
            }
        }
示例#19
0
        static void TrampolineAction(IntPtr blockPtr)
        {
            var del = BlockLiteral.GetTarget <Action> (blockPtr);

            if (del is not null)
            {
                del();
            }
        }
示例#20
0
        static unsafe void TrampolineRequestFonts(IntPtr block, /* CFArray */ IntPtr fontDescriptors)
        {
            var del = BlockLiteral.GetTarget <CTFontManagerRequestFontsHandler> (block);

            if (del != null)
            {
                del(NSArray.ArrayFromHandle <CTFontDescriptor> (fontDescriptors));
            }
        }
示例#21
0
        static void TrampolineEnumerate(IntPtr blockPtr, double offset, nint charIndex, bool leadingEdge, ref bool stop)
        {
            var del = BlockLiteral.GetTarget <CaretEdgeEnumerator> (blockPtr);

            if (del is not null)
            {
                del(offset, charIndex, leadingEdge, ref stop);
            }
        }
示例#22
0
        static void TrampolineBooleanChangeHandler(IntPtr block, bool value)
        {
            var del = BlockLiteral.GetTarget <Action <bool> > (block);

            if (del != null)
            {
                del(value);
            }
        }
示例#23
0
        static void TrampolineSetDataHandler(IntPtr block, IntPtr data)
        {
            // get and call, this is internal and we are trying to do all the magic in the call
            var del = BlockLiteral.GetTarget <Action <IntPtr> > (block);

            if (del != null)
            {
                del(data);
            }
        }
示例#24
0
        static void TrampolinePathChanged(IntPtr block, IntPtr path)
        {
            var del = BlockLiteral.GetTarget <Action <NWPath> > (block);

            if (del != null)
            {
                var x = new NWPath(path, owns: false);
                del(x);
            }
        }
示例#25
0
        static void Trampoline_StateChangeCallback(IntPtr block, NWConnectionState state, IntPtr error)
        {
            var del = BlockLiteral.GetTarget <Action <NWConnectionState, NWError> > (block);

            if (del != null)
            {
                NWError err = error != IntPtr.Zero ? new NWError(error, owns: false) : null;
                del(state, err);
            }
        }
示例#26
0
        static void TrampolineCollectHandler(IntPtr block, IntPtr report)
        {
            var del = BlockLiteral.GetTarget <Action <NWDataTransferReport> > (block);

            if (del != null)
            {
                using (var nwReport = new NWDataTransferReport(report, owns: false))
                    del(nwReport);
            }
        }
示例#27
0
        static void Trampoline_DispatchReadWriteHandler(IntPtr block, IntPtr dispatchData, int error)
        {
            var del = BlockLiteral.GetTarget <DispatchIOHandler> (block);

            if (del != null)
            {
                var dd = dispatchData == IntPtr.Zero ? null : new DispatchData(dispatchData, owns: false);
                del(dd, error);
            }
        }
        static void TrampolineStateChangesHandler(IntPtr block, NWEthernetChannelState state, IntPtr error)
        {
            var del = BlockLiteral.GetTarget <Action <NWEthernetChannelState, NWError?> > (block);

            if (del != null)
            {
                NWError?nwError = (error == IntPtr.Zero) ? null : new NWError(error, owns: false);
                del(state, nwError);
            }
        }
        static void TrampolineSendCompletion(IntPtr block, IntPtr error)
        {
            var del = BlockLiteral.GetTarget <Action <NWError?> > (block);

            if (del != null)
            {
                using NWError? err = error == IntPtr.Zero ? null : new NWError(error, owns: false);
                del(err);
            }
        }
示例#30
0
        static void TrampolineUpdatedSnapshot(IntPtr block, IntPtr path)
        {
            var del = BlockLiteral.GetTarget <Action <NWPath> > (block);

            if (del != null)
            {
                var nwPath = new NWPath(path, owns: false);
                del(nwPath);
            }
        }