Пример #1
0
        public int CryptoSendMiniPacket(byte[] data, PacketType header)
        {
            if (data == null)
            {
                data = new byte[BlindNetConst.MINIDATASIZE];
            }

            int             realSendBytes = 0;
            BlindMiniPacket pack          = new BlindMiniPacket();

            pack.header = header;
            pack.data   = new byte[BlindNetConst.MINIDATASIZE];
            Array.Copy(data, 0, pack.data, 0, data.Length);
            byte[] encrypted = aes.Encryption(BlindNetUtil.StructToByte(pack));
            realSendBytes = socket.Send(encrypted, BlindNetConst.MINIPACKSIZE, SocketFlags.None);
            new NetworkStream(socket).Flush();

            byte[] result = new byte[BlindNetConst.MINIPACKSIZE];
            int    rcvNum = socket.Receive(result, BlindNetConst.MINIPACKSIZE, SocketFlags.None);

            if (result[0] != (byte)PacketType.OK)
            {
                return(0);
            }
            return(realSendBytes);
        }
Пример #2
0
        public BlindPacket CryptoReceive(bool isRecieving = false)
        {
            byte[] data   = new byte[BlindNetConst.MINIPACKSIZE];
            int    rcvNum = 0;

            byte[]          decrypted  = null;
            BlindMiniPacket miniPacket = new BlindMiniPacket();

            if (!isRecieving)
            {
                rcvNum = socket.Receive(data, BlindNetConst.MINIPACKSIZE, SocketFlags.None);
                new NetworkStream(socket).Flush();
                if (rcvNum == 0)
                {
                    BlindPacket end;
                    end.data   = null;
                    end.header = PacketType.Disconnect;
                    return(end);
                }
                byte[] temp = new byte[BlindNetConst.MINIPACKSIZE];
                temp[0] = (byte)PacketType.OK;
                socket.Send(temp, BlindNetConst.MINIDATASIZE, SocketFlags.None);

                decrypted  = aes.Decryption(data);
                miniPacket = BlindNetUtil.ByteToStruct <BlindMiniPacket>(decrypted);
            }
            if (isRecieving || miniPacket.header == PacketType.MSG)
            {
                data = new byte[0];
                while (true)
                {
                    byte[] tmp = new byte[BlindNetConst.PACKSIZE];
                    rcvNum = socket.Receive(tmp, BlindNetConst.PACKSIZE - data.Length, SocketFlags.None);
                    using (NetworkStream stream = new NetworkStream(socket))
                        stream.Flush();
#if DEBUG
                    if (tmp[tmp.Length - 1] == 0)
                    {
                        Console.WriteLine("Received less bytes");
                    }
#endif
                    if (rcvNum == 0)
                    {
                        BlindPacket end;
                        end.data   = null;
                        end.header = PacketType.Disconnect;
                        return(end);
                    }

                    data = BlindNetUtil.MergeArray <byte>(data, BlindNetUtil.ByteTrimEndNull(tmp));
                    if (data.Length == BlindNetConst.PACKSIZE)
                    {
                        byte[] temp = new byte[BlindNetConst.MINIPACKSIZE];
                        temp[0] = (byte)PacketType.OK;
                        socket.Send(temp, BlindNetConst.MINIPACKSIZE, SocketFlags.None);
                        using (NetworkStream stream = new NetworkStream(socket))
                            stream.Flush();
                        break;
                    }
                }

                decrypted = aes.Decryption(data);
            }

            return(BlindNetUtil.ByteToStruct <BlindPacket>(decrypted));
        }