/** * Method description * * @param packet * @param session * @param repo * @param results * @param settings * @throws XMPPException */ @Override public void process( final Packet packet, final XMPPResourceConnection session, final NonAuthUserRepository repo, final Queue<Packet> results, final Map<String, Object> settings) throws XMPPException { if (session == null) { return; } // end of if (session == null) if (!session.isAuthorized()) { results.offer( session .getAuthState() .getResponseMessage(packet, "Session is not yet authorized.", false)); return; } // end of if (!session.isAuthorized()) // TODO: test what happens if resource is bound multiple times for the same // user session. in particular if XMPPSession object removes the old // resource from the list. Element request = packet.getElement(); StanzaType type = packet.getType(); try { switch (type) { case set: String resource = request.getChildCDataStaticStr(Iq.IQ_BIND_RESOURCE_PATH); try { if ((resource == null) || resource.trim().isEmpty()) { resource = resourceDefPrefix + (++resGenerator); session.setResource(resource); } else { try { session.setResource(resource); } catch (TigaseStringprepException ex) { // User provided resource is invalid, generating different // server one log.log( Level.INFO, "Incrrect resource provided by the user: {0}, generating a " + "different one by the server.", resource); resource = resourceDefPrefix + (++resGenerator); session.setResource(resource); } } // end of if (resource == null) else } catch (TigaseStringprepException ex) { log.log( Level.WARNING, "stringprep problem with the server generated resource: {0}", resource); } packet.initVars(session.getJID(), packet.getStanzaTo()); // session.putSessionData(RESOURCE_KEY, "true"); results.offer(packet.okResult(new Element("jid", session.getJID().toString()), 1)); break; default: results.offer( Authorization.BAD_REQUEST.getResponseMessage( packet, "Bind type is incorrect", false)); break; } // end of switch (type) } catch (NotAuthorizedException e) { results.offer( session .getAuthState() .getResponseMessage(packet, "Session is not yet authorized.", false)); } // end of try-catch }