Example #1
0
        /// <summary>
        /// Загружает список входящих сообщений
        /// </summary>
        private void LoadSmsInbox()
        {
            var messages = comm.ReadRawMessages(PhoneMessageStatus.All, PhoneStorageType.Sim);

            inbox = messages;

            // тут начинается пиздец
            longMsg = new List <SmsPdu>();
            prevMsg = null;
            foreach (ShortMessageFromPhone message in messages)
            {
                i = message.Index;
                SmsDeliverPdu SMSPDU = new SmsDeliverPdu(message.Data, true, -1);

                bool isMultiPart = SmartMessageDecoder.IsPartOfConcatMessage(SMSPDU);

                // если у сообщения есть датахедер, то скорее всего оно длинное
                if (SMSPDU.UserDataHeaderPresent && isMultiPart)
                {
                    var longMessage = DecodeLongMessage(SMSPDU);
                    if (longMessage != null)
                    {
                        // Показываем
                        DisplayMessage(longMessage);
                    }
                }
                else
                {
                    DisplayMessage(SMSPDU);
                }
            }
        }
Example #2
0
        private void Receiver_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            var comm        = sender as SmsModemBlock;
            var messagelist = comm.ReadRawMessages(PhoneMessageStatus.All, PhoneStorageType.Sim);

            var           messageString = string.Empty;
            StringBuilder sb            = new StringBuilder();

            if (messagelist.Length > 0)
            {
                // на случай, если длинное сообщение
                IList <SmsPdu> longMsg = new List <SmsPdu>();

                foreach (ShortMessageFromPhone message in messagelist)
                {
                    //сырая хуета
                    var pdu = new SmsDeliverPdu(message.Data, true, -1);

                    var origin = pdu.OriginatingAddress;
                    var txt    = pdu.UserDataText;

                    bool isMultiPart = SmartMessageDecoder.IsPartOfConcatMessage(pdu);

                    // если у сообщения есть датахедер, то скорее всего оно длинное
                    if (pdu.UserDataHeaderPresent && isMultiPart)
                    {
                        if (longMsg.Count == 0 || SmartMessageDecoder.ArePartOfSameMessage(longMsg.Last(), pdu))
                        {
                            longMsg.Add(pdu);
                        }
                        if (SmartMessageDecoder.AreAllConcatPartsPresent(longMsg)) // is Complete
                        {
                            txt = SmartMessageDecoder.CombineConcatMessageText(longMsg);
                        }
                        else
                        {
                            continue;
                        }
                    }
                    sb.AppendFormat("{0}: {1}", origin, txt);
                }

                var sms = sb.ToString();
                _hub.Invoke("SmsReceived", sms, comm.CurrentCommandID).Wait();
                comm.SetWaiting(false);
                //Subscriptions.Remove(comm);
            }
        }
Example #3
0
        private void comm_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            var messages = comm.ReadRawMessages(PhoneMessageStatus.ReceivedUnread, PhoneStorageType.Sim);

            foreach (ShortMessageFromPhone message in messages)
            {
                SmsDeliverPdu data        = new SmsDeliverPdu(message.Data, true, -1);
                bool          isMultiPart = SmartMessageDecoder.IsPartOfConcatMessage(data);
                if (isMultiPart)
                {
                    var longMessage = DecodeLongMessage(data);
                    if (longMessage != null)
                    {
                        DisplayMessage(longMessage);
                    }
                }
                else
                {
                    DisplayMessage(data);
                }
            }
        }
Example #4
0
        void ReceiveMessages()
        {
            Log.Add(LogLevel.Verbose, "SMS", "Reading SMS messages from device...");
            Stopwatch sw = new Stopwatch();

            sw.Start();

            DecodedShortMessage[] msgs = _gsm.ReadMessages(PhoneMessageStatus.All, "MT");

            Log.Add(LogLevel.Verbose, "SMS", String.Format("{0} messages in storage", msgs.Length));

            foreach (DecodedShortMessage msg in msgs)
            {
                string   from     = string.Empty;
                string   text     = string.Empty;
                DateTime received = DateTime.Now;

                bool _fullMessageReceived = false;

                SmsDeliverPdu pdu = (SmsDeliverPdu)msg.Data;

                if (SmartMessageDecoder.IsPartOfConcatMessage(pdu))
                {
                    IConcatenationInfo info = SmartMessageDecoder.GetConcatenationInfo(pdu);

                    Log.Add(LogLevel.Debug, "SMS", string.Format("Received multi-part message {0}: {1}/{2}", info.ReferenceNumber, info.CurrentNumber, info.TotalMessages));

                    if (_concatPdus.ContainsKey(info.ReferenceNumber))
                    {
                        _concatPdus[info.ReferenceNumber].Add(pdu);
                    }
                    else
                    {
                        _concatPdus.Add(info.ReferenceNumber, new List <SmsPdu>()
                        {
                            pdu
                        });
                    }

                    if (SmartMessageDecoder.AreAllConcatPartsPresent(_concatPdus[info.ReferenceNumber]))
                    {
                        _fullMessageReceived = true;

                        from     = pdu.OriginatingAddress;
                        received = pdu.SCTimestamp.ToDateTime();
                        text     = SmartMessageDecoder.CombineConcatMessageText(_concatPdus[info.ReferenceNumber]);
                    }
                }
                else
                {
                    Log.Add(LogLevel.Debug, "SMS", "Received single-part SMS.");

                    _fullMessageReceived = true;

                    from     = String.Format("{0}", pdu.OriginatingAddress);
                    received = pdu.SCTimestamp.ToDateTime();
                    text     = pdu.UserDataText;
                }

                if (_fullMessageReceived)
                {
                    Log.Add(LogLevel.Info, "SMS", String.Format("Incoming SMS from {0}", from));

                    if (NormalizeNumbers)
                    {
                        from = NormalizeNumber(from);
                    }

                    if (_resolveNumbers)
                    {
                        from = ResolveNameByNumber(from);
                    }

                    Log.Add(LogLevel.Debug, "SMS", String.Format("Message from {0} at {1}: {2}", from, received, text));

                    if (OnMessageReceived != null)
                    {
                        OnMessageReceived(this, new Message(from, received, text));
                    }
                }

                _gsm.DeleteMessage(msg.Index, msg.Storage);
            }
            sw.Stop();

            Log.Add(LogLevel.Verbose, "SMS", String.Format("Reading took {0}ms", sw.Elapsed.TotalMilliseconds));
        }