aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/eu/siacs/conversations/services/XmppConnectionService.java12
-rw-r--r--src/eu/siacs/conversations/xmpp/XmppConnection.java11
2 files changed, 21 insertions, 2 deletions
diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java
index e9f93a63..07f5a427 100644
--- a/src/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/eu/siacs/conversations/services/XmppConnectionService.java
@@ -287,7 +287,11 @@ public class XmppConnectionService extends Service {
} else {
Contact contact = findContact(account, fromParts[0]);
if (contact == null) {
- Log.d(LOGTAG,packet.getFrom()+ " could not be found");
+ if ("subscribe".equals(type)) {
+ account.getXmppConnection().addPendingSubscription(fromParts[0]);
+ } else {
+ Log.d(LOGTAG,packet.getFrom()+ " could not be found");
+ }
return;
}
if (type == null) {
@@ -343,7 +347,7 @@ public class XmppConnectionService extends Service {
requestPresenceUpdatesFrom(contact);
}
} else {
- // TODO: ask user to handle it maybe
+ account.getXmppConnection().addPendingSubscription(fromParts[0]);
}
} else {
//Log.d(LOGTAG, packet.toString());
@@ -1232,6 +1236,10 @@ public class XmppConnectionService extends Service {
account.getXmppConnection().sendIqPacket(iq, null);
if (autoGrant) {
requestPresenceUpdatesFrom(contact);
+ if (account.getXmppConnection().hasPendingSubscription(contact.getJid())) {
+ Log.d("xmppService","contact had pending subscription");
+ sendPresenceUpdatesTo(contact);
+ }
}
replaceContactInConversation(contact.getJid(), contact);
}
diff --git a/src/eu/siacs/conversations/xmpp/XmppConnection.java b/src/eu/siacs/conversations/xmpp/XmppConnection.java
index 41791dc2..adb27ec8 100644
--- a/src/eu/siacs/conversations/xmpp/XmppConnection.java
+++ b/src/eu/siacs/conversations/xmpp/XmppConnection.java
@@ -77,6 +77,8 @@ public class XmppConnection implements Runnable {
private Element streamFeatures;
private HashMap<String, List<String>> disco = new HashMap<String, List<String>>();
+ private HashSet<String> pendingSubscriptions = new HashSet<String>();
+
private String streamId = null;
private int smVersion = 3;
@@ -904,4 +906,13 @@ public class XmppConnection implements Runnable {
public String getMucServer() {
return findDiscoItemByFeature("http://jabber.org/protocol/muc");
}
+
+ public boolean hasPendingSubscription(String jid) {
+ return this.pendingSubscriptions.contains(jid);
+ }
+
+ public void addPendingSubscription(String jid) {
+ Log.d(LOGTAG,"adding "+jid+" to pending subscriptions");
+ this.pendingSubscriptions.add(jid);
+ }
}