This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-proton-j.git

commit 49c740ed3a85b229c772915624deb3a78330bc06
Author: Robbie Gemmell <[email protected]>
AuthorDate: Fri Jul 31 17:01:29 2026 +0100

    PROTON-2943: set some frame size handling defaults
---
 .../org/apache/qpid/proton/engine/Transport.java   |  2 +-
 .../qpid/proton/engine/impl/TransportImpl.java     |  2 +-
 .../qpid/proton/engine/impl/TransportImplTest.java | 37 ++++++++++++++++++++--
 3 files changed, 37 insertions(+), 4 deletions(-)

diff --git 
a/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java 
b/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java
index 86d189f8..078ccefa 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java
@@ -79,7 +79,7 @@ public interface Transport extends Endpoint
     public static final int TRACE_FRM = 2;
     public static final int TRACE_DRV = 4;
 
-    public static final int DEFAULT_MAX_FRAME_SIZE = -1;
+    public static final int DEFAULT_MAX_FRAME_SIZE = 65535;
 
     /** the lower bound for the agreed maximum frame size (in bytes). */
     public int MIN_MAX_FRAME_SIZE = 512;
diff --git 
a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java 
b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
index 222ffd77..05e8c925 100644
--- 
a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
+++ 
b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
@@ -111,7 +111,7 @@ public class TransportImpl extends EndpointImpl
 
     private int _maxFrameSize = DEFAULT_MAX_FRAME_SIZE;
     private int _remoteMaxFrameSize = MIN_MAX_FRAME_SIZE;
-    private int _outboundFrameSizeLimit = 0;
+    private int _outboundFrameSizeLimit = DEFAULT_MAX_FRAME_SIZE;
     private int _channelMax       = CHANNEL_MAX_LIMIT;
     private int _remoteChannelMax = CHANNEL_MAX_LIMIT;
     private int _maxTransfersPerDelivery = TRANSFERS_PER_DELIVERY_MAX_LIMIT;
diff --git 
a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java
 
b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java
index 558cc04b..e534c397 100644
--- 
a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java
+++ 
b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java
@@ -93,7 +93,7 @@ public class TransportImplTest
     private static final TransportFrame TRANSPORT_FRAME_BEGIN = new 
TransportFrame(CHANNEL_ID, new Begin(), null);
     private static final TransportFrame TRANSPORT_FRAME_OPEN = new 
TransportFrame(CHANNEL_ID, new Open(), null);
 
-    private static final int BUFFER_SIZE = 8 * 1024;
+    private static final int BUFFER_SIZE = 70 * 1024;
 
     @Test
     public void testInput()
@@ -1111,7 +1111,9 @@ public class TransportImplTest
         assertEquals("Unexpected session capacity", sessionCapacity, 
session.getIncomingCapacity());
 
         int expectedWindowSize = 2147483647;
-        if(setSessionCapacity && setFrameSize) {
+        if(setSessionCapacity && !setFrameSize) {
+            expectedWindowSize = (100*1024) / 
TransportImpl.DEFAULT_MAX_FRAME_SIZE;
+        } else if(setSessionCapacity && setFrameSize) {
             expectedWindowSize = (100*1024) / (5*1024); // capacity / frameSize
         }
 
@@ -2714,6 +2716,37 @@ public class TransportImplTest
         doMaxFrameSizeTestImpl(UnsignedInteger.valueOf(512), 0, 5700, 12);
     }
 
+    @Test
+    public void testDefaultMaxFrameSize()
+    {
+        MockTransportImpl transport = new MockTransportImpl();
+        Connection connection = Proton.connection();
+        transport.bind(connection);
+        connection.open();
+
+        pumpMockTransport(transport);
+
+        assertEquals("Unexpected frames written: " + 
getFrameTypesWritten(transport), 1, transport.writes.size());
+        final FrameBody frameBody = transport.writes.get(0);
+        assertTrue("Unexpected frame type", frameBody instanceof Open);
+
+        // Check emitted value on the Open
+        assertEquals(UnsignedInteger.valueOf(65535), ((Open) 
frameBody).getMaxFrameSize());
+    }
+
+    @Test
+    public void testDefaultMaxOutgoingFrameSize()
+    {
+        final int payloadLength = 65500;
+        // One transfer frame (allowing some space for transfer performative 
itself)
+        doMaxFrameSizeTestImpl(null, 0, payloadLength, 1);
+        // Two transfer frames with slightly bigger payload definitely pushing 
it over theoutgoing limit.
+        doMaxFrameSizeTestImpl(null, 0, payloadLength + 100, 2);
+
+        // Reduce the peer max frame size below the default outgoing frame.
+        // Now expecting two frames for the same payload size as originally.
+        doMaxFrameSizeTestImpl(UnsignedInteger.valueOf(64000), 0, 
payloadLength, 2);
+    }
 
     @Test
     public void testMaxFrameSizeOutgoingFrameSizeLimitHasEffect()


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to