コード例 #1
0
        public async Task ConnectAsync(CoapClientConnectOptions options, CancellationToken cancellationToken)
        {
            _connectOptions = options ?? throw new ArgumentNullException(nameof(options));

            var transportLayer = options.TransportLayerFactory?.Invoke();

            if (transportLayer == null)
            {
                throw new InvalidOperationException("No CoAP transport layer is set.");
            }

            cancellationToken.ThrowIfCancellationRequested();

            _transportLayerAdapter = new CoapTransportLayerAdapter(transportLayer, _logger);
            try
            {
                var transportLayerConnectOptions = new CoapTransportLayerConnectOptions
                {
                    EndPoint = await ResolveIPEndPoint(options).ConfigureAwait(false)
                };

                await _transportLayerAdapter.ConnectAsync(transportLayerConnectOptions, cancellationToken).ConfigureAwait(false);
            }
            catch (Exception)
            {
                _transportLayerAdapter.Dispose();
                throw;
            }
        }
コード例 #2
0
        public Task ConnectAsync(CoapTransportLayerConnectOptions connectOptions, CancellationToken cancellationToken)
        {
            _udpTransport = new UdpTransport(connectOptions);

            var clientProtocol = new DtlsClientProtocol(new SecureRandom());
            var client         = new DtlsClient(ConvertProtocolVersion(DtlsVersion), (PreSharedKey)Credentials);

            _dtlsTransport = clientProtocol.Connect(client, _udpTransport);

            return(Task.FromResult(0));
        }
コード例 #3
0
        public async Task ConnectAsync(CoapClientConnectOptions options, CancellationToken cancellationToken)
        {
            _connectOptions        = options ?? throw new ArgumentNullException(nameof(options));
            _transportLayerAdapter = new CoapTransportLayerAdapter(options.TransportLayer, _logger);

            var transportLayerConnectOptions = new CoapTransportLayerConnectOptions
            {
                EndPoint = await ResolveIPEndPoint(options).ConfigureAwait(false)
            };

            await _transportLayerAdapter.ConnectAsync(transportLayerConnectOptions, cancellationToken).ConfigureAwait(false);
        }
コード例 #4
0
        public async Task ConnectAsync(CoapTransportLayerConnectOptions connectOptions, CancellationToken cancellationToken)
        {
            if (connectOptions == null)
            {
                throw new ArgumentNullException(nameof(connectOptions));
            }

            cancellationToken.ThrowIfCancellationRequested();

            try
            {
                _udpTransport = new UdpTransport(connectOptions);
                var clientProtocol = new DtlsClientProtocol(_secureRandom);
                _dtlsClient = new DtlsClient(ConvertProtocolVersion(DtlsVersion), (PreSharedKey)Credentials);

                using (cancellationToken.Register(() =>
                {
                    _udpTransport.Close();
                }))
                {
                    _dtlsTransport = await Task.Run(() => clientProtocol.Connect(_dtlsClient, _udpTransport), cancellationToken).ConfigureAwait(false);
                }
            }
            catch
            {
                _udpTransport?.Dispose();

                if (cancellationToken.IsCancellationRequested)
                {
                    throw new OperationCanceledException();
                }

                if (_dtlsClient.ReceivedAlert != 0)
                {
                    throw new DtlsException($"Received alert {AlertDescription.GetText(_dtlsClient.ReceivedAlert)}.", null)
                          {
                              ReceivedAlert = _dtlsClient.ReceivedAlert
                          };
                }

                throw;
            }
        }
コード例 #5
0
ファイル: UdpTransport.cs プロジェクト: vankooch/CoAPnet
        public UdpTransport(CoapTransportLayerConnectOptions connectOptions)
        {
            _connectOptions = connectOptions ?? throw new ArgumentNullException(nameof(connectOptions));

            _socket = new Socket(connectOptions.EndPoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp);
        }