Пример #1
0
 public ChatManager(Networker networker, CryptoManager cryptoManager)
 {
     m_networker              = networker;
     m_cryptoManager          = cryptoManager;
     m_cryptoManager.Id       = 0;
     m_personalCryptoManagers = new Dictionary <string, CryptoManager>();
     m_serverCheckThread      = new Thread(ServerMessagesThread);
     m_serverCheckThread.Start();
 }
Пример #2
0
        // static functions
        //This function contains server-specific strings
        public static ChatManager TryRegister(Networker networker, string login, string password, out chatManagerError error)
        {
            error = chatManagerError.userAlreadyExists;
            ChatManager chatManager = TryStartChatManager(networker, String.Format("{0}&login={1}&password={2}", ServerSpecificStrings.MesageTypeRegister, login, password));

            if (chatManager != null)
            {
                error = chatManagerError.noError;
            }
            return(chatManager);
        }
Пример #3
0
        //This function contains server-specific strings
        public static ChatManager TryAuth(Networker networker, string login, string password, out chatManagerError error)
        {
            error = chatManagerError.failedToAuth;
            ChatManager chatManager = TryStartChatManager(networker, String.Format("{0}&login={1}&password={2}", ServerSpecificStrings.MesageTypeAuth, login, password));

            if (chatManager != null)
            {
                chatManager.AddUserCredintals(login, password);
                error = chatManagerError.noError;
            }
            return(chatManager);
        }
Пример #4
0
        //Estabilish crypto tunnel and save session keys to CryptoManager object
        static CryptoManager Handshake(Networker networker)
        {
            CryptoManager cryptoManager = null;

            string AESKey   = CryptoManager.GetAESKeyB64();
            string response = networker.SendMessageAndWaitResponse(
                CryptoManager.EncryptRSA2B64("message=handshake&key=" + AESKey)
                );

            if (!String.IsNullOrEmpty(response))
            {
                CryptoManager cryptoManagerTest = new CryptoManager(AESKey, response);
                string        responseConnected = ChatManager.SendMessageAndWaitResponseCrypted(ServerSpecificStrings.MesageOk, networker, cryptoManagerTest);
                if (responseConnected.Equals(ServerSpecificStrings.MesageOk))
                {
                    cryptoManager = cryptoManagerTest;
                }
            }
            return(cryptoManager);
        }
Пример #5
0
        private void bgWrkr_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker     = sender as BackgroundWorker;
            object           tbToFound  = null;
            object           tblToFound = null;
            object           tbpToFound = null;

            this.Dispatcher.Invoke(new Action(() => {
                tbToFound  = FindName("ServerAddressTextBox");
                tblToFound = FindName("LoginTexBox");
                tbpToFound = FindName("PasswordBox");
            }));
            if (tbToFound is TextBox && tblToFound is TextBox && tbpToFound is PasswordBox)
            {
                TextBox     serverAddresTextBox = tbToFound as TextBox;
                TextBox     loginTexBox         = tblToFound as TextBox;
                PasswordBox passwordBox         = tbpToFound as PasswordBox;
                string[]    serverAddress       = null;
                string      login    = "";
                string      password = "";
                this.Dispatcher.Invoke(new Action(() => {
                    serverAddress = serverAddresTextBox.Text.Split(':');
                    login         = loginTexBox.Text;
                    password      = passwordBox.Password;
                }));
                if (Networker.TryConnect(serverAddress[0], Convert.ToInt32(serverAddress[1])))
                {
                    chatManagerError cmError;
                    ChatManager      cm = ServerConnectionHelper.TryAuth(
                        new Networker(serverAddress[0], Convert.ToInt32(serverAddress[1])),
                        login,
                        password,
                        out cmError);
                    if (cm != null)
                    {
                        e.Result = cm;
                    }
                }
                ;
            }
        }
Пример #6
0
        //Trying to get positive response from server, if all OK, then create ChatManager
        //This function contains server-specific strings
        public static ChatManager TryStartChatManager(Networker networker, string serverRequest)
        {
            CryptoManager cryptoManager = Handshake(networker);

            if (cryptoManager != null)
            {
                //message = serverRequest
                string response = ChatManager.SendMessageAndWaitResponseCrypted(serverRequest, networker, cryptoManager);
                if (response.Equals(ServerSpecificStrings.MesageOk))
                {
                    return(new ChatManager(networker, cryptoManager));
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                return(null);
            }
        }
Пример #7
0
        public static string SendMessageAndWaitResponseCrypted(string message, Networker networker, CryptoManager cryptoManager)
        {
            string encryptedResponseB64 = networker.SendMessageAndWaitResponse(cryptoManager.EncryptWithSessionB64(message));

            return(cryptoManager.DecryptWithSessionB64(encryptedResponseB64));
        }