VirtualBox

Changeset 53072 in vbox for trunk/src


Ignore:
Timestamp:
Oct 15, 2014 7:30:08 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
96577
Message:

VUSBSniffer: More fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/USB/VUSBSniffer.cpp

    r53071 r53072  
    2727#include <iprt/system.h>
    2828#include <iprt/semaphore.h>
     29#include <iprt/time.h>
    2930
    3031#include "VUSBSniffer.h"
     
    320321
    321322/**
    322  * Commits the current block to the capture file.
     323 * Aligns the current block data to a 32bit boundary.
    323324 *
    324325 * @returns VBox status code.
    325326 * @param   pThis           The VUSB sniffer instance.
    326327 */
    327 static int vusbSnifferBlockCommit(PVUSBSNIFFERINT pThis)
     328static int vusbSnifferBlockAlign(PVUSBSNIFFERINT pThis)
    328329{
    329330    int rc = VINF_SUCCESS;
    330331
    331     AssertPtr(pThis->pBlockHdr);
     332    Assert(pThis->cbBlockCur);
    332333
    333334    /* Pad to 32bits. */
     
    339340        rc = vusbSnifferBlockAddData(pThis, abPad, cbPad);
    340341
     342    return rc;
     343}
     344
     345/**
     346 * Commits the current block to the capture file.
     347 *
     348 * @returns VBox status code.
     349 * @param   pThis           The VUSB sniffer instance.
     350 */
     351static int vusbSnifferBlockCommit(PVUSBSNIFFERINT pThis)
     352{
     353    int rc = VINF_SUCCESS;
     354
     355    AssertPtr(pThis->pBlockHdr);
     356
     357    rc = vusbSnifferBlockAlign(pThis);
    341358    if (RT_SUCCESS(rc))
    342359    {
     
    407424        rc = vusbSnifferBlockAddData(pThis, pvOption, cbOption);
    408425        if (RT_SUCCESS(rc))
    409         {
    410             /* Pad to 32bits. */
    411             uint8_t abPad[3] = { 0 };
    412             uint32_t cbPad = RT_ALIGN_32(cbOption, 4) - cbOption;
    413 
    414             Assert(cbPad <= 3);
    415             if (cbPad)
    416                 rc = vusbSnifferBlockAddData(pThis, abPad, cbPad);
    417         }
     426            rc = vusbSnifferBlockAlign(pThis);
    418427    }
    419428
     
    535544            }
    536545            RTSemFastMutexDestroy(pThis->hMtx);
     546            pThis->hMtx = NIL_RTSEMFASTMUTEX;
    537547        }
    538548        VUSBSnifferDestroy(pThis);
     
    582592    DumpFileUsbHeaderLnxMmapped UsbHdr;
    583593    DumpFileUsbSetup UsbSetup;
    584     uint64_t u64TimestampEvent = RTTimeNanoTS();
     594    RTTIMESPEC TimeNow;
     595    uint64_t u64TimestampEvent;
     596
     597    RTTimeNow(&TimeNow);
     598    u64TimestampEvent = RTTimeSpecGetNano(&TimeNow);
    585599
    586600    /* Start with the enhanced packet block. */
     
    628642    bool fRecordData = false;
    629643    size_t cbUrbLength = 0;
     644    uint32_t cbCapturedLength = sizeof(UsbHdr);
    630645
    631646    if (   pUrb->cbData
    632         && (    (   pUrb->enmDir == VUSBDIRECTION_OUT
     647        && (    (   (   pUrb->enmDir == VUSBDIRECTION_OUT
     648                     || pUrb->enmDir == VUSBDIRECTION_SETUP)
    633649                 && pUrb->enmType != VUSBXFERTYPE_CTRL
    634650                 && pUrb->enmType != VUSBXFERTYPE_MSG
    635651                 && enmEvent == VUSBSNIFFEREVENT_SUBMIT)
    636              || (   pUrb->enmDir == VUSBDIRECTION_IN
     652             || (   (   pUrb->enmDir == VUSBDIRECTION_IN
     653                     || pUrb->enmDir == VUSBDIRECTION_SETUP)
    637654                 && enmEvent == VUSBSNIFFEREVENT_COMPLETE)))
    638655    {
    639         Epb.u32CapturedLen = sizeof(UsbHdr) + pUrb->cbData;
    640         Epb.u32PacketLen   = sizeof(UsbHdr) + pUrb->cbData;
     656        cbCapturedLength += pUrb->cbData;
    641657        fRecordData = true;
    642658    }
    643     else
    644     {
    645         Epb.u32CapturedLen = sizeof(UsbHdr);
    646         Epb.u32PacketLen   = sizeof(UsbHdr);
    647     }
    648659
    649660    if (pUrb->enmType == VUSBXFERTYPE_MSG || pUrb->enmType == VUSBXFERTYPE_CTRL)
    650661    {
    651662        PVUSBSETUP pSetup = (PVUSBSETUP)pUrb->abData;
    652         cbUrbLength = pSetup->wLength;
     663        cbUrbLength = pSetup->wLength + sizeof(DumpFileUsbSetup);
    653664    }
    654665    else
    655666        cbUrbLength = pUrb->cbData;
     667
     668    Epb.u32CapturedLen = cbCapturedLength;
     669    Epb.u32PacketLen   = cbCapturedLength;
    656670
    657671    UsbHdr.u8EndpointNumber = pUrb->EndPt | (pUrb->enmDir == VUSBDIRECTION_IN ? 0x80 : 0x00);
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette