mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2025-09-09 18:29:45 +02:00
Merge branch '4.2'
This commit is contained in:
commit
08c228ef99
21 changed files with 3190 additions and 59 deletions
|
@ -1424,26 +1424,7 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
|
|||
// unacknowledgedStanzas is not null.
|
||||
unacknowledgedStanzas = new ArrayBlockingQueue<>(QUEUE_SIZE);
|
||||
}
|
||||
// Check if the stream element should be put to the unacknowledgedStanza
|
||||
// queue. Note that we can not do the put() in sendStanzaInternal() and the
|
||||
// packet order is not stable at this point (sendStanzaInternal() can be
|
||||
// called concurrently).
|
||||
if (unacknowledgedStanzas != null && packet != null) {
|
||||
// If the unacknowledgedStanza queue is nearly full, request an new ack
|
||||
// from the server in order to drain it
|
||||
if (unacknowledgedStanzas.size() == 0.8 * XMPPTCPConnection.QUEUE_SIZE) {
|
||||
writer.write(AckRequest.INSTANCE.toXML().toString());
|
||||
writer.flush();
|
||||
}
|
||||
try {
|
||||
// It is important the we put the stanza in the unacknowledged stanza
|
||||
// queue before we put it on the wire
|
||||
unacknowledgedStanzas.put(packet);
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
}
|
||||
maybeAddToUnacknowledgedStanzas(packet);
|
||||
|
||||
CharSequence elementXml = element.toXML();
|
||||
if (elementXml instanceof XmlStringBuilder) {
|
||||
|
@ -1465,6 +1446,10 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
|
|||
try {
|
||||
while (!queue.isEmpty()) {
|
||||
Element packet = queue.remove();
|
||||
if (packet instanceof Stanza) {
|
||||
Stanza stanza = (Stanza) packet;
|
||||
maybeAddToUnacknowledgedStanzas(stanza);
|
||||
}
|
||||
writer.write(packet.toXML().toString());
|
||||
}
|
||||
writer.flush();
|
||||
|
@ -1523,6 +1508,29 @@ public class XMPPTCPConnection extends AbstractXMPPConnection {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void maybeAddToUnacknowledgedStanzas(Stanza stanza) throws IOException {
|
||||
// Check if the stream element should be put to the unacknowledgedStanza
|
||||
// queue. Note that we can not do the put() in sendStanzaInternal() and the
|
||||
// packet order is not stable at this point (sendStanzaInternal() can be
|
||||
// called concurrently).
|
||||
if (unacknowledgedStanzas != null && stanza != null) {
|
||||
// If the unacknowledgedStanza queue is nearly full, request an new ack
|
||||
// from the server in order to drain it
|
||||
if (unacknowledgedStanzas.size() == 0.8 * XMPPTCPConnection.QUEUE_SIZE) {
|
||||
writer.write(AckRequest.INSTANCE.toXML().toString());
|
||||
writer.flush();
|
||||
}
|
||||
try {
|
||||
// It is important the we put the stanza in the unacknowledged stanza
|
||||
// queue before we put it on the wire
|
||||
unacknowledgedStanzas.put(stanza);
|
||||
}
|
||||
catch (InterruptedException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue