protected void doRegister(SipServletRequest req) throws ServletException, IOException { logger.info("Received register request: " + req.getTo()); int response = SipServletResponse.SC_OK; SipServletResponse resp = req.createResponse(response); HashMap<String, String> users = (HashMap<String, String>) getServletContext().getAttribute("registeredUsersMap"); if (users == null) users = new HashMap<String, String>(); getServletContext().setAttribute("registeredUsersMap", users); Address address = req.getAddressHeader(CONTACT_HEADER); String fromURI = req.getFrom().getURI().toString(); int expires = address.getExpires(); if (expires < 0) { expires = req.getExpires(); } if (expires == 0) { users.remove(fromURI); logger.info("User " + fromURI + " unregistered"); } else { resp.setAddressHeader(CONTACT_HEADER, address); users.put(fromURI, address.getURI().toString()); logger.info("User " + fromURI + " registered with an Expire time of " + expires); } resp.send(); }
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(); } } } }