@@ -71,8 +71,8 @@ procedure CoAP_Client is
7171 Global =>
7272 (Input => CoAP_SPARK.Log.Active_Level,
7373 In_Out => (Ada.Text_IO.File_System, CoAP_SPARK.Random.Generator))
74-
7574 is
75+
7676 URI : constant CoAP_SPARK.URI.URI :=
7777 CoAP_SPARK.URI.Create (URI_String);
7878 Ctx : FSM.Context;
@@ -81,6 +81,18 @@ procedure CoAP_Client is
8181 (Is_Secure =>
8282 CoAP_SPARK.URI.Scheme (URI) = CoAP_SPARK.Secure_Scheme);
8383 Valid_URI : Boolean := True;
84+
85+ procedure Finalize is
86+ begin
87+ RFLX.RFLX_Types.Free (Payload);
88+ if FSM.Initialized (Ctx) then
89+ FSM.Finalize (Ctx);
90+ end if ;
91+ pragma Assert (FSM.Uninitialized (Ctx));
92+ Session_Environment.Finalize (Ctx.E);
93+ pragma Assert (Session_Environment.Is_Finalized (Ctx.E));
94+ end Finalize ;
95+
8496 begin
8597
8698 if URI_String = " " or else URI_String (URI_String'First) = ' -' then
@@ -114,14 +126,6 @@ procedure CoAP_Client is
114126 CoAP_SPARK.Log.Put (" Query: " );
115127 CoAP_SPARK.Log.Put_Line (CoAP_SPARK.URI.Query (URI));
116128
117- CoAP_Secure.Initialize (Socket => Skt);
118- if not CoAP_SPARK.Channel.Is_Valid (Skt) then
119- CoAP_SPARK.Log.Put_Line
120- (" Communication problems." , CoAP_SPARK.Log.Error);
121- RFLX.RFLX_Types.Free (Payload);
122- return ;
123- end if ;
124-
125129 Session_Environment.Initialize
126130 (Method => Method,
127131 Server => CoAP_SPARK.URI.Host (URI),
@@ -134,27 +138,30 @@ procedure CoAP_Client is
134138 if Ctx.E.Current_Status /= CoAP_SPARK.OK then
135139 CoAP_SPARK.Log.Put_Line
136140 (Ctx.E.Current_Status'Image, CoAP_SPARK.Log.Error);
137- RFLX.RFLX_Types.Free (Payload);
138- Session_Environment.Finalize (Ctx.E);
139- pragma Assert (Session_Environment.Is_Finalized (Ctx.E));
141+ Finalize;
140142 return ;
141143 end if ;
142144 pragma Assert (FSM.Uninitialized (Ctx));
143145
144146 FSM.Initialize (Ctx);
147+
148+ CoAP_Secure.Initialize (Socket => Skt);
149+ if not CoAP_SPARK.Channel.Is_Ready (Skt) then
150+ CoAP_SPARK.Log.Put_Line
151+ (" Could not initialize socket." , CoAP_SPARK.Log.Error);
152+ Finalize;
153+ return ;
154+ end if ;
155+
145156 Channel.Connect
146157 (Socket => Skt,
147158 Server => CoAP_SPARK.URI.Host (URI),
148159 Port => CoAP_SPARK.Channel.Port_Type (CoAP_SPARK.URI.Port (URI)));
149160
150- if not CoAP_SPARK.Channel.Is_Valid (Skt) then
161+ if not CoAP_SPARK.Channel.Is_Ready (Skt) then
151162 CoAP_SPARK.Log.Put_Line
152163 (" Connection problems." , CoAP_SPARK.Log.Error);
153- RFLX.RFLX_Types.Free (Payload);
154- FSM.Finalize (Ctx);
155- pragma Assert (FSM.Uninitialized (Ctx));
156- Session_Environment.Finalize (Ctx.E);
157- pragma Assert (Session_Environment.Is_Finalized (Ctx.E));
164+ Finalize;
158165 return ;
159166 end if ;
160167
@@ -208,11 +215,7 @@ procedure CoAP_Client is
208215 SPARK_Terminal.Set_Exit_Status (SPARK_Terminal.Exit_Status_Failure);
209216 end if ;
210217
211- FSM.Finalize (Ctx);
212- pragma Assert (FSM.Uninitialized (Ctx));
213-
214- Session_Environment.Finalize (Ctx.E);
215- pragma Assert (Session_Environment.Is_Finalized (Ctx.E));
218+ Finalize;
216219 end Run_Session ;
217220
218221 Method : RFLX.CoAP.Method_Code := RFLX.CoAP.Get;
0 commit comments