diff options
-rw-r--r-- | sharkd_session.c | 11 | ||||
-rw-r--r-- | test/captures/sip-rtp.pcapng | bin | 0 -> 144300 bytes | |||
-rw-r--r-- | test/suite_sharkd.py | 70 |
3 files changed, 78 insertions, 3 deletions
diff --git a/sharkd_session.c b/sharkd_session.c index 7faef005f6..3fe071de43 100644 --- a/sharkd_session.c +++ b/sharkd_session.c @@ -2032,7 +2032,7 @@ sharkd_session_process_tap_rtp_analyse_cb(void *tapdata) sharkd_json_value_string("tap", rtp_req->tap_name); sharkd_json_value_string("type", "rtp-analyse"); - sharkd_json_value_anyf("ssrc", "%u", rtp_req->id.ssrc); + sharkd_json_value_stringf("ssrc", "0x%x", rtp_req->id.ssrc); sharkd_json_value_anyf("max_delta", "%f", statinfo->max_delta); sharkd_json_value_anyf("max_delta_nr", "%u", statinfo->max_nr); @@ -2739,7 +2739,7 @@ sharkd_session_process_tap_rtp_cb(void *arg) json_dumper_begin_object(&dumper); - sharkd_json_value_anyf("ssrc", "%u", calc.ssrc); + sharkd_json_value_stringf("ssrc", "0x%x", calc.ssrc); sharkd_json_value_string("payload", calc.all_payload_type_names); sharkd_json_value_string("saddr", calc.src_addr_str); @@ -4968,6 +4968,13 @@ sharkd_session_process_download(char *buf, const jsmntok_t *tokens, int count) g_slist_free_full(rtp_req.packets, sharkd_rtp_download_free_items); } + else + { + sharkd_json_error( + rpcid, -10003, NULL, + "no rtp data available" + ); + } } } diff --git a/test/captures/sip-rtp.pcapng b/test/captures/sip-rtp.pcapng Binary files differnew file mode 100644 index 0000000000..5ea96eef1b --- /dev/null +++ b/test/captures/sip-rtp.pcapng diff --git a/test/suite_sharkd.py b/test/suite_sharkd.py index 93b263dd50..8c21e9a57e 100644 --- a/test/suite_sharkd.py +++ b/test/suite_sharkd.py @@ -261,6 +261,55 @@ class case_sharkd(subprocesstest.SubprocessTestCase): }}, )) + def test_sharkd_req_tap_rtp_streams(self, check_sharkd_session, capture_file): + check_sharkd_session(( + {"jsonrpc":"2.0", "id":1, "method":"load", + "params":{"file": capture_file('sip-rtp.pcapng')} + }, + {"jsonrpc":"2.0", "id":2, "method":"tap", "params":{"tap0": "rtp-streams"}}, + {"jsonrpc":"2.0", "id":2, "method":"tap", "params":{"tap0": "rtp-analyse:200.57.7.204_8000_200.57.7.196_40376_0xd2bd4e3e"}}, + ), ( + {"jsonrpc":"2.0","id":1,"result":{"status":"OK"}}, + {"jsonrpc":"2.0","id":2,"result":{ + "taps":[{ + "tap":"rtp-streams", + "type":"rtp-streams", + "streams":[{ + "ssrc":"0xd2bd4e3e", + "payload":"g711A", + "saddr":"200.57.7.204", + "sport":8000, + "daddr":"200.57.7.196", + "dport":40376, + "pkts":548, + "max_delta":5843.742000, + "max_jitter":7.406751, + "mean_jitter":2.517173, + "expectednr":548, + "totalnr":548, + "problem":False, + "ipver":4 + }] + }] + }}, + {"jsonrpc":"2.0","id":2,"result": + {"taps":[{ + "tap":"rtp-analyse:200.57.7.204_8000_200.57.7.196_40376_0xd2bd4e3e", + "type":"rtp-analyse", + "ssrc":"0xd2bd4e3e", + "max_delta":5843.742000, + "max_delta_nr":168, + "max_jitter":7.406751, + "mean_jitter":2.517173, + "max_skew":319.289000, + "total_nr":548, + "seq_err":0, + "duration":24124.055000, + "items": MatchAny() + }] + }}, + )) + def test_sharkd_req_follow_bad(self, check_sharkd_session, capture_file): # Unrecognized taps currently produce no output (not even err). check_sharkd_session(( @@ -486,7 +535,7 @@ class case_sharkd(subprocesstest.SubprocessTestCase): )) def test_sharkd_req_download_tls_secrets(self, check_sharkd_session, capture_file): - # XXX test download for eo: and rtp: too + # XXX test download for eo: too check_sharkd_session(( {"jsonrpc":"2.0", "id":1, "method":"load", "params":{"file": capture_file('tls12-dsb.pcapng')} @@ -502,6 +551,25 @@ class case_sharkd(subprocesstest.SubprocessTestCase): }, )) + def test_sharkd_req_download_rtp_stream(self, check_sharkd_session, capture_file): + check_sharkd_session(( + {"jsonrpc":"2.0", "id":1, "method":"load", + "params":{"file": capture_file('sip-rtp.pcapng')} + }, + {"jsonrpc":"2.0", "id":2, "method":"download", + "params":{"token": "rtp:200.57.7.204_8000_200.57.7.196_40376_0xd2bd4e3e"}}, + {"jsonrpc":"2.0", "id":3, "method":"download", + "params":{"token": "rtp:1.1.1.1_8000_1.1.1.2_9000_0xdddddddd"}}, + ), ( + {"jsonrpc":"2.0","id":1,"result":{"status":"OK"}}, + {"jsonrpc":"2.0","id":2,"result":{ + "file":"rtp:200.57.7.204_8000_200.57.7.196_40376_0xd2bd4e3e", + "mime":"audio/x-wav", + "data":MatchRegExp(r'UklGRv.+')} + }, + {"jsonrpc":"2.0","id":3,"error":{"code":-10003,"message":"no rtp data available"}}, + )) + def test_sharkd_req_bye(self, check_sharkd_session): check_sharkd_session(( {"jsonrpc":"2.0", "id":1, "method":"bye"}, |