예제 #1
0
        //z.B.  +CMGS: 123
        private static void ParseMessageReference(string input)
        {
            string[] lines = input.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

            foreach (string line in lines)
            {
                if (line.StartsWith(Answer_SmsSent))
                {
                    if (!int.TryParse(line.Replace(Answer_SmsSent, string.Empty).Trim(), out int reference))
                    {
                        Console.WriteLine("Für die gesendete SMS konnte keine Referenz-Nr. ermittelt werden. Empfangsbestätigungen auf Plausibilität prüfen! Empfangen:\r\n>{0}<\r\n\r\nErwartete Empfangsbestätigung für SMS an {1}\r\n{2}",
                                          line, currentSendSms.Item1, currentSendSms.Item2);

                        currentSendSms = null;
                        return;
                    }
                    else
                    {
                        Console.WriteLine("Vergebe Referenz {0} für SMS an {1}\r\n{2}", reference, currentSendSms.Item1, currentSendSms.Item2);
                    }

                    ParseSms sentSms = new ParseSms()
                    {
                        InternalReference = reference,
                        Sender            = currentSendSms.Item1,
                        TimeUtc           = DateTime.UtcNow,
                        Message           = currentSendSms.Item2 // Sinnvoll?
                    };


                    #region Sendungsverfolgung siehe auch ParseNewStatusReport()
                    WaitingForStatusReport.Add(sentSms);
                    #endregion

                    currentSendSms = null; //Freigeben für nächste SMS

                    SmsSentEvent?.Invoke(null, sentSms);
                }
            }
        }
예제 #2
0
        private static void ParseNewSms(string[] header, string[] line)
        {
            //Dies ist vorher festgestellt als eine SMS-Nachricht
            try
            {
#if DEBUG
                foreach (var item in header)
                {
                    Console.WriteLine($">{item}<");
                }
                Console.WriteLine("Header.length = " + header.Length);
#endif

                if (header.Length < 5)
                {
                    return;                    //Ungültiger Header!
                }
                //<index> Index
                int.TryParse(header[(int)HeaderSms.Index], out int index);

                //<stat> Status
                string status = header[(int)HeaderSms.MessageStatus].Trim('"');

                //<oa>/<da> OriginatingAddress/ DestinationAddress | <fo> First Oxctet
                string sender = header[(int)HeaderSms.Sender].Trim('"');

                //[<alpha>] PhoneBookentry für <oa>/<da>
                string SenderPhoneBookEntry = header[3].Trim('"');

                //[<scts>] Service Centre Time Stamp | [<ra>] Recipient Address
                DateTime TimeUtc = ParseUtcTime(header[4].Trim('"'), header[5].Trim('"'));

                string messageText = string.Empty;

                for (int i = 1; i < line.Length; i++)
                {
                    if (line[i] == "OK")
                    {
                        break;                  //und OK-Ausgabe am Ende nicht speichern
                    }
                    if (line[i].Length == 0)
                    {
                        continue;                      // keine Leerzeilen
                    }
                    messageText += line[i] + " ";
                }

                messageText = messageText.Trim();

                if (messageText.StartsWith("00") && messageText.Length > 20) //Kein Leerzeichen, startet mit '00' und lang: Vermutung Sms-Inhalt ist in UCS2 Formatiert wegen Sonderzeichen z.B. °C, ä, ß...
                {
                    messageText = DecodeUcs2(messageText);
                }
                //else
                //{
                //    messageText = DecodeGsm(messageText); // schmeißt Exception
                //}

                ParseSms sms = new ParseSms
                {
                    RawHeader            = line[0],
                    Index                = index,
                    MessageStatus        = status,
                    Sender               = sender,
                    SenderPhonebookEntry = SenderPhoneBookEntry,
                    TimeUtc              = TimeUtc,
                    Message              = UmlauteDecode(messageText) // Sinnvoll?
                };


                // if (header.Length > 5) // Letzte werden beim MC75 nicht ausgegeben
                // {
                //     int.TryParse(header[6], out int numberTypeInt);

                //     int.TryParse(header[7], out int textLength);

                //
                //     sms.MessageLength = textLength;
                //     sms.PhoneNumberType = numberTypeInt;
                //}

                SmsRecievedEvent?.Invoke(null, sms);
            }
            catch (Exception ex)
            {
                throw new Exception($"FEHLER ParseNewSms(): {ex.GetType()}\r\n{ex.Message}\r\n{ex.StackTrace}");
            }
        }