resetting fetch status error when mutual subscription is reestablished
This commit is contained in:
parent
8d595c1fc2
commit
9ce2cfa3d2
|
@ -77,7 +77,7 @@ public final class Config {
|
||||||
public static final boolean DISABLE_HTTP_UPLOAD = false;
|
public static final boolean DISABLE_HTTP_UPLOAD = false;
|
||||||
public static final boolean DISABLE_STRING_PREP = false; // setting to true might increase startup performance
|
public static final boolean DISABLE_STRING_PREP = false; // setting to true might increase startup performance
|
||||||
public static final boolean EXTENDED_SM_LOGGING = false; // log stanza counts
|
public static final boolean EXTENDED_SM_LOGGING = false; // log stanza counts
|
||||||
public static final boolean EXTENDED_IQ_LOGGING = true; // log iq requests
|
public static final boolean BACKGROUND_STANZA_LOGGING = true;
|
||||||
public static final boolean RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE = true; //setting to true might increase power consumption
|
public static final boolean RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE = true; //setting to true might increase power consumption
|
||||||
|
|
||||||
public static final boolean ENCRYPT_ON_HTTP_UPLOADED = false;
|
public static final boolean ENCRYPT_ON_HTTP_UPLOADED = false;
|
||||||
|
|
|
@ -216,6 +216,20 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
|
||||||
|
|
||||||
private static class FetchStatusMap extends AxolotlAddressMap<FetchStatus> {
|
private static class FetchStatusMap extends AxolotlAddressMap<FetchStatus> {
|
||||||
|
|
||||||
|
public void clearErrorFor(Jid jid) {
|
||||||
|
synchronized (MAP_LOCK) {
|
||||||
|
Map<Integer, FetchStatus> devices = this.map.get(jid.toBareJid().toString());
|
||||||
|
if (devices == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for(Map.Entry<Integer, FetchStatus> entry : devices.entrySet()) {
|
||||||
|
if (entry.getValue() == FetchStatus.ERROR) {
|
||||||
|
Log.d(Config.LOGTAG,"resetting error for "+jid.toBareJid()+"("+entry.getKey()+")");
|
||||||
|
entry.setValue(FetchStatus.TIMEOUT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getLogprefix(Account account) {
|
public static String getLogprefix(Account account) {
|
||||||
|
@ -320,6 +334,10 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
|
||||||
numPublishTriesOnEmptyPep = 0;
|
numPublishTriesOnEmptyPep = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearErrorsInFetchStatusMap(Jid jid) {
|
||||||
|
fetchStatusMap.clearErrorFor(jid);
|
||||||
|
}
|
||||||
|
|
||||||
public void regenerateKeys(boolean wipeOther) {
|
public void regenerateKeys(boolean wipeOther) {
|
||||||
axolotlStore.regenerate();
|
axolotlStore.regenerate();
|
||||||
sessions.clear();
|
sessions.clear();
|
||||||
|
|
|
@ -54,6 +54,7 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
|
||||||
final String name = item.getAttribute("name");
|
final String name = item.getAttribute("name");
|
||||||
final String subscription = item.getAttribute("subscription");
|
final String subscription = item.getAttribute("subscription");
|
||||||
final Contact contact = account.getRoster().getContact(jid);
|
final Contact contact = account.getRoster().getContact(jid);
|
||||||
|
boolean bothPre = contact.getOption(Contact.Options.TO) && contact.getOption(Contact.Options.FROM);
|
||||||
if (!contact.getOption(Contact.Options.DIRTY_PUSH)) {
|
if (!contact.getOption(Contact.Options.DIRTY_PUSH)) {
|
||||||
contact.setServerName(name);
|
contact.setServerName(name);
|
||||||
contact.parseGroupsFromElement(item);
|
contact.parseGroupsFromElement(item);
|
||||||
|
@ -69,6 +70,14 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
|
||||||
contact.parseSubscriptionFromElement(item);
|
contact.parseSubscriptionFromElement(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
boolean both = contact.getOption(Contact.Options.TO) && contact.getOption(Contact.Options.FROM);
|
||||||
|
if ((both != bothPre) && both) {
|
||||||
|
Log.d(Config.LOGTAG,account.getJid().toBareJid()+": gained mutual presence subscription with "+contact.getJid());
|
||||||
|
AxolotlService axolotlService = account.getAxolotlService();
|
||||||
|
if (axolotlService != null) {
|
||||||
|
axolotlService.clearErrorsInFetchStatusMap(contact.getJid());
|
||||||
|
}
|
||||||
|
}
|
||||||
mXmppConnectionService.getAvatarService().clear(contact);
|
mXmppConnectionService.getAvatarService().clear(contact);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -268,7 +277,7 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onIqPacketReceived(final Account account, final IqPacket packet) {
|
public void onIqPacketReceived(final Account account, final IqPacket packet) {
|
||||||
if (Config.EXTENDED_IQ_LOGGING && (packet.getType() == IqPacket.TYPE.GET || packet.getType() == IqPacket.TYPE.SET)) {
|
if (Config.BACKGROUND_STANZA_LOGGING && (packet.getType() == IqPacket.TYPE.GET || packet.getType() == IqPacket.TYPE.SET)) {
|
||||||
Element first = packet.getChildren().size() > 0 ? packet.getChildren().get(0) : null;
|
Element first = packet.getChildren().size() > 0 ? packet.getChildren().get(0) : null;
|
||||||
Log.d(Config.LOGTAG,account.getJid().toBareJid()+": IQ request from "+packet.getFrom()+(first == null ? "" : " "+first));
|
Log.d(Config.LOGTAG,account.getJid().toBareJid()+": IQ request from "+packet.getFrom()+(first == null ? "" : " "+first));
|
||||||
}
|
}
|
||||||
|
|
|
@ -533,6 +533,9 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (!packet.hasChild("body")){ //no body
|
} else if (!packet.hasChild("body")){ //no body
|
||||||
|
if (Config.BACKGROUND_STANZA_LOGGING && !mXmppConnectionService.checkListeners()) {
|
||||||
|
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": " + original);
|
||||||
|
}
|
||||||
Conversation conversation = mXmppConnectionService.find(account, from.toBareJid());
|
Conversation conversation = mXmppConnectionService.find(account, from.toBareJid());
|
||||||
if (isTypeGroupChat) {
|
if (isTypeGroupChat) {
|
||||||
if (packet.hasChild("subject")) {
|
if (packet.hasChild("subject")) {
|
||||||
|
@ -563,6 +566,9 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
|
||||||
for(Element child : mucUserElement.getChildren()) {
|
for(Element child : mucUserElement.getChildren()) {
|
||||||
if ("item".equals(child.getName())) {
|
if ("item".equals(child.getName())) {
|
||||||
MucOptions.User user = AbstractParser.parseItem(conversation,child);
|
MucOptions.User user = AbstractParser.parseItem(conversation,child);
|
||||||
|
Log.d(Config.LOGTAG,account.getJid()+": changing affiliation for "
|
||||||
|
+user.getRealJid()+" to "+user.getAffiliation()+" in "
|
||||||
|
+conversation.getJid().toBareJid());
|
||||||
if (!user.realJidMatchesAccount()) {
|
if (!user.realJidMatchesAccount()) {
|
||||||
conversation.getMucOptions().addUser(user);
|
conversation.getMucOptions().addUser(user);
|
||||||
}
|
}
|
||||||
|
@ -572,6 +578,8 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Element received = packet.findChild("received", "urn:xmpp:chat-markers:0");
|
Element received = packet.findChild("received", "urn:xmpp:chat-markers:0");
|
||||||
if (received == null) {
|
if (received == null) {
|
||||||
received = packet.findChild("received", "urn:xmpp:receipts");
|
received = packet.findChild("received", "urn:xmpp:receipts");
|
||||||
|
|
Loading…
Reference in a new issue