コード例 #1
0
ファイル: AsyncClient.cs プロジェクト: Insanitor/ChatGUI
        /// <summary>
        /// Used for Recieving RSAKeyValues
        /// and XML Streams
        /// </summary>
        public string RecieveEncryptedWithRsa()
        {
            try
            {
                XmlSerializer ser    = new XmlSerializer(typeof(Message));
                StreamReader  reader = new StreamReader(Stream);

                //Creates a StringBuilder to build the message
                StringBuilder message = new StringBuilder();

                //Reads the Datastream into the Buffer
                //and adds it to the StringBuilder
                //and clears whitespace
                char[] buffer = new char[3000];
                reader.Read(buffer, 0, buffer.Length);
                foreach (char b in buffer)
                {
                    message.Append(b);
                }
                message = message.Remove(message.ToString().IndexOf("</Message>") + "</Message>".Length, "</Message>".Length);

                if (message.ToString().Contains("RSAKeyValue"))
                {
                    using (StringReader sr = new StringReader(message.ToString()))
                    {
                        var m = ser.Deserialize(sr) as Message;
                        if (m.Users != null)
                        {
                            m.Users.ForEach(CheckUsersIp);
                        }
                    }
                }

                //Opens a String Reader to have a
                //stream to deserialize and feeds it
                //the string builder as a string
                using (StringReader sr = new StringReader(message.ToString()))
                {
                    var m = ser.Deserialize(sr) as Message;
                    if (m.Mb.Body != null || m.Mb.Body != "")
                    {
                        m.Mb.Body = CryptoTool.Decrypt(m.Mb.Body);
                        foreach (char c in m.Mb.Body)
                        {
                            if (c != ' ')
                            {
                                return(m.From.Name + ">>" + m.To.Name + ": " + m.Mb.Body);
                            }
                        }
                    }
                }
                return(null);
            }
            catch (Exception)
            {
                return(null);

                throw;
            }
        }