/// <summary> /// Gets the country code for a string IP address /// </summary> /// <param name="IP"></param> /// <returns></returns> public static string GetCountryCode(IPAddress IP) { // Return default config Country Code if (IPAddress.IsLoopback(IP) || HttpServer.LocalIPs.Contains(IP)) return Program.Config.ASP_LocalIpCountryCode; try { using (DatabaseDriver Driver = new DatabaseDriver(DatabaseEngine.Sqlite, ConnectionString)) { // Fetch country code from Ip2Nation Driver.Connect(); List<Dictionary<string, object>> Rows = Driver.Query( "SELECT country FROM ip2nation WHERE ip < @P0 ORDER BY ip DESC LIMIT 1", Networking.IP2Long(IP.ToString()) ); string CC = (Rows.Count == 0) ? "xx" : Rows[0]["country"].ToString(); // Fix country! return (CC == "xx" || CC == "01") ? Program.Config.ASP_LocalIpCountryCode : CC; } } catch { return Program.Config.ASP_LocalIpCountryCode; } }
/// <summary> /// Creates the connection to the database, and handles /// the excpetion (if any) that are thrown /// </summary> public void CheckConnection() { if(Driver == null || !Driver.IsConnected) { try { // First time connection if (Driver == null) { Driver = new DatabaseDriver( MainForm.Config.GamespyDBEngine, MainForm.Config.GamespyDBHost, MainForm.Config.GamespyDBPort, MainForm.Config.GamespyDBName, MainForm.Config.GamespyDBUser, MainForm.Config.GamespyDBPass ); // Create SQL tables on new SQLite DB's if (Driver.IsNewDatabase) { // Connect to DB Driver.Connect(); string SQL = Utils.GetResourceAsString("BF2Statistics.SQL.SQLite.Gamespy.sql"); Driver.Execute(SQL); return; } else { // Connect to DB Driver.Connect(); CheckDatabase(); return; } } // Connect to DB Driver.Connect(); } catch (Exception E) { string Message = "Database Connect Error: " + Environment.NewLine + E.Message + Environment.NewLine + "Forcing Server Shutdown..."; throw new Exception(Message); } } }
/// <summary> /// Fethces the full country name from a country code supplied from GetCountryCode() /// </summary> /// <param name="Code"></param> /// <returns></returns> public static string GetCountyNameFromCode(string Code) { try { using (DatabaseDriver Driver = new DatabaseDriver(DatabaseEngine.Sqlite, ConnectionString)) { // Fetch country code from Ip2Nation Driver.Connect(); List<Dictionary<string, object>> Rows = Driver.Query( "SELECT country FROM ip2nationcountries WHERE iso_code_2 = @P0", Code.ToUpperInvariant() ); return (Rows.Count == 0) ? Code: Rows[0]["country"].ToString(); } } catch { return Code; } }
/// <summary> /// Creates the connection to the database, and handles /// the excpetion (if any) that are thrown /// </summary> /// <summary> /// Creates the connection to the database, and handles /// the excpetion (if any) that are thrown /// </summary> public void CheckConnection() { if (Driver == null || !Driver.IsConnected) { try { // First time connection if (Driver == null) { // Create database connection Driver = new DatabaseDriver( MainForm.Config.StatsDBEngine, MainForm.Config.StatsDBHost, MainForm.Config.StatsDBPort, MainForm.Config.StatsDBName, MainForm.Config.StatsDBUser, MainForm.Config.StatsDBPass ); Driver.Connect(); // Create SQL tables on new SQLite DB's if (Driver.IsNewDatabase) { CreateSqliteTables(Driver); return; } else { // Try and get database version try { var Rows = Driver.Query("SELECT dbver FROM _version LIMIT 1"); if (Rows.Count == 0) throw new Exception(); // Force insert of IP2Nation } catch { // Table doesnt contain a _version table, so run the createTables.sql if (Driver.DatabaseEngine == DatabaseEngine.Sqlite) CreateSqliteTables(Driver); else CreateMysqlTables(Driver); } return; } } // Connect to DB Driver.Connect(); // Set global packet size with MySql if (Driver.DatabaseEngine == DatabaseEngine.Mysql) Driver.Execute("SET GLOBAL max_allowed_packet=51200"); } catch (Exception E) { throw new Exception( "Database Connect Error: " + Environment.NewLine + E.Message + Environment.NewLine + "Forcing Server Shutdown..." ); } } }