public NetMQMessage Alert(AlertLevel alertLevel, AlertDescription alertDescription) { NetMQMessage message = new NetMQMessage(); message.Append(new[] { (byte)ContentType.Alert }); message.Append(ProtocolVersion.ToArray()); if (ProtocolVersion.SequenceEqual(Constants.V3_3)) { message.Append(new byte[2] { 0, 2 }); } message.Append(new byte[1] { (byte)alertLevel }); message.Append(new byte[1] { (byte)alertDescription }); return(message); }
} /// <summary> /// 包装成RecordLayer /// </summary> /// <param name="contentType">This identifies the type of content: ChangeCipherSpec, Handshake, or ApplicationData.</param> /// <param name="plainMessage">The unencrypted form of the message to be encrypted.</param> /// <returns></returns> internal byte[] WrapToRecordLayerMessage(ContentType contentType, byte[] bytes) { //将数据加密 //Change Cipher Spec 步骤之前返回明文 byte[] encryptedBytes = RecordLayer.EncryptMessage(contentType, bytes); byte[] recordLayerBytes = new byte[encryptedBytes.Length + 5]; recordLayerBytes[0] = (byte)contentType; recordLayerBytes[1] = ProtocolVersion[0]; recordLayerBytes[2] = ProtocolVersion[1]; /// ContentType type;change_cipher_spec(20), alert(21), handshake(22), application_data(23), (255) /// ProtocolVersion version;33 /// uint16 length; /// opaque fragment[TLSPlaintext.length]; if (ProtocolVersion.SequenceEqual(Constants.V3_3)) { //增加长度 byte[] lengthBytes = encryptedBytes.LengthToBytes(2); Buffer.BlockCopy(lengthBytes, 0, recordLayerBytes, 3, lengthBytes.Length); } Buffer.BlockCopy(encryptedBytes, 0, recordLayerBytes, 5, encryptedBytes.Length); return(recordLayerBytes); }