mirror of
https://gitlab.com/xmpp-rs/xmpp-rs.git
synced 2024-07-12 22:21:53 +00:00
jingle_message, muc, presence, version: Always use the check_no_attributes macro.
This commit is contained in:
parent
f2f8de773b
commit
e0438f9b88
5 changed files with 9 additions and 37 deletions
|
@ -28,11 +28,7 @@ pub enum JingleMI {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_sid(elem: Element) -> Result<SessionId, Error> {
|
fn get_sid(elem: Element) -> Result<SessionId, Error> {
|
||||||
for (attr, _) in elem.attrs() {
|
check_no_unknown_attributes!(elem, "Jingle message", ["id"]);
|
||||||
if attr != "id" {
|
|
||||||
return Err(Error::ParseError("Unknown attribute in Jingle message element."));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(SessionId(get_attr!(elem, "id", required)))
|
Ok(SessionId(get_attr!(elem, "id", required)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ impl TryFrom<Element> for Muc {
|
||||||
if !elem.is("x", ns::MUC) {
|
if !elem.is("x", ns::MUC) {
|
||||||
return Err(Error::ParseError("This is not an x element."));
|
return Err(Error::ParseError("This is not an x element."));
|
||||||
}
|
}
|
||||||
|
check_no_attributes!(elem, "x");
|
||||||
|
|
||||||
let mut password = None;
|
let mut password = None;
|
||||||
for child in elem.children() {
|
for child in elem.children() {
|
||||||
|
@ -35,10 +36,6 @@ impl TryFrom<Element> for Muc {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _ in elem.attrs() {
|
|
||||||
return Err(Error::ParseError("Unknown attribute in x element."));
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(Muc {
|
Ok(Muc {
|
||||||
password: password,
|
password: password,
|
||||||
})
|
})
|
||||||
|
|
|
@ -96,14 +96,10 @@ impl TryFrom<Element> for Actor {
|
||||||
if !elem.is("actor", ns::MUC_USER) {
|
if !elem.is("actor", ns::MUC_USER) {
|
||||||
return Err(Error::ParseError("This is not a actor element."));
|
return Err(Error::ParseError("This is not a actor element."));
|
||||||
}
|
}
|
||||||
|
check_no_unknown_attributes!(elem, "actor", ["jid", "nick"]);
|
||||||
for _ in elem.children() {
|
for _ in elem.children() {
|
||||||
return Err(Error::ParseError("Unknown child in actor element."));
|
return Err(Error::ParseError("Unknown child in actor element."));
|
||||||
}
|
}
|
||||||
for (attr, _) in elem.attrs() {
|
|
||||||
if attr != "jid" && attr != "nick" {
|
|
||||||
return Err(Error::ParseError("Unknown attribute in actor element."));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let jid: Option<Jid> = get_attr!(elem, "jid", optional);
|
let jid: Option<Jid> = get_attr!(elem, "jid", optional);
|
||||||
let nick = get_attr!(elem, "nick", optional);
|
let nick = get_attr!(elem, "nick", optional);
|
||||||
|
|
||||||
|
@ -167,6 +163,7 @@ impl TryFrom<Element> for Item {
|
||||||
if !elem.is("item", ns::MUC_USER) {
|
if !elem.is("item", ns::MUC_USER) {
|
||||||
return Err(Error::ParseError("This is not a item element."));
|
return Err(Error::ParseError("This is not a item element."));
|
||||||
}
|
}
|
||||||
|
check_no_unknown_attributes!(elem, "item", ["affiliation", "jid", "nick", "role"]);
|
||||||
let mut actor: Option<Actor> = None;
|
let mut actor: Option<Actor> = None;
|
||||||
let mut continue_: Option<Continue> = None;
|
let mut continue_: Option<Continue> = None;
|
||||||
let mut reason: Option<Reason> = None;
|
let mut reason: Option<Reason> = None;
|
||||||
|
@ -181,12 +178,6 @@ impl TryFrom<Element> for Item {
|
||||||
return Err(Error::ParseError("Unknown child in item element."));
|
return Err(Error::ParseError("Unknown child in item element."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (attr, _) in elem.attrs() {
|
|
||||||
if attr != "affiliation" && attr != "jid" &&
|
|
||||||
attr != "nick" && attr != "role" {
|
|
||||||
return Err(Error::ParseError("Unknown attribute in item element."));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let affiliation: Affiliation = get_attr!(elem, "affiliation", required);
|
let affiliation: Affiliation = get_attr!(elem, "affiliation", required);
|
||||||
let jid: Option<Jid> = get_attr!(elem, "jid", optional);
|
let jid: Option<Jid> = get_attr!(elem, "jid", optional);
|
||||||
|
@ -233,6 +224,7 @@ impl TryFrom<Element> for MucUser {
|
||||||
if !elem.is("x", ns::MUC_USER) {
|
if !elem.is("x", ns::MUC_USER) {
|
||||||
return Err(Error::ParseError("This is not an x element."));
|
return Err(Error::ParseError("This is not an x element."));
|
||||||
}
|
}
|
||||||
|
check_no_attributes!(elem, "x");
|
||||||
let mut status = vec!();
|
let mut status = vec!();
|
||||||
let mut items = vec!();
|
let mut items = vec!();
|
||||||
for child in elem.children() {
|
for child in elem.children() {
|
||||||
|
@ -244,9 +236,6 @@ impl TryFrom<Element> for MucUser {
|
||||||
return Err(Error::ParseError("Unknown child in x element."));
|
return Err(Error::ParseError("Unknown child in x element."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _ in elem.attrs() {
|
|
||||||
return Err(Error::ParseError("Unknown attribute in x element."));
|
|
||||||
}
|
|
||||||
Ok(MucUser {
|
Ok(MucUser {
|
||||||
status,
|
status,
|
||||||
items,
|
items,
|
||||||
|
|
|
@ -268,22 +268,16 @@ impl TryFrom<Element> for Presence {
|
||||||
if show.is_some() {
|
if show.is_some() {
|
||||||
return Err(Error::ParseError("More than one show element in a presence."));
|
return Err(Error::ParseError("More than one show element in a presence."));
|
||||||
}
|
}
|
||||||
|
check_no_attributes!(elem, "show");
|
||||||
for _ in elem.children() {
|
for _ in elem.children() {
|
||||||
return Err(Error::ParseError("Unknown child in show element."));
|
return Err(Error::ParseError("Unknown child in show element."));
|
||||||
}
|
}
|
||||||
for _ in elem.attrs() {
|
|
||||||
return Err(Error::ParseError("Unknown attribute in show element."));
|
|
||||||
}
|
|
||||||
show = Some(Show::from_str(elem.text().as_ref())?);
|
show = Some(Show::from_str(elem.text().as_ref())?);
|
||||||
} else if elem.is("status", ns::DEFAULT_NS) {
|
} else if elem.is("status", ns::DEFAULT_NS) {
|
||||||
|
check_no_unknown_attributes!(elem, "status", ["xml:lang"]);
|
||||||
for _ in elem.children() {
|
for _ in elem.children() {
|
||||||
return Err(Error::ParseError("Unknown child in status element."));
|
return Err(Error::ParseError("Unknown child in status element."));
|
||||||
}
|
}
|
||||||
for (attr, _) in elem.attrs() {
|
|
||||||
if attr != "xml:lang" {
|
|
||||||
return Err(Error::ParseError("Unknown attribute in status element."));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let lang = get_attr!(elem, "xml:lang", default);
|
let lang = get_attr!(elem, "xml:lang", default);
|
||||||
if presence.statuses.insert(lang, elem.text()).is_some() {
|
if presence.statuses.insert(lang, elem.text()).is_some() {
|
||||||
return Err(Error::ParseError("Status element present twice for the same xml:lang."));
|
return Err(Error::ParseError("Status element present twice for the same xml:lang."));
|
||||||
|
@ -292,12 +286,10 @@ impl TryFrom<Element> for Presence {
|
||||||
if priority.is_some() {
|
if priority.is_some() {
|
||||||
return Err(Error::ParseError("More than one priority element in a presence."));
|
return Err(Error::ParseError("More than one priority element in a presence."));
|
||||||
}
|
}
|
||||||
|
check_no_attributes!(elem, "status");
|
||||||
for _ in elem.children() {
|
for _ in elem.children() {
|
||||||
return Err(Error::ParseError("Unknown child in priority element."));
|
return Err(Error::ParseError("Unknown child in priority element."));
|
||||||
}
|
}
|
||||||
for _ in elem.attrs() {
|
|
||||||
return Err(Error::ParseError("Unknown attribute in priority element."));
|
|
||||||
}
|
|
||||||
priority = Some(Priority::from_str(elem.text().as_ref())?);
|
priority = Some(Priority::from_str(elem.text().as_ref())?);
|
||||||
} else {
|
} else {
|
||||||
presence.payloads.push(elem.clone());
|
presence.payloads.push(elem.clone());
|
||||||
|
|
|
@ -23,9 +23,7 @@ impl TryFrom<Element> for Version {
|
||||||
if !elem.is("query", ns::VERSION) {
|
if !elem.is("query", ns::VERSION) {
|
||||||
return Err(Error::ParseError("This is not a version element."));
|
return Err(Error::ParseError("This is not a version element."));
|
||||||
}
|
}
|
||||||
for _ in elem.attrs() {
|
check_no_attributes!(elem, "version");
|
||||||
return Err(Error::ParseError("Unknown child in version element."));
|
|
||||||
}
|
|
||||||
let mut name = None;
|
let mut name = None;
|
||||||
let mut version = None;
|
let mut version = None;
|
||||||
let mut os = None;
|
let mut os = None;
|
||||||
|
|
Loading…
Reference in a new issue