jingle_s5b: Handle the forgotten case of an empty transport element, see §2.2.

Emmanuel Gil Peyrot created

Change summary

src/jingle_s5b.rs | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

Detailed changes

src/jingle_s5b.rs 🔗

@@ -118,6 +118,7 @@ pub enum TransportPayload {
     CandidateError,
     CandidateUsed(String),
     ProxyError,
+    None,
 }
 
 #[derive(Debug, Clone)]
@@ -210,7 +211,7 @@ impl<'a> TryFrom<&'a Element> for Transport {
                     return Err(Error::ParseError("Unknown child in JingleS5B transport element."));
                 });
             }
-            let payload = payload.ok_or(Error::ParseError("No child in JingleS5B transport element."))?;
+            let payload = payload.unwrap_or(TransportPayload::None);
             Ok(Transport {
                 sid: sid,
                 dstaddr: dstaddr,
@@ -258,6 +259,7 @@ impl<'a> Into<Element> for &'a Transport {
                                       .ns(ns::JINGLE_S5B)
                                       .build())
                      },
+                     TransportPayload::None => vec!(),
                  })
                 .build()
     }
@@ -269,13 +271,13 @@ mod tests {
 
     #[test]
     fn test_simple() {
-        let elem: Element = "<transport xmlns='urn:xmpp:jingle:transports:s5b:1' sid='coucou'><proxy-error/></transport>".parse().unwrap();
+        let elem: Element = "<transport xmlns='urn:xmpp:jingle:transports:s5b:1' sid='coucou'/>".parse().unwrap();
         let transport = Transport::try_from(&elem).unwrap();
         assert_eq!(transport.sid, "coucou");
         assert_eq!(transport.dstaddr, None);
         assert_eq!(transport.mode, Mode::Tcp);
         match transport.payload {
-            TransportPayload::ProxyError => (),
+            TransportPayload::None => (),
             _ => panic!("Wrong element inside transport!"),
         }
     }