Пример #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());
            }
        }
Пример #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);
            }
Пример #3
0
 /// <summary>
 /// Build a packed message from Hudsonbase header and body
 /// </summary>
 /// <param name="header"></param>
 /// <param name="body"></param>
 public HudsonPackedMessage(Messages msgbase, int msgnum) : this()
 {
     MsgHdr.MsgHdrRecord header = msgbase.Headers.Data[msgnum - 1];
     Text      = new MsgText(msgbase.MsgBodies[msgnum]);
     Text.Area = msgbase.Areas[header.Board];
     orig      = new FidoAddress(header.OrigZone, header.OrigNet, header.OrigNode, 0);
     dest      = new FidoAddress(header.DestZone, header.DestNet, header.DestNode, 0);
     FromUser  = header.WhoFrom;
     DestUser  = header.WhoTo;
     Subject   = header.Subject;
     Timestamp = FidonetHelpers.FidoFormatDatetime(header.Timestamp);
 }
Пример #4
0
        /// <summary>
        /// Toss the message in the message base
        /// </summary>
        /// <param name="network">Network to use</param>
        public override void Toss(string network)
        {
            Message m = new Message();

            m.Area        = Text.Area.ToUpper();
            m.DateTime    = FidonetHelpers.ParseDatetime(Timestamp);
            m.MessageFrom = FromUser;
            m.MessageTo   = DestUser;
            m.Subject     = Subject;
            m.FidoId      = Text.MsgId;
            m.FidoReplyTo = Text.ReplyId;
            m.TearLine    = Text.Tear;
            m.OriginLine  = Text.Origin;
            m.OrigZone    = orig.zone;
            m.OrigNet     = orig.net;
            m.OrigNode    = orig.node;
            m.OrigPoint   = orig.point;
            m.DestZone    = dest.zone;
            m.DestNet     = dest.net;
            m.DestNode    = dest.node;
            m.DestPoint   = dest.point;
            m.Attributes  = attr.Binary;
            m.Body        = string.Join('\n', Text.Lines);

            Console.WriteLine($"Processing message for area: {m.Area}");
            using (bbsContext db = new bbsContext())
            {
                db.Messages.Add(m);
                db.SaveChanges();
                foreach (string s in Text.SeenBy)
                {
                    db.MessagesSeenBy.Add(new MessageSeenBy()
                    {
                        MessageId = m.Id,
                        SeenBy    = s
                    });
                }
                foreach (string s in Text.Path)
                {
                    db.MessagePaths.Add(new MessagePath()
                    {
                        MessageId = m.Id,
                        Path      = s
                    });
                }
                db.SaveChanges();
            }
        }
Пример #5
0
 /// <summary>
 /// builds message from database entity
 /// </summary>
 /// <param name="m"></param>
 public BBSPackedMessage(Message m) : base()
 {
     orig         = new FidoAddress(m.OrigZone, m.OrigNet, m.OrigNode, m.OrigPoint);
     dest         = new FidoAddress(m.DestZone, m.DestNet, m.DestNode, m.DestPoint);
     FromUser     = m.MessageFrom;
     DestUser     = m.MessageTo;
     Timestamp    = FidonetHelpers.FidoFormatDatetime(m.DateTime);
     Subject      = m.Subject;
     attr         = new MsgAttributes((ushort)m.Attributes);
     Text.Area    = m.Area;
     Text.MsgId   = m.FidoId;
     Text.ReplyId = m.FidoReplyTo;
     Text.Tear    = m.TearLine;
     Text.Origin  = m.OriginLine;
     Text.Lines   = TextHelper.SplitString(m.Body);
     Text.Path    = m.PathLines;
     Text.SeenBy  = m.SeenByLines;
 }
Пример #6
0
 /// <summary>
 /// Builds record from raw data
 /// </summary>
 /// <param name="raw"></param>
 /// <param name="idx"></param>
 public MsgIdxRecord(byte[] raw, int idx)
 {
     msgnum = FidonetHelpers.GetUShort(raw, idx);
     board  = raw[idx + 2];
 }