Beispiel #1
0
        public Messages()
        {
            NameValueCollection dirSettings = (NameValueCollection)ConfigurationManager.GetSection("HudsonBase/Dir");
            string baseDir = dirSettings["msgdir"];

            Areas = new Dictionary <int, string>();
            NameValueCollection areasList = (NameValueCollection)ConfigurationManager.GetSection("HudsonBase/Areas");

            foreach (string key in areasList)
            {
                Areas.Add(Convert.ToInt16(key), areasList[key]);
            }

            Index     = new MsgIdx(Path.Combine(baseDir, "MSGIDX.BBS"));
            Headers   = new MsgHdr(Path.Combine(baseDir, "MSGHDR.BBS"));
            MsgBodies = new Dictionary <int, string>();
            byte[] text = File.ReadAllBytes(Path.Combine(baseDir, "MSGTXT.BBS"));
            foreach (MsgHdr.MsgHdrRecord h in Headers.Data)
            {
                StringBuilder sb = new StringBuilder();
                for (int j = 0; j < h.NumBlocks; j++)
                {
                    sb.Append(FidonetHelpers.GetPascalString(text, (h.StartBlock + j) * 256));
                }
                MsgBodies.Add(h.MsgNum, sb.ToString());
            }
        }
Beispiel #2
0
            public MsgHdrRecord(byte[] raw, int idx) : this()
            {
                MsgNum     = FidonetHelpers.GetUShort(raw, idx);
                PrevReply  = FidonetHelpers.GetUShort(raw, idx + 2);
                NextReply  = FidonetHelpers.GetUShort(raw, idx + 4);
                TimesRead  = FidonetHelpers.GetUShort(raw, idx + 6);
                StartBlock = FidonetHelpers.GetUShort(raw, idx + 8);
                NumBlocks  = FidonetHelpers.GetUShort(raw, idx + 10);
                DestNet    = FidonetHelpers.GetUShort(raw, idx + 12);
                DestNode   = FidonetHelpers.GetUShort(raw, idx + 14);
                OrigNet    = FidonetHelpers.GetUShort(raw, idx + 16);
                OrigNode   = FidonetHelpers.GetUShort(raw, idx + 18);
                DestZone   = raw[idx + 20];
                OrigZone   = raw[idx + 21];
                Cost       = FidonetHelpers.GetUShort(raw, idx + 22);
                MsgAttr    = raw[idx + 24];
                NetAttr    = raw[idx + 25];
                Board      = raw[idx + 26];
                string time = FidonetHelpers.GetPascalString(raw, idx + 0x1b);
                string date = FidonetHelpers.GetPascalString(raw, idx + 0x21);

                if (!DateTime.TryParseExact($"{date} {time}", "MM-dd-yy HH:mm",
                                            CultureInfo.InvariantCulture, DateTimeStyles.None,
                                            out Timestamp))
                {
                    Timestamp = DateTime.MinValue;
                }
                WhoTo   = FidonetHelpers.GetPascalString(raw, idx + 0x2a);
                WhoFrom = FidonetHelpers.GetPascalString(raw, idx + 0x4e);
                Subject = FidonetHelpers.GetPascalString(raw, idx + 0x72);
            }