CGW: fix ucentral result invalid parsers

Change the AP ucentral result parser to expect proper
format of result message.
Add a basic (same as for AP) ucentral result parser
for switch-parser.

Signed-off-by: Oleksandr Mazur <oleksandr.mazur@plvision.eu>
This commit is contained in:
Oleksandr Mazur
2024-12-05 14:39:00 +02:00
parent 8d919e6dcb
commit f1357a0e97
2 changed files with 36 additions and 20 deletions

View File

@@ -894,21 +894,23 @@ pub fn cgw_ucentral_ap_parse_message(
}
}
} else if map.contains_key("result") {
if !map.contains_key("id") {
warn!("Received JRPC <result> without id!");
return Err(Error::UCentralParser("Received JRPC <result> without id"));
if let Value::Object(result) = &map["result"] {
if !result.contains_key("id") {
warn!("Received JRPC <result> without id!");
return Err(Error::UCentralParser("Received JRPC <result> without id"));
}
let id = result["id"]
.as_u64()
.ok_or_else(|| Error::UCentralParser("Failed to parse id"))?;
let reply_event = CGWUCentralEvent {
serial: Default::default(),
evt_type: CGWUCentralEventType::Reply(CGWUCentralEventReply { id }),
decompressed: None,
};
return Ok(reply_event);
}
let id = map["id"]
.as_u64()
.ok_or_else(|| Error::UCentralParser("Failed to parse id"))?;
let reply_event = CGWUCentralEvent {
serial: Default::default(),
evt_type: CGWUCentralEventType::Reply(CGWUCentralEventReply { id }),
decompressed: None,
};
return Ok(reply_event);
}
Err(Error::UCentralParser("Failed to parse event/method"))

View File

@@ -8,7 +8,7 @@ use crate::cgw_ucentral_parser::{
CGWUCentralEvent, CGWUCentralEventLog, CGWUCentralEventState, CGWUCentralEventStateClients,
CGWUCentralEventStateClientsData, CGWUCentralEventStateClientsType,
CGWUCentralEventStateLLDPData, CGWUCentralEventStateLinks, CGWUCentralEventStatePort,
CGWUCentralEventType, CGWUCentralJRPCMessage,
CGWUCentralEventType, CGWUCentralJRPCMessage, CGWUCentralEventReply
};
fn parse_lldp_data(
@@ -253,11 +253,25 @@ pub fn cgw_ucentral_switch_parse_message(
}
}
} else if map.contains_key("result") {
info!("Processing <result> JSONRPC msg");
info!("{:?}", map);
return Err(Error::UCentralParser(
"Result handling is not yet implemented",
));
// For now, let's mimic AP's basic reply / result
// format.
if let Value::Object(result) = &map["result"] {
if !result.contains_key("id") {
warn!("Received JRPC <result> without id!");
return Err(Error::UCentralParser("Received JRPC <result> without id"));
}
let id = result["id"]
.as_u64()
.ok_or_else(|| Error::UCentralParser("Failed to parse id"))?;
let reply_event = CGWUCentralEvent {
serial: Default::default(),
evt_type: CGWUCentralEventType::Reply(CGWUCentralEventReply { id }),
decompressed: None,
};
return Ok(reply_event);
}
}
Err(Error::UCentralParser("Failed to parse event/method"))