--- /dev/null
+// This file is Copyright its original authors, visible in version control
+// history.
+//
+// This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
+// or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// You may not use this file except in accordance with one or both of these
+// licenses.
+
+// This file is auto-generated by gen_target.sh based on msg_target_template.txt
+// To modify it, modify msg_target_template.txt and run gen_target.sh instead.
+
+use lightning::ln::msgs;
+
+use msg_targets::utils::VecWriter;
+use utils::test_logger;
+
+#[inline]
+pub fn msg_warning_message_test<Out: test_logger::Output>(data: &[u8], _out: Out) {
+ test_msg_hole!(msgs::WarningMessage, data, 32, 2);
+}
+
+#[no_mangle]
+pub extern "C" fn msg_warning_message_run(data: *const u8, datalen: usize) {
+ let data = unsafe { std::slice::from_raw_parts(data, datalen) };
+ test_msg_hole!(msgs::WarningMessage, data, 32, 2);
+}
/// An error message to be sent or received from a peer
#[derive(Clone, Debug, PartialEq)]
pub struct ErrorMessage {
- /// The channel ID involved in the error
+ /// The channel ID involved in the error.
+ ///
+ /// All-0s indicates a general error unrelated to a specific channel, after which all channels
+ /// with the sending peer should be closed.
pub channel_id: [u8; 32],
/// A possibly human-readable error description.
- /// The string should be sanitized before it is used (e.g. emitted to logs
- /// or printed to stdout). Otherwise, a well crafted error message may trigger a security
- /// vulnerability in the terminal emulator or the logging subsystem.
+ /// The string should be sanitized before it is used (e.g. emitted to logs or printed to
+ /// stdout). Otherwise, a well crafted error message may trigger a security vulnerability in
+ /// the terminal emulator or the logging subsystem.
+ pub data: String,
+}
+
+/// A warning message to be sent or received from a peer
+#[derive(Clone, Debug, PartialEq)]
+pub struct WarningMessage {
+ /// The channel ID involved in the warning.
+ ///
+ /// All-0s indicates a warning unrelated to a specific channel.
+ pub channel_id: [u8; 32],
+ /// A possibly human-readable warning description.
+ /// The string should be sanitized before it is used (e.g. emitted to logs or printed to
+ /// stdout). Otherwise, a well crafted error message may trigger a security vulnerability in
+ /// the terminal emulator or the logging subsystem.
pub data: String,
}
}
}
+impl Writeable for WarningMessage {
+ fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
+ self.channel_id.write(w)?;
+ (self.data.len() as u16).write(w)?;
+ w.write_all(self.data.as_bytes())?;
+ Ok(())
+ }
+}
+
+impl Readable for WarningMessage {
+ fn read<R: Read>(r: &mut R) -> Result<Self, DecodeError> {
+ Ok(Self {
+ channel_id: Readable::read(r)?,
+ data: {
+ let mut sz: usize = <u16 as Readable>::read(r)? as usize;
+ let data = read_to_end(r)?;
+ sz = cmp::min(data.len(), sz);
+ match String::from_utf8(data[..sz as usize].to_vec()) {
+ Ok(s) => s,
+ Err(_) => return Err(DecodeError::InvalidValue),
+ }
+ }
+ })
+ }
+}
+
impl Writeable for UnsignedNodeAnnouncement {
fn write<W: Writer>(&self, w: &mut W) -> Result<(), io::Error> {
self.features.write(w)?;
assert_eq!(encoded_value, target_value);
}
+ #[test]
+ fn encoding_warning() {
+ let error = msgs::WarningMessage {
+ channel_id: [2; 32],
+ data: String::from("rust-lightning"),
+ };
+ let encoded_value = error.encode();
+ let target_value = hex::decode("0202020202020202020202020202020202020202020202020202020202020202000e727573742d6c696768746e696e67").unwrap();
+ assert_eq!(encoded_value, target_value);
+ }
+
#[test]
fn encoding_ping() {
let ping = msgs::Ping {