Skip to content

Commit 9921114

Browse files
authored
Merge pull request #31 from danielpaulus/fixFrameExtractor
Fix zlp bug
2 parents 41563d5 + 4af99a5 commit 9921114

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

screencapture/activator.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ func enableQTConfigSingleDevice(device IosDevice) error {
3232
if err != nil {
3333
return err
3434
}
35-
duration, _ := time.ParseDuration("500ms")
35+
3636
var i int
3737
for {
3838
log.Infof("Checking for active QT config for %s", udid)
39-
time.Sleep(duration)
39+
time.Sleep(500 * time.Millisecond)
4040
err = ctx.Close()
4141
if err != nil {
4242
log.Warn("failed closing context", err)
@@ -64,8 +64,7 @@ func sendQTConfigControlRequest(device IosDevice) error {
6464
val, err := device.usbDevice.Control(0x40, 0x52, 0x00, 0x02, response)
6565

6666
if err != nil {
67-
log.Fatal("Failed sending control transfer for enabling hidden QT config", err)
68-
return err
67+
log.Warn("Failed sending control transfer for enabling hidden QT config. Seems like this happens sometimes but it still works usually.", err)
6968
}
7069
log.Debugf("Enabling QT config RC:%d", val)
7170
return nil

screencapture/frameextractor.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ func (fe *LengthFieldBasedFrameExtractor) ExtractFrame(bytes []byte) ([]byte, bo
3232
return fe.handleNewFrame(bytes)
3333
}
3434
if fe.readyForNextFrame && fe.frameBuffer.Len() != 0 {
35+
if fe.frameBuffer.Len()<4{
36+
log.Fatal("wtf:"+hex.Dump(fe.frameBuffer.Bytes()))
37+
}
3538
fe.nextFrameSize = int(binary.LittleEndian.Uint32(fe.frameBuffer.Next(4))) - 4
3639
fe.readyForNextFrame = false
3740
return fe.ExtractFrame(bytes)
@@ -50,6 +53,11 @@ func (fe *LengthFieldBasedFrameExtractor) ExtractFrame(bytes []byte) ([]byte, bo
5053
}
5154

5255
func (fe *LengthFieldBasedFrameExtractor) handleNewFrame(bytes []byte) ([]byte, bool) {
56+
//ZeroLengthPackages are sometimes sent on USB Connections. It is safe to ignore them.
57+
if len(bytes) == 0 {
58+
log.Debugf("skipping 0")
59+
return nil, false
60+
}
5361
if len(bytes) < 4 {
5462
log.Fatalf("Received less than four bytes, cannot read a valid frameLength field: %s", hex.Dump(bytes))
5563
}
@@ -66,4 +74,4 @@ func (fe *LengthFieldBasedFrameExtractor) handleNewFrame(bytes []byte) ([]byte,
6674
fe.frameBuffer.Write(bytes[4:])
6775
fe.nextFrameSize = frameLength - 4
6876
return nil, false
69-
}
77+
}

screencapture/frameextractor_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ func TestCompletePacket(t *testing.T) {
1818
frame1, frameReturned2 := fe.ExtractFrame(small)
1919
assert.True(t, frameReturned2)
2020
assert.Equal(t, small[4:], frame1)
21+
22+
}
23+
24+
func TestZeroLengthPacket(t *testing.T) {
25+
fe := screencapture.NewLengthFieldBasedFrameExtractor()
26+
_, frameReturned := fe.ExtractFrame(make([]byte, 0))
27+
assert.False(t, frameReturned)
2128
}
2229

2330
func TestIncompletePacket(t *testing.T) {

0 commit comments

Comments
 (0)