Files
PolyORB/src/polyorb-protocols.ads
Thomas Quinot 803bba13fe Add missing pragma Ada_2005 to these units, since they now contain
OVERRIDING
keywords (for K830-015)

Subversion-branch: /trunk/polyorb
Subversion-revision: 202747
2013-02-18 09:38:27 +00:00

176 lines
6.9 KiB
Ada

------------------------------------------------------------------------------
-- --
-- POLYORB COMPONENTS --
-- --
-- P O L Y O R B . P R O T O C O L S --
-- --
-- S p e c --
-- --
-- Copyright (C) 2001-2013, Free Software Foundation, Inc. --
-- --
-- This is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-- ware Foundation; either version 3, or (at your option) any later ver- --
-- sion. This software is distributed in the hope that it will be useful, --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- --
-- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
-- License for more details. --
-- --
-- As a special exception under Section 7 of GPL version 3, you are granted --
-- additional permissions described in the GCC Runtime Library Exception, --
-- version 3.1, as published by the Free Software Foundation. --
-- --
-- You should have received a copy of the GNU General Public License and --
-- a copy of the GCC Runtime Library Exception along with this program; --
-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
-- <http://www.gnu.org/licenses/>. --
-- --
-- PolyORB is maintained by AdaCore --
-- (email: sales@adacore.com) --
-- --
------------------------------------------------------------------------------
-- Support for object method invocation protocols
pragma Ada_2005;
with Ada.Streams;
with PolyORB.Any.NVList;
with PolyORB.Binding_Data;
with PolyORB.Binding_Objects;
with PolyORB.Components;
with PolyORB.Errors;
with PolyORB.Filters;
with PolyORB.Requests;
with PolyORB.Annotations;
package PolyORB.Protocols is
-- A protocol is a factory of sessions. Each session corresponds
-- to a connection to a remote protocol entity.
-- XXX This package needs some comments and in particular the
-- callback and the demux stuff.
use PolyORB.Filters;
use PolyORB.Requests;
type Protocol is abstract new Filters.Factory with private;
type Protocol_Access is access all Protocol'Class;
type Session is abstract new Filters.Filter with private;
type Session_Access is access all Session'Class;
overriding
procedure Create
(Proto : access Protocol;
Session : out Filter_Access)
is abstract;
-- Create a Session for protocol Proto using filter Lower.
--------------------------------------------------
-- Primitives needed with some tasking policies --
--------------------------------------------------
procedure Set_Task_Info
(S : Session_Access;
N : PolyORB.Annotations.Notepad_Access);
-- Set the notes associated with session
function Get_Task_Info
(S : Session_Access)
return PolyORB.Annotations.Notepad_Access;
-- Return the notes associated with session.
-----------------------------------------------------
-- Protocol primitives (interface to upper layers) --
-----------------------------------------------------
procedure Invoke_Request
(S : access Session;
R : Requests.Request_Access;
P : access Binding_Data.Profile_Type'Class)
is abstract;
-- Send a method invocation message for request R on session S.
-- P designates the profile of the target object reference that
-- was bound to establish session S.
procedure Abort_Request
(S : access Session;
R : Request_Access) is abstract;
-- Abort pending invocation of R.
procedure Send_Reply
(S : access Session;
R : Request_Access)
is abstract;
-- Send back a reply on S notifying caller of the result
-- of executing R.
------------------------------------------------
-- Callback point (interface to lower layers) --
------------------------------------------------
procedure Handle_Connect_Indication
(S : access Session)
is abstract;
-- A new server connection has been accepted as session S.
procedure Handle_Connect_Confirmation
(S : access Session)
is abstract;
-- A new client connection has been established as session S.
procedure Handle_Data_Indication
(S : access Session;
Data_Amount : Ada.Streams.Stream_Element_Count;
Error : in out Errors.Error_Container) is abstract;
-- Invoked when some data arrives for session S.
procedure Handle_Disconnect
(S : access Session; Error : Errors.Error_Container) is abstract;
-- Invoked when the underlying connection is closed. Any pending request
-- must be marked as completed, and the corresponding target reference
-- must be unbound.
procedure Handle_Unmarshall_Arguments
(S : access Session;
Args : in out Any.NVList.Ref;
Error : in out Errors.Error_Container);
-- Invoked when the application needs unmarshalled arguments
-- for a request. Must be implemented by protocols that
-- allow deferred arguments unmarshalling.
procedure Handle_Flush (S : access Session) is abstract;
-- Flush all pending received data in S, and make S read to
-- receive a new incoming message.
---------------------
-- Message demuxer --
---------------------
overriding
function Handle_Message
(Sess : not null access Session;
S : Components.Message'Class) return Components.Message'Class;
-- Demultiplex Messages to the above specialized operations
private
type Protocol is abstract new Filters.Factory with null record;
type Session is abstract new Filters.Filter with record
Server : Components.Component_Access;
-- The ORB instance
Dependent_Binding_Object : Binding_Objects.Binding_Object_Access;
-- The enclosing binding object, if this session is on server side
-- (used to keep the BO referenced and prevent it from being destroyed
-- while the request is being processed).
N : PolyORB.Annotations.Notepad_Access := null;
end record;
end PolyORB.Protocols;