code: public void dispose() {
      parent.unlistenRequestMessage(); // TODO (buddy) - remove or refactor
      // SipSession -
      // make it per-callId. Update Subscription to do the same.
  
      if (dialog != null) {
        if (dialog.getState() != null) {
          if (dialog.getState().getValue() == DialogState._CONFIRMED) {
            try {
              Request bye = dialog.createRequest(Request.BYE);
              parent.addAuthorizations(callId.getCallId(), bye);
              transaction = parent.sendRequestWithTransaction(bye, false, dialog);
            } catch (Exception e) {
              LOG.error("Disposing call, couldn't send BYE: " + e.toString(), e);
            }
          }
        }
  
        dialog.delete();
      }
  
      if (callId != null) {
        parent.clearAuthorizations(callId.getCallId());
      }
  
      parent.dropCall(this);
    }
docs: This method releases all resources associated with this SipCall. This SipCall object must not
  be used again after calling the dispose() method. BYE is sent to the far end if the call dialog
  is in the confirmed state.