//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); } } }
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}"); } }