// Copyright (c) 2023 xmpp-rs contributors. // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. use tokio_xmpp::parsers::{ iq::{Iq, IqType}, stanza_error::{DefinedCondition, ErrorType, StanzaError}, }; use crate::{Agent, Event}; pub mod get; pub mod result; pub async fn handle_iq(agent: &mut Agent, iq: Iq) -> Vec { let mut events = vec![]; let from = iq .from .clone() .unwrap_or_else(|| agent.client.bound_jid().unwrap().clone()); if let IqType::Get(payload) = iq.payload { get::handle_iq_get(agent, &mut events, from, iq.to, iq.id, payload).await; } else if let IqType::Result(Some(payload)) = iq.payload { result::handle_iq_result(agent, &mut events, from, iq.to, iq.id, payload).await; } else if let IqType::Set(_payload) = iq.payload { let error = StanzaError::new( ErrorType::Cancel, DefinedCondition::ServiceUnavailable, "en", "No handler defined for this kind of iq.", ); let iq = Iq::from_error(iq.id, error).with_to(from).into(); let _ = agent.client.send_stanza(iq).await; } events }