Skip to content

Commit 6de734b

Browse files
committed
Fix encoding payload when the option list is empty
1 parent 259c8d0 commit 6de734b

2 files changed

Lines changed: 30 additions & 12 deletions

File tree

src/coap_spark-messages-encoding.adb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,10 @@ is
254254
Buffer => Encoded_Data (1 .. Last));
255255
Encoded_Length := RFLX.CoAP.Length_16 (Last);
256256

257+
Status := OK;
258+
elsif Last = 0 then
259+
-- No options
260+
Encoded_Length := 0;
257261
Status := OK;
258262
else
259263
Status := Capacity_Error;

src/rflx-coap_server-main_loop.adb

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -132,24 +132,38 @@ is
132132
RFLX.CoAP.Server_Error_Response'Last;
133133
RFLX_Result.Message_Class := Response_Codes.Code_Class;
134134

135-
case CoAP_SPARK.Messages.Response_Code
136-
(Response_Codes.Code_Class)
137-
is
138-
when RFLX.CoAP.Success =>
135+
if State.Current_Status /= CoAP_SPARK.OK then
139136

140-
RFLX_Result.Success_Code := Response_Codes.Success_Code;
137+
CoAP_SPARK.Log.Put
138+
("Error in options and payload encoding: ",
139+
CoAP_SPARK.Log.Info);
140+
CoAP_SPARK.Log.Put_Line
141+
(State.Current_Status'Image, CoAP_SPARK.Log.Info);
141142

142-
when RFLX.CoAP.Client_Error =>
143+
RFLX_Result.Message_Class := RFLX.CoAP.Server_Error;
144+
RFLX_Result.Server_Error_Code :=
145+
RFLX.CoAP.Internal_Server_Error;
146+
else
147+
case CoAP_SPARK.Messages.Response_Code
148+
(Response_Codes.Code_Class)
149+
is
150+
when RFLX.CoAP.Success =>
143151

144-
RFLX_Result.Client_Error_Code :=
145-
Response_Codes.Client_Error_Code;
152+
RFLX_Result.Success_Code :=
153+
Response_Codes.Success_Code;
146154

147-
when RFLX.CoAP.Server_Error =>
155+
when RFLX.CoAP.Client_Error =>
148156

149-
RFLX_Result.Server_Error_Code :=
150-
Response_Codes.Server_Error_Code;
157+
RFLX_Result.Client_Error_Code :=
158+
Response_Codes.Client_Error_Code;
151159

152-
end case;
160+
when RFLX.CoAP.Server_Error =>
161+
162+
RFLX_Result.Server_Error_Code :=
163+
Response_Codes.Server_Error_Code;
164+
165+
end case;
166+
end if;
153167
end if;
154168
end Handle_Request;
155169
end if;

0 commit comments

Comments
 (0)