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 <guy@alum.mit.edu>
This commit is contained in:
Guy Harris 2018-09-25 20:02:00 -07:00
parent 3ddc3b0761
commit 1302cdb27c
1 changed files with 35 additions and 15 deletions

View File

@ -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;
}