@@ -207,7 +207,7 @@ internal class IoctlUsbPcapHandler : IoctlBase {
207207            usb_header_mmapped * urb_hdr =  (void * ) cur_buf;
208208
209209            cur_waiting_since =  now;
210-             last_pkt_time_ms =  urb_hdr. ts_sec *  1000  +  urb_hdr. ts_usec /  1000 ;
210+             last_pkt_time_ms =  from_little_endian( urb_hdr. ts_sec)  *  1000  +  from_little_endian( urb_hdr) . ts_usec /  1000 ;
211211            start_time_ms =  last_pkt_time_ms;
212212        }
213213
@@ -216,10 +216,10 @@ internal class IoctlUsbPcapHandler : IoctlBase {
216216
217217            usb_header_mmapped * urb_hdr =  (void * ) cur_buf;
218218
219-             uint64  cur_pkt_time_ms =  urb_hdr. ts_sec *  1000  +  urb_hdr. ts_usec /  1000 ;
219+             uint64  cur_pkt_time_ms =  from_little_endian( urb_hdr. ts_sec)  *  1000  +  from_little_endian( urb_hdr) . ts_usec /  1000 ;
220220
221221            /*  Discard anything from a different bus/device */ 
222-             if  (urb_hdr. bus_id !=  bus ||  urb_hdr. device_address !=  device)
222+             if  (from_little_endian( urb_hdr. bus_id)  !=  bus ||  urb_hdr. device_address !=  device)
223223                continue ;
224224
225225            /*  Print out debug info, if we need 5s longer than the recording
@@ -230,7 +230,7 @@ internal class IoctlUsbPcapHandler : IoctlBase {
230230                        (ulong ) (now -  cur_waiting_since) /  1000 ,
231231                        (ulong ) (cur_pkt_time_ms -  last_pkt_time_ms));
232232                message(" Trying to reap at recording position %c  %s  packet, for endpoint 0x%02x  with length %u , replay may be stuck (time: %.3f )" 
233-                         urb_hdr. event_type, urb_type_to_string(urb_hdr. transfer_type), urb_hdr. endpoint_number, urb_hdr. urb_len, (cur_pkt_time_ms -  start_time_ms) /  1000.0 );
233+                         urb_hdr. event_type, urb_type_to_string(urb_hdr. transfer_type), urb_hdr. endpoint_number, from_little_endian( urb_hdr. urb_len) , (cur_pkt_time_ms -  start_time_ms) /  1000.0 );
234234                message(" The device has currently %u  in-flight URBs:" . length);
235235
236236                for  (var  i =  0 ; i <  urbs. length; i++ ) {
@@ -277,7 +277,7 @@ internal class IoctlUsbPcapHandler : IoctlBase {
277277                     */  
278278                    if  ((urb. type !=  urb_hdr. transfer_type) || 
279279                        ((urb. type !=  URB_CONTROL ) &&  (urb. endpoint !=  urb_hdr. endpoint_number)) || 
280-                         (urb_buffer_length !=  urb_hdr. urb_len)) {
280+                         (urb_buffer_length !=  from_little_endian( urb_hdr. urb_len) )) {
281281
282282                        if  (debug)
283283                            stderr. printf(" UMockdev: Queued URB %d  has a metadata mismatch!\n " 
@@ -290,10 +290,10 @@ internal class IoctlUsbPcapHandler : IoctlBase {
290290                            continue ;
291291                    }
292292
293-                     if  (urb_hdr. data_len >  0 ) {
293+                     if  (from_little_endian( urb_hdr. data_len)  >  0 ) {
294294                        /*  Data must have been captured. */ 
295295                        assert(urb_hdr. data_flag ==  0 );
296-                         assert(urb_hdr. data_len ==  urb_buffer_length);
296+                         assert(from_little_endian( urb_hdr. data_len)  ==  urb_buffer_length);
297297
298298                        /*  Compare the full buffer (as we are outgoing) */ 
299299                        if  (Posix . memcmp(urb_buffer, &cur_buf[sizeof(usb_header_mmapped)], urb_buffer_length) !=  0 ) {
@@ -317,10 +317,10 @@ internal class IoctlUsbPcapHandler : IoctlBase {
317317                    }
318318
319319                    /*  Everything matches, mark as submitted */ 
320-                     urb_data. pcap_id =  urb_hdr. id;
320+                     urb_data. pcap_id =  from_little_endian( urb_hdr. id) ;
321321
322322                    /*  Packet was handled. */ 
323-                     last_pkt_time_ms =  urb_hdr. ts_sec *  1000  +  urb_hdr. ts_usec /  1000 ;
323+                     last_pkt_time_ms =  from_little_endian( urb_hdr. ts_sec)  *  1000  +  from_little_endian( urb_hdr) . ts_usec /  1000 ;
324324                    break ;
325325                }
326326
@@ -337,7 +337,7 @@ internal class IoctlUsbPcapHandler : IoctlBase {
337337                for  (int  i =  0 ; i <  urbs. length; i++ ) {
338338                    urb_info =  urbs. index(i);
339339
340-                     if  (urb_info. pcap_id ==  urb_hdr. id) {
340+                     if  (urb_info. pcap_id ==  from_little_endian( urb_hdr. id) ) {
341341                        urb =  (Ioctl . usbdevfs_urb* ) urb_info. urb_data. data;
342342                        urbs. remove_index(i);
343343                        break ;
@@ -355,7 +355,7 @@ internal class IoctlUsbPcapHandler : IoctlBase {
355355                /*  We can reap this urb!
356356                 * Copy any data back if present. 
357357                 */  
358-                 if  (urb_hdr. data_len >  0 ) {
358+                 if  (from_little_endian( urb_hdr. data_len)  >  0 ) {
359359                    assert(urb_hdr. data_flag ==  0 );
360360
361361                    uint8 *  urb_buffer =  urb. buffer;
@@ -366,16 +366,16 @@ internal class IoctlUsbPcapHandler : IoctlBase {
366366                    if  (urb. type ==  URB_CONTROL )
367367                        urb_buffer =  &urb. buffer[8 ];
368368
369-                     Posix . memcpy(urb_buffer, &cur_buf[sizeof(usb_header_mmapped)], urb_hdr. data_len);
369+                     Posix . memcpy(urb_buffer, &cur_buf[sizeof(usb_header_mmapped)], from_little_endian( urb_hdr. data_len) );
370370                }
371-                 urb. status =  (int ) urb_hdr. status;
372-                 urb. actual_length =  (int ) urb_hdr. urb_len;
371+                 urb. status =  (int ) from_little_endian( urb_hdr. status) ;
372+                 urb. actual_length =  (int ) from_little_endian( urb_hdr. urb_len) ;
373373
374374                /*  Does this need further handling? */ 
375-                 assert(urb_hdr. start_frame ==  0 );
376-                 urb. start_frame =  (int ) urb_hdr. start_frame;
375+                 assert(from_little_endian( urb_hdr. start_frame)  ==  0 );
376+                 urb. start_frame =  (int ) from_little_endian( urb_hdr. start_frame) ;
377377
378-                 last_pkt_time_ms =  urb_hdr. ts_sec *  1000  +  urb_hdr. ts_usec /  1000 ;
378+                 last_pkt_time_ms =  from_little_endian( urb_hdr. ts_sec)  *  1000  +  from_little_endian( urb_hdr) . ts_usec /  1000 ;
379379
380380                return  urb_info;
381381            }
0 commit comments