示例#1
0
/* classic wtap: seek to file position and read packet */
static gboolean
ipfix_seek_read(wtap *wth, gint64 seek_off,
    union wtap_pseudo_header *pseudo_header, guint8 *pd, int length _U_,
    int *err, gchar **err_info)
{
    ipfix_message_header_t msg_hdr;

    (void) pseudo_header; /* avoids compiler warning about unused variable */

    /* seek to the right file position */
    if (file_seek(wth->random_fh, seek_off, SEEK_SET, err) == -1) {
        ipfix_debug2("ipfix_seek_read: couldn't read message header with code: %d\n, and error '%s'",
                     *err, *err_info);
        return FALSE;   /* Seek error */
    }

    ipfix_debug1("ipfix_seek_read: reading at offset %" G_GINT64_MODIFIER "u", seek_off);

    if (!ipfix_read_message_header(&msg_hdr, wth->random_fh, err, err_info)) {
        ipfix_debug0("ipfix_read: couldn't read message header");
        return FALSE;
    }

    if(length != (int)msg_hdr.message_length) {
        *err = WTAP_ERR_BAD_FILE;
        *err_info = g_strdup_printf("ipfix: record length %u doesn't match requested length %d",
                                    msg_hdr.message_length, length);
        ipfix_debug1("ipfix_seek_read: %s", *err_info);
        return FALSE;
    }

    wtap_file_read_expected_bytes(pd, length, wth->random_fh, err, err_info);

    return TRUE;
}
示例#2
0
/* classic wtap: read packet */
static gboolean
ipfix_read(wtap *wth, int *err, gchar **err_info, gint64 *data_offset)
{
    ipfix_message_header_t msg_hdr;

    *data_offset = file_tell(wth->fh);
    ipfix_debug1("ipfix_read: data_offset is initially %" G_GINT64_MODIFIER "d", *data_offset);

    if (!ipfix_read_message_header(&msg_hdr, wth->fh, err, err_info)) {
        ipfix_debug2("ipfix_read: couldn't read message header with code: %d\n, and error '%s'",
                     *err, *err_info);
        return FALSE;
    }

    buffer_assure_space(wth->frame_buffer, msg_hdr.message_length);
    wtap_file_read_expected_bytes(buffer_start_ptr(wth->frame_buffer),
                   msg_hdr.message_length, wth->fh, err, err_info);

    wth->phdr.presence_flags = 0;
    wth->phdr.len = msg_hdr.message_length;
    wth->phdr.caplen = msg_hdr.message_length;
    wth->phdr.ts.secs =  0;
    wth->phdr.ts.nsecs = 0;

    /*ipfix_debug2("Read length: %u Packet length: %u", msg_hdr.message_length, wth->phdr.caplen);*/
    ipfix_debug1("ipfix_read: data_offset is finally %" G_GINT64_MODIFIER "d", file_tell(wth->fh));

    return TRUE;
}
示例#3
0
/* classic wtap: read packet */
static gboolean
ipfix_read(wtap *wth, int *err, gchar **err_info, gint64 *data_offset)
{
    *data_offset = file_tell(wth->fh);
    ipfix_debug1("ipfix_read: data_offset is initially %" G_GINT64_MODIFIER "d", *data_offset);

    if (!ipfix_read_message(wth->fh, &wth->phdr, wth->frame_buffer, err, err_info)) {
        ipfix_debug2("ipfix_read: couldn't read message header with code: %d\n, and error '%s'",
                     *err, *err_info);
        return FALSE;
    }

    return TRUE;
}
示例#4
0
/* classic wtap: seek to file position and read packet */
static gboolean
ipfix_seek_read(wtap *wth, gint64 seek_off, struct wtap_pkthdr *phdr,
    Buffer *buf, int *err, gchar **err_info)
{
    /* seek to the right file position */
    if (file_seek(wth->random_fh, seek_off, SEEK_SET, err) == -1) {
        ipfix_debug2("ipfix_seek_read: couldn't read message header with code: %d\n, and error '%s'",
                     *err, *err_info);
        return FALSE;   /* Seek error */
    }

    ipfix_debug1("ipfix_seek_read: reading at offset %" G_GINT64_MODIFIER "u", seek_off);

    if (!ipfix_read_message(wth->random_fh, phdr, buf, err, err_info)) {
        ipfix_debug0("ipfix_seek_read: couldn't read message header");
        if (*err == 0)
            *err = WTAP_ERR_SHORT_READ;
        return FALSE;
    }
    return TRUE;
}