basetransport.java
来自「基于Jabber协议的即时消息服务器」· Java 代码 · 共 1,590 行 · 第 1/5 页
JAVA
1,590 行
Log.debug("Unable to handle iq request:" + xmlns); IQ error = IQ.createResultIQ(packet); error.setError(Condition.bad_request); reply.add(error); } return reply; } /** * Handle service discovery info request. * * @param packet An IQ packet in the disco info namespace. * @return A list of IQ packets to be returned to the user. */ private List<Packet> handleDiscoInfo(IQ packet) { List<Packet> reply = new ArrayList<Packet>(); if (packet.getTo().getNode() == null) { // Requested info from transport itself. IQ result = IQ.createResultIQ(packet); Element response = DocumentHelper.createElement(QName.get("query", DISCO_INFO)); response.addElement("identity") .addAttribute("category", "gateway") .addAttribute("type", this.transportType.toString()) .addAttribute("name", this.description); response.addElement("feature") .addAttribute("var", IQ_GATEWAY); response.addElement("feature") .addAttribute("var", IQ_REGISTER); response.addElement("feature") .addAttribute("var", IQ_VERSION); result.setChildElement(response); reply.add(result); } return reply; } /** * Handle service discovery items request. * * @param packet An IQ packet in the disco items namespace. * @return A list of IQ packets to be returned to the user. */ private List<Packet> handleDiscoItems(IQ packet) { List<Packet> reply = new ArrayList<Packet>(); IQ result = IQ.createResultIQ(packet); reply.add(result); return reply; } /** * Handle gateway translation service request. * * @param packet An IQ packet in the iq gateway namespace. * @return A list of IQ packets to be returned to the user. */ private List<Packet> handleIQGateway(IQ packet) { List<Packet> reply = new ArrayList<Packet>(); if (packet.getType() == IQ.Type.get) { IQ result = IQ.createResultIQ(packet); Element query = DocumentHelper.createElement(QName.get("query", IQ_GATEWAY)); query.addElement("desc").addText("Please enter the person's "+this.getName()+" username."); query.addElement("prompt"); result.setChildElement(query); reply.add(result); } else if (packet.getType() == IQ.Type.set) { IQ result = IQ.createResultIQ(packet); String prompt = null; Element promptEl = packet.getChildElement().element("prompt"); if (promptEl != null) { prompt = promptEl.getTextTrim(); } if (prompt == null) { result.setError(Condition.bad_request); } else { JID jid = this.convertIDToJID(prompt); Element query = DocumentHelper.createElement(QName.get("query", IQ_GATEWAY)); // This is what Psi expects query.addElement("prompt").addText(jid.toString()); // This is JEP complient query.addElement("jid").addText(jid.toString()); result.setChildElement(query); } reply.add(result); } return reply; } /** * Handle registration request. * * @param packet An IQ packet in the iq registration namespace. * @return A list of IQ packets to be returned to the user. */ private List<Packet> handleIQRegister(IQ packet) { List<Packet> reply = new ArrayList<Packet>(); JID from = packet.getFrom(); JID to = packet.getTo(); Element remove = packet.getChildElement().element("remove"); if (remove != null) { // User wants to unregister. =( // this.convinceNotToLeave() ... kidding. IQ result = IQ.createResultIQ(packet); // Tell the end user the transport went byebye. Presence unavailable = new Presence(Presence.Type.unavailable); unavailable.setTo(from); unavailable.setFrom(to); reply.add(unavailable); try { this.deleteRegistration(from); } catch (UserNotFoundException e) { Log.error("Error cleaning up contact list of: " + from); result.setError(Condition.bad_request); } reply.add(result); } else { // User wants to register with the transport. String username = null; String password = null; String nickname = null; try { DataForm form = new DataForm(packet.getChildElement().element("x")); List<FormField> fields = form.getFields(); for (FormField field : fields) { String var = field.getVariable(); if (var.equals("username")) { username = field.getValues().get(0); } else if (var.equals("password")) { password = field.getValues().get(0); } else if (var.equals("nick")) { nickname = field.getValues().get(0); } } } catch (Exception e) { // No with data form apparantly } if (packet.getType() == IQ.Type.set) { Element userEl = packet.getChildElement().element("username"); Element passEl = packet.getChildElement().element("password"); Element nickEl = packet.getChildElement().element("nick"); if (userEl != null) { username = userEl.getTextTrim(); } if (passEl != null) { password = passEl.getTextTrim(); } if (nickEl != null) { nickname = nickEl.getTextTrim(); } username = (username == null || username.equals("")) ? null : username; password = (password == null || password.equals("")) ? null : password; nickname = (nickname == null || nickname.equals("")) ? null : nickname; if ( username == null || (isPasswordRequired() && password == null) || (isNicknameRequired() && nickname == null)) { // Invalid information from stanza, lets yell. IQ result = IQ.createResultIQ(packet); result.setError(Condition.bad_request); reply.add(result); } else { Log.info("Registered " + packet.getFrom() + " as " + username); IQ result = IQ.createResultIQ(packet); Element response = DocumentHelper.createElement(QName.get("query", IQ_REGISTER)); result.setChildElement(response); reply.add(result); try { this.addNewRegistration(from, username, password, nickname); // Lets check what their presence is, maybe log them in immediately. SessionManager sessionManager = SessionManager.getInstance(); String user = from.getNode(); if (sessionManager.getSessionCount(user) > 0) { for (ClientSession session : sessionManager.getSessions(user)) { availableSession(session, session.getPresence()); } } } catch (UserNotFoundException e) { Log.error("Someone attempted to register with the gateway who is not registered with the server: " + from); IQ eresult = IQ.createResultIQ(packet); eresult.setError(Condition.bad_request); reply.add(eresult); } catch (IllegalAccessException e) { Log.error("Someone who is not a user of this server tried to register with the transport: "+from); IQ eresult = IQ.createResultIQ(packet); eresult.setError(Condition.not_allowed); reply.add(eresult); } catch (IllegalArgumentException e) { Log.error("Someone attempted to register with the gateway with an invalid username: " + from); IQ eresult = IQ.createResultIQ(packet); eresult.setError(Condition.bad_request); reply.add(eresult); } } } else if (packet.getType() == IQ.Type.get) { Element response = DocumentHelper.createElement(QName.get("query", IQ_REGISTER)); IQ result = IQ.createResultIQ(packet); String curUsername = null; String curPassword = null; String curNickname = null; Boolean registered = false; Collection<Registration> registrations = registrationManager.getRegistrations(from, this.transportType); if (registrations.iterator().hasNext()) { Registration registration = registrations.iterator().next(); curUsername = registration.getUsername(); curPassword = registration.getPassword(); curNickname = registration.getNickname(); registered = true; } DataForm form = new DataForm(DataForm.Type.form); form.addInstruction(getTerminologyRegistration()); FormField usernameField = form.addField(); usernameField.setLabel(getTerminologyUsername()); usernameField.setVariable("username"); usernameField.setType(FormField.Type.text_single); if (curUsername != null) { usernameField.addValue(curUsername); } FormField passwordField = form.addField(); passwordField.setLabel(getTerminologyPassword()); passwordField.setVariable("password"); passwordField.setType(FormField.Type.text_private); if (curPassword != null) { passwordField.addValue(curPassword); } String nicknameTerm = getTerminologyNickname(); if (nicknameTerm != null) { FormField nicknameField = form.addField(); nicknameField.setLabel(nicknameTerm); nicknameField.setVariable("nick"); nicknameField.setType(FormField.Type.text_single); if (curNickname != null) { nicknameField.addValue(curNickname); } } response.add(form.getElement()); response.addElement("instructions").addText(getTerminologyRegistration()); if (registered) { response.addElement("registered"); response.addElement("username").addText(curUsername); if (curPassword == null) { response.addElement("password"); } else { response.addElement("password").addText(curPassword); } if (nicknameTerm != null) { if (curNickname == null) { response.addElement("nick"); } else { response.addElement("nick").addText(curNickname); } } } else { response.addElement("username"); response.addElement("password"); if (nicknameTerm != null) { response.addElement("nick"); } } result.setChildElement(response); reply.add(result); } } return reply; } /** * Handle version request. * * @param packet An IQ packet in the iq version namespace. * @return A list of IQ packets to be returned to the user. */ private List<Packet> handleIQVersion(IQ packet) { List<Packet> reply = new ArrayList<Packet>(); if (packet.getType() == IQ.Type.get) { IQ result = IQ.createResultIQ(packet);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?