public void errResponseReceived(final SipResponse sipResponse) { Dialog dialog = dialogManager.getDialog(sipResponse); if (dialog != null) { dialog.receivedOrSent300To699(); dialogManager.removeDialog(dialog.getId()); } int statusCode = sipResponse.getStatusCode(); if (statusCode == RFC3261.CODE_401_UNAUTHORIZED || statusCode == RFC3261.CODE_407_PROXY_AUTHENTICATION_REQUIRED && !challenged) { InviteClientTransaction inviteClientTransaction = (InviteClientTransaction) transactionManager.getClientTransaction(sipResponse); SipRequest sipRequest = inviteClientTransaction.getRequest(); String password = userAgent.getConfig().getPassword(); if (password != null && !"".equals(password.trim())) { challengeManager.handleChallenge(sipRequest, sipResponse); } challenged = true; return; } else { challenged = false; } SipListener sipListener = userAgent.getSipListener(); if (sipListener != null) { sipListener.error(sipResponse); } List<String> guiClosedCallIds = userAgent.getUac().getGuiClosedCallIds(); String callId = Utils.getMessageCallId(sipResponse); if (guiClosedCallIds.contains(callId)) { guiClosedCallIds.remove(callId); } userAgent.getMediaManager().setDatagramSocket(null); }