导航菜单

页面标题

页面副标题

95爱播免登录版 v3.1.9 - PacketParserUtils.java 源代码

正在查看: 95爱播免登录版 v3.1.9 应用的 PacketParserUtils.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package org.jivesoftware.smack.util;

import com.meizu.cloud.pushsdk.constants.PushConstants;
import com.mobile.auth.gatewayauth.Constant;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.packet.Authentication;
import org.jivesoftware.smack.packet.Bind;
import org.jivesoftware.smack.packet.DefaultPacketExtension;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.PrivacyItem;
import org.jivesoftware.smack.packet.Registration;
import org.jivesoftware.smack.packet.RosterPacket;
import org.jivesoftware.smack.packet.StreamError;
import org.jivesoftware.smack.packet.XMPPError;
import org.jivesoftware.smack.provider.IQProvider;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.provider.ProviderManager;
import org.jivesoftware.smack.sasl.SASLMechanism;
import org.jivesoftware.smackx.FormField;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

public class PacketParserUtils {
    private static final String PROPERTIES_NAMESPACE = "http://www.jivesoftware.com/xmlns/xmpp/properties";

    public static class UnparsedResultIQ extends IQ {
        private final String str;

        public UnparsedResultIQ(String str) {
            this.str = str;
        }

        @Override
        public String getChildElementXML() {
            return this.str;
        }
    }

    private static Object decode(Class<?> cls, String str) throws Exception {
        if (cls.getName().equals("java.lang.String")) {
            return str;
        }
        if (cls.getName().equals(FormField.TYPE_BOOLEAN)) {
            return Boolean.valueOf(str);
        }
        if (cls.getName().equals("int")) {
            return Integer.valueOf(str);
        }
        if (cls.getName().equals("long")) {
            return Long.valueOf(str);
        }
        if (cls.getName().equals("float")) {
            return Float.valueOf(str);
        }
        if (cls.getName().equals("double")) {
            return Double.valueOf(str);
        }
        if (cls.getName().equals("java.lang.Class")) {
            return Class.forName(str);
        }
        return null;
    }

    private static String getLanguageAttribute(XmlPullParser xmlPullParser) {
        for (int i2 = 0; i2 < xmlPullParser.getAttributeCount(); i2++) {
            String attributeName = xmlPullParser.getAttributeName(i2);
            if ("xml:lang".equals(attributeName) || ("lang".equals(attributeName) && "xml".equals(xmlPullParser.getAttributePrefix(i2)))) {
                return xmlPullParser.getAttributeValue(i2);
            }
        }
        return null;
    }

    private static Authentication parseAuthentication(XmlPullParser xmlPullParser) throws Exception {
        Authentication authentication = new Authentication();
        boolean z = false;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                if (xmlPullParser.getName().equals("username")) {
                    authentication.setUsername(xmlPullParser.nextText());
                } else if (xmlPullParser.getName().equals("password")) {
                    authentication.setPassword(xmlPullParser.nextText());
                } else if (xmlPullParser.getName().equals("digest")) {
                    authentication.setDigest(xmlPullParser.nextText());
                } else if (xmlPullParser.getName().equals("resource")) {
                    authentication.setResource(xmlPullParser.nextText());
                }
            } else if (next == 3 && xmlPullParser.getName().equals("query")) {
                z = true;
            }
        }
        return authentication;
    }

    public static Collection<String> parseCompressionMethods(XmlPullParser xmlPullParser) throws IOException, XmlPullParserException {
        ArrayList arrayList = new ArrayList();
        boolean z = false;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                if (xmlPullParser.getName().equals(PushConstants.MZ_PUSH_MESSAGE_METHOD)) {
                    arrayList.add(xmlPullParser.nextText());
                }
            } else if (next == 3 && xmlPullParser.getName().equals("compression")) {
                z = true;
            }
        }
        return arrayList;
    }

    private static String parseContent(XmlPullParser xmlPullParser) throws XmlPullParserException, IOException {
        StringBuffer stringBuffer = new StringBuffer();
        int depth = xmlPullParser.getDepth();
        while (true) {
            if (xmlPullParser.next() == 3 && xmlPullParser.getDepth() == depth) {
                return stringBuffer.toString();
            }
            stringBuffer.append(xmlPullParser.getText());
        }
    }

    public static XMPPError parseError(XmlPullParser xmlPullParser) throws Exception {
        ArrayList arrayList = new ArrayList();
        boolean z = false;
        String str = "-1";
        String str2 = null;
        for (int i2 = 0; i2 < xmlPullParser.getAttributeCount(); i2++) {
            if (xmlPullParser.getAttributeName(i2).equals("code")) {
                str = xmlPullParser.getAttributeValue("", "code");
            }
            if (xmlPullParser.getAttributeName(i2).equals("type")) {
                str2 = xmlPullParser.getAttributeValue("", "type");
            }
        }
        String str3 = null;
        String str4 = null;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                if (xmlPullParser.getName().equals("text")) {
                    str4 = xmlPullParser.nextText();
                } else {
                    String name = xmlPullParser.getName();
                    String namespace = xmlPullParser.getNamespace();
                    if ("urn:ietf:params:xml:ns:xmpp-stanzas".equals(namespace)) {
                        str3 = name;
                    } else {
                        arrayList.add(parsePacketExtension(name, namespace, xmlPullParser));
                    }
                }
            } else if (next == 3 && xmlPullParser.getName().equals("error")) {
                z = true;
            }
        }
        XMPPError.Type type = XMPPError.Type.CANCEL;
        if (str2 != null) {
            try {
                type = XMPPError.Type.valueOf(str2.toUpperCase());
            } catch (IllegalArgumentException e2) {
                e2.printStackTrace();
            }
        }
        return new XMPPError(Integer.parseInt(str), type, str3, str4, arrayList);
    }

    public static IQ parseIQ(XmlPullParser xmlPullParser, Connection connection) throws Exception {
        String attributeValue = xmlPullParser.getAttributeValue("", "id");
        String attributeValue2 = xmlPullParser.getAttributeValue("", PrivacyItem.PrivacyRule.SUBSCRIPTION_TO);
        String attributeValue3 = xmlPullParser.getAttributeValue("", PrivacyItem.PrivacyRule.SUBSCRIPTION_FROM);
        IQ.Type fromString = IQ.Type.fromString(xmlPullParser.getAttributeValue("", "type"));
        boolean z = false;
        IQ iq = null;
        XMPPError xMPPError = null;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                String name = xmlPullParser.getName();
                String namespace = xmlPullParser.getNamespace();
                if (name.equals("error")) {
                    xMPPError = parseError(xmlPullParser);
                } else if (name.equals("query") && namespace.equals("jabber:iq:auth")) {
                    iq = parseAuthentication(xmlPullParser);
                } else if (name.equals("query") && namespace.equals("jabber:iq:roster")) {
                    iq = parseRoster(xmlPullParser);
                } else if (name.equals("query") && namespace.equals("jabber:iq:register")) {
                    iq = parseRegistration(xmlPullParser);
                } else if (name.equals("bind") && namespace.equals("urn:ietf:params:xml:ns:xmpp-bind")) {
                    iq = parseResourceBinding(xmlPullParser);
                } else {
                    Object iQProvider = ProviderManager.getInstance().getIQProvider(name, namespace);
                    if (iQProvider != null) {
                        if (iQProvider instanceof IQProvider) {
                            iq = ((IQProvider) iQProvider).parseIQ(xmlPullParser);
                        } else if (iQProvider instanceof Class) {
                            iq = (IQ) parseWithIntrospection(name, (Class) iQProvider, xmlPullParser);
                        }
                    } else if (IQ.Type.RESULT == fromString) {
                        iq = new UnparsedResultIQ(parseContent(xmlPullParser));
                    }
                }
            } else if (next == 3 && xmlPullParser.getName().equals("iq")) {
                z = true;
            }
        }
        if (iq == null) {
            if (IQ.Type.GET == fromString || IQ.Type.SET == fromString) {
                IQ iq2 = new IQ() {
                    @Override
                    public String getChildElementXML() {
                        return null;
                    }
                };
                iq2.setPacketID(attributeValue);
                iq2.setTo(attributeValue3);
                iq2.setFrom(attributeValue2);
                iq2.setType(IQ.Type.ERROR);
                iq2.setError(new XMPPError(XMPPError.Condition.feature_not_implemented));
                connection.sendPacket(iq2);
                return null;
            }
            iq = new IQ() {
                @Override
                public String getChildElementXML() {
                    return null;
                }
            };
        }
        iq.setPacketID(attributeValue);
        iq.setTo(attributeValue2);
        iq.setFrom(attributeValue3);
        iq.setType(fromString);
        iq.setError(xMPPError);
        return iq;
    }

    public static Collection<String> parseMechanisms(XmlPullParser xmlPullParser) throws Exception {
        ArrayList arrayList = new ArrayList();
        boolean z = false;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                if (xmlPullParser.getName().equals("mechanism")) {
                    arrayList.add(xmlPullParser.nextText());
                }
            } else if (next == 3 && xmlPullParser.getName().equals("mechanisms")) {
                z = true;
            }
        }
        return arrayList;
    }

    public static Packet parseMessage(XmlPullParser xmlPullParser) throws Exception {
        Message message = new Message();
        String attributeValue = xmlPullParser.getAttributeValue("", "id");
        if (attributeValue == null) {
            attributeValue = Packet.ID_NOT_AVAILABLE;
        }
        message.setPacketID(attributeValue);
        message.setTo(xmlPullParser.getAttributeValue("", PrivacyItem.PrivacyRule.SUBSCRIPTION_TO));
        message.setFrom(xmlPullParser.getAttributeValue("", PrivacyItem.PrivacyRule.SUBSCRIPTION_FROM));
        message.setType(Message.Type.fromString(xmlPullParser.getAttributeValue("", "type")));
        String languageAttribute = getLanguageAttribute(xmlPullParser);
        if (languageAttribute == null || "".equals(languageAttribute.trim())) {
            languageAttribute = Packet.getDefaultLanguage();
        } else {
            message.setLanguage(languageAttribute);
        }
        boolean z = false;
        String str = null;
        Map<String, Object> map = null;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                String name = xmlPullParser.getName();
                String namespace = xmlPullParser.getNamespace();
                if (name.equals("subject")) {
                    String languageAttribute2 = getLanguageAttribute(xmlPullParser);
                    if (languageAttribute2 == null) {
                        languageAttribute2 = languageAttribute;
                    }
                    String parseContent = parseContent(xmlPullParser);
                    if (message.getSubject(languageAttribute2) == null) {
                        message.addSubject(languageAttribute2, parseContent);
                    }
                } else if (name.equals("body")) {
                    String languageAttribute3 = getLanguageAttribute(xmlPullParser);
                    if (languageAttribute3 == null) {
                        languageAttribute3 = languageAttribute;
                    }
                    String parseContent2 = parseContent(xmlPullParser);
                    if (message.getBody(languageAttribute3) == null) {
                        message.addBody(languageAttribute3, parseContent2);
                    }
                } else if (name.equals("thread")) {
                    if (str == null) {
                        str = xmlPullParser.nextText();
                    }
                } else if (name.equals("error")) {
                    message.setError(parseError(xmlPullParser));
                } else if (name.equals("properties") && namespace.equals(PROPERTIES_NAMESPACE)) {
                    map = parseProperties(xmlPullParser);
                } else {
                    message.addExtension(parsePacketExtension(name, namespace, xmlPullParser));
                }
            } else if (next == 3 && xmlPullParser.getName().equals("message")) {
                z = true;
            }
        }
        message.setThread(str);
        if (map != null) {
            for (String str2 : map.keySet()) {
                message.setProperty(str2, map.get(str2));
            }
        }
        return message;
    }

    public static PacketExtension parsePacketExtension(String str, String str2, XmlPullParser xmlPullParser) throws Exception {
        Object extensionProvider = ProviderManager.getInstance().getExtensionProvider(str, str2);
        if (extensionProvider != null) {
            if (extensionProvider instanceof PacketExtensionProvider) {
                return ((PacketExtensionProvider) extensionProvider).parseExtension(xmlPullParser);
            }
            if (extensionProvider instanceof Class) {
                return (PacketExtension) parseWithIntrospection(str, (Class) extensionProvider, xmlPullParser);
            }
        }
        DefaultPacketExtension defaultPacketExtension = new DefaultPacketExtension(str, str2);
        boolean z = false;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                String name = xmlPullParser.getName();
                if (xmlPullParser.isEmptyElementTag()) {
                    defaultPacketExtension.setValue(name, "");
                } else if (xmlPullParser.next() == 4) {
                    defaultPacketExtension.setValue(name, xmlPullParser.getText());
                }
            } else if (next == 3 && xmlPullParser.getName().equals(str)) {
                z = true;
            }
        }
        return defaultPacketExtension;
    }

    public static Presence parsePresence(XmlPullParser xmlPullParser) throws Exception {
        Presence.Type type = Presence.Type.available;
        String attributeValue = xmlPullParser.getAttributeValue("", "type");
        if (attributeValue != null && !attributeValue.equals("")) {
            try {
                type = Presence.Type.valueOf(attributeValue);
            } catch (IllegalArgumentException unused) {
                System.err.println("Found invalid presence type " + attributeValue);
            }
        }
        Presence presence = new Presence(type);
        presence.setTo(xmlPullParser.getAttributeValue("", PrivacyItem.PrivacyRule.SUBSCRIPTION_TO));
        presence.setFrom(xmlPullParser.getAttributeValue("", PrivacyItem.PrivacyRule.SUBSCRIPTION_FROM));
        String attributeValue2 = xmlPullParser.getAttributeValue("", "id");
        presence.setPacketID(attributeValue2 == null ? Packet.ID_NOT_AVAILABLE : attributeValue2);
        String languageAttribute = getLanguageAttribute(xmlPullParser);
        if (languageAttribute != null && !"".equals(languageAttribute.trim())) {
            presence.setLanguage(languageAttribute);
        }
        if (attributeValue2 == null) {
            attributeValue2 = Packet.ID_NOT_AVAILABLE;
        }
        presence.setPacketID(attributeValue2);
        boolean z = false;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                String name = xmlPullParser.getName();
                String namespace = xmlPullParser.getNamespace();
                if (name.equals("status")) {
                    presence.setStatus(xmlPullParser.nextText());
                } else if (name.equals("priority")) {
                    try {
                        presence.setPriority(Integer.parseInt(xmlPullParser.nextText()));
                    } catch (NumberFormatException unused2) {
                    } catch (IllegalArgumentException unused3) {
                        presence.setPriority(0);
                    }
                } else if (name.equals("show")) {
                    String nextText = xmlPullParser.nextText();
                    try {
                        presence.setMode(Presence.Mode.valueOf(nextText));
                    } catch (IllegalArgumentException unused4) {
                        System.err.println("Found invalid presence mode " + nextText);
                    }
                } else if (name.equals("error")) {
                    presence.setError(parseError(xmlPullParser));
                } else if (name.equals("properties") && namespace.equals(PROPERTIES_NAMESPACE)) {
                    Map<String, Object> parseProperties = parseProperties(xmlPullParser);
                    for (String str : parseProperties.keySet()) {
                        presence.setProperty(str, parseProperties.get(str));
                    }
                } else {
                    try {
                        presence.addExtension(parsePacketExtension(name, namespace, xmlPullParser));
                    } catch (Exception unused5) {
                        System.err.println("Failed to parse extension packet in Presence packet.");
                    }
                }
            } else if (next == 3 && xmlPullParser.getName().equals("presence")) {
                z = true;
            }
        }
        return presence;
    }

    public static Map<String, Object> parseProperties(XmlPullParser xmlPullParser) throws Exception {
        String str;
        HashMap hashMap = new HashMap();
        while (true) {
            int next = xmlPullParser.next();
            if (next == 2 && xmlPullParser.getName().equals("property")) {
                boolean z = false;
                String str2 = null;
                String str3 = null;
                String str4 = null;
                String str5 = null;
                while (!z) {
                    int next2 = xmlPullParser.next();
                    if (next2 == 2) {
                        String name = xmlPullParser.getName();
                        if (name.equals(Constant.PROTOCOL_WEBVIEW_NAME)) {
                            str4 = xmlPullParser.nextText();
                        } else if (name.equals("value")) {
                            str2 = xmlPullParser.getAttributeValue("", "type");
                            str3 = xmlPullParser.nextText();
                        }
                    } else if (next2 == 3 && xmlPullParser.getName().equals("property")) {
                        if ("integer".equals(str2)) {
                            str = Integer.valueOf(str3);
                        } else if ("long".equals(str2)) {
                            str = Long.valueOf(str3);
                        } else if ("float".equals(str2)) {
                            str = Float.valueOf(str3);
                        } else if ("double".equals(str2)) {
                            str = Double.valueOf(str3);
                        } else if (FormField.TYPE_BOOLEAN.equals(str2)) {
                            str = Boolean.valueOf(str3);
                        } else {
                            if ("string".equals(str2)) {
                                str5 = str3;
                            } else if ("java-object".equals(str2)) {
                                try {
                                    str = new ObjectInputStream(new ByteArrayInputStream(StringUtils.decodeBase64(str3))).readObject();
                                } catch (Exception e2) {
                                    e2.printStackTrace();
                                }
                            }
                            if (str4 != null && str5 != null) {
                                hashMap.put(str4, str5);
                            }
                            z = true;
                        }
                        str5 = str;
                        if (str4 != null) {
                            hashMap.put(str4, str5);
                        }
                        z = true;
                    }
                }
            } else if (next == 3 && xmlPullParser.getName().equals("properties")) {
                return hashMap;
            }
        }
    }

    private static Registration parseRegistration(XmlPullParser xmlPullParser) throws Exception {
        Registration registration = new Registration();
        HashMap hashMap = null;
        boolean z = false;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                if (xmlPullParser.getNamespace().equals("jabber:iq:register")) {
                    String name = xmlPullParser.getName();
                    if (hashMap == null) {
                        hashMap = new HashMap();
                    }
                    String text = xmlPullParser.next() == 4 ? xmlPullParser.getText() : "";
                    if (name.equals("instructions")) {
                        registration.setInstructions(text);
                    } else {
                        hashMap.put(name, text);
                    }
                } else {
                    registration.addExtension(parsePacketExtension(xmlPullParser.getName(), xmlPullParser.getNamespace(), xmlPullParser));
                }
            } else if (next == 3 && xmlPullParser.getName().equals("query")) {
                z = true;
            }
        }
        registration.setAttributes(hashMap);
        return registration;
    }

    private static Bind parseResourceBinding(XmlPullParser xmlPullParser) throws IOException, XmlPullParserException {
        Bind bind = new Bind();
        boolean z = false;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                if (xmlPullParser.getName().equals("resource")) {
                    bind.setResource(xmlPullParser.nextText());
                } else if (xmlPullParser.getName().equals("jid")) {
                    bind.setJid(xmlPullParser.nextText());
                }
            } else if (next == 3 && xmlPullParser.getName().equals("bind")) {
                z = true;
            }
        }
        return bind;
    }

    private static RosterPacket parseRoster(XmlPullParser xmlPullParser) throws Exception {
        String nextText;
        RosterPacket rosterPacket = new RosterPacket();
        boolean z = false;
        RosterPacket.Item item = null;
        while (!z) {
            if (xmlPullParser.getEventType() == 2 && xmlPullParser.getName().equals("query")) {
                rosterPacket.setVersion(xmlPullParser.getAttributeValue(null, "ver"));
            }
            int next = xmlPullParser.next();
            if (next == 2) {
                if (xmlPullParser.getName().equals("item")) {
                    RosterPacket.Item item2 = new RosterPacket.Item(xmlPullParser.getAttributeValue("", "jid"), xmlPullParser.getAttributeValue("", Constant.PROTOCOL_WEBVIEW_NAME));
                    item2.setItemStatus(RosterPacket.ItemStatus.fromString(xmlPullParser.getAttributeValue("", "ask")));
                    String attributeValue = xmlPullParser.getAttributeValue("", "subscription");
                    if (attributeValue == null) {
                        attributeValue = PrivacyItem.PrivacyRule.SUBSCRIPTION_NONE;
                    }
                    item2.setItemType(RosterPacket.ItemType.valueOf(attributeValue));
                    item = item2;
                }
                if (xmlPullParser.getName().equals("group") && item != null && (nextText = xmlPullParser.nextText()) != null && nextText.trim().length() > 0) {
                    item.addGroupName(nextText);
                }
            } else if (next == 3) {
                if (xmlPullParser.getName().equals("item")) {
                    rosterPacket.addRosterItem(item);
                }
                if (xmlPullParser.getName().equals("query")) {
                    z = true;
                }
            }
        }
        return rosterPacket;
    }

    public static SASLMechanism.Failure parseSASLFailure(XmlPullParser xmlPullParser) throws Exception {
        String str = null;
        boolean z = false;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                if (!xmlPullParser.getName().equals("failure")) {
                    str = xmlPullParser.getName();
                }
            } else if (next == 3 && xmlPullParser.getName().equals("failure")) {
                z = true;
            }
        }
        return new SASLMechanism.Failure(str);
    }

    public static StreamError parseStreamError(XmlPullParser xmlPullParser) throws IOException, XmlPullParserException {
        StreamError streamError = null;
        boolean z = false;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                streamError = new StreamError(xmlPullParser.getName());
            } else if (next == 3 && xmlPullParser.getName().equals("error")) {
                z = true;
            }
        }
        return streamError;
    }

    public static Object parseWithIntrospection(String str, Class<?> cls, XmlPullParser xmlPullParser) throws Exception {
        Object newInstance = cls.newInstance();
        boolean z = false;
        while (!z) {
            int next = xmlPullParser.next();
            if (next == 2) {
                String name = xmlPullParser.getName();
                String nextText = xmlPullParser.nextText();
                Class<?> returnType = newInstance.getClass().getMethod("get" + Character.toUpperCase(name.charAt(0)) + name.substring(1), new Class[0]).getReturnType();
                Object decode = decode(returnType, nextText);
                newInstance.getClass().getMethod("set" + Character.toUpperCase(name.charAt(0)) + name.substring(1), returnType).invoke(newInstance, decode);
            } else if (next == 3 && xmlPullParser.getName().equals(str)) {
                z = true;
            }
        }
        return newInstance;
    }
}