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); }
public bool AddReciveredMessage(IMORZEContact from, MORZEMessage msg) { bool bres = false; MORZEMessages msgs = GetMessages(from); if (msgs != null) { msgs.AddRecivedMessages(msg); } return(bres); }
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); }
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); }
/// <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 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); }
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); }