public List <Device> GetDevices(IPEndPoint address)
{
byte[] request = FormAdbRequest("host:devices"); //$NON-NLS-1$
byte[] reply;
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try {
socket.Connect(address);
socket.Blocking = true;
if (!Write(socket, request))
{
throw new IOException("failed asking for devices");
}
AdbResponse resp = ReadAdbResponse(socket, false /* readDiagString */);
if (!resp.IOSuccess || !resp.Okay)
{
this.LogError("Got timeout or unhappy response from ADB fb req: " + resp.Message);
socket.Close( );
return(null);
}
reply = new byte[4];
if (!Read(socket, reply))
{
this.LogError("error in getting data length");
socket.Close( );
return(null);
}
String lenHex = Encoding.Default.GetString(reply);
int len = int.Parse(lenHex, System.Globalization.NumberStyles.HexNumber);
reply = new byte[len];
if (!Read(socket, reply))
{
this.LogError("error in getting data");
socket.Close( );
return(null);
}
List <Device> s = new List <Device> ( );
String[] data = Encoding.Default.GetString(reply).Split(new string[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (var item in data)
{
s.Add(Device.CreateFromAdbData(item));
}
return(s);
} finally {
socket.Close( );
}
}