示例#1
0
        public async Task DirectControlCommand(string aim, string command, string root_private)
        {
            try
            {
                int        port = server.Port;
                IPAddress  address;
                IPEndPoint target;
                int        timeout = 0;

                byte[] command_bytes = Encoding.UTF8.GetBytes(command);
                byte[] signature     = MakeAdminSignature(command_bytes, root_private);

                byte[] operation = AddOperation(command, AdminClass.command_size, signature);

                operation = AddOperation("admin", UDPServer.operation_size, operation);

                if (aim == null)
                {
                    List <string> black_list = new List <string>(0);
                    List <string> list_to    = await server.GetKnownList();

                    list_to = server.RemoveIPAddresses(list_to, black_list);

                    foreach (var ip_address in list_to)
                    {
                        address = IPAddress.Parse(ip_address);
                        target  = new IPEndPoint(address, port);

                        await server.Send(target, operation);

                        timeout++;
                        window.WriteLine("Updating..." + target.ToString());

                        if (timeout % 20 == 0)
                        {
                            await Task.Delay(100);
                        }
                    }
                }
                else
                {
                    address = IPAddress.Parse(aim);
                    target  = new IPEndPoint(address, port);

                    window.WriteLine("Updating..." + target.ToString());
                    await server.Send(target, operation);
                }
            }
            catch (Exception ex)
            {
                window.WriteLine("Exception in AdminClass.DirectUpdate");
                window.WriteLine(ex.ToString());
            }
        }
示例#2
0
文件: Blocks.cs 项目: mrB4el/BeeChain
        public async Task Logic(string[] operations, byte[] data, IPEndPoint source)
        {
            string name;
            string path;

            byte[] some_data = new byte[0];

            switch (operations[1])
            {
            case "new":

                name = Encoding.UTF8.GetString(data);
                window.WriteLine("Got info about new block: " + name);

                path = filesystem.FSConfig.db_blocks_path + @"\" + name;
                if (!File.Exists(name))
                {
                    some_data = Encoding.UTF8.GetBytes(name);
                    some_data = server.AddOperation("block", GetLogic.operation_size, some_data);
                    some_data = server.AddOperation(getlogic.request_template, UDPServer.operation_size, some_data);

                    await server.Send(source, some_data);
                }

                break;

            default:
                break;
            }
        }
示例#3
0
        public async Task Actualize()
        {
            IPAddress senpai = IPAddress.Parse("78.139.208.149");
            int       port   = 6879;

            IPEndPoint sen = new IPEndPoint(senpai, port);

            byte[] message;

            if (!window.admin)
            {
                message = Encoding.UTF8.GetBytes("signature");
                message = server.AddOperation(getlogic.request_template, UDPServer.operation_size, message);

                await server.Send(sen, message);
            }


            await blocks.BlockChainActualize();

            window.WriteLine("Actualization started");
            await info.ActualizeSelfSignature();
        }
示例#4
0
        public async Task CheckForUpdate()
        {
            IPAddress  address;
            IPEndPoint target;
            int        port = Convert.ToInt32(server.Port);

            byte[] operation_bytes;

            List <string> black_list = new List <string>(0);
            List <string> list_to    = await server.GetKnownList();

            list_to = server.RemoveIPAddresses(list_to, black_list);

            operation_bytes = server.OperationToBytes("update|tell", UDPServer.operation_size);

            if (list_to.Count > 0)
            {
                int timeout = 0;
                foreach (var ip_address in list_to)
                {
                    address = IPAddress.Parse(ip_address);
                    target  = new IPEndPoint(address, port);

                    await server.Send(target, operation_bytes);

                    timeout++;
                    window.WriteLine("Updating..." + timeout);


                    if (timeout % 20 == 0)
                    {
                        await Task.Delay(100);
                    }
                }
            }
        }
示例#5
0
        public async Task GetLogic(IPEndPoint source, byte[] data)
        {
            try
            {
                TwoBytesArrays tran = new TwoBytesArrays();
                tran = ByteArrayCut(data, Transactions.size_suboperation);

                string   sub_operation = BytesToOperation(tran.part1);
                string[] sub           = sub_operation.Split('|');
                string   name;
                string   path;

                List <string> ip_list     = new List <string>(0);
                Transaction   transaction = new Transaction();

                window.WriteLine("[45]: " + sub[0] + " from " + source.ToString());
                window.WriteLine("[46]: " + sub_operation);

                if (sub[0] == "new")
                {
                    transaction = ParseTMessage(tran.part2);
                    window.WriteLine("[tr] Transaction got: ");
                    int check = await CheckTransaction(transaction);

                    window.WriteLine("[tr] Checking result: " + check);

                    if ((check == 2) || (check == 1))
                    {
                        name = cryptography.HashToString(cryptography.GetSHA256Hash(tran.part2));
                        path = filesystem.FSConfig.db_path + @"\" + name;

                        int status = await filesystem.AddInfoToFileAsync(path, tran.part2, true);

                        if (status != 3)
                        {
                            byte[] message = Encoding.UTF8.GetBytes(name);
                            message = AddOperation("confirm", Transactions.size_suboperation, message);
                            message = AddOperation("transaction", UDPServer.operation_size, message);

                            await server.Send(source, message);

                            if (debug)
                            {
                                window.WriteLine("Transaction (" + name + ") confirmed to " + source.ToString());
                            }
                        }


                        int sub_times = Convert.ToInt32(sub[1]) - 1;

                        if (sub_times >= 1)
                        {
                            List <string> known_hosts = await server.GetKnownList();

                            List <string> black_list = new List <string>(0);


                            black_list.Add(source.Address.ToString());
                            black_list.AddRange(server.myIpAddresses);

                            known_hosts = server.RemoveIPAddresses(known_hosts, black_list);

                            //await SendTransaction(tran.part2, sub_times, known_hosts);
                        }
                    }
                }

                if (sub[0] == "confirm")
                {
                    name = Encoding.UTF8.GetString(tran.part2);
                    if (debug)
                    {
                        window.WriteLine("Transaction (" + name + ") confirmed by " + source.ToString());
                    }
                }

                ip_list.Add(source.Address.ToString());
                await server.AddToKnownList(ip_list);
            }
            catch (Exception ex)
            {
                window.WriteLine(ex.ToString());
            }
        }
示例#6
0
        private async Task RequestsLogic(byte[] incoming_data, IPEndPoint source)
        {
            try
            {
                TwoBytesArrays TWdata    = new TwoBytesArrays();
                byte[]         data      = new byte[0];
                byte[]         message   = new byte[0];
                string         operation = string.Empty;
                string         path      = string.Empty;

                TWdata    = ByteArrayCut(incoming_data, GetLogic.operation_size);
                operation = BytesToOperation(TWdata.part1);

                window.WriteLine("Got RequestsLogic: " + operation);

                switch (operation)
                {
                case "signature":
                    path = filesystem.FSConfig.root_path + @"\signature";
                    if (File.Exists(path))
                    {
                        data = await filesystem.GetFromFileAsync(path);

                        data = AddOperation(operation, UDPServer.operation_size, data);
                        data = AddOperation(answer_template, GetLogic.operation_size, data);
                        await server.Send(source, data);
                    }
                    break;

                case "actualblock":
                    path = filesystem.FSConfig.db_blocks_path + @"\actualblock";
                    if (File.Exists(path))
                    {
                        data = await filesystem.GetFromFileAsync(path);

                        data = AddOperation(operation, UDPServer.operation_size, data);
                        data = AddOperation(answer_template, GetLogic.operation_size, data);

                        window.WriteLine("Sending actual block..");
                        await server.Send(source, data);
                    }
                    break;

                case "block":
                    if (TWdata.part2.Length != 0)
                    {
                        path = filesystem.FSConfig.db_blocks_path + @"\" + Encoding.UTF8.GetString(TWdata.part2);
                        data = await filesystem.GetFromFileAsync(path);

                        message = Encoding.UTF8.GetBytes(data.Length.ToString());
                        message = AddOperation("block", UDPServer.operation_size, message);
                        message = AddOperation(answer_template, GetLogic.operation_size, message);

                        await server.Send(source, message);

                        window.WriteLine("Sending block: " + Encoding.UTF8.GetString(TWdata.part2));
                        filetransfering.TcpDataSend(data);
                    }

                    break;

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
        }