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 + -
显示快捷键?