Java 类org.jivesoftware.smack.sasl.SASLMechanism.Challenge 实例源码

项目:androidPN-client.    文件:BOSHPacketReader.java   
/**
 * Parse the received packets and notify the corresponding connection.
 * 
 * @param event the BOSH client response which includes the received packet.
 */
public void responseReceived(BOSHMessageEvent event) {
    AbstractBody body = event.getBody();
    if (body != null) {
        try {
            if (connection.sessionID == null) {
                connection.sessionID = body.getAttribute(BodyQName.create(BOSHConnection.BOSH_URI, "sid"));
            }
            if (connection.authID == null) {
                connection.authID = body.getAttribute(BodyQName.create(BOSHConnection.BOSH_URI, "authid"));
            }
            final XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES,
                    true);
            parser.setInput(new StringReader(body.toXML()));
            int eventType = parser.getEventType();
            do {
                eventType = parser.next();
                if (eventType == XmlPullParser.START_TAG) {
                    if (parser.getName().equals("body")) {
                        // ignore the container root element
                    } else if (parser.getName().equals("message")) {
                        connection.processPacket(PacketParserUtils.parseMessage(parser));
                    } else if (parser.getName().equals("iq")) {
                        connection.processPacket(PacketParserUtils.parseIQ(parser, connection));
                    } else if (parser.getName().equals("presence")) {
                        connection.processPacket(PacketParserUtils.parsePresence(parser));
                    } else if (parser.getName().equals("challenge")) {
                        // The server is challenging the SASL authentication
                        // made by the client
                        final String challengeData = parser.nextText();
                        connection.getSASLAuthentication()
                                .challengeReceived(challengeData);
                        connection.processPacket(new Challenge(
                                challengeData));
                    } else if (parser.getName().equals("success")) {
                        connection.send(ComposableBody.builder()
                                .setNamespaceDefinition("xmpp", BOSHConnection.XMPP_BOSH_NS)
                                .setAttribute(
                                        BodyQName.createWithPrefix(BOSHConnection.XMPP_BOSH_NS, "restart", "xmpp"),
                                        "true")
                                .setAttribute(
                                        BodyQName.create(BOSHConnection.BOSH_URI, "to"),
                                        connection.getServiceName())
                                .build());
                        connection.getSASLAuthentication().authenticated();
                        connection.processPacket(new Success(parser.nextText()));
                    } else if (parser.getName().equals("features")) {
                        parseFeatures(parser);
                    } else if (parser.getName().equals("failure")) {
                        if ("urn:ietf:params:xml:ns:xmpp-sasl".equals(parser.getNamespace(null))) {
                            final Failure failure = PacketParserUtils.parseSASLFailure(parser);
                            connection.getSASLAuthentication().authenticationFailed();
                            connection.processPacket(failure);
                        }
                    } else if (parser.getName().equals("error")) {
                        throw new XMPPException(PacketParserUtils.parseStreamError(parser));
                    }
                }
            } while (eventType != XmlPullParser.END_DOCUMENT);
        }
        catch (Exception e) {
            if (connection.isConnected()) {
                connection.notifyConnectionError(e);
            }
        }
    }
}
项目:jamppa    文件:PacketReader.java   
private void parseChallenge(Element doc) throws IOException {
    String challengeData = doc.getText();
    processPacket(new Challenge(doc));
    connection.getSASLAuthentication().challengeReceived(challengeData);
}
项目:telegraph    文件:BOSHPacketReader.java   
/**
 * Parse the received packets and notify the corresponding connection.
 * 
 * @param event the BOSH client response which includes the received packet.
 */
public void responseReceived(BOSHMessageEvent event) {
    AbstractBody body = event.getBody();
    if (body != null) {
        try {
            if (connection.sessionID == null) {
                connection.sessionID = body.getAttribute(BodyQName.create(BOSHConnection.BOSH_URI, "sid"));
            }
            if (connection.authID == null) {
                connection.authID = body.getAttribute(BodyQName.create(BOSHConnection.BOSH_URI, "authid"));
            }
            final XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES,
                    true);
            parser.setInput(new StringReader(body.toXML()));
            int eventType = parser.getEventType();
            do {
                eventType = parser.next();
                if (eventType == XmlPullParser.START_TAG) {
                    if (parser.getName().equals("body")) {
                        // ignore the container root element
                    } else if (parser.getName().equals("message")) {
                        connection.processPacket(PacketParserUtils.parseMessage(parser));
                    } else if (parser.getName().equals("iq")) {
                        connection.processPacket(PacketParserUtils.parseIQ(parser, connection));
                    } else if (parser.getName().equals("presence")) {
                        connection.processPacket(PacketParserUtils.parsePresence(parser));
                    } else if (parser.getName().equals("challenge")) {
                        // The server is challenging the SASL authentication
                        // made by the client
                        final String challengeData = parser.nextText();
                        connection.getSASLAuthentication()
                                .challengeReceived(challengeData);
                        connection.processPacket(new Challenge(
                                challengeData));
                    } else if (parser.getName().equals("success")) {
                        connection.send(ComposableBody.builder()
                                .setNamespaceDefinition("xmpp", BOSHConnection.XMPP_BOSH_NS)
                                .setAttribute(
                                        BodyQName.createWithPrefix(BOSHConnection.XMPP_BOSH_NS, "restart", "xmpp"),
                                        "true")
                                .setAttribute(
                                        BodyQName.create(BOSHConnection.BOSH_URI, "to"),
                                        connection.getServiceName())
                                .build());
                        connection.getSASLAuthentication().authenticated();
                        connection.processPacket(new Success(parser.nextText()));
                    } else if (parser.getName().equals("features")) {
                        parseFeatures(parser);
                    } else if (parser.getName().equals("failure")) {
                        if ("urn:ietf:params:xml:ns:xmpp-sasl".equals(parser.getNamespace(null))) {
                            final Failure failure = PacketParserUtils.parseSASLFailure(parser);
                            connection.getSASLAuthentication().authenticationFailed();
                            connection.processPacket(failure);
                        }
                    } else if (parser.getName().equals("error")) {
                        throw new XMPPException(PacketParserUtils.parseStreamError(parser));
                    }
                }
            } while (eventType != XmlPullParser.END_DOCUMENT);
        }
        catch (Exception e) {
            if (connection.isConnected()) {
                connection.notifyConnectionError(e);
            }
        }
    }
}
项目:NewCommunication-Android    文件:BOSHPacketReader.java   
/**
 * Parse the received packets and notify the corresponding connection.
 * 
 * @param event the BOSH client response which includes the received packet.
 */
public void responseReceived(BOSHMessageEvent event) {
    AbstractBody body = event.getBody();
    if (body != null) {
        try {
            if (connection.sessionID == null) {
                connection.sessionID = body.getAttribute(BodyQName.create(BOSHConnection.BOSH_URI, "sid"));
            }
            if (connection.authID == null) {
                connection.authID = body.getAttribute(BodyQName.create(BOSHConnection.BOSH_URI, "authid"));
            }
            final XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES,
                    true);
            parser.setInput(new StringReader(body.toXML()));
            int eventType = parser.getEventType();
            do {
                eventType = parser.next();
                if (eventType == XmlPullParser.START_TAG) {
                    if (parser.getName().equals("body")) {
                        // ignore the container root element
                    } else if (parser.getName().equals("message")) {
                        connection.processPacket(PacketParserUtils.parseMessage(parser));
                    } else if (parser.getName().equals("iq")) {
                        connection.processPacket(PacketParserUtils.parseIQ(parser, connection));
                    } else if (parser.getName().equals("presence")) {
                        connection.processPacket(PacketParserUtils.parsePresence(parser));
                    } else if (parser.getName().equals("challenge")) {
                        // The server is challenging the SASL authentication
                        // made by the client
                        final String challengeData = parser.nextText();
                        connection.getSASLAuthentication()
                                .challengeReceived(challengeData);
                        connection.processPacket(new Challenge(
                                challengeData));
                    } else if (parser.getName().equals("success")) {
                        connection.send(ComposableBody.builder()
                                .setNamespaceDefinition("xmpp", BOSHConnection.XMPP_BOSH_NS)
                                .setAttribute(
                                        BodyQName.createWithPrefix(BOSHConnection.XMPP_BOSH_NS, "restart", "xmpp"),
                                        "true")
                                .setAttribute(
                                        BodyQName.create(BOSHConnection.BOSH_URI, "to"),
                                        connection.getServiceName())
                                .build());
                        connection.getSASLAuthentication().authenticated();
                        connection.processPacket(new Success(parser.nextText()));
                    } else if (parser.getName().equals("features")) {
                        parseFeatures(parser);
                    } else if (parser.getName().equals("failure")) {
                        if ("urn:ietf:params:xml:ns:xmpp-sasl".equals(parser.getNamespace(null))) {
                            final Failure failure = PacketParserUtils.parseSASLFailure(parser);
                            connection.getSASLAuthentication().authenticationFailed();
                            connection.processPacket(failure);
                        }
                    } else if (parser.getName().equals("error")) {
                        throw new XMPPException(PacketParserUtils.parseStreamError(parser));
                    }
                }
            } while (eventType != XmlPullParser.END_DOCUMENT);
        }
        catch (Exception e) {
            if (connection.isConnected()) {
                connection.notifyConnectionError(e);
            }
        }
    }
}