@@ -245,35 +245,18 @@ constexpr bool RTSPPlugin::parseResponse(std::string_view payload, RTSPData& plu
245245}
246246
247247constexpr PluginUpdateResult
248- RTSPPlugin::updateExportData (std::span< const std::byte> payload, RTSPData& pluginData) noexcept
248+ RTSPPlugin::updateExportData (std::string_view payload, RTSPData& pluginData) noexcept
249249{
250- std::string_view payloadView = {reinterpret_cast <const char *>(payload.data ()), payload.size ()};
251- if (isRequest (payloadView)) {
252- if (pluginData.processingState .requestParsed ) {
253- // TODO Flush and reinsert
254- return {
255- .updateRequirement = UpdateRequirement::NoUpdateNeeded,
256- .flowAction = FlowAction::NoAction};
257- }
258- if (!parseRequest (payloadView, pluginData)) {
259- return {
260- .updateRequirement = UpdateRequirement::NoUpdateNeeded,
261- .flowAction = FlowAction::NoAction};
262- }
250+ if (isRequest (payload) && !parseRequest (payload, pluginData)) {
251+ return {
252+ .updateRequirement = UpdateRequirement::NoUpdateNeeded,
253+ .flowAction = FlowAction::NoAction};
263254 }
264255
265- if (isResponse (payloadView)) {
266- if (pluginData.processingState .responseParsed ) {
267- // TODO Flush and reinsert
268- return {
269- .updateRequirement = UpdateRequirement::NoUpdateNeeded,
270- .flowAction = FlowAction::NoAction};
271- }
272- if (!parseResponse (payloadView, pluginData)) {
273- return {
274- .updateRequirement = UpdateRequirement::NoUpdateNeeded,
275- .flowAction = FlowAction::NoAction};
276- }
256+ if (isResponse (payload) && !parseResponse (payload, pluginData)) {
257+ return {
258+ .updateRequirement = UpdateRequirement::NoUpdateNeeded,
259+ .flowAction = FlowAction::NoAction};
277260 }
278261
279262 return {
@@ -283,10 +266,19 @@ RTSPPlugin::updateExportData(std::span<const std::byte> payload, RTSPData& plugi
283266
284267PluginInitResult RTSPPlugin::onInit (const FlowContext& flowContext, void * pluginContext)
285268{
269+ std::string_view payloadView
270+ = {reinterpret_cast <const char *>(flowContext.packet .payload ),
271+ flowContext.packet .payload_len };
272+ if (!isRequest (payloadView) && !isResponse (payloadView)) {
273+ return {
274+ .constructionState = ConstructionState::NotConstructed,
275+ .updateRequirement = UpdateRequirement::NoUpdateNeeded,
276+ .flowAction = FlowAction::NoAction,
277+ };
278+ }
279+
286280 auto * pluginData = std::construct_at (reinterpret_cast <RTSPData*>(pluginContext));
287- auto [updateRequirement, flowAction] = updateExportData (
288- toSpan<const std::byte>(flowContext.packet .payload , flowContext.packet .payload_len ),
289- *pluginData);
281+ auto [updateRequirement, flowAction] = updateExportData (payloadView, *pluginData);
290282
291283 return {
292284 .constructionState = ConstructionState::Constructed,
@@ -295,11 +287,36 @@ PluginInitResult RTSPPlugin::onInit(const FlowContext& flowContext, void* plugin
295287 };
296288}
297289
290+ PluginUpdateResult RTSPPlugin::beforeUpdate (const FlowContext& flowContext, void * pluginContext)
291+ {
292+ auto pluginData = *reinterpret_cast <RTSPData*>(pluginContext);
293+ std::string_view payload
294+ = {reinterpret_cast <const char *>(flowContext.packet .payload ),
295+ flowContext.packet .payload_len };
296+
297+ if (isRequest (payload) && pluginData.processingState .requestParsed ) {
298+ return {
299+ .updateRequirement = UpdateRequirement::RequiresUpdate,
300+ .flowAction = FlowAction::Flush};
301+ }
302+
303+ if (isResponse (payload) && pluginData.processingState .responseParsed ) {
304+ return {
305+ .updateRequirement = UpdateRequirement::RequiresUpdate,
306+ .flowAction = FlowAction::Flush};
307+ }
308+
309+ return {
310+ .updateRequirement = UpdateRequirement::RequiresUpdate,
311+ .flowAction = FlowAction::NoAction,
312+ };
313+ }
314+
298315PluginUpdateResult RTSPPlugin::onUpdate (const FlowContext& flowContext, void * pluginContext)
299316{
300317 auto * pluginData = reinterpret_cast <RTSPData*>(pluginContext);
301318 return updateExportData (
302- toSpan< const std::byte> (flowContext.packet .payload , flowContext.packet .payload_len ),
319+ toStringView (flowContext.packet .payload , flowContext.packet .payload_len ),
303320 *pluginData);
304321}
305322
0 commit comments