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 76d8271ec..4f641a555 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 @@ public class XMPPBOSHConnection extends AbstractXMPPConnection { 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 class XMPPBOSHConnection extends AbstractXMPPConnection { 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 class XMPPBOSHConnection extends AbstractXMPPConnection { if (event.getBody() != null) { try { writer.write(event.getBody().toXML()); + // Fix all BOSH sent debug messages not shown + writer.flush(); } catch (Exception e) { // Ignore }