Changeset 1d14090 in mainline for uspace/lib/pcap/src/pcap_dumper.c


Ignore:
Timestamp:
2024-12-13T08:44:05Z (15 months ago)
Author:
Nataliia Korop <n.corop08@…>
Children:
64ea525
Parents:
f08447b
git-author:
Nataliia Korop <n.corop08@…> (2024-11-10 09:08:41)
git-committer:
Nataliia Korop <n.corop08@…> (2024-12-13 08:44:05)
Message:

dumper ops can be set by user

File:
1 moved

Legend:

Unmodified
Added
Removed
  • uspace/lib/pcap/src/pcap_dumper.c

    rf08447b r1d14090  
    3535
    3636#include <errno.h>
    37 #include "pcap_iface.h"
     37#include <str.h>
     38#include "pcap_dumper.h"
    3839
    3940static size_t pcap_file_w32(pcap_writer_t *writer, uint32_t data)
     
    4950static size_t pcap_file_wbuffer(pcap_writer_t *writer, const void *data, size_t size)
    5051{
     52        assert(writer->data);
    5153        return fwrite(data, 1, size, (FILE *)writer->data);
    5254}
     
    5557{
    5658        fclose((FILE *)writer->data);
     59        writer->data = NULL;
    5760}
    5861
     
    6568};
    6669
    67 // static size_t pcap_short_file_w32(pcap_writer_t *writer, uint32_t data)
    68 // {
    69 //      return fwrite(&data, 1, 4, (FILE *)writer->data);
    70 // }
     70static size_t pcap_short_file_w32(pcap_writer_t *writer, uint32_t data)
     71{
     72        return fwrite(&data, 1, 4, (FILE *)writer->data);
     73}
    7174
    72 // static size_t pcap_short_file_w16(pcap_writer_t *writer, uint16_t data)
    73 // {
    74 //      return fwrite(&data, 1, 2, (FILE *)writer->data);
    75 // }
     75static size_t pcap_short_file_w16(pcap_writer_t *writer, uint16_t data)
     76{
     77        return fwrite(&data, 1, 2, (FILE *)writer->data);
     78}
    7679
    77 // static size_t pcap_short_file_wbuffer(pcap_writer_t *writer, const void *data, size_t size)
    78 // {
    79 //      return fwrite(data, 1, size<60?size:60, (FILE *)writer->data);
    80 // }
     80static size_t pcap_short_file_wbuffer(pcap_writer_t *writer, const void *data, size_t size)
     81{
     82        return fwrite(data, 1, size<60?size:60, (FILE *)writer->data);
     83}
    8184
    82 // static void pcap_short_file_close(pcap_writer_t *writer)
    83 // {
    84 //      fclose((FILE *)writer->data);
    85 // }
     85static void pcap_short_file_close(pcap_writer_t *writer)
     86{
     87        fclose((FILE *)writer->data);
     88}
    8689
    87 // static pcap_writer_ops_t short_file_ops = {
    88 //      .write_u32 = &pcap_short_file_w32,
    89 //      .write_u16 = &pcap_short_file_w16,
    90 //      .write_buffer = &pcap_short_file_wbuffer,
    91 //      .close = &pcap_short_file_close
     90static pcap_writer_ops_t short_file_ops = {
     91        .write_u32 = &pcap_short_file_w32,
     92        .write_u16 = &pcap_short_file_w16,
     93        .write_buffer = &pcap_short_file_wbuffer,
     94        .close = &pcap_short_file_close
    9295
    93 // };
     96};
    9497
    9598errno_t pcap_dumper_start(struct pcap_dumper *dumper, const char *name)
     
    98101
    99102        /** When try to start when already started, close current and starts new */
    100         if (dumper->to_dump == true) {
     103        if (dumper->to_dump) {
    101104                pcap_dumper_stop(dumper);
    102105        }
     
    111114}
    112115
    113 //udelat globalni
     116errno_t pcap_dumper_set_ops(struct pcap_dumper *dumper, const char *name)
     117{
     118        fibril_mutex_lock(&dumper->mutex);
     119        errno_t rc = EOK;
     120        if (!str_cmp(name, "short_file"))
     121        {
     122                dumper->writer.ops = &short_file_ops;
     123        }
     124        else if (!str_cmp(name, "full_file"))
     125        {
     126                dumper->writer.ops = &file_ops;
     127        }
     128        else
     129        {
     130                rc = EINVAL;
     131        }
     132        fibril_mutex_unlock(&dumper->mutex);
     133        return rc;
     134}
     135
     136
    114137void pcap_dumper_add_packet(struct pcap_dumper *dumper, const void *data, size_t size)
    115138{
    116139        fibril_mutex_lock(&dumper->mutex);
    117140
    118         if (dumper->writer.data == NULL || !dumper->to_dump) {
     141        if (!dumper->to_dump) {
    119142                fibril_mutex_unlock(&dumper->mutex);
    120143                return;
    121144        }
     145
    122146        pcap_writer_add_packet(&dumper->writer, data, size);
    123147        fibril_mutex_unlock(&dumper->mutex);
    124148}
    125149
    126 //udelt globalni
    127150void pcap_dumper_stop(struct pcap_dumper *dumper)
    128151{
     
    130153
    131154        /** If want to stop, when already stopped, do nothing */
    132         if (dumper->to_dump == false) {
     155        if (!dumper->to_dump) {
    133156                fibril_mutex_unlock(&dumper->mutex);
    134157                return;
     
    136159        dumper->to_dump = false;
    137160        dumper->writer.ops->close(&dumper->writer);
    138         dumper->writer.data = NULL;
    139161        fibril_mutex_unlock(&dumper->mutex);
    140162}
     
    149171        fibril_mutex_initialize(&dumper->mutex);
    150172        dumper->to_dump = false;
    151         dumper->writer.ops = &file_ops;
     173        dumper->writer.ops = NULL;
    152174        return EOK;
    153175}
Note: See TracChangeset for help on using the changeset viewer.