cb7e06bdb9
All sync status reads now also check for failure status, using the same logic as the normal Scanner (the only difference being that for normal scanners, length is encoded as a hex string, but for sync scanners it's in binary little-endian).
81 lines
1.2 KiB
Go
81 lines
1.2 KiB
Go
// A simple tool for sending raw messages to an adb server.
|
|
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/zach-klippenstein/goadb"
|
|
"github.com/zach-klippenstein/goadb/wire"
|
|
)
|
|
|
|
var port = flag.Int("p", goadb.AdbPort, "port the adb server is listening on")
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
fmt.Println("using port", *port)
|
|
|
|
printServerVersion()
|
|
|
|
for {
|
|
line := readLine()
|
|
err := doCommand(line)
|
|
if err != nil {
|
|
fmt.Println("error:", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func printServerVersion() {
|
|
err := doCommand("host:version")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func readLine() string {
|
|
fmt.Print("> ")
|
|
line, err := bufio.NewReader(os.Stdin).ReadString('\n')
|
|
if err != nil && err != io.EOF {
|
|
log.Fatal(err)
|
|
}
|
|
return strings.TrimSpace(line)
|
|
}
|
|
|
|
func doCommand(cmd string) error {
|
|
conn, err := goadb.NewDialer("", *port).Dial()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer conn.Close()
|
|
|
|
if err := wire.SendMessageString(conn, cmd); err != nil {
|
|
return err
|
|
}
|
|
|
|
status, err := conn.ReadStatus("")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var msg string
|
|
for err == nil {
|
|
msg, err = wire.ReadMessageString(conn)
|
|
if err == nil {
|
|
fmt.Printf("%s> %s\n", status, msg)
|
|
}
|
|
}
|
|
|
|
if err != io.EOF {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|