LoadFormat1() static private method

static private LoadFormat1 ( [ fields ) : IPBanInfo
fields [
return IPBanInfo
Example #1
0
        internal static void Load()
        {
            lock ( BanListLock ) {
                if (IsLoaded)
                {
                    throw new InvalidOperationException("IPBanList is already loaded!");
                }
                if (File.Exists(Paths.IPBanListFileName))
                {
                    using (StreamReader reader = File.OpenText(Paths.IPBanListFileName)) {
                        string headerText = reader.ReadLine();
                        if (headerText == null)
                        {
                            Logger.Log(LogType.Warning, "IPBanList.Load: IP ban file is empty.");
                            IsLoaded = true;
                            return;
                        }

                        int version = ParseHeader(headerText);
                        if (version > FormatVersion)
                        {
                            Logger.Log(LogType.Warning,
                                       "IPBanList.Load: Attempting to load unsupported IPBanList format ({0}). Errors may occur.",
                                       version);
                        }
                        else if (version < FormatVersion)
                        {
                            Logger.Log(LogType.Warning,
                                       "IPBanList.Load: Converting IPBanList to a newer format (version {0} to {1}).",
                                       version, FormatVersion);
                        }

                        while (!reader.EndOfStream)
                        {
                            string line = reader.ReadLine();
                            if (line == null)
                            {
                                break;
                            }
                            string[] fields = line.Split(',');
                            if (fields.Length == IPBanInfo.FieldCount)
                            {
                                try {
                                    IPBanInfo ban;
                                    switch (version)
                                    {
                                    case 0:
                                        ban = IPBanInfo.LoadFormat0(fields, true);
                                        break;

                                    case 1:
                                        ban = IPBanInfo.LoadFormat1(fields);
                                        break;

                                    case 2:
                                        ban = IPBanInfo.LoadFormat2(fields);
                                        break;

                                    default:
                                        return;
                                    }

                                    if (ban.Address.Equals(IPAddress.Any) || ban.Address.Equals(IPAddress.None))
                                    {
                                        Logger.Log(LogType.Warning,
                                                   "IPBanList.Load: Invalid IP address skipped.");
                                    }
                                    else
                                    {
                                        Bans.Add(ban.Address.ToString(), ban);
                                    }
                                } catch (IOException ex) {
                                    Logger.Log(LogType.Error,
                                               "IPBanList.Load: Error while trying to read from file: {0}", ex.Message);
                                } catch (Exception ex) {
                                    Logger.Log(LogType.Error,
                                               "IPBanList.Load: Could not parse a record: {0}", ex.Message);
                                }
                            }
                            else
                            {
                                Logger.Log(LogType.Error,
                                           "IPBanList.Load: Corrupt record skipped ({0} fields instead of {1}): {2}",
                                           fields.Length, IPBanInfo.FieldCount, String.Join(",", fields));
                            }
                        }
                    }

                    Logger.Log(LogType.Debug,
                               "IPBanList.Load: Done loading IP ban list ({0} records).", Bans.Count);
                }
                else
                {
                    Logger.Log(LogType.Warning,
                               "IPBanList.Load: No IP ban file found.");
                }
                IsLoaded = true;
            }
        }