@@ -2,9 +2,12 @@ package lockdown
2
2
3
3
// #cgo pkg-config: libimobiledevice-1.0
4
4
// #include <stdlib.h>
5
+ // #include <libimobiledevice/libimobiledevice.h>
5
6
// #include <libimobiledevice/lockdown.h>
7
+ // #include <libimobiledevice/service.h>
6
8
import "C"
7
9
import (
10
+ "errors"
8
11
"unsafe"
9
12
10
13
"github.com/nowsecure/goidevice/idevice"
@@ -19,6 +22,7 @@ type Client interface {
19
22
DeviceName () (string , error )
20
23
PList (domain string ) (* plist.PList , error )
21
24
Close () error
25
+ StartService (d idevice.Device , serviceName string ) (* Service , error )
22
26
}
23
27
24
28
type client struct {
@@ -102,3 +106,52 @@ func (s *client) Close() error {
102
106
}
103
107
return err
104
108
}
109
+
110
+ type Service struct {
111
+ s C.service_client_t
112
+ }
113
+
114
+ const (
115
+ CRASH_REPORT_MOVER_SERVICE = "com.apple.crashreportmover"
116
+ )
117
+
118
+ func (s * client ) StartService (d idevice.Device , serviceName string ) (* Service , error ) {
119
+ var p C.lockdownd_service_descriptor_t
120
+
121
+ svc := C .CString (serviceName )
122
+ defer C .free (unsafe .Pointer (svc ))
123
+ err := resultToError (C .lockdownd_start_service (s .p , svc , & p ))
124
+ if err != nil {
125
+ return nil , err
126
+ }
127
+
128
+ var c C.service_client_t
129
+ res := C .service_client_new ((C .idevice_t )(idevice .GetPointer (d )), p , & c )
130
+ C .lockdownd_service_descriptor_free (p )
131
+ if res != 0 {
132
+ return nil , errors .New (":(" )
133
+ }
134
+ return & Service {c }, nil
135
+ }
136
+
137
+ func (s * Service ) ReadPing () error {
138
+ var msg [4 ]int8
139
+ var n C.uint32_t
140
+
141
+ var attempts = 0
142
+ for {
143
+ res := C .service_receive_with_timeout (s .s , (* C .char )(& msg [0 ]), 4 , & n , 2000 )
144
+ switch res {
145
+ case 0 :
146
+ return nil
147
+ case - 7 :
148
+ attempts ++
149
+ if attempts == 10 {
150
+ return errors .New ("failed 10 attempts to ping" )
151
+ }
152
+ continue
153
+ default :
154
+ return errors .New (":(((" )
155
+ }
156
+ }
157
+ }
0 commit comments