|
@ -53,51 +53,63 @@ proc syncMode(): Socket = |
|
|
socket.send("host:transport-usb".makeMsg) |
|
|
socket.send("host:transport-usb".makeMsg) |
|
|
discard socket.recv(1024) |
|
|
discard socket.recv(1024) |
|
|
|
|
|
|
|
|
echo "Trying to set sync mode" |
|
|
|
|
|
socket.send("sync:".makeMsg) |
|
|
socket.send("sync:".makeMsg) |
|
|
discard socket.recv(1024).parseAdb.get |
|
|
discard socket.recv(1024).parseAdb.get |
|
|
|
|
|
|
|
|
socket |
|
|
socket |
|
|
|
|
|
|
|
|
proc recvFile(filename : string) : Option[string] = |
|
|
proc recvFile(filename : string) : Option[string] = |
|
|
# TODO handle more than one chunk :) |
|
|
|
|
|
let socket : Socket = syncMode() |
|
|
let socket : Socket = syncMode() |
|
|
|
|
|
|
|
|
echo fmt"Trying to receive the file {filename}" |
|
|
|
|
|
|
|
|
|
|
|
let filenameLen : string = filename.len.uint32.unrollBytes |
|
|
let filenameLen : string = filename.len.uint32.unrollBytes |
|
|
|
|
|
|
|
|
socket.send("RECV" & filenameLen & filename) |
|
|
socket.send("RECV" & filenameLen & filename) |
|
|
|
|
|
|
|
|
let recvResult = socket.recv(8) # 64 kb + 8 bytes |
|
|
var recvResult : string |
|
|
|
|
|
var status : string = "" |
|
|
|
|
|
|
|
|
echo "received the chunk" |
|
|
var fileBody : string |
|
|
|
|
|
var recvBody : string |
|
|
|
|
|
var fileLen : int |
|
|
|
|
|
|
|
|
let status = recvResult[0..3] |
|
|
var buf = "" |
|
|
|
|
|
|
|
|
|
|
|
while (status != "DONE"): |
|
|
if status == "FAIL": |
|
|
if status == "FAIL": |
|
|
# Return early if we failed |
|
|
# Return early if we failed |
|
|
socket.close() |
|
|
socket.close() |
|
|
return none(string) |
|
|
return none(string) |
|
|
|
|
|
|
|
|
echo "Getting the file length" |
|
|
recvResult = socket.recv(8) # 64 kb + 8 bytes |
|
|
let fileLen = recvResult[4..7].rollBytes.int |
|
|
|
|
|
|
|
|
status = recvResult[0..3] |
|
|
|
|
|
fileLen = recvResult[4..7].rollBytes.int |
|
|
|
|
|
|
|
|
|
|
|
if (fileLen == 0 or status == "DONE"): |
|
|
|
|
|
break |
|
|
|
|
|
|
|
|
|
|
|
recvBody = "" |
|
|
|
|
|
|
|
|
assert(fileLen <= 0xffff, "File Length Should be <=65535!") |
|
|
assert(status == "DATA") |
|
|
|
|
|
assert(fileLen <= 0xffff and fileLen > 0, "File Length Should be <=65535 and > 0") |
|
|
|
|
|
|
|
|
let recvBody = socket.recv(fileLen) # max 64kb length |
|
|
# now we have to recv until we have exactly `fileLen` bytes |
|
|
|
|
|
while (recvBody.len != fileLen): |
|
|
|
|
|
recvBody = recvBody & socket.recv(fileLen - recvBody.len) |
|
|
|
|
|
|
|
|
echo "Getting the file body" |
|
|
assert(recvBody.len == fileLen) |
|
|
let fileBody = recvBody[0..fileLen-1] |
|
|
|
|
|
|
|
|
fileBody = recvBody[0..^1] |
|
|
|
|
|
buf = buf & fileBody |
|
|
|
|
|
|
|
|
|
|
|
assert(status == "DONE") |
|
|
|
|
|
assert(fileLen == 0) |
|
|
|
|
|
|
|
|
socket.close() |
|
|
socket.close() |
|
|
return some(fileBody) |
|
|
return some(buf) |
|
|
|
|
|
|
|
|
proc statFile(filename : string) : FileStat = |
|
|
proc statFile(filename : string) : FileStat = |
|
|
let socket : Socket = syncMode() |
|
|
let socket : Socket = syncMode() |
|
|
|
|
|
|
|
|
echo fmt"Trying to stat the file {filename}" |
|
|
|
|
|
|
|
|
|
|
|
let filenameLen : string = filename.len.uint32.unrollBytes |
|
|
let filenameLen : string = filename.len.uint32.unrollBytes |
|
|
|
|
|
|
|
|
socket.send("STAT" & filenameLen & filename) |
|
|
socket.send("STAT" & filenameLen & filename) |
|
@ -116,12 +128,10 @@ proc statFile(filename : string) : FileStat = |
|
|
androidFileModified: fileCreated) |
|
|
androidFileModified: fileCreated) |
|
|
|
|
|
|
|
|
proc adbPull(filename : string) : string = |
|
|
proc adbPull(filename : string) : string = |
|
|
echo filename.len |
|
|
#echo filename.len |
|
|
echo filename.statFile.repr |
|
|
#echo filename.statFile.repr |
|
|
|
|
|
|
|
|
echo filename.recvFile |
|
|
|
|
|
|
|
|
|
|
|
return "" |
|
|
return filename.recvFile.get |
|
|
|
|
|
|
|
|
proc sendAdb(payload : string) : string = |
|
|
proc sendAdb(payload : string) : string = |
|
|
var socket = adbConnect() |
|
|
var socket = adbConnect() |
|
@ -154,7 +164,7 @@ discard execCmd("adb start-server") |
|
|
#else: |
|
|
#else: |
|
|
#echo devices.get() |
|
|
#echo devices.get() |
|
|
|
|
|
|
|
|
echo adbPull("/etc/whitelistedapps.xml") |
|
|
stdout.write adbPull("/storage/7AFD-17E3/muzak/German Cake Rave-yMvDi_lXiQc.opus") |
|
|
|
|
|
|
|
|
#discard rebootPhone() |
|
|
#discard rebootPhone() |
|
|
|
|
|
|
|
|