public void ConnectTest() { //CertificateInfo certificateInfo = DtlsUtils. byte[] testData = { 1, 2, 3, 4, 5 }; int clientUdpPort = 8001, serverUdpPort = 8002; var clientSocket = new Socket(SocketType.Dgram, ProtocolType.Udp); clientSocket.Bind(new IPEndPoint(IPAddress.Any, clientUdpPort)); var serverSocket = new Socket(SocketType.Dgram, ProtocolType.Udp); serverSocket.Bind(new IPEndPoint(IPAddress.Any, serverUdpPort)); clientSocket.Connect(IPAddress.Loopback, serverUdpPort); serverSocket.Connect(IPAddress.Loopback, clientUdpPort); clientSocket.Send(testData); byte[] receiveBuffer = new byte[serverSocket.Available]; serverSocket.Receive(receiveBuffer); CollectionAssert.AreEqual(receiveBuffer, testData); CertificateInfo clientCertificateInfo = DtlsUtils.GenerateCertificateInfo(); var clientDatagramTransport = new DatagramTransportImpl(clientSocket); var client = new DtlsClient(clientDatagramTransport, clientCertificateInfo, new DtlsClientProtocol(new Org.BouncyCastle.Security.SecureRandom())); CertificateInfo serverCertificateInfo = DtlsUtils.GenerateCertificateInfo(); var serverDatagramTransport = new DatagramTransportImpl(serverSocket); var server = new DtlsServer(serverDatagramTransport, serverCertificateInfo, new DtlsServerProtocol(new Org.BouncyCastle.Security.SecureRandom())); Task serverAcceptTask = new Task(() => server.Start()); serverAcceptTask.Start(); client.HandshakeComplete += (sender, args) => { }; client.ServerCertificateAvailable += (sender, args) => { }; client.Start(); }
/// <summary> /// Connect to a group to start streaming /// </summary> /// <param name="groupId"></param> /// <param name="simulator"></param> /// <returns></returns> public async Task Connect(string groupId, bool simulator = false) { _simulator = simulator; var enableResult = await _localHueClient.SetStreamingAsync(groupId).ConfigureAwait(false); byte[] psk = FromHex(_clientKey); BasicTlsPskIdentity pskIdentity = new BasicTlsPskIdentity(_appKey, psk); var dtlsClient = new DtlsClient(null, pskIdentity); DtlsClientProtocol clientProtocol = new DtlsClientProtocol(new SecureRandom()); await _socket.ConnectAsync(IPAddress.Parse(_ip), 2100).ConfigureAwait(false); _udp = new UdpTransport(_socket); if (!simulator) { _dtlsTransport = clientProtocol.Connect(dtlsClient, _udp); } }