Esempio n. 1
0
        public static void Connect(Client handler, string line, string[] splitData)
        {
            if (handler.IsProperlyConnected)
                return;

            string[] data;
            if (ParserHelper.Connect(splitData, out data)) {
                if (handler.Handler.ClientsManager.NickRegistered(data[0])) {
                    System.Data.Common.DbDataReader reader = References.Database.Read(string.Format("SELECT {0}, {1} FROM {2} WHERE {3}=@val", InternalReferences.NICKS_PASS_COL, InternalReferences.NICKS_SALT_COL, InternalReferences.NICKS_TABLE, InternalReferences.NICKS_NICK_COL),
                                             new Mono.Data.Sqlite.SqliteParameter("@val", data[0]));
                    string hash = "";
                    string salt = "";
                    while (reader.Read()) {
                        hash = reader.GetString(0);
                        salt = reader.GetString(1);
                    }
                    reader.Close();
                    reader = null;
                    if (!Utils.ValidPassword(data[1], hash, salt)) {
                        handler.SendError(SendType.ERROR_0002, SendType.CONNECT, line);
                        return;
                    }
                    handler.SetAuthenticated(true);
                }
                if (handler.SetNickName(data[0])) {
                    handler.Send(SendType.CONNECT, string.Format("Connected{0}true", SyntaxCode.VALUE_SPLITTER));
                    handler.IsProperlyConnected = true;
                    handler.SetRealName(data[2] ?? data[0]);
                } else {
                    handler.SendError(SendType.ERROR_0006, SendType.CONNECT, line);
                }
            } else
                handler.SendError(SendType.ERROR_0005, SendType.CONNECT, line);
        }
Esempio n. 2
0
        public static void Ping(Client handler, string line, string[] splitData)
        {
            string[] data;
            ParserHelper.Ping(splitData, out data);

            if (data[0] == null) { // Client wants to ping the server
                handler.Send(SendType.PONG);
            } else { // Client wants to ping a client
                if (!handler.Handler.ClientsManager.NickTaken(data[0])) {
                    handler.SendError(SendType.ERROR_0004, SendType.PING, line);
                    return;
                }
                Client client = handler.Handler.ClientsManager.GetClient(data[0]);
                client.Send(SendType.PING, string.Format("User{0}{1}", SyntaxCode.VALUE_SPLITTER, data[0]));
            }
        }