Esempio n. 1
0
        static async Task Main()
        {
            var coapFactory = new CoapFactory();

            coapFactory.DefaultLogger.RegisterSink(new CoapNetLoggerConsoleSink());

            using var coapClient = coapFactory.CreateClient();

            Console.WriteLine("< CONNECTING...");

            var connectOptions = new CoapClientConnectOptionsBuilder()
                                 .WithHost("GW-B8D7AF2B3EA3.fritz.box")
                                 .WithHost("127.0.0.1")
                                 .WithDtlsTransportLayer(o =>
                                                         o.WithPreSharedKey("727360dd-d27a-4ca0-9be8-f626de849d7a", "7x3A1gqWvu9cBGD7"))
                                 .Build();

            using (var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(10)))
            {
                await coapClient.ConnectAsync(connectOptions, cancellationTokenSource.Token);
            }

            var request = new CoapRequestBuilder()
                          .WithMethod(CoapRequestMethod.Get)
                          .WithPath("15001")
                          .Build();

            using (var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(10)))
            {
                var response = await coapClient.RequestAsync(request, cancellationTokenSource.Token);

                PrintResponse(response);
            }
        }
Esempio n. 2
0
        async Task <ICoapClient> CreateClient(PythonDictionary parameters)
        {
            var host     = Convert.ToString(parameters.get("host", string.Empty));
            var port     = Convert.ToInt32(parameters.get("port", 5684));
            var protocol = Convert.ToString(parameters.get("protocol", "dtls"));
            var identity = Convert.ToString(parameters.get("identity", string.Empty));
            var key      = Convert.ToString(parameters.get("key", string.Empty));
            var timeout  = Convert.ToInt32(parameters.get("timeout", 5000));

            var connectOptionsBuilder = new CoapClientConnectOptionsBuilder()
                                        .WithHost(host)
                                        .WithPort(port);

            if (protocol == "dtls")
            {
                connectOptionsBuilder.WithDtlsTransportLayer(o => o.WithPreSharedKey(identity, key));
            }

            var connectOptions = connectOptionsBuilder.Build();

            var coapClient = new CoapFactory().CreateClient();

            using (var cancellationTokenSource = new CancellationTokenSource(timeout))
            {
                await coapClient.ConnectAsync(connectOptions, cancellationTokenSource.Token).ConfigureAwait(false);
            }

            return(coapClient);
        }
        public static CoapClientConnectOptionsBuilder WithDtlsTransportLayer(this CoapClientConnectOptionsBuilder clientConnectOptionsBuilder, Action <DtlsCoapTransportLayerOptionsBuilder> options)
        {
            if (clientConnectOptionsBuilder == null)
            {
                throw new ArgumentNullException(nameof(clientConnectOptionsBuilder));
            }

            var builder = new DtlsCoapTransportLayerOptionsBuilder();

            options.Invoke(builder);
            return(clientConnectOptionsBuilder.WithDtlsTransportLayer(builder.Build()));
        }
Esempio n. 4
0
        public async Task ConnectAsync(Credentials credentials, CancellationToken cancellationToken = default)
        {
            var options = new CoapClientConnectOptionsBuilder()
                          .WithHost(_settings.GatewayIp.ToString())
                          .WithPort(5684)
                          .WithDtlsTransportLayer(o =>
            {
                o.WithPreSharedKey(credentials.Identity, credentials.PresharedKey);
            })
                          .Build();

            await _coapClient.ConnectAsync(options, cancellationToken);

            _connected = true;
        }
Esempio n. 5
0
        public async Task Connect_Valid_Host_With_Invalid_Port_Dtls()
        {
            using (var coapClient = new CoapFactory().CreateClient())
            {
                var options = new CoapClientConnectOptionsBuilder()
                              .WithHost("127.0.0.1")
                              .WithPort(5555)
                              .WithDtlsTransportLayer(o =>
                {
                    o.WithPreSharedKey("a", "b");
                })
                              .Build();

                await coapClient.ConnectAsync(options, CancellationToken.None);
            }
        }
        public static CoapClientConnectOptionsBuilder WithDtlsTransportLayer(this CoapClientConnectOptionsBuilder clientConnectOptionsBuilder, DtlsCoapTransportLayerOptions options)
        {
            if (clientConnectOptionsBuilder == null)
            {
                throw new ArgumentNullException(nameof(clientConnectOptionsBuilder));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            clientConnectOptionsBuilder.WithTransportLayer(new DtlsCoapTransportLayer()
            {
                Credentials = options.Credentials
            });

            return(clientConnectOptionsBuilder);
        }
Esempio n. 7
0
        public async Task Timeout_When_No_Response_Received()
        {
            using (var coapClient = new CoapFactory().CreateClient())
            {
                var options = new CoapClientConnectOptionsBuilder()
                              .WithHost("127.0.0.1")
                              .WithPort(5555)
                              .Build();

                await coapClient.ConnectAsync(options, CancellationToken.None);

                var request = new CoapRequestBuilder()
                              .WithMethod(CoapRequestMethod.Get)
                              .Build();

                await coapClient.RequestAsync(request, CancellationToken.None);
            }
        }
Esempio n. 8
0
        static async Task Main2()
        {
            var coapFactory = new CoapFactory();

            coapFactory.DefaultLogger.RegisterSink(new CoapNetLoggerConsoleSink());

            using (var coapClient = coapFactory.CreateClient())
            {
                Console.WriteLine("< CONNECTING...");

                var connectOptions = new CoapClientConnectOptionsBuilder()
                                     .WithHost("coap.me")
                                     .Build();

                await coapClient.ConnectAsync(connectOptions, CancellationToken.None).ConfigureAwait(false);

                // separate

                var request = new CoapRequestBuilder()
                              .WithMethod(CoapRequestMethod.Get)
                              .WithPath("separate")
                              .Build();

                var response = await coapClient.RequestAsync(request, CancellationToken.None);

                PrintResponse(response);

                // hello

                request = new CoapRequestBuilder()
                          .WithMethod(CoapRequestMethod.Get)
                          .WithPath("hello")
                          .Build();

                response = await coapClient.RequestAsync(request, CancellationToken.None);

                PrintResponse(response);

                // broken

                request = new CoapRequestBuilder()
                          .WithMethod(CoapRequestMethod.Get)
                          .WithPath("broken")
                          .Build();

                response = await coapClient.RequestAsync(request, CancellationToken.None);

                PrintResponse(response);

                // secret

                request = new CoapRequestBuilder()
                          .WithMethod(CoapRequestMethod.Get)
                          .WithPath("secret")
                          .Build();

                response = await coapClient.RequestAsync(request, CancellationToken.None);

                PrintResponse(response);

                // large-create

                request = new CoapRequestBuilder()
                          .WithMethod(CoapRequestMethod.Get)
                          .WithPath("large-create")
                          .Build();

                response = await coapClient.RequestAsync(request, CancellationToken.None);

                PrintResponse(response);

                // location1/location2/location3

                request = new CoapRequestBuilder()
                          .WithMethod(CoapRequestMethod.Get)
                          .WithPath("location1/location2/location3")
                          .Build();

                response = await coapClient.RequestAsync(request, CancellationToken.None);

                PrintResponse(response);

                // large

                request = new CoapRequestBuilder()
                          .WithMethod(CoapRequestMethod.Get)
                          .WithPath("large")
                          .Build();

                response = await coapClient.RequestAsync(request, CancellationToken.None);

                PrintResponse(response);

                await Task.Delay(TimeSpan.FromSeconds(10));
            }
        }
Esempio n. 9
0
        static async Task Main()
        {
            //await Main2();

            //Console.WriteLine("Press any key to exit.");
            //Console.ReadLine();

            var coapFactory = new CoapFactory();

            coapFactory.DefaultLogger.RegisterSink(new CoapNetLoggerConsoleSink());

            using (var coapClient = coapFactory.CreateClient())
            {
                Console.WriteLine("< CONNECTING...");

                var connectOptions = new CoapClientConnectOptionsBuilder()
                                     .WithHost("GW-B8D7AF2B3EA3.fritz.box")
                                     .WithDtlsTransportLayer(o =>
                                                             o.WithPreSharedKey("IDENTITY", "lqxbBH6o2eAKSo5A"))
                                     .Build();

                using (var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(10)))
                {
                    await coapClient.ConnectAsync(connectOptions, cancellationTokenSource.Token).ConfigureAwait(false);
                }

                var request = new CoapRequestBuilder()
                              .WithMethod(CoapRequestMethod.Get)
                              .WithPath("15001")
                              .Build();

                var response = await coapClient.RequestAsync(request, CancellationToken.None).ConfigureAwait(false);

                PrintResponse(response);

                request = new CoapRequestBuilder()
                          .WithMethod(CoapRequestMethod.Get)
                          .WithPath("15001/65550")
                          .Build();

                response = await coapClient.RequestAsync(request, CancellationToken.None).ConfigureAwait(false);

                PrintResponse(response);

                request = new CoapRequestBuilder()
                          .WithMethod(CoapRequestMethod.Put)
                          .WithPath("15001/65550")
                          .WithPayload("{\"3311\": [{\"5850\": 1}]}")
                          .Build();

                response = await coapClient.RequestAsync(request, CancellationToken.None).ConfigureAwait(false);

                PrintResponse(response);

                var observeOptions = new CoapObserveOptionsBuilder()
                                     .WithPath("15001/65550")
                                     .WithResponseHandler(new ResponseHandler())
                                     .Build();

                var observeResponse = await coapClient.ObserveAsync(observeOptions, CancellationToken.None).ConfigureAwait(false);

                PrintResponse(observeResponse.Response);

                Console.WriteLine("Observed messages for lamp!");

                Console.WriteLine("Press any key to unobserve.");
                Console.ReadLine();

                await coapClient.StopObservationAsync(observeResponse, CancellationToken.None).ConfigureAwait(false);

                Console.WriteLine("Press any key to exit.");
                Console.ReadLine();
            }
        }