/// <summary> /// Executes the content of a parsed SMS message /// </summary> /// <param name="message">The SMS message to be executed</param> private void ExecuteMessageContent(ShortMessage message) { if (this.SmsReceived != null) { Core.Events.SmsReceivedArgs args = new Core.Events.SmsReceivedArgs(message); SmsReceived(this, args); } }
/// <summary> /// Handles the reception of an SMS message /// </summary> /// <param name="sender">The object that fired the event</param> /// <param name="e">The event arguments</param> private void SmsController_SmsReceived(object sender, Core.Events.SmsReceivedArgs e) { string[] parts = e.Message.Message.Split(' '); if (parts.Length == 1 && parts[0].Equals(Project.SmsModule.SelfRegistrationCode) && Project.SmsModule.AllowsSelfRegistration) { // self-register message received bool registered = Project.ExecuteSmsSelfRegister(e.Message.Sender); if (registered) { SmsController.SendSMS(e.Message.Sender, "Your phone has been registered to send messages."); AddStatusMessage("Self-registration successful", e.Message.Sender); } else { SmsController.SendSMS(e.Message.Sender, "Registration failed. Your phone may already be registered, or self-registration may be disabled."); AddStatusMessage("Self-registration failed", e.Message.Sender); } } else if (parts.Length == 3) { int updateType; bool success = int.TryParse(parts[0], out updateType); if (success) { if (Project.IsUserAuthorized(e.Message.Sender, updateType)) { AddStatusMessage(e.Message.Message, e.Message.Sender); } else { #region Rejection AddStatusMessage("Unauthorized message was received and discarded: " + e.Message.Message, e.Message.Sender); if (Project.SmsModule.SendsReadReceipts == true) { try { SmsController.SendSMS(e.Message.Sender, "Message was rejected. Reason: Unauthorized"); } catch (Exception ex) { AddStatusMessage("An exception was thrown while sending message rejection message to sender " + e.Message.Sender + ". Exception: " + ex.Message, "[SERVER]"); // just in case this is causing a problem when the port fails, close/dispose and re-open SmsController.SmsReceived -= SmsController_SmsReceived; SmsController.Dispose(); SmsController = new SmsController(SmsController.ModemConfiguration, Project.SmsModule.PollRate); SmsController.SmsReceived += SmsController_SmsReceived; } } return; #endregion // Rejection } bool operationWasSuccessful = true; try { operationWasSuccessful = Project.ExecuteSmsUpdate(e.Message); } catch (Exception ex) { operationWasSuccessful = false; AddStatusMessage("An exception was thrown while updating contact follow-up information. Exception: " + ex.Message, "[SERVER]"); } if (operationWasSuccessful && Project.SmsModule.SendsReadReceipts == true) { // send confirmation message try { SmsController.SendSMS(e.Message.Sender, "Message received"); } catch (Exception ex) { AddStatusMessage("An exception was thrown while sending message received message to sender " + e.Message.Sender + ". Exception: " + ex.Message, "[SERVER]"); // just in case this is causing a problem when the port fails, close/dispose and re-open SmsController.SmsReceived -= SmsController_SmsReceived; SmsController.Dispose(); SmsController = new SmsController(SmsController.ModemConfiguration, Project.SmsModule.PollRate); SmsController.SmsReceived += SmsController_SmsReceived; } } else if (!operationWasSuccessful && Project.SmsModule.SendsReadReceipts == true) { #region Rejection AddStatusMessage("Malformed message was discarded: " + e.Message.Message, e.Message.Sender); if (Project.SmsModule.SendsReadReceipts == true) { try { SmsController.SendSMS(e.Message.Sender, "Message was rejected. Reason: Incorrect format"); } catch (Exception ex) { AddStatusMessage("An exception was thrown while sending message rejection message to sender " + e.Message.Sender + ". Exception: " + ex.Message, "[SERVER]"); // just in case this is causing a problem when the port fails, close/dispose and re-open SmsController.SmsReceived -= SmsController_SmsReceived; SmsController.Dispose(); SmsController = new SmsController(SmsController.ModemConfiguration, Project.SmsModule.PollRate); SmsController.SmsReceived += SmsController_SmsReceived; } } #endregion // Rejection } } } else { AddStatusMessage("Malformed message was discarded: " + e.Message.Message, e.Message.Sender); if (Project.SmsModule.SendsReadReceipts == true) { try { SmsController.SendSMS(e.Message.Sender, "Message was rejected. Reason: Incorrect format"); } catch (Exception ex) { AddStatusMessage("An exception was thrown while sending message rejection message to sender " + e.Message.Sender + ". Exception: " + ex.Message, "[SERVER]"); // just in case this is causing a problem when the port fails, close/dispose and re-open SmsController.SmsReceived -= SmsController_SmsReceived; SmsController.Dispose(); SmsController = new SmsController(SmsController.ModemConfiguration, Project.SmsModule.PollRate); SmsController.SmsReceived += SmsController_SmsReceived; } } } }