From bd70d6abc59d41b611aa3e18c7d958f5042edb03 Mon Sep 17 00:00:00 2001
From: cmeng-git
Date: Mon, 20 Feb 2023 09:49:10 +0800
Subject: [PATCH] [bosh] Fix BOSH debug send message not shown
Following logcat are captured with various PR fixes implemented:
// ===== Without any of the PR fixes ===== //
All the sent stanza are missing; fixed by
```
// Fix all BOSH sent debug messages not shown
writer.flush();
```
```
2023-12-11 12:25:33.548 5470-5636/org.atalk.android D/SMACK: RECV (0):
PLAIN
SCRAM-SHA-1
X-OAUTH2
2023-12-11 12:25:33.748 5470-5636/org.atalk.android D/SMACK: RECV (0):
2023-12-11 12:25:33.925 5470-5636/org.atalk.android D/SMACK: RECV (0):
cj1DI2QjJHE7JVs6LzElInQnPDhaK3JLMTUzPCtPVicvXmNuV204ei9kV1UzT1lsdCtzRW1ZTkE9PSxzPTdjNktCSnNaTHdTYjNZSytqdVRXb2c9PSxpPTQwOTY=
2023-12-11 12:25:33.939 5470-5636/org.atalk.android D/SMACK: RECV (0):
dj1saEFrUzVKMFRBMEJVbTg1djd5dE4xTUpZaE09
```
// ===== With only PR fixes: writer.flush(); readerConsumer = null; but withoug the following fixes ===== //
// Initialize the debugger before addBOSHClientResponseListener(new BOSHPacketReader());
// BOSHPacketReader may hold and send response prior to display of the request i.e. \ before \
```
2023-12-11 12:33:54.915 6162-6310/org.atalk.android D/SMACK: SENT (0):
2023-12-11 12:33:55.198 6162-6314/org.atalk.android D/SMACK: RECV (0):
PLAIN
SCRAM-SHA-1
X-OAUTH2
2023-12-11 12:33:55.301 6162-6310/org.atalk.android D/SMACK: SENT (0):
bixhPXN3YW5AYXRhbGsuc3l0ZXMubmV0LG49c3dhbixyPUJwMTZzKG9dd0xmb1lnN0haRkAjKko7PiReIXhbKiou
2023-12-11 12:33:55.534 6162-6313/org.atalk.android D/SMACK: SENT (0):
Yz1iaXhoUFhOM1lXNUFZWFJoYkdzdWMzbDBaWE11Ym1WMExBPT0scj1CcDE2cyhvXXdMZm9ZZzdIWkZAIypKOz4kXiF4WyoqLlV4eTcvUVBCQUNKbjg1TWdRZHhjQnc9PSxwPVZlT3pkVzExN0tMc3k4THZpQWJZWDlpcW84az0=
2023-12-11 12:33:55.538 6162-6314/org.atalk.android D/SMACK: RECV (0):
cj1CcDE2cyhvXXdMZm9ZZzdIWkZAIypKOz4kXiF4WyoqLlV4eTcvUVBCQUNKbjg1TWdRZHhjQnc9PSxzPTdjNktCSnNaTHdTYjNZSytqdVRXb2c9PSxpPTQwOTY=
2023-12-11 12:33:55.558 6162-6310/org.atalk.android D/SMACK: SENT (0):
2023-12-11 12:33:55.560 6162-6314/org.atalk.android D/SMACK: RECV (0):
dj1mcFdSekE1SXltdTBrNys4K1hML3JncTVEd2s9
```
// ===== With the full PR fixes ===== //
```
2023-12-11 12:21:16.435 4703-5344/org.atalk.android D/SMACK: SENT (4):
2023-12-11 12:21:16.637 4703-5348/org.atalk.android D/SMACK: RECV (4):
PLAIN
SCRAM-SHA-1
X-OAUTH2
2023-12-11 12:21:16.667 4703-5344/org.atalk.android D/SMACK: SENT (4):
bixhPXN3YW5AYXRhbGsuc3l0ZXMubmV0LG49c3dhbixyPTdiSVxeVnVMU0ZoWT8zVVlSa2psdkVMeks/e3BaQUwp
2023-12-11 12:21:16.683 4703-5348/org.atalk.android D/SMACK: RECV (4):
cj03YklcXlZ1TFNGaFk/M1VZUmtqbHZFTHpLP3twWkFMKUhqVjVlVFUvdzJFaW9yQjlGdHh3T3c9PSxzPTdjNktCSnNaTHdTYjNZSytqdVRXb2c9PSxpPTQwOTY=
2023-12-11 12:21:16.689 4703-5347/org.atalk.android D/SMACK: SENT (4):
Yz1iaXhoUFhOM1lXNUFZWFJoYkdzdWMzbDBaWE11Ym1WMExBPT0scj03YklcXlZ1TFNGaFk/M1VZUmtqbHZFTHpLP3twWkFMKUhqVjVlVFUvdzJFaW9yQjlGdHh3T3c9PSxwPXdNb2c5N3UzQktON1FHaFVQRzQ3MHVjZXdldz0=
2023-12-11 12:21:16.702 4703-5348/org.atalk.android D/SMACK: RECV (4):
dj0yTzRqVzJXWHdEUDdvNjdJSkdNU3Rmc0NMTkk9
2023-12-11 12:21:16.704 4703-5344/org.atalk.android D/SMACK: SENT (4):
```
Link: https://github.com/igniterealtime/Smack/pull/554
---
.../smack/bosh/XMPPBOSHConnection.java | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java b/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java
index 76d8271ec7..4f641a5559 100644
--- a/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java
+++ b/smack-bosh/src/main/java/org/jivesoftware/smack/bosh/XMPPBOSHConnection.java
@@ -165,14 +165,15 @@ protected void connectInternal() throws SmackException, InterruptedException {
client = BOSHClient.create(cfgBuilder.build());
- client.addBOSHClientConnListener(new BOSHConnectionListener());
- client.addBOSHClientResponseListener(new BOSHPacketReader());
-
- // Initialize the debugger
+ // Initialize the debugger before addBOSHClientResponseListener(new BOSHPacketReader());
+ // BOSHPacketReader may hold and send response prior to display of the request i.e. before
if (debugger != null) {
initDebugger();
}
+ client.addBOSHClientConnListener(new BOSHConnectionListener());
+ client.addBOSHClientResponseListener(new BOSHPacketReader());
+
// Send the session creation request
client.send(ComposableBody.builder()
.setNamespaceDefinition("xmpp", XMPP_BOSH_NS)
@@ -295,10 +296,11 @@ public void instantShutdown() {
CloseableUtil.maybeClose(reader, LOGGER);
CloseableUtil.maybeClose(writer, LOGGER);
+ // set readerConsumer = null before reader to avoid NPE reference
+ readerConsumer = null;
readerPipe = null;
reader = null;
writer = null;
- readerConsumer = null;
}
/**
@@ -376,6 +378,8 @@ public void requestSent(BOSHMessageEvent event) {
if (event.getBody() != null) {
try {
writer.write(event.getBody().toXML());
+ // Fix all BOSH sent debug messages not shown
+ writer.flush();
} catch (Exception e) {
// Ignore
}