protected virtual void btnOk_Click(object sender, EventArgs e) { IMORZEContact cnt = null; try { if (string.IsNullOrEmpty(tbName.Text) == false) { if (m_cnt == null) { cnt = new MORZEContact(tbName.Text, tbAddress.Text); m_cnt = cnt; DialogResult = DialogResult.OK; Close(); } } else { MessageBox.Show("Name is empty", Text, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } catch (Exception exp) { MessageBox.Show(exp.Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } }
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); }
private void OnRecvMessage(IMORZEContact sender, MORZEMessage msg) { Invoke(new Action(() => { PutDisplayMessage(sender.ToString(), msg.ToString(), false); })); }
private void tmCheckNotify_Tick(object sender, EventArgs e) { if (m_account != null) { List <MORZEMessages> msgs = null; msgs = m_account.GetSendedAndUncofirmedMessages(new TimeSpan(0, 0, 0, 0, tmCheckNotify.Interval)); if (msgs != null) { foreach (MORZEMessages mm in msgs) { if (mm.Messages.Any()) { mm.Messages.OrderBy(x => x.Date); IMORZEContact cnt = m_book.GetContact(mm.ContactAddress, false); if (cnt != null) { MORZEContact mc = cnt as MORZEContact; mc.clearAllExt(); m_net.SendMessage(mm.Messages.FirstOrDefault(), cnt); } else { mm.Messages[0].Status = MORZEMessageStatus.recipUnknown; } } } } } }
public SMSInitialMessage(IMORZEAccount account, IMORZEContact contact) { BufferBuilder bb = new BufferBuilder(); m_account = account; bb.AddByte(1);//- init message m_newExt = contact.getInitalData(); bb.AddByte((byte)m_newExt.HashID); bb.AddBytes(m_newExt.Ext); bb.AddByte((byte)m_newExt.SyncID); bb.AddBytes(m_newExt.SyncKey); bb.AddBytes(m_newExt.SyncIV); bb.AddUshort(0);//или CRC16 byte [] data = bb.GetAllBytes(); data = contact.EncryptPK(data); byte[] addressdata = m_newExt.SyncEncrypt(account.GetMyAccount()); bb = new BufferBuilder(); bb.AddByte(contact.XOR((byte)data.Length, 0x10)); bb.AddBytes(data); bb.AddBytes(addressdata); AddMessageBody(bb.GetAllBytes(), m_newExt.HashID, null); }
public dlgMessage(IMORZEContact cnt, IMORZEAccount acc, SMSNet net) { m_cnt = cnt; m_acc = acc; m_net = net; m_lastLoadedMessage = null; InitializeComponent(); }
public dlgContact() { m_cnt = null; InitializeComponent(); Text = "New contact"; btnRefresh.Enabled = false; }
private void book_OnNewAccountRecive(IMORZEContact contact) { if (contact != null) { Invoke(new Action(() => { AddContactToList(contact); })); } }
public bool AddReciveredMessage(IMORZEContact from, MORZEMessage msg) { bool bres = false; MORZEMessages msgs = GetMessages(from); if (msgs != null) { msgs.AddRecivedMessages(msg); } return(bres); }
public bool SetDeliveredMessage(IMORZEContact from, SMSHash hashid, byte [] hash) { bool bres = false; MORZEMessages msgs = GetMessages(from); if (msgs != null) { msgs.SetDeliveredMessage(hashid, hash); } return(bres); }
public string UpdateContact(IMORZEContact cnt) { string err = null; MORZEContact c = m_contacts.Where(x => x.GetAddress() == cnt.GetAddress()).FirstOrDefault(); if (c != null) { c.DisplayName = cnt.ToString(); } return(err); }
private void AddContactToList(IMORZEContact contact) { ListViewItem lvi = new ListViewItem(contact.ToString()); lvi.Tag = contact; lvi.ToolTipText = contact.GetAddress(); lvContact.Items.Add(lvi); MORZEContact mrz = contact as MORZEContact; mrz.OnRecvNotifyAcceptecExtKey += OnRecvNotifyAcceptecExtKey; mrz.OnRecvMessage += OnRecvMessage; mrz.OnRecvDeliveredMsgNotify += OnRecvDeliveredMsgNotify; }
private void OnRecvMessage(IMORZEContact sender, MORZEMessage msg) { Invoke(new Action(() => { for (int i = 0; i < lvContact.Items.Count; i++) { IMORZEContact c = lvContact.Items[i].Tag as IMORZEContact;; if (c != null && c.GetAddress() == sender.GetAddress()) { lvContact.Items[i].Font = new Font(lvContact.Items[i].Font, FontStyle.Bold); } } m_account.AddReciveredMessage(sender, msg); })); }
private void SendInitialMessage(IMORZEContact to) { SMSInitialMessage imsg = new SMSInitialMessage(m_account, to); //Monitor.Enter(this); ////if (m_InitalMessages == null) //// m_InitalMessages = new List<MORZEInitialMessage>(); ////m_InitalMessages.Add(imsg); //Monitor.Exit(this); imsg.Send(m_netStream); SMSSendExt ext = new SMSSendExt(this); imsg.InitExtParam(ext); ext.Send(m_netStream); }
private void lvContact_DoubleClick(object sender, EventArgs e) { if (lvContact.SelectedItems.Count == 1) { if (lvContact.SelectedItems[0].Font.Bold == true) { lvContact.Items[0].Font = new Font(lvContact.Items[0].Font, FontStyle.Regular); } IMORZEContact cnt = lvContact.SelectedItems[0].Tag as IMORZEContact; dlgMessage msg = null; if (m_dlgMsgs != null) { for (int i = 0; i < m_dlgMsgs.Count && msg == null; i++) { if (m_dlgMsgs[i].Tag == cnt) { msg = m_dlgMsgs[i]; } } } else { m_dlgMsgs = new List <dlgMessage>(); } if (msg == null) { msg = new dlgMessage(cnt, m_account, m_net); msg.Tag = cnt; msg.FormClosed += Msg_FormClosed; m_dlgMsgs.Add(msg); } if (msg != null) { if (msg.Visible == false) { msg.Show(); } msg.Focus(); } } }
private void OnRecvNotifyAcceptecExtKey(IMORZEContact sender) { List <MORZEMessage> msgs; msgs = m_account.GetUnsendedNewMessages(sender, new TimeSpan(0, 0, 0, 0, tmCheckNotify.Interval)); if (msgs != null) { string err; foreach (MORZEMessage msg in msgs) { err = m_net.SendMessage(msg, sender); if (string.IsNullOrEmpty(err) == true) { msg.Status = MORZEMessageStatus.sended; } } } }
/// <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); }
public List <MORZEMessage> GetUnsendedNewMessages(IMORZEContact contact, TimeSpan interval) { List <MORZEMessage> lmsg = null; Monitor.Enter(this); MORZEMessages msgs = null; if (m_Messages != null) { msgs = m_Messages.Where(x => x.ContactAddress == contact.GetAddress()).FirstOrDefault(); if (msgs != null) { lmsg = msgs.Messages.Where(x => x.Status == MORZEMessageStatus.unsendedNew || (x.Status == MORZEMessageStatus.sended && x.Date + interval < DateTime.Now)).ToList(); } } Monitor.Exit(this); return(lmsg); }
public string AddContact(IMORZEContact cnt) { string err = null; if (m_contacts == null) { m_contacts = new List <MORZEContact>(); } Monitor.Enter(m_contacts); try { m_contacts.Add(cnt as MORZEContact); } catch (Exception exp) { err = exp.Message; } Monitor.Exit(m_contacts); return(err); }
private void newContact_Click(object sender, EventArgs e) { dlgContact dlg = new dlgContact(); if (dlg.ShowDialog() == DialogResult.OK) { IMORZEContact contact = dlg.MORZEContact; string err = m_book.AddContact(contact); if (string.IsNullOrEmpty(err) == true) { m_book.Save(); AddContactToList(contact); } else { MessageBox.Show(err, Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } } dlg.Dispose(); }
/// <summary> /// добавить контакт в адресную книгу /// </summary> /// <param name="address">адрес контакта</param> /// <param name="isaddIfnotExist">добавить контакт если не сущесвует</param> /// <returns></returns> public IMORZEContact GetContact(string address, bool addIfnotExist) { IMORZEContact cnt = null; bool isnew = false; Monitor.Enter(m_contacts); var cnts = m_contacts.Where(x => x.GetAddress() == address); if (cnts.Any() == true) { cnt = cnts.First(); } else { if (addIfnotExist == true) { try { MORZEContact _cnt; _cnt = new MORZEContact(null, address); m_contacts.Add(_cnt); cnt = _cnt; isnew = true; } catch (Exception exp) { cnt = null; } } } Monitor.Exit(m_contacts); if (cnt != null && OnNewAccountRecive != null && isnew == true) { OnNewAccountRecive(cnt); } return(cnt); }
public IMORZEContact GetContact(byte [] ext) { IMORZEContact cnt = null; Monitor.Enter(m_contacts); foreach (MORZEContact c in m_contacts) { if (c.isHasExt(ext) == true) { if (cnt == null) { cnt = c; } else { throw new Exception("multiple ext"); } } } Monitor.Exit(m_contacts); return(cnt); }
public MORZEMessages GetMessages(IMORZEContact contact) { Monitor.Enter(this); MORZEMessages msgs = null; if (m_Messages == null) { m_Messages = new List <MORZEMessages>(); } else { msgs = m_Messages.Where(x => x.ContactAddress == contact.GetAddress()).FirstOrDefault(); } if (msgs == null) { msgs = new MORZEMessages(contact); m_Messages.Add(msgs); } Monitor.Exit(this); return(msgs); }
private void properyToolStripMenuItem_Click(object sender, EventArgs e) { if (lvContact.SelectedItems.Count == 1) { dlgContact dlg = new dlgContact(); dlg.MORZEContact = lvContact.SelectedItems[0].Tag as IMORZEContact; if (dlg.ShowDialog() == DialogResult.OK) { IMORZEContact contact = dlg.MORZEContact; string err = m_book.UpdateContact(contact); if (string.IsNullOrEmpty(err) == true) { m_book.Save(); lvContact.SelectedItems[0].Text = contact.ToString(); } else { MessageBox.Show(err, Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } } dlg.Dispose(); } }
public MORZERecvMessages(IMORZEAccount acc, byte[] data) : base(data) { int off = 0; byte[] msg; byte[] hash; byte[] ext; m_responses = null; byte[] addascii = Encoding.ASCII.GetBytes(acc.GetMyAccount()); m_acc = acc; bool err = false; SMSHash mrzhash = SMSHash.None; while (off < data.Length && err == false) { msg = null; hash = null; ext = null; off++; //ttl ushort msglen = 0; switch (data[off]) //hash { case 0x01: //md5 hash = new byte[0x10]; mrzhash = SMSHash.MD5; break; case 0x81: hash = new byte[0x10]; mrzhash = SMSHash.MD5; ext = new byte[0x10]; break; default: err = true; break; } if (err == false) { off++; Array.Copy(data, off, hash, 0, hash.Length); off += hash.Length; if (ext != null) { Array.Copy(data, off, ext, 0, ext.Length); off += ext.Length; } msglen = BitConverter.ToUInt16(data, off); off += 2; if (msglen + off <= data.Length) { msg = new byte[msglen]; Array.Copy(data, off, msg, 0, msg.Length); off += msg.Length; } else { err = true; } } if (err == false) { bool add = false; if (checkHash(mrzhash, hash, msg) == true) { if (ext == null) {//данные зашифрованные открытым ключем byte asynclen = 0; byte[] smsg = null; byte[] async = null; asynclen = (byte)((int)addascii[0x10] ^ (int)msg[0]); if (asynclen > 0) { async = new byte[asynclen]; Array.Copy(msg, 1, async, 0, async.Length); if ((int)asynclen < msg.Length) { smsg = new byte[msg.Length - (1 + asynclen)]; Array.Copy(msg, 1 + asynclen, smsg, 0, smsg.Length); } else { if (msg.Length < asynclen) { err = true; } } if (err == false) { byte[] dec; byte[] tail = null; int taillength = msg.Length - asynclen - 1; if (taillength < 0) { err = true; } else { tail = new byte[taillength]; Array.Copy(msg, async.Length + 1, tail, 0, taillength); if (acc.decodeAsync(async, out dec) == true) { err = !operateAsync(dec, tail); } } } } else { err = true; } } else { add = true; } if (add == true) { if (m_msgData == null) { m_msgData = new List <byte[]>(); } if (m_msgHash == null) { m_msgHash = new List <byte[]>(); } if (m_msgExt == null) { m_msgExt = new List <byte[]>(); } m_msgData.Add(msg); m_msgHash.Add(hash); m_msgExt.Add(ext); IMORZEContact mc = m_acc.GetAddressBook().GetContact(ext); if (mc != null) { if (mc.PutReciveMessage(msg, hash, mrzhash, ext) == true) { MORZEContact cc = mc as MORZEContact; if (cc != null) { List <byte[]> r = cc.Responses; if (r != null) { foreach (byte[] i in r) { MORZESendMessage cmdMsgTyp2 = new MORZESendMessage(); cmdMsgTyp2.AddMessageBody(i, mrzhash, ext); if (m_responses == null) { m_responses = new List <SMSSendCommand>(); } m_responses.Add(cmdMsgTyp2); } cc.Responses.Clear(); } } } } } } //if (checkHash(mrzhash, hash, msg) == true) } } //while (off<data.Length && err==false) if (err == true || off != data.Length) { m_msgData = null; m_msgHash = null; m_msgExt = null; } }
private void OnRecvDeliveredMsgNotify(IMORZEContact sender, SMSHash hashid, byte[] hash) { m_account.SetDeliveredMessage(sender, hashid, hash); }
public MORZEMessages(IMORZEContact contact) { //m_account = account; //m_contact = contact; m_contactAddress = contact.GetAddress(); }