Merge branch 'parse-incoming-pdu' into 'main'

Draft: refactor parse incoming PDU

See merge request matrix/grapevine!179
This commit is contained in:
mikoto 2025-09-08 09:34:28 +00:00
commit ea9edda5ee

View file

@ -717,7 +717,10 @@ pub(crate) fn parse_incoming_pdu(
let room_version_id = services()
.rooms
.state
.get_create_content::<ExtractVersion>(&room_id)?;
.get_create_content::<ExtractVersion>(&room_id)
.inspect_err(|_| {
debug!(%room_id, "This server is not in the room");
})?;
let Ok((event_id, value)) =
gen_event_id_canonical_json(pdu, &room_version_id)
@ -746,31 +749,7 @@ pub(crate) async fn send_transaction_message_route(
let pub_key_map = RwLock::new(BTreeMap::new());
for pdu in &body.pdus {
let value: CanonicalJsonObject = serde_json::from_str(pdu.get())
.map_err(|error| {
warn!(%error, object = ?pdu, "Error parsing incoming event");
Error::BadServerResponse("Invalid PDU in server response")
})?;
let room_id: OwnedRoomId = value
.get("room_id")
.and_then(|id| RoomId::parse(id.as_str()?).ok())
.ok_or(Error::BadRequest(
ErrorKind::InvalidParam,
"Invalid room id in pdu",
))?;
if services()
.rooms
.state
.get_create_content::<ExtractVersion>(&room_id)
.is_err()
{
debug!(%room_id, "This server is not in the room");
continue;
}
let r = parse_incoming_pdu(pdu);
let (event_id, value, room_id) = match r {
let (event_id, value, room_id) = match parse_incoming_pdu(pdu) {
Ok(t) => t,
Err(error) => {
warn!(%error, object = ?pdu, "Error parsing incoming event");