Пример #1
0
        public string SendMessage(MORZEMessage msg, IMORZEContact to)
        {
            string err = null;

            if (to.isHasConfirmEtx() == true)
            {
                try
                {
                    ExtKey           ext;
                    byte []          netmsg = to.getMORZENetMessage(msg, out ext);
                    MORZESendMessage m      = new MORZESendMessage();
                    m.AddMessageBody(netmsg, ext.HashID, ext.Ext);
                    m.Send(m_netStream);
                    msg.Status = MORZEMessageStatus.sended;
                    msg.AddHashInfo(ext.HashID, SMSCrypt.CalcHash(ext.HashID, netmsg));
                }
                catch (Exception exp)
                {
                    OnConnectChange(false, exp.Message);
                }
            }
            else
            {
                SendInitialMessage(to);
            }
            return(err);
        }
Пример #2
0
        public bool AddReciveredMessage(IMORZEContact from, MORZEMessage msg)
        {
            bool          bres = false;
            MORZEMessages msgs = GetMessages(from);

            if (msgs != null)
            {
                msgs.AddRecivedMessages(msg);
            }
            return(bres);
        }
Пример #3
0
        public void AddSendedNewMessages(MORZEMessage msg)
        {
            msg.Status = MORZEMessageStatus.sended;

            Monitor.Enter(this);
            if (m_messages == null)
            {
                m_messages = new List <MORZEMessage>();
            }
            m_messages.Add(msg);
            Monitor.Exit(this);
        }
Пример #4
0
        public void AddUnsendedNewMessages(string text)
        {
            MORZEMessage msg;

            msg        = new MORZEMessage(text);
            msg.Status = MORZEMessageStatus.unsendedNew;

            Monitor.Enter(this);
            if (m_messages == null)
            {
                m_messages = new List <MORZEMessage>();
            }
            m_messages.Add(msg);
            Monitor.Exit(this);
        }
Пример #5
0
        /// <summary>
        /// message send
        /// </summary>
        /// <param name="msg">mesage's plain text</param>
        /// <param name="to">reciver</param>
        /// <returns>error description</returns>
        public string SendMessage(string msg, IMORZEContact to)
        {
            string err = null;

            if (to.isHasConfirmEtx() == false)
            {
                try
                {
                    SendInitialMessage(to);

                    MORZEMessages msgs;
                    msgs = m_account.GetMessages(to);
                    if (msgs != null)
                    {
                        msgs.AddUnsendedNewMessages(msg);
                    }
                }
                catch (Exception exp)
                {
                    OnConnectChange(false, exp.Message);
                }
            }
            else
            {
                ExtKey       ext;
                MORZEMessage mmsg   = new MORZEMessage(msg.ToString());
                byte[]       netmsg = to.getMORZENetMessage(mmsg, out ext);

                MORZESendMessage m = new MORZESendMessage();
                m.AddMessageBody(netmsg, ext.HashID, ext.Ext);

                m.Send(m_netStream);

                MORZEMessages msgs;
                msgs = m_account.GetMessages(to);
                if (msgs != null)
                {
                    mmsg.AddHashInfo(ext.HashID, SMSCrypt.CalcHash(ext.HashID, netmsg));
                    msgs.AddSendedNewMessages(mmsg);
                }
            }
            return(err);
        }
Пример #6
0
        public byte[] getMORZENetMessage(MORZEMessage msg, out ExtKey ext)
        {
            byte[] enetmsg = null;
            ext = null;
            if (m_Exts != null && m_Exts.Any() == true)
            {
                byte[] bmsg   = null;
                byte[] netmsg = null;
                string err;
                ExtKey key = m_Exts[m_Exts.Count - 1];
                bmsg = Encoding.UTF8.GetBytes(msg.ToString());


                netmsg    = new byte[bmsg.Length + 5];
                netmsg[0] = 3; //type of message  - text message

                byte[] num;

                num = BitConverter.GetBytes(msg.GetOrderNumber); //must 2butes
                Array.Copy(num, 0, netmsg, 1, num.Length);

                num = BitConverter.GetBytes(msg.GetResnedCount); //must 2butes
                Array.Copy(num, 0, netmsg, 3, num.Length);

                Array.Copy(bmsg, 0, netmsg, 5, bmsg.Length);


                err = SMSCrypt.SyncEncode(key.SyncID, netmsg, key.SyncKey, key.SyncIV, out enetmsg);
                if (string.IsNullOrEmpty(err) == false)
                {
                    enetmsg = null;
                }
                else
                {
                    ext = key;
                }
            }

            return(enetmsg);
        }
Пример #7
0
        private bool recvNewMessage(ExtKey key, byte[] msg, SMSHash hashid, byte[] hash)
        {
            ushort nummsg = BitConverter.ToUInt16(msg, 1);

            ushort retry = BitConverter.ToUInt16(msg, 3);

            string       text = Encoding.UTF8.GetString(msg, 5, msg.Length - 5);
            MORZEMessage mmsg = new MORZEMessage(text, hashid, hash, nummsg);

            if (OnRecvMessage != null)
            {
                OnRecvMessage(this, mmsg);
            }



            BufferBuilder bb = new BufferBuilder();

            bb.AddByte(4); // Type 4 - notify recived message
            bb.AddByte((byte)hashid);
            bb.AddBytes(hash);


            byte [] netmsg;
            bool    bres = false;
            string  err  = SMSCrypt.SyncEncode(key.SyncID, bb.GetAllBytes(), key.SyncKey, key.SyncIV, out netmsg);

            if (string.IsNullOrEmpty(err) == true)
            {
                if (m_responseMsg == null)
                {
                    m_responseMsg = new List <byte[]>();
                }
                m_responseMsg.Add(netmsg);
                bres = true;
            }

            return(bres);
        }