143
143
routing_key :: rabbit_types :routing_key () | to | subject ,
144
144
% % queue_name_bin is only set if the link target address refers to a queue.
145
145
queue_name_bin :: undefined | rabbit_misc :resource_name (),
146
+ max_message_size :: pos_integer (),
146
147
delivery_count :: sequence_no (),
147
148
credit :: rabbit_queue_type :credit (),
148
149
% % TRANSFER delivery IDs published to queues but not yet confirmed by queues
@@ -999,10 +1000,12 @@ handle_control(#'v1_0.attach'{role = ?AMQP_ROLE_SENDER,
999
1000
ok = validate_attach (Attach ),
1000
1001
case ensure_target (Target , Vhost , User , PermCache0 ) of
1001
1002
{ok , Exchange , RoutingKey , QNameBin , PermCache } ->
1003
+ MaxMessageSize = persistent_term :get (max_message_size ),
1002
1004
IncomingLink = # incoming_link {
1003
1005
exchange = Exchange ,
1004
1006
routing_key = RoutingKey ,
1005
1007
queue_name_bin = QNameBin ,
1008
+ max_message_size = MaxMessageSize ,
1006
1009
delivery_count = DeliveryCountInt ,
1007
1010
credit = MaxLinkCredit },
1008
1011
_Outcomes = outcomes (Source ),
@@ -1015,7 +1018,7 @@ handle_control(#'v1_0.attach'{role = ?AMQP_ROLE_SENDER,
1015
1018
target = Target ,
1016
1019
% % We are the receiver.
1017
1020
role = ? AMQP_ROLE_RECEIVER ,
1018
- max_message_size = {ulong , persistent_term : get ( max_message_size ) }},
1021
+ max_message_size = {ulong , MaxMessageSize }},
1019
1022
Flow = # 'v1_0.flow' {handle = Handle ,
1020
1023
delivery_count = DeliveryCount ,
1021
1024
link_credit = ? UINT (MaxLinkCredit )},
@@ -2248,6 +2251,7 @@ incoming_link_transfer(
2248
2251
settled = Settled },
2249
2252
MsgPart ,
2250
2253
Link0 = # incoming_link {
2254
+ max_message_size = MaxMessageSize ,
2251
2255
multi_transfer_msg = Multi = # multi_transfer_msg {
2252
2256
payload_fragments_rev = PFR0 ,
2253
2257
delivery_id = FirstDeliveryId ,
@@ -2257,7 +2261,7 @@ incoming_link_transfer(
2257
2261
validate_multi_transfer_delivery_id (DeliveryId , FirstDeliveryId ),
2258
2262
validate_multi_transfer_settled (Settled , FirstSettled ),
2259
2263
PFR = [MsgPart | PFR0 ],
2260
- validate_incoming_message_size (PFR ),
2264
+ validate_message_size (PFR , MaxMessageSize ),
2261
2265
Link = Link0 # incoming_link {multi_transfer_msg = Multi # multi_transfer_msg {payload_fragments_rev = PFR }},
2262
2266
{ok , [], Link , State };
2263
2267
incoming_link_transfer (
@@ -2277,6 +2281,7 @@ incoming_link_transfer(
2277
2281
MsgPart ,
2278
2282
# incoming_link {exchange = LinkExchange ,
2279
2283
routing_key = LinkRKey ,
2284
+ max_message_size = MaxMessageSize ,
2280
2285
delivery_count = DeliveryCount0 ,
2281
2286
incoming_unconfirmed_map = U0 ,
2282
2287
credit = Credit0 ,
@@ -2306,7 +2311,7 @@ incoming_link_transfer(
2306
2311
{MsgBin0 , FirstDeliveryId , FirstSettled }
2307
2312
end ,
2308
2313
validate_transfer_rcv_settle_mode (RcvSettleMode , Settled ),
2309
- validate_incoming_message_size (PayloadBin ),
2314
+ validate_message_size (PayloadBin , MaxMessageSize ),
2310
2315
2311
2316
Mc0 = mc :init (mc_amqp , PayloadBin , #{}),
2312
2317
case lookup_target (LinkExchange , LinkRKey , Mc0 , Vhost , User , PermCache0 ) of
@@ -3034,9 +3039,6 @@ validate_transfer_rcv_settle_mode(?V_1_0_RECEIVER_SETTLE_MODE_SECOND, _Settled =
3034
3039
validate_transfer_rcv_settle_mode (_ , _ ) ->
3035
3040
ok .
3036
3041
3037
- validate_incoming_message_size (Message ) ->
3038
- validate_message_size (Message , persistent_term :get (max_message_size )).
3039
-
3040
3042
validate_message_size (_ , unlimited ) ->
3041
3043
ok ;
3042
3044
validate_message_size (Message , MaxMsgSize )
@@ -3050,7 +3052,7 @@ validate_message_size(Message, MaxMsgSize)
3050
3052
% % We apply that sentence to both incoming messages that are too large for us and outgoing messages that are
3051
3053
% % too large for the client.
3052
3054
% % This is an interesting protocol difference to MQTT where we instead discard outgoing messages that are too
3053
- % % large to send then behave as if we had completed sending that message [MQTT 5.0, MQTT-3.1.2-25].
3055
+ % % large to send and then behave as if we had completed sending that message [MQTT 5.0, MQTT-3.1.2-25].
3054
3056
protocol_error (
3055
3057
? V_1_0_LINK_ERROR_MESSAGE_SIZE_EXCEEDED ,
3056
3058
" message size (~b bytes) > maximum message size (~b bytes)" ,
0 commit comments