From 1302cdb27c61d9bb369b792287144a50665f9073 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Tue, 25 Sep 2018 20:02:00 -0700 Subject: [PATCH] Sort cases in pcap_write_phdr() - and add missing NFC LLCP case. Put the cases in pcap_write_phdr() into the same order as the cases in pcap_process_pseudo_header(). Doing so revealed that there wasn't a case for WTAP_ENCAP_NFC_LLCP in pcap_write_phdr(), so NFC LLCP captures wouldn't be saved correctly. Add pcap_write_llcp_pseudoheader() and use it. Change-Id: I2728a96e63d2e0606ae0bb480f97fe124ab48d17 Reviewed-on: https://code.wireshark.org/review/29841 Reviewed-by: Guy Harris --- wiretap/pcap-common.c | 50 ++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/wiretap/pcap-common.c b/wiretap/pcap-common.c index 8ef5481625..ac1e9be7eb 100644 --- a/wiretap/pcap-common.c +++ b/wiretap/pcap-common.c @@ -1737,6 +1737,21 @@ pcap_read_llcp_pseudoheader(FILE_T fh, return LLCP_HEADER_LEN; } +static gboolean +pcap_write_llcp_pseudoheader(wtap_dumper *wdh, + const union wtap_pseudo_header *pseudo_header, int *err) +{ + guint8 phdr[LLCP_HEADER_LEN]; + + /* Any non-zero value means "sent" */ + phdr[LLCP_ADAPTER_OFFSET] = pseudo_header->llcp.adapter; + phdr[LLCP_FLAGS_OFFSET] = pseudo_header->llcp.flags; + if (!wtap_dump_file_write(wdh, &phdr, sizeof phdr, err)) + return FALSE; + wdh->bytes_dumped += sizeof phdr; + return TRUE; +} + /* * Pseudo-header at the beginning of DLT_PPP_WITH_DIR frames. */ @@ -2345,6 +2360,26 @@ pcap_write_phdr(wtap_dumper *wdh, int encap, const union wtap_pseudo_header *pse return FALSE; break; + case WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR: + if (!pcap_write_bt_pseudoheader(wdh, pseudo_header, err)) + return FALSE; + break; + + case WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR: + if (!pcap_write_bt_monitor_pseudoheader(wdh, pseudo_header, err)) + return FALSE; + break; + + case WTAP_ENCAP_NFC_LLCP: + if (!pcap_write_llcp_pseudoheader(wdh, pseudo_header, err)) + return FALSE; + break; + + case WTAP_ENCAP_PPP_WITH_PHDR: + if (!pcap_write_ppp_pseudoheader(wdh, pseudo_header, err)) + return FALSE; + break; + case WTAP_ENCAP_ERF: /* * Write the ERF header. @@ -2432,21 +2467,6 @@ pcap_write_phdr(wtap_dumper *wdh, int encap, const union wtap_pseudo_header *pse if (!pcap_write_i2c_pseudoheader(wdh, pseudo_header, err)) return FALSE; break; - - case WTAP_ENCAP_BLUETOOTH_H4_WITH_PHDR: - if (!pcap_write_bt_pseudoheader(wdh, pseudo_header, err)) - return FALSE; - break; - - case WTAP_ENCAP_BLUETOOTH_LINUX_MONITOR: - if (!pcap_write_bt_monitor_pseudoheader(wdh, pseudo_header, err)) - return FALSE; - break; - - case WTAP_ENCAP_PPP_WITH_PHDR: - if (!pcap_write_ppp_pseudoheader(wdh, pseudo_header, err)) - return FALSE; - break; } return TRUE; }