fail pending messages on policy violation. fixes #3735
This commit is contained in:
parent
ed4d7bff92
commit
88cc097732
|
@ -1339,6 +1339,7 @@ public class XmppConnection implements Runnable {
|
||||||
this.lastConnect = SystemClock.elapsedRealtime();
|
this.lastConnect = SystemClock.elapsedRealtime();
|
||||||
final String text = streamError.findChildContent("text");
|
final String text = streamError.findChildContent("text");
|
||||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": policy violation. " + text);
|
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": policy violation. " + text);
|
||||||
|
failPendingMessages(text);
|
||||||
throw new StateChangingException(Account.State.POLICY_VIOLATION);
|
throw new StateChangingException(Account.State.POLICY_VIOLATION);
|
||||||
} else {
|
} else {
|
||||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": stream error " + streamError.toString());
|
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": stream error " + streamError.toString());
|
||||||
|
@ -1346,6 +1347,24 @@ public class XmppConnection implements Runnable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void failPendingMessages(final String error) {
|
||||||
|
synchronized (this.mStanzaQueue) {
|
||||||
|
for (int i = 0; i < mStanzaQueue.size(); ++i) {
|
||||||
|
final AbstractAcknowledgeableStanza stanza = mStanzaQueue.valueAt(i);
|
||||||
|
if (stanza instanceof MessagePacket) {
|
||||||
|
final MessagePacket packet = (MessagePacket) stanza;
|
||||||
|
final String id = packet.getId();
|
||||||
|
final Jid to = packet.getTo();
|
||||||
|
mXmppConnectionService.markMessage(account,
|
||||||
|
to.asBareJid(),
|
||||||
|
id,
|
||||||
|
Message.STATUS_SEND_FAILED,
|
||||||
|
error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void sendStartStream() throws IOException {
|
private void sendStartStream() throws IOException {
|
||||||
final Tag stream = Tag.start("stream:stream");
|
final Tag stream = Tag.start("stream:stream");
|
||||||
stream.setAttribute("to", account.getServer());
|
stream.setAttribute("to", account.getServer());
|
||||||
|
|
Loading…
Reference in a new issue