diff options
author | Vivek Mangala <vivekmangala@gmail.com> | 2021-09-16 20:56:54 +0530 |
---|---|---|
committer | Wireshark GitLab Utility <gerald+gitlab-utility@wireshark.org> | 2021-09-18 07:47:12 +0000 |
commit | f341e045c9faac39c94105ee0fb2302e28d23b8f (patch) | |
tree | 0b62ae3e4b09887fd946e5ba65a23d8ab1f3be27 /epan/dissectors/packet-twamp.c | |
parent | 13c33fa68ac03458739863e8da89a84e70c5b5b8 (diff) |
twamp: fixed decoding of control-message sequence
Added check on Command-Number on control message following
Accept-Session to detect the correct state. There are
various states possible after Accept-Session.
Diffstat (limited to 'epan/dissectors/packet-twamp.c')
-rw-r--r-- | epan/dissectors/packet-twamp.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/epan/dissectors/packet-twamp.c b/epan/dissectors/packet-twamp.c index 8095035f54..9f0041547f 100644 --- a/epan/dissectors/packet-twamp.c +++ b/epan/dissectors/packet-twamp.c @@ -215,6 +215,7 @@ dissect_twamp_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void proto_tree *item; guint32 modes; guint32 type_p; + guint8 command_number; guint8 ipvn; if (pinfo->destport == TWAMP_CONTROL_PORT) { @@ -308,7 +309,19 @@ dissect_twamp_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void } } } else if (ct->last_state == CONTROL_STATE_ACCEPT_SESSION) { - ct->last_state = CONTROL_STATE_START_SESSIONS; + /* We shall check the Command Number to determine current CONTROL_STATE_XXX */ + command_number = tvb_get_guint8(tvb, 0); + switch(command_number){ + case 2: /* Start-Sessions */ + ct->last_state = CONTROL_STATE_START_SESSIONS; + break; + case 3: /* Stop-Sessions */ + ct->last_state = CONTROL_STATE_STOP_SESSIONS; + break; + case 5: /* Request-Session */ + ct->last_state = CONTROL_STATE_REQUEST_SESSION; + break; + } } else if (ct->last_state == CONTROL_STATE_START_SESSIONS) { ct->last_state = CONTROL_STATE_START_SESSIONS_ACK; } else if (ct->last_state == CONTROL_STATE_START_SESSIONS_ACK) { |