Search in sources :

Example 1 with ServiceDiscoveryResult

use of de.pixart.messenger.entities.ServiceDiscoveryResult in project Pix-Art-Messenger by kriztan.

the class DatabaseBackend method findDiscoveryResult.

public ServiceDiscoveryResult findDiscoveryResult(final String hash, final String ver) {
    SQLiteDatabase db = this.getReadableDatabase();
    String[] selectionArgs = { hash, ver };
    Cursor cursor = db.query(ServiceDiscoveryResult.TABLENAME, null, ServiceDiscoveryResult.HASH + "=? AND " + ServiceDiscoveryResult.VER + "=?", selectionArgs, null, null, null);
    if (cursor.getCount() == 0) {
        cursor.close();
        return null;
    }
    cursor.moveToFirst();
    ServiceDiscoveryResult result = null;
    try {
        result = new ServiceDiscoveryResult(cursor);
    } catch (JSONException e) {
    /* result is still null */
    }
    cursor.close();
    return result;
}
Also used : SQLiteDatabase(android.database.sqlite.SQLiteDatabase) ServiceDiscoveryResult(de.pixart.messenger.entities.ServiceDiscoveryResult) JSONException(org.json.JSONException) Cursor(android.database.Cursor)

Example 2 with ServiceDiscoveryResult

use of de.pixart.messenger.entities.ServiceDiscoveryResult in project Pix-Art-Messenger by kriztan.

the class XmppConnection method sendPostBindInitialization.

private void sendPostBindInitialization() {
    smVersion = 0;
    if (streamFeatures.hasChild("sm", "urn:xmpp:sm:3")) {
        smVersion = 3;
    } else if (streamFeatures.hasChild("sm", "urn:xmpp:sm:2")) {
        smVersion = 2;
    }
    if (smVersion != 0) {
        synchronized (this.mStanzaQueue) {
            final EnablePacket enable = new EnablePacket(smVersion);
            tagWriter.writeStanzaAsync(enable);
            stanzasSent = 0;
            mStanzaQueue.clear();
        }
    }
    features.carbonsEnabled = false;
    features.blockListRequested = false;
    synchronized (this.disco) {
        this.disco.clear();
    }
    Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": starting service discovery");
    mPendingServiceDiscoveries.set(0);
    if (smVersion == 0 || Patches.DISCO_EXCEPTIONS.contains(account.getJid().getDomainpart())) {
        Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": do not wait for service discovery");
        mWaitForDisco.set(false);
    } else {
        mWaitForDisco.set(true);
    }
    lastDiscoStarted = SystemClock.elapsedRealtime();
    mXmppConnectionService.scheduleWakeUpCall(Config.CONNECT_DISCO_TIMEOUT, account.getUuid().hashCode());
    Element caps = streamFeatures.findChild("c");
    final String hash = caps == null ? null : caps.getAttribute("hash");
    final String ver = caps == null ? null : caps.getAttribute("ver");
    ServiceDiscoveryResult discoveryResult = null;
    if (hash != null && ver != null) {
        discoveryResult = mXmppConnectionService.getCachedServiceDiscoveryResult(new Pair<>(hash, ver));
    }
    final boolean requestDiscoItemsFirst = !account.isOptionSet(Account.OPTION_LOGGED_IN_SUCCESSFULLY);
    if (requestDiscoItemsFirst) {
        sendServiceDiscoveryItems(account.getServer());
    }
    if (discoveryResult == null) {
        sendServiceDiscoveryInfo(account.getServer());
    } else {
        Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": server caps came from cache");
        disco.put(account.getServer(), discoveryResult);
    }
    sendServiceDiscoveryInfo(account.getJid().toBareJid());
    if (!requestDiscoItemsFirst) {
        sendServiceDiscoveryItems(account.getServer());
    }
    if (!mWaitForDisco.get()) {
        finalizeBind();
    }
    this.lastSessionStarted = SystemClock.elapsedRealtime();
}
Also used : EnablePacket(de.pixart.messenger.xmpp.stanzas.streammgmt.EnablePacket) ServiceDiscoveryResult(de.pixart.messenger.entities.ServiceDiscoveryResult) Element(de.pixart.messenger.xml.Element) Pair(android.util.Pair)

Example 3 with ServiceDiscoveryResult

use of de.pixart.messenger.entities.ServiceDiscoveryResult in project Pix-Art-Messenger by kriztan.

the class JingleConnection method upgradeNamespace.

private void upgradeNamespace() {
    Jid jid = this.message.getCounterpart();
    String resource = jid != null ? jid.getResourcepart() : null;
    if (resource != null) {
        Presence presence = this.account.getRoster().getContact(jid).getPresences().getPresences().get(resource);
        ServiceDiscoveryResult result = presence != null ? presence.getServiceDiscoveryResult() : null;
        if (result != null) {
            List<String> features = result.getFeatures();
            if (features.contains(Content.Version.FT_5.getNamespace())) {
                this.ftVersion = Content.Version.FT_5;
            } else if (features.contains(Content.Version.FT_4.getNamespace())) {
                this.ftVersion = Content.Version.FT_4;
            }
        }
    }
}
Also used : Jid(de.pixart.messenger.xmpp.jid.Jid) ServiceDiscoveryResult(de.pixart.messenger.entities.ServiceDiscoveryResult) Presence(de.pixart.messenger.entities.Presence)

Example 4 with ServiceDiscoveryResult

use of de.pixart.messenger.entities.ServiceDiscoveryResult in project Pix-Art-Messenger by kriztan.

the class MessageParser method clientMightSendHtml.

private static boolean clientMightSendHtml(Account account, Jid from) {
    String resource = from.getResourcepart();
    if (resource == null) {
        return false;
    }
    Presence presence = account.getRoster().getContact(from).getPresences().getPresences().get(resource);
    ServiceDiscoveryResult disco = presence == null ? null : presence.getServiceDiscoveryResult();
    if (disco == null) {
        return false;
    }
    return hasIdentityKnowForSendingHtml(disco.getIdentities());
}
Also used : ServiceDiscoveryResult(de.pixart.messenger.entities.ServiceDiscoveryResult) Presence(de.pixart.messenger.entities.Presence)

Example 5 with ServiceDiscoveryResult

use of de.pixart.messenger.entities.ServiceDiscoveryResult in project Pix-Art-Messenger by kriztan.

the class XmppConnectionService method fetchCaps.

public void fetchCaps(Account account, final Jid jid, final Presence presence) {
    final Pair<String, String> key = new Pair<>(presence.getHash(), presence.getVer());
    ServiceDiscoveryResult disco = getCachedServiceDiscoveryResult(key);
    if (disco != null) {
        presence.setServiceDiscoveryResult(disco);
    } else {
        if (!account.inProgressDiscoFetches.contains(key)) {
            account.inProgressDiscoFetches.add(key);
            IqPacket request = new IqPacket(IqPacket.TYPE.GET);
            request.setTo(jid);
            request.query("http://jabber.org/protocol/disco#info");
            Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": making disco request for " + key.second + " to " + jid);
            sendIqPacket(account, request, new OnIqPacketReceived() {

                @Override
                public void onIqPacketReceived(Account account, IqPacket discoPacket) {
                    if (discoPacket.getType() == IqPacket.TYPE.RESULT) {
                        ServiceDiscoveryResult disco = new ServiceDiscoveryResult(discoPacket);
                        if (presence.getVer().equals(disco.getVer())) {
                            databaseBackend.insertDiscoveryResult(disco);
                            injectServiceDiscorveryResult(account.getRoster(), presence.getHash(), presence.getVer(), disco);
                        } else {
                            Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": mismatch in caps for contact " + jid + " " + presence.getVer() + " vs " + disco.getVer());
                        }
                    }
                    account.inProgressDiscoFetches.remove(key);
                }
            });
        }
    }
}
Also used : Account(de.pixart.messenger.entities.Account) OnIqPacketReceived(de.pixart.messenger.xmpp.OnIqPacketReceived) ServiceDiscoveryResult(de.pixart.messenger.entities.ServiceDiscoveryResult) Pair(android.util.Pair) IqPacket(de.pixart.messenger.xmpp.stanzas.IqPacket)

Aggregations

ServiceDiscoveryResult (de.pixart.messenger.entities.ServiceDiscoveryResult)6 Pair (android.util.Pair)2 Account (de.pixart.messenger.entities.Account)2 Presence (de.pixart.messenger.entities.Presence)2 IqPacket (de.pixart.messenger.xmpp.stanzas.IqPacket)2 Cursor (android.database.Cursor)1 SQLiteDatabase (android.database.sqlite.SQLiteDatabase)1 Element (de.pixart.messenger.xml.Element)1 OnIqPacketReceived (de.pixart.messenger.xmpp.OnIqPacketReceived)1 Jid (de.pixart.messenger.xmpp.jid.Jid)1 EnablePacket (de.pixart.messenger.xmpp.stanzas.streammgmt.EnablePacket)1 JSONException (org.json.JSONException)1