FreeCalypso > hg > rtp-debug-utils
comparison pcap-study/rtp-gsmfr-dump.c @ 15:96b37cef5020
rtp-gsmfr-dump: convert from old libgsm to libgsmfr2
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 19 Sep 2024 01:59:14 +0000 |
parents | e686bc92c7d8 |
children |
comparison
equal
deleted
inserted
replaced
14:e7f43262efa1 | 15:96b37cef5020 |
---|---|
14 #include <sys/types.h> | 14 #include <sys/types.h> |
15 #include <sys/socket.h> | 15 #include <sys/socket.h> |
16 #include <netinet/in.h> | 16 #include <netinet/in.h> |
17 #include <arpa/inet.h> | 17 #include <arpa/inet.h> |
18 #include <stdio.h> | 18 #include <stdio.h> |
19 #include <stdint.h> | |
19 #include <stdlib.h> | 20 #include <stdlib.h> |
20 #include <string.h> | 21 #include <string.h> |
21 #include <strings.h> | 22 #include <strings.h> |
22 #include <pcap/pcap.h> | 23 #include <pcap/pcap.h> |
23 #include <gsm.h> | 24 #include <tw_gsmfr.h> |
24 #include <gsm_efr.h> | 25 #include <gsm_efr.h> |
25 | 26 |
26 static pcap_t *pcap; | 27 static pcap_t *pcap; |
27 static in_addr_t match_ip_addr; | 28 static in_addr_t match_ip_addr; |
28 static u_short match_udp_port; | 29 static u_short match_udp_port; |
29 static unsigned iphdr_addr_offset, udphdr_port_offset; | 30 static unsigned iphdr_addr_offset, udphdr_port_offset; |
30 static unsigned link_hdr_len, ethertype_offset; | 31 static unsigned link_hdr_len, ethertype_offset; |
31 static int stream_init_flag; | 32 static int stream_init_flag; |
32 static unsigned last_seq, last_tstamp, stream_ssrc; | 33 static unsigned last_seq, last_tstamp, stream_ssrc; |
33 static gsm dummy_state; | |
34 | 34 |
35 static void | 35 static void |
36 check_dl_type() | 36 check_dl_type() |
37 { | 37 { |
38 int dltype; | 38 int dltype; |
94 static void | 94 static void |
95 process_payload(payload, payload_len) | 95 process_payload(payload, payload_len) |
96 u_char *payload; | 96 u_char *payload; |
97 unsigned payload_len; | 97 unsigned payload_len; |
98 { | 98 { |
99 gsm_signal params[76]; | 99 int16_t params[76]; |
100 int i, j, n; | 100 int i, j, n; |
101 | 101 |
102 printf("seq 0x%04X ts 0x%08X: ", last_seq, last_tstamp); | 102 printf("seq 0x%04X ts 0x%08X: ", last_seq, last_tstamp); |
103 switch (payload_len) { | 103 switch (payload_len) { |
104 case 0: | 104 case 0: |
142 goto print_efr; | 142 goto print_efr; |
143 case 33: | 143 case 33: |
144 if ((payload[0] & 0xF0) != 0xD0) | 144 if ((payload[0] & 0xF0) != 0xD0) |
145 break; | 145 break; |
146 fputs("std FR", stdout); | 146 fputs("std FR", stdout); |
147 gsm_explode(dummy_state, payload, params); | 147 gsmfr_unpack_to_array(payload, params); |
148 print_fr: | 148 print_fr: |
149 n = 0; | 149 n = 0; |
150 for (i = 0; i < 8; i++) | 150 for (i = 0; i < 8; i++) |
151 printf(" %d", params[n++]); | 151 printf(" %d", params[n++]); |
152 putchar('\n'); | 152 putchar('\n'); |
161 if ((payload[0] & 0xF4) != 0xE0) | 161 if ((payload[0] & 0xF4) != 0xE0) |
162 break; | 162 break; |
163 if ((payload[1] & 0xF0) != 0xD0) | 163 if ((payload[1] & 0xF0) != 0xD0) |
164 break; | 164 break; |
165 printf("TEH 0x%02X FR", payload[0]); | 165 printf("TEH 0x%02X FR", payload[0]); |
166 gsm_explode(dummy_state, payload+1, params); | 166 gsmfr_unpack_to_array(payload+1, params); |
167 goto print_fr; | 167 goto print_fr; |
168 } | 168 } |
169 printf("unknown payload format, length=%u\n", payload_len); | 169 printf("unknown payload format, length=%u\n", payload_len); |
170 } | 170 } |
171 | 171 |
255 if (match_ip_addr == INADDR_NONE) { | 255 if (match_ip_addr == INADDR_NONE) { |
256 fprintf(stderr, "error: IP address argument is invalid\n"); | 256 fprintf(stderr, "error: IP address argument is invalid\n"); |
257 exit(1); | 257 exit(1); |
258 } | 258 } |
259 match_udp_port = htons(strtoul(argv[4], 0, 0)); | 259 match_udp_port = htons(strtoul(argv[4], 0, 0)); |
260 dummy_state = gsm_create(); | |
261 if (!dummy_state) { | |
262 fprintf(stderr, "gsm_create() failed!\n"); | |
263 exit(1); | |
264 } | |
265 for (pkt_idx = 0; ; pkt_idx++) { | 260 for (pkt_idx = 0; ; pkt_idx++) { |
266 pkt = pcap_next(pcap, &pkthdr); | 261 pkt = pcap_next(pcap, &pkthdr); |
267 if (!pkt) | 262 if (!pkt) |
268 break; | 263 break; |
269 process_packet(pkt, (unsigned) pkthdr.caplen, pkt_idx); | 264 process_packet(pkt, (unsigned) pkthdr.caplen, pkt_idx); |