--
-- Generated by RecordFlux 0.10.1.dev8+g53cf133e on 2023-07-26
--
-- Copyright (C) 2018-2023 AdaCore GmbH
--
-- This file is distributed under the terms of the GNU Affero General Public License version 3.
--

pragma Restrictions (No_Streams);
pragma Style_Checks ("N3aAbCdefhiIklnOprStux");
pragma Warnings (Off, "redundant conversion");
with RFLX.DHCP_Client.Session_Allocator;
with RFLX.RFLX_Types;
with RFLX.DHCP;
with RFLX.DHCP.Message;

package RFLX.DHCP_Client.Session with
  SPARK_Mode
is

   type State is (S_Create_Discover, S_Send_Discover, S_Receive_Offer, S_Verify_Offer, S_Create_Request, S_Send_Request, S_Receive_Ack, S_Verify_Ack, S_Success, S_Failure, S_Final);

   type Private_Context is private;

   type Context is abstract tagged limited
      record
         P : Private_Context;
      end record;

   procedure Initialize (Ctx : in out Context'Class);

private

   type Private_Context is
      record
         Next_State : State := S_Create_Discover;
         Discover_Ctx : DHCP.Message.Context;
         Offer_Ctx : DHCP.Message.Context;
         Request_Ctx : DHCP.Message.Context;
         Ack_Ctx : DHCP.Message.Context;
         Slots : DHCP_Client.Session_Allocator.Slots;
         Memory : DHCP_Client.Session_Allocator.Memory;
      end record;

end RFLX.DHCP_Client.Session;
