@Override
  protected void onHandleIntent(Intent intent) {
    if (intent.getAction().equals(ACTION_ENROL_SMS)) {

      doEnrolmentBySMS(this);

    } else if (intent.getAction().equals(ACTION_VALIDATE)) {
      // Get the validation code from the SMS
      String smsText = intent.getStringExtra(VALIDATION_CODE);
      handleValidationResponseSMS(smsText);
    } else if (intent.getAction().equals(ACTION_SCAN_SMS_INBOX)) {

      // TODO
      // typically invoked when
      // - app starts
      // - phone boots

    } else if (intent.getAction().equals(ACTION_RETRY_ENROLMENT)) {

      // TODO - retry enrolment or validation
      // typically invoked
      // - phone boots
      // - network status changes
      // - app starts

    } else if (intent.getAction().equals(ACTION_SMS_FAILED)) {
      // Failed to send the SMS

      notification =
          new Notification(
              R.drawable.icon22,
              getText(R.string.enrolment_sms_sending_failed),
              new Date().getTime());
      Intent notificationIntent = new Intent(this, Sipdroid.class);
      PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
      notification.setLatestEventInfo(
          this,
          getText(R.string.enrolment_sms_sending_failed_title),
          getText(R.string.enrolment_sms_sending_failed),
          contentIntent);
      nm.notify(10, notification);
      LumicallDataSource ds = new LumicallDataSource(this);
      ds.open();
      for (SIP5060ProvisioningRequest req : ds.getSIP5060ProvisioningRequests())
        ds.deleteSIP5060ProvisioningRequest(req);
      ds.close();
      logger.warning(
          "SMS sending failed, all provisioning requests deleted, user must start again");
    }
  }
  protected void setupSIP(Context context, SIP5060ProvisioningRequest req) throws IOException {

    AppProperties props = new AppProperties(context);

    // Setup the SIP preferences
    SharedPreferences settings =
        context.getSharedPreferences(RegisterAccount.PREFS_FILE, Context.MODE_PRIVATE);

    SharedPreferences sipSettings =
        context.getSharedPreferences(Settings.sharedPrefsFile, Context.MODE_PRIVATE);
    Editor edSIP = sipSettings.edit();

    String num = req.getPhoneNumber();

    LumicallDataSource ds = new LumicallDataSource(context);
    ds.open();
    SIPIdentity sipIdentity = createSIPIdentity(props, settings, req);
    for (SIPIdentity s : ds.getSIPIdentities()) {
      if (s.getUri().equals(sipIdentity.getUri())) sipIdentity.setId(s.getId());
    }
    ds.persistSIPIdentity(sipIdentity);
    ds.deleteSIP5060ProvisioningRequest(req);
    ds.close();
    edSIP.putString(Settings.PREF_SIP, Long.toString(sipIdentity.getId()));
    if (!sipSettings.contains(Settings.PREF_TEL)) edSIP.putString(Settings.PREF_TEL, "-1");

    /* edSIP.putString(Settings.PREF_USERNAME, settings.getString(RegisterAccount.PREF_PHONE_NUMBER, null));
    edSIP.putString(Settings.PREF_PASSWORD, settings.getString(RegisterAccount.PREF_SECRET, null));
    edSIP.putString(Settings.PREF_SERVER, DEFAULT_SIP_SERVER);
    edSIP.putString(Settings.PREF_DOMAIN, DEFAULT_SIP_DOMAIN);
    edSIP.putString(Settings.PREF_PROTOCOL, "tcp");  // FIXME - change to TLS
    edSIP.putBoolean(Settings.PREF_STUN, true);
    edSIP.putString(Settings.PREF_STUN_SERVER, DEFAULT_STUN_SERVER);
    edSIP.putString(Settings.PREF_STUN_SERVER_PORT, "" + DEFAULT_STUN_SERVER_PORT); */
    edSIP.putBoolean(Settings.PREF_WLAN, true);
    edSIP.putBoolean(Settings.PREF_EDGE, true);
    edSIP.putBoolean(Settings.PREF_3G, true);
    edSIP.putBoolean(Settings.PREF_ON, true);

    if (edSIP.commit()) Log.v(TAG, "Configured prefs for number " + num);
    else {
      Log.e(TAG, "error while committing preferences");
    }

    // Receiver.engine(context).updateDNS();
    Receiver.engine(context).halt();
    Receiver.engine(context).StartEngine();
  }