diff options
Diffstat (limited to '')
| -rw-r--r-- | filamento/src/logic/process_stanza.rs | 69 | 
1 files changed, 55 insertions, 14 deletions
| diff --git a/filamento/src/logic/process_stanza.rs b/filamento/src/logic/process_stanza.rs index 9c49b04..51e20a4 100644 --- a/filamento/src/logic/process_stanza.rs +++ b/filamento/src/logic/process_stanza.rs @@ -20,8 +20,8 @@ use crate::{      UpdateMessage, caps,      chat::{Body, Message},      error::{ -        AvatarUpdateError, DatabaseError, Error, IqError, MessageRecvError, PresenceError, -        RosterError, +        AvatarUpdateError, DatabaseError, Error, IqError, IqProcessError, MessageRecvError, +        PresenceError, RosterError,      },      files::FileStore,      presence::{Offline, Online, Presence, PresenceType, Show}, @@ -541,11 +541,11 @@ pub async fn recv_iq<Fs: FileStore + Clone>(      logic: ClientLogic<Fs>,      connection: Connected,      iq: Iq, -) -> Result<Option<UpdateMessage>, IqError> { +) -> Result<Option<UpdateMessage>, IqProcessError> {      if let Some(to) = &iq.to {          if *to == *connection.jid() {          } else { -            return Err(IqError::IncorrectAddressee(to.clone())); +            return Err(IqProcessError::Iq(IqError::IncorrectAddressee(to.clone())));          }      }      match iq.r#type { @@ -556,7 +556,11 @@ pub async fn recv_iq<Fs: FileStore + Clone>(                  .unwrap_or_else(|| connection.server().clone());              let id = iq.id.clone();              debug!("received iq result with id `{}` from {}", id, from); -            logic.pending().respond(Stanza::Iq(iq), id).await?; +            logic +                .pending() +                .respond(Stanza::Iq(iq), id) +                .await +                .map_err(|e| Into::<IqError>::into(e))?;              Ok(None)          }          stanza::client::iq::IqType::Get => { @@ -596,7 +600,11 @@ pub async fn recv_iq<Fs: FileStore + Clone>(                                                  errors: vec![StanzaError::ItemNotFound.into()],                                              };                                              // TODO: log error -                                            connection.write_handle().write(Stanza::Iq(iq)).await?; +                                            connection +                                                .write_handle() +                                                .write(Stanza::Iq(iq)) +                                                .await +                                                .map_err(|e| Into::<IqError>::into(e))?;                                              info!("replied to disco#info request from {}", from);                                              return Ok(None);                                          } @@ -612,7 +620,11 @@ pub async fn recv_iq<Fs: FileStore + Clone>(                                              errors: vec![StanzaError::ItemNotFound.into()],                                          };                                          // TODO: log error -                                        connection.write_handle().write(Stanza::Iq(iq)).await?; +                                        connection +                                            .write_handle() +                                            .write(Stanza::Iq(iq)) +                                            .await +                                            .map_err(|e| Into::<IqError>::into(e))?;                                          info!("replied to disco#info request from {}", from);                                          return Ok(None);                                      } @@ -627,7 +639,11 @@ pub async fn recv_iq<Fs: FileStore + Clone>(                              query: Some(iq::Query::DiscoInfo(disco)),                              errors: vec![],                          }; -                        connection.write_handle().write(Stanza::Iq(iq)).await?; +                        connection +                            .write_handle() +                            .write(Stanza::Iq(iq)) +                            .await +                            .map_err(|e| Into::<IqError>::into(e))?;                          info!("replied to disco#info request from {}", from);                          Ok(None)                      } @@ -642,7 +658,11 @@ pub async fn recv_iq<Fs: FileStore + Clone>(                              query: None,                              errors: vec![StanzaError::ServiceUnavailable.into()],                          }; -                        connection.write_handle().write(Stanza::Iq(iq)).await?; +                        connection +                            .write_handle() +                            .write(Stanza::Iq(iq)) +                            .await +                            .map_err(|e| Into::<IqError>::into(e))?;                          warn!("replied to unsupported iq get from {}", from);                          Ok(None)                      } // stanza::client::iq::Query::Bind(bind) => todo!(), @@ -662,7 +682,11 @@ pub async fn recv_iq<Fs: FileStore + Clone>(                      query: None,                      errors: vec![StanzaError::BadRequest.into()],                  }; -                connection.write_handle().write(Stanza::Iq(iq)).await?; +                connection +                    .write_handle() +                    .write(Stanza::Iq(iq)) +                    .await +                    .map_err(|e| Into::<IqError>::into(e))?;                  info!("replied to malformed iq query from {}", from);                  Ok(None)              } @@ -713,7 +737,12 @@ pub async fn recv_iq<Fs: FileStore + Clone>(                                              .handle_error(RosterError::PushReply(e.into()).into())                                              .await;                                      } -                                    Ok(Some(UpdateMessage::RosterUpdate(contact))) +                                    let user = logic +                                        .db() +                                        .read_user(contact.user_jid.clone()) +                                        .await +                                        .map_err(|e| Into::<RosterError>::into(e))?; +                                    Ok(Some(UpdateMessage::RosterUpdate(contact, user)))                                  }                              }                          } else { @@ -727,7 +756,11 @@ pub async fn recv_iq<Fs: FileStore + Clone>(                                  query: None,                                  errors: vec![StanzaError::NotAcceptable.into()],                              }; -                            connection.write_handle().write(Stanza::Iq(iq)).await?; +                            connection +                                .write_handle() +                                .write(Stanza::Iq(iq)) +                                .await +                                .map_err(|e| Into::<IqError>::into(e))?;                              Ok(None)                          }                      } @@ -743,7 +776,11 @@ pub async fn recv_iq<Fs: FileStore + Clone>(                              query: None,                              errors: vec![StanzaError::ServiceUnavailable.into()],                          }; -                        connection.write_handle().write(Stanza::Iq(iq)).await?; +                        connection +                            .write_handle() +                            .write(Stanza::Iq(iq)) +                            .await +                            .map_err(|e| Into::<IqError>::into(e))?;                          warn!("replied to unsupported iq set from {}", from);                          Ok(None)                      } @@ -759,7 +796,11 @@ pub async fn recv_iq<Fs: FileStore + Clone>(                      query: None,                      errors: vec![StanzaError::NotAcceptable.into()],                  }; -                connection.write_handle().write(Stanza::Iq(iq)).await?; +                connection +                    .write_handle() +                    .write(Stanza::Iq(iq)) +                    .await +                    .map_err(|e| Into::<IqError>::into(e))?;                  Ok(None)              }          } | 
