private void forward(SipResponse response) { /* if (_tx.getRequest().getTo().getParameter("tag") == null) { if (response.getStatus() < 300 && (response.isInvite() || response.isSubscribe())) { response.session().registerProxy(response); } } */ if (response.getStatus() >= 300) response.session().updateState(response, false); _tx.send(response); response.setCommitted(true); }
public void handleResponse(SipResponse response) { _response = response; int status = response.getStatus(); if (status == 100) return; if (_tx.isCompleted() && !response.is2xx()) { if (LOG.isDebugEnabled()) LOG.debug("Dropping response " + response.getStatus() + " since proxy is completed"); return; } if (LOG.isDebugEnabled()) LOG.debug("Got response {}", response, null); SipRequest request = _tx.getRequest(); Session session = request.session(); if (request.isInitial() && status < 300) { if (!session.isSameDialog(response)) { AppSession appSession = session.appSession(); Session derived = appSession.getSession(response); if (derived == null) derived = appSession.createDerivedSession(session); session = derived; } } response.setSession(session); if (status < 300) session.updateState(response, false); response.removeTopVia(); response.setProxyBranch(this); if (status < 200) { if (response.isInvite()) updateTimerC(); invokeServlet(response); forward(response); } else { _actives--; stopTimerC(); if ((300 <= status && status < 400) && _branchRecurse) { try { Iterator<Address> it = response.getAddressHeaders(SipHeaders.CONTACT); while (it.hasNext()) { Address contact = (Address) it.next(); if (contact.getURI().isSipURI()) { Branch branch = addTarget(contact.getURI()); if (branch != null) { _recursedBranches = LazyList.add(_recursedBranches, branch); branch.setRecurse(_branchRecurse); } } } } catch (ServletParseException e) { LOG.ignore(e); } } if (_best == null || (_best.getStatus() < 600 && (status < _best.getStatus() || status >= 600))) { _best = response; } if (status >= 600) { SipProxy.this.doCancel(null, null, null); } if (status < 300) { invokeServlet(response); forward(response); SipProxy.this.doCancel(null, null, null); } else { if (LazyList.size(_targets) > 0) startProxy(); if (_actives > 0) { response.setBranchResponse(true); invokeServlet(response); } else { tryFinal(); } } } }