Skip to content
This repository was archived by the owner on Apr 15, 2024. It is now read-only.

Commit 4802b8c

Browse files
committed
add unreadable message content type for fetching
1 parent 3e6aa7e commit 4802b8c

File tree

2 files changed

+47
-12
lines changed

2 files changed

+47
-12
lines changed

iota-streams-app-channels/src/api/tangle/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ pub enum MessageContent {
105105
Sequence,
106106
Subscribe,
107107
Unsubscribe,
108+
Unreadable,
108109
}
109110

110111
impl MessageContent {
@@ -130,6 +131,8 @@ impl MessageContent {
130131
masked_payload,
131132
}
132133
}
134+
135+
pub fn unreadable() -> Self { Self::Unreadable }
133136
}
134137

135138
/// Generic unwrapped message type containing possible message contents

iota-streams-app-channels/src/api/tangle/user.rs

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -403,20 +403,35 @@ impl<Trans: Transport + Clone> User<Trans> {
403403
/// * `msg` - Binary message of unknown type
404404
/// * `pk` - Optional ed25519 Public Key of the sending participant. None if unknown
405405
pub fn handle_message(&mut self, mut msg0: Message) -> Result<UnwrappedMessage> {
406+
let mut sequenced = false;
406407
loop {
407408
// Forget TangleMessage and timestamp
408409
let msg = msg0.binary;
409410
let preparsed = msg.parse_header()?;
411+
let link = preparsed.header.link.clone();
410412
match preparsed.header.content_type {
411413
message::SIGNED_PACKET => {
412-
let m = self.user.handle_signed_packet(msg, MsgInfo::SignedPacket)?;
413-
let u = m.map(|(pk, public, masked)| MessageContent::new_signed_packet(pk, public, masked));
414-
return Ok(u);
414+
match self.user.handle_signed_packet(msg, MsgInfo::SignedPacket) {
415+
Ok(m) =>
416+
return Ok(m.map(|(pk, public, masked)| MessageContent::new_signed_packet(pk, public, masked))),
417+
Err(e) => {
418+
match sequenced {
419+
true => return Ok(UnwrappedMessage::new(link, MessageContent::unreadable())),
420+
false => return Err(e)
421+
}
422+
}
423+
}
415424
}
416425
message::TAGGED_PACKET => {
417-
let m = self.user.handle_tagged_packet(msg, MsgInfo::TaggedPacket)?;
418-
let u = m.map(|(public, masked)| MessageContent::new_tagged_packet(public, masked));
419-
return Ok(u);
426+
match self.user.handle_tagged_packet(msg, MsgInfo::TaggedPacket) {
427+
Ok(m) => return Ok(m.map(|(public, masked)| MessageContent::new_tagged_packet(public, masked))),
428+
Err(e) => {
429+
match sequenced {
430+
true => return Ok(UnwrappedMessage::new(link, MessageContent::unreadable())),
431+
false => return Err(e)
432+
}
433+
}
434+
}
420435
}
421436
message::KEYLOAD => {
422437
// So long as the unwrap has not failed, we will return a blank object to
@@ -436,6 +451,7 @@ impl<Trans: Transport + Clone> User<Trans> {
436451
);
437452
let msg = self.transport.recv_message(&msg_link)?;
438453
self.user.store_state(unwrapped.body.pk, store_link)?;
454+
sequenced = true;
439455
msg0 = msg;
440456
}
441457
unknown_content => return err!(UnknownMsgType(unknown_content)),
@@ -693,20 +709,35 @@ impl<Trans: Transport + Clone> User<Trans> {
693709
/// # Arguments
694710
/// * `msg` - Binary message of unknown type
695711
pub async fn handle_message(&mut self, mut msg0: Message) -> Result<UnwrappedMessage> {
712+
let mut sequenced = false;
696713
loop {
697714
// Forget TangleMessage and timestamp
698715
let msg = msg0.binary;
699716
let preparsed = msg.parse_header()?;
717+
let link = preparsed.header.link.clone();
700718
match preparsed.header.content_type {
701719
message::SIGNED_PACKET => {
702-
let m = self.user.handle_signed_packet(msg, MsgInfo::SignedPacket)?;
703-
let u = m.map(|(pk, public, masked)| MessageContent::new_signed_packet(pk, public, masked));
704-
return Ok(u);
720+
match self.user.handle_signed_packet(msg, MsgInfo::SignedPacket) {
721+
Ok(m) =>
722+
return Ok(m.map(|(pk, public, masked)| MessageContent::new_signed_packet(pk, public, masked))),
723+
Err(e) => {
724+
match sequenced {
725+
true => return Ok(UnwrappedMessage::new(link, MessageContent::unreadable())),
726+
false => return Err(e)
727+
}
728+
}
729+
}
705730
}
706731
message::TAGGED_PACKET => {
707-
let m = self.user.handle_tagged_packet(msg, MsgInfo::TaggedPacket)?;
708-
let u = m.map(|(public, masked)| MessageContent::new_tagged_packet(public, masked));
709-
return Ok(u);
732+
match self.user.handle_tagged_packet(msg, MsgInfo::TaggedPacket) {
733+
Ok(m) => return Ok(m.map(|(public, masked)| MessageContent::new_tagged_packet(public, masked))),
734+
Err(e) => {
735+
match sequenced {
736+
true => return Ok(UnwrappedMessage::new(link, MessageContent::unreadable())),
737+
false => return Err(e)
738+
}
739+
}
740+
}
710741
}
711742
message::KEYLOAD => {
712743
// So long as the unwrap has not failed, we will return a blank object to
@@ -726,6 +757,7 @@ impl<Trans: Transport + Clone> User<Trans> {
726757
);
727758
let msg = self.transport.recv_message(&msg_link).await?;
728759
self.user.store_state(unwrapped.body.pk, store_link)?;
760+
sequenced = true;
729761
msg0 = msg;
730762
}
731763
unknown_content => return err!(UnknownMsgType(unknown_content)),

0 commit comments

Comments
 (0)