public void onSessionStarted(DialogStateEvent<BaseSipMessage> event) {
          super.onSessionStarted(event);
          BaseSipMessage mes = event.getTriggeringMessage();
          if (mes.getSessionExpires() != null) {
            Refresher refresher = getStackContext().getConfig().getRefresher();
            long refreshTime = getStackContext().getConfig().getSessionExpiresTime() / 2;
            final Dialog dialog = event.getDialog();
            // TODO it's recommended in RFC to divide this time by 2. Check.
            if (mes.getSessionExpires().getRefresher() != null) {
              refresher = mes.getSessionExpires().getRefresher();
              refreshTime = mes.getSessionExpires().getExpiresValue() / 2;
            }
            if ((event.getDialog().getInitiateParty() == InitiateParty.LOCAL
                    && refresher == Refresher.UAC)
                || (event.getDialog().getInitiateParty() == InitiateParty.REMOTE
                    && refresher == Refresher.UAS)) {
              // we are responsible for handling invite refresh
              TimeoutTimer.getInstance()
                  .startTimer(
                      new TimeoutListener() {

                        public void onTimeout() {
                          Logger.log(TAG, "listenerForInviteRefresh.onTimeout()");
                          try {
                            reInvite(dialog);
                          } catch (DialogStateException e) {
                            e.printStackTrace();
                            assert false
                                : "exception during invite refresh " + dialog + " " + e.toString();
                          }
                        }
                      },
                      32000 /*refreshTime*/);
            }
          }
        }