Example #1
0
 public ESPOTA(string remoteAddr, int remotePort, int localPort, string FileName, FLASH_Options command = FLASH_Options.FLASH)
 {
     _remoteAddr = remoteAddr;
     _remotePort = remotePort;
     _localPort  = localPort;
     _FileName   = FileName;
     readFile();
 }
Example #2
0
        public bool update(string remoteAddr, int remotePort, int localPort, string password, byte[] file_data, FLASH_Options command = FLASH_Options.FLASH)
        {
            Console.WriteLine("Starting Java server");
            IPAddress address = IPAddress.Any;

            listener = new TcpListener(address, localPort);
            listener.Server.NoDelay = true;
            listener.Start();
            Console.WriteLine($"Server started. Listening to TCP clients at 0.0.0.0:{localPort}");
            long   content_size = file_data.Length;
            string file_md5     = file_data.ToMD5Hash().ToLower();

            Console.WriteLine($"Upload size {content_size}");

            string message = string.Format("0 {1} {2} {3}\n", command, localPort, content_size, file_md5);

            byte[] message_bytes = Encoding.ASCII.GetBytes(message);
            Console.WriteLine("Sending invitation to " + remoteAddr);


            UdpClient sock2 = new UdpClient();
            var       ep    = new IPEndPoint(IPAddress.Parse(remoteAddr), remotePort);

            sock2.Send(message_bytes, message_bytes.Length, ep);
            var t = sock2.ReceiveAsync();

            t.Wait(10000);
            var res = t.Result;

            if (res == null)
            {
                Console.WriteLine("No Response");
                {
                    //client.Close();
                    listener.Stop();
                    return(false);
                }
            }
            var res_text = Encoding.ASCII.GetString(res.Buffer);

            if (res_text != "OK")
            {
                Console.WriteLine("AUTH requeired and not implemented");
                {
                    //client.Close();
                    listener.Stop();
                    return(false);
                }
            }
            sock2.Close();
            Console.WriteLine("Waiting for device ...");
            listener.Server.SendTimeout    = 10000;
            listener.Server.ReceiveTimeout = 10000;
            DateTime  startTime = DateTime.Now;
            TcpClient client    = null;

            Console.WriteLine("Awaiting Connection");
            while ((DateTime.Now - startTime).TotalSeconds < 10)
            {
                if (listener.Pending())
                {
                    client         = listener.AcceptTcpClient();
                    client.NoDelay = true;
                    break;
                }
                else
                {
                    Thread.Sleep(10);
                }
            }
            if (client == null)
            {
                Console.WriteLine("No response from device");
                {
                    listener.Stop();
                    return(false);
                }
            }
            Console.WriteLine("Got Connection");
            using (MemoryStream fs = new MemoryStream(file_data))
            {
                int    offset     = 0;
                byte[] chunk      = new byte[1460];
                int    chunk_size = 0;
                int    read_count = 0;
                string resp       = "";
                while (content_size > offset)
                {
                    chunk_size = fs.Read(chunk, 0, 1460);
                    offset    += chunk_size;
                    if (client.Available > 0)
                    {
                        resp = Encoding.ASCII.GetString(chunk, 0, read_count);
                        Console.Write(resp);
                    }
                    Console.WriteLine($"Written {offset} out of {content_size} ({(float)(offset)/(float)(content_size)*100})");
                    client.Client.Send(chunk, 0, chunk_size, SocketFlags.None);
                    client.ReceiveTimeout = 10000;
                }
                client.ReceiveTimeout = 60000;
                read_count            = client.Client.Receive(chunk);
                resp = Encoding.ASCII.GetString(chunk, 0, read_count);
                while (!resp.Contains("O"))
                {
                    if (resp.Contains("E"))
                    {
                        client.Close();
                        listener.Stop();
                        return(false);
                    }
                    read_count = client.Client.Receive(chunk);
                    resp       = Encoding.ASCII.GetString(chunk, 0, read_count);
                    Console.Write(resp);

                    //return;
                }
                Console.WriteLine("\r\nAll done, Kill me now");
                client.Close();
                listener.Stop();
                return(true);
            }
        }