private async Task _SendAlertAsync(TAlertLevel alertLevel, TAlertDescription alertDescription, TimeSpan timeout) { if (this._Socket == null) { throw new Exception("Soket Cannot be Null"); } var record = new DTLSRecord { RecordType = TRecordType.Alert, Epoch = _Epoch, SequenceNumber = this._NextSequenceNumber(), Version = this._Version }; var sequenceNumber = ((long)record.Epoch << 48) + record.SequenceNumber; var data = new byte[2]; data[0] = (byte)alertLevel; data[1] = (byte)alertDescription; record.Fragment = this._Cipher == null ? data : this._Cipher.EncodePlaintext(sequenceNumber, (byte)TRecordType.ApplicationData, data, 0, data.Length); var recordSize = DTLSRecord.RECORD_OVERHEAD + record.Fragment.Length; var recordBytes = new byte[recordSize]; using (var stream = new MemoryStream(recordBytes)) { record.Serialise(stream); } await this._Socket.SendAsync(recordBytes, timeout).ConfigureAwait(false); }
private void SendAlert(Session session, SocketAddress address, TAlertLevel alertLevel, TAlertDescription alertDescription) { #if DEBUG Console.WriteLine($"Alert! {alertDescription}"); #endif if (session != null) { DTLSRecord record = new DTLSRecord { RecordType = TRecordType.Alert, Epoch = session.Epoch, SequenceNumber = session.NextSequenceNumber() }; if (session.Version != null) { record.Version = session.Version; } long sequenceNumber = ((long)record.Epoch << 48) + record.SequenceNumber; byte[] data = new byte[2]; data[0] = (byte)alertLevel; data[1] = (byte)alertDescription; if (session.Cipher == null) { record.Fragment = data; } else { record.Fragment = session.Cipher.EncodePlaintext(sequenceNumber, (byte)TRecordType.ApplicationData, data, 0, data.Length); } int responseSize = DTLSRecord.RECORD_OVERHEAD + record.Fragment.Length; byte[] response = new byte[responseSize]; using (MemoryStream stream = new MemoryStream(response)) { record.Serialise(stream); } SocketAsyncEventArgs parameters = new SocketAsyncEventArgs() { RemoteEndPoint = session.RemoteEndPoint }; parameters.SetBuffer(response, 0, responseSize); _Socket.SendToAsync(parameters); } }
private void SendAlert(TAlertLevel alertLevel, TAlertDescription alertDescription) { DTLSRecord record = new DTLSRecord(); record.RecordType = TRecordType.Alert; record.Epoch = _Epoch; record.SequenceNumber = NextSequenceNumber(); if (_Version != null) { record.Version = _Version; } long sequenceNumber = ((long)record.Epoch << 48) + record.SequenceNumber; byte[] data = new byte[2]; data[0] = (byte)alertLevel; data[1] = (byte)alertDescription; if (_Cipher == null) { record.Fragment = data; } else { record.Fragment = _Cipher.EncodePlaintext(sequenceNumber, (byte)TRecordType.ApplicationData, data, 0, data.Length); } int responseSize = DTLSRecord.RECORD_OVERHEAD + record.Fragment.Length; byte[] response = new byte[responseSize]; using (MemoryStream stream = new MemoryStream(response)) { record.Serialise(stream); } SocketAsyncEventArgs parameters = new SocketAsyncEventArgs() { RemoteEndPoint = _ServerEndPoint }; parameters.SetBuffer(response, 0, responseSize); _Socket.SendToAsync(parameters); }
private async Task _SendAlertAsync(TAlertLevel alertLevel, TAlertDescription alertDescription) => await this._SendAlertAsync(alertLevel, alertDescription, TimeSpan.FromSeconds(1)).ConfigureAwait(false);
private void SendAlert(TAlertLevel alertLevel, TAlertDescription alertDescription) { DTLSRecord record = new DTLSRecord(); record.RecordType = TRecordType.Alert; record.Epoch = _Epoch; record.SequenceNumber = NextSequenceNumber(); if (_Version != null) record.Version = _Version; long sequenceNumber = ((long)record.Epoch << 48) + record.SequenceNumber; byte[] data = new byte[2]; data[0] = (byte)alertLevel; data[1] = (byte)alertDescription; if (_Cipher == null) record.Fragment = data; else record.Fragment = _Cipher.EncodePlaintext(sequenceNumber, (byte)TRecordType.ApplicationData, data, 0, data.Length); int responseSize = DTLSRecord.RECORD_OVERHEAD + record.Fragment.Length; byte[] response = new byte[responseSize]; using (MemoryStream stream = new MemoryStream(response)) { record.Serialise(stream); } SocketAsyncEventArgs parameters = new SocketAsyncEventArgs() { RemoteEndPoint = _ServerEndPoint }; parameters.SetBuffer(response, 0, responseSize); _Socket.SendToAsync(parameters); }