예제 #1
0
 public void PrependApplicationProtocol(NWProtocolOptions options)
 {
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     nw_protocol_stack_prepend_application_protocol(GetCheckedHandle(), options.Handle);
 }
예제 #2
0
 public bool PrependApplicationProtocol(NWProtocolOptions options)
 {
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     return(nw_framer_prepend_application_protocol(GetCheckedHandle(), options.Handle));
 }
예제 #3
0
        static void TrampolineIterateHandler(IntPtr block, IntPtr options)
        {
            var del = BlockLiteral.GetTarget <Action <NWProtocolOptions> > (block);

            if (del != null)
            {
                var x = new NWProtocolOptions(options, owns: false);
                del(x);
                x.Dispose();
            }
        }
예제 #4
0
        static void TrampolineConfigureHandler(IntPtr block, IntPtr iface)
        {
            var del = BlockLiteral.GetTarget <Action <NWProtocolOptions> > (block);

            if (del != null)
            {
                using (var tempOptions = new NWProtocolOptions(iface, owns: false))
                    using (var definition = tempOptions.ProtocolDefinition) {
                        NWProtocolOptions?castedOptions = null;

                        if (definition.Equals(NWProtocolDefinition.TcpDefinition))
                        {
                            castedOptions = new NWProtocolTcpOptions(iface, owns: false);
                        }
                        else if (definition.Equals(NWProtocolDefinition.UdpDefinition))
                        {
                            castedOptions = new NWProtocolUdpOptions(iface, owns: false);
                        }
                        else if (definition.Equals(NWProtocolDefinition.TlsDefinition))
                        {
                            castedOptions = new NWProtocolTlsOptions(iface, owns: false);
                        }
                        else if (definition.Equals(NWProtocolDefinition.IPDefinition))
                        {
                            castedOptions = new NWProtocolIPOptions(iface, owns: false);
                        }
                        else if (definition.Equals(NWProtocolDefinition.WebSocketDefinition))
                        {
                            castedOptions = new NWWebSocketOptions(iface, owns: false);
                        }

                        try {
                            del(castedOptions ?? tempOptions);
                        } finally {
                            castedOptions?.Dispose();
                        }
                    }
            }
        }
예제 #5
0
        static void TrampolineIterateHandler(IntPtr block, IntPtr options)
        {
            var del = BlockLiteral.GetTarget <Action <NWProtocolOptions> > (block);

            if (del != null)
            {
                using (var tempOptions = new NWProtocolOptions(options, owns: false))
                    using (var definition = tempOptions.ProtocolDefinition) {
                        NWProtocolOptions?castedOptions = null;

                        if (definition.Equals(NWProtocolDefinition.CreateTcpDefinition()))
                        {
                            castedOptions = new NWProtocolTcpOptions(options, owns: false);
                        }
                        else if (definition.Equals(NWProtocolDefinition.CreateUdpDefinition()))
                        {
                            castedOptions = new NWProtocolUdpOptions(options, owns: false);
                        }
                        else if (definition.Equals(NWProtocolDefinition.CreateTlsDefinition()))
                        {
                            castedOptions = new NWProtocolTlsOptions(options, owns: false);
                        }
                        else if (definition.Equals(NWProtocolDefinition.CreateIPDefinition()))
                        {
                            castedOptions = new NWProtocolIPOptions(options, owns: false);
                        }
                        else if (definition.Equals(NWProtocolDefinition.CreateWebSocketDefinition()))
                        {
                            castedOptions = new NWWebSocketOptions(options, owns: false);
                        }

                        del(castedOptions ?? tempOptions);
                        castedOptions?.Dispose();
                    }
            }
        }
예제 #6
0
        public NWConnection?ExtractConnection(NWEndpoint endpoint, NWProtocolOptions protocolOptions)
        {
            var ptr = nw_connection_group_extract_connection(GetCheckedHandle(), endpoint.GetCheckedHandle(), protocolOptions.GetCheckedHandle());

            return(ptr == IntPtr.Zero ? null : new NWConnection(ptr, true));
        }