DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦4f541110a⟧ Ada Source

    Length: 22528 (0x5800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Query_Manager, seg_0574b6

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



with Frame_Defs;
with Orb_Defs;
with Letter_Box_Frames;
with Mail_Sender;
with Service_Manager;
with Text_Io;

package body Query_Manager is


    package Frame_Sender is new Mail_Sender
                                   (Frame_Defs.Frame, Frame_Defs.Get_Frame);


    procedure Send_Echo (The_Frame : Frame_Defs.Frame) is
        The_Connection_Id : Orb_Defs.Connection_Id;
        The_Socket_Id : Orb_Defs.Socket_Id;
        The_Host_Id : Orb_Defs.Host_Id;  
        The_Time_Out : Natural := 40;
        The_Success : Boolean;
        Null_Socket_Id : Orb_Defs.Socket_Id := Orb_Defs.Null_Socket_Id;
    begin
        Text_Io.Put_Line (Frame_Defs.Image (The_Frame));
        Frame_Sender.Init (The_Connection_Id,
                           Orb_Defs.Network_Kind, Null_Socket_Id);
        Frame_Defs.Get (Frame_Defs.Dest_Socket_Field, The_Frame, The_Socket_Id);
        Frame_Defs.Get (Frame_Defs.Dest_Host_Field, The_Frame, The_Host_Id);

        Frame_Sender.Send_Mail (The_Connection_Id, The_Host_Id, The_Socket_Id,
                                The_Time_Out, The_Success, The_Frame);

        Frame_Sender.Close (The_Connection_Id);
    end Send_Echo;



    procedure Abonne_Agent (The_Frame : Frame_Defs.Frame) is

        The_Funct : Orb_Defs.Funct;
        The_Connection_Id : Orb_Defs.Connection_Id;
        The_Host_Id : Orb_Defs.Host_Id;
        The_Socket_Id : Orb_Defs.Socket_Id;
        The_Message : Orb_Defs.Message;
        The_Name : Orb_Defs.Name;
        The_Message_Number : Natural;
        Ok_Add : Boolean;
        Null_Socket_Id : Orb_Defs.Socket_Id := Orb_Defs.Null_Socket_Id;
        The_Result_Frame : Frame_Defs.Frame;
        The_Time_Out : Natural := 40;
        The_Success : Boolean;

    begin

        Frame_Defs.Get (Frame_Defs.Nom_Exp_Field, The_Frame, The_Name);
        Frame_Defs.Get (Frame_Defs.Exp_Host_Field, The_Frame, The_Host_Id);
        Frame_Defs.Get (Frame_Defs.Exp_Socket_Field, The_Frame, The_Socket_Id);
        Frame_Defs.Get (Frame_Defs.Service_Field, The_Frame, The_Funct);
        Frame_Defs.Get (Frame_Defs.Message_Field, The_Frame, The_Message);
        Frame_Defs.Get (Frame_Defs.Message_Number_Field,
                        The_Frame, The_Message_Number);

        Frame_Sender.Init (The_Connection_Id,
                           Orb_Defs.Network_Kind, Null_Socket_Id);

        if The_Funct = "serv" then
            Ok_Add := Service_Manager.Add_Service
                         (The_Name, The_Connection_Id, The_Host_Id,
                          The_Socket_Id, The_Message);
        end if;
        if The_Funct = "filt" then
            Ok_Add := Service_Manager.Add_Filter
                         (The_Name, The_Connection_Id, The_Host_Id,
                          The_Socket_Id, The_Message);  
        end if;
        if The_Funct = "spy" then
            Ok_Add := Service_Manager.Add_Spy
                         (The_Name, The_Connection_Id, The_Host_Id,
                          The_Socket_Id, The_Message);
        end if;

        if Ok_Add = True then
            Text_Io.Put_Line ("Registration succeeded");
            Frame_Defs.Init_Frame
               ("orb ", The_Socket_Id, The_Host_Id, Orb_Defs.Default_Orb_Socket,
                Orb_Defs.Default_Orb_Host, 0, The_Message_Number, "regi",
                "ok  ", "registration was successfull", The_Result_Frame);


            Text_Io.Put_Line ("ORB is going to send the frame :");

            Frame_Sender.Send_Mail (The_Connection_Id, The_Host_Id,
                                    The_Socket_Id, The_Time_Out,
                                    The_Success, The_Result_Frame);
        else
            Text_Io.Put_Line ("Registration failed");
            Frame_Defs.Init_Frame ("orb ", The_Socket_Id, The_Host_Id,
                                   Orb_Defs.Default_Orb_Socket,
                                   Orb_Defs.Default_Orb_Host, 0,
                                   The_Message_Number, "regi", "fail",
                                   "registration failed", The_Result_Frame);

            Text_Io.Put_Line ("ORB is going to send the frame :");

            Frame_Sender.Send_Mail (The_Connection_Id, The_Host_Id,
                                    The_Socket_Id, The_Time_Out,
                                    The_Success, The_Result_Frame);

            Frame_Sender.Close (The_Connection_Id);
        end if;

    end Abonne_Agent;



    procedure Desabonne_Agent (The_Frame : Frame_Defs.Frame) is

        The_Host_Id : Orb_Defs.Host_Id;
        The_Socket_Id : Orb_Defs.Socket_Id;
        The_Funct : Orb_Defs.Funct;
        The_Destruct : Boolean;  
        The_Message_Number : Natural;
        The_Connection_Id : Orb_Defs.Connection_Id;
        The_Echo_Frame : Frame_Defs.Frame;

    begin

        Frame_Defs.Get (Frame_Defs.Exp_Socket_Field, The_Frame, The_Socket_Id);
        Frame_Defs.Get (Frame_Defs.Exp_Host_Field, The_Frame, The_Host_Id);
        Frame_Defs.Get (Frame_Defs.Service_Field, The_Frame, The_Funct);


        if The_Funct = "serv" then
            The_Destruct := Service_Manager.Remove_Service
                               (The_Host_Id, The_Socket_Id);
        end if;
        if The_Funct = "filt" then
            The_Destruct := Service_Manager.Remove_Filter
                               (The_Host_Id, The_Socket_Id);
        end if;
        if The_Funct = "spy " then
            The_Destruct := Service_Manager.Remove_Spy
                               (The_Host_Id, The_Socket_Id);
        end if;

        Frame_Defs.Get (Frame_Defs.Message_Number_Field,
                        The_Frame, The_Message_Number);

        if The_Destruct = False then
            Text_Io.Put_Line ("Unregistration failed");
            Frame_Defs.Init_Frame ("orb ", The_Socket_Id, The_Host_Id,
                                   Orb_Defs.Default_Orb_Socket,
                                   Orb_Defs.Default_Orb_Host, 0,
                                   The_Message_Number, "unre", "fail",
                                   "unregistration failed", The_Echo_Frame);

        else
            Text_Io.Put_Line ("Unregistration succeeded");
            Frame_Defs.Init_Frame ("orb ", The_Socket_Id, The_Host_Id,
                                   Orb_Defs.Default_Orb_Socket,
                                   Orb_Defs.Default_Orb_Host, 0,
                                   The_Message_Number, "unre", "ok  ",
                                   "unregistration succeded", The_Echo_Frame);
        end if;

        Text_Io.Put_Line ("ORB is going to send the frame :");
        Send_Echo (The_Echo_Frame);

    end Desabonne_Agent;



    procedure Direct_Send (The_Frame : Frame_Defs.Frame) is

        The_Class : Orb_Defs.Class;
        The_Funct : Orb_Defs.Funct;
        The_Host_Id : Orb_Defs.Host_Id;
        The_Socket_Id : Orb_Defs.Socket_Id;  
        The_Connection_Id : Orb_Defs.Connection_Id;
        The_Exist : Boolean;  
        The_Message_Number : Natural;  
        The_Time_Out : Natural := 40;
        The_Exp_Socket_Id : Orb_Defs.Socket_Id;
        The_Exp_Host_Id : Orb_Defs.Host_Id;
        The_Echo_Frame : Frame_Defs.Frame;  
        The_Success : Boolean;

    begin

        Frame_Defs.Get (Frame_Defs.Service_Kind_Field, The_Frame, The_Class);
        Frame_Defs.Get (Frame_Defs.Service_Field, The_Frame, The_Funct);


        if The_Class = "rjob" then
            Text_Io.Put_Line ("ORB is going to send the frame :");
            Send_Echo (The_Frame);
        else
            Text_Io.Put_Line ("ORB is going to check if the agent exist");
            Frame_Defs.Get (Frame_Defs.Dest_Host_Field, The_Frame, The_Host_Id);
            Frame_Defs.Get (Frame_Defs.Dest_Socket_Field,
                            The_Frame, The_Socket_Id);


            Service_Manager.Exist_Service
               (The_Class, The_Funct, The_Connection_Id,
                The_Host_Id, The_Socket_Id, The_Exist);

            if The_Exist = True then
                Text_Io.Put_Line ("the agent exist");
                Text_Io.Put_Line ("ORB is going to send the frame :");
                Frame_Sender.Send_Mail (The_Connection_Id, The_Host_Id,
                                        The_Socket_Id, The_Time_Out,
                                        The_Success, The_Frame);

                if The_Success = False then

                    Text_Io.Put_Line
                       ("ORB cannot connect the agent and set the agent to failure");

                    Service_Manager.Set_Agent_To_Failure
                       (The_Host_Id, The_Socket_Id);

                    Frame_Defs.Get (Frame_Defs.Exp_Socket_Field,
                                    The_Frame, The_Exp_Socket_Id);
                    Frame_Defs.Get (Frame_Defs.Exp_Host_Field,
                                    The_Frame, The_Exp_Host_Id);
                    Frame_Defs.Get (Frame_Defs.Message_Number_Field,
                                    The_Frame, The_Message_Number);
                    Frame_Defs.Init_Frame
                       ("orb ", The_Exp_Socket_Id, The_Exp_Host_Id,
                        Orb_Defs.Default_Orb_Socket, Orb_Defs.Default_Orb_Host,
                        0, The_Message_Number, "rjob", "fail",
                        "the agent does not respond", The_Echo_Frame);

                    Text_Io.Put_Line ("ORB is going to send the frame :");
                    Send_Echo (The_Echo_Frame);

                end if;
            else
                Text_Io.Put_Line ("the agent do not exist");
                Frame_Defs.Get (Frame_Defs.Exp_Socket_Field,
                                The_Frame, The_Exp_Socket_Id);
                Frame_Defs.Get (Frame_Defs.Exp_Host_Field,
                                The_Frame, The_Exp_Host_Id);
                Frame_Defs.Get (Frame_Defs.Message_Number_Field,
                                The_Frame, The_Message_Number);
                Frame_Defs.Init_Frame
                   ("orb ", The_Exp_Socket_Id, The_Exp_Host_Id,
                    Orb_Defs.Default_Orb_Socket, Orb_Defs.Default_Orb_Host,
                    0, The_Message_Number, "rjob", "fail",
                    "the agent does not exist", The_Echo_Frame);
                Text_Io.Put_Line ("ORB is going to send the frame");
                Send_Echo (The_Echo_Frame);
            end if;
        end if;

    end Direct_Send;



    procedure Normal_Send (The_Frame : in out Frame_Defs.Frame) is

        The_Class : Orb_Defs.Class;
        The_Funct : Orb_Defs.Funct;
        The_Connection_Id : Orb_Defs.Connection_Id;
        The_Host_Id : Orb_Defs.Host_Id;
        The_Socket_Id : Orb_Defs.Socket_Id;
        The_Service_Delivrered : Boolean;  
        The_Time_Out : Natural := 40;
        The_Success : Boolean;  
        The_Exp_Socket : Orb_Defs.Socket_Id;
        The_Exp_Host : Orb_Defs.Host_Id;
        The_Message_Number : Natural;
        The_Exp_Socket_Id : Orb_Defs.Socket_Id;
        The_Exp_Host_Id : Orb_Defs.Host_Id;
        The_Echo_Frame : Frame_Defs.Frame;  
        The_Service_Delivered : Boolean;

    begin
        Frame_Defs.Get (Frame_Defs.Service_Kind_Field, The_Frame, The_Class);
        Frame_Defs.Get (Frame_Defs.Service_Field, The_Frame, The_Funct);

        Service_Manager.Ask_Service
           (The_Class, The_Funct, The_Connection_Id,
            The_Host_Id, The_Socket_Id, The_Service_Delivered);


        if The_Service_Delivered = True then

            Text_Io.Put_Line ("the service is found");
            Frame_Defs.Set (Frame_Defs.Dest_Socket_Field,
                            The_Socket_Id, The_Frame);
            Frame_Defs.Set (Frame_Defs.Dest_Host_Field, The_Host_Id, The_Frame);

            Text_Io.Put_Line ("ORB is going to send the frame :");
            Text_Io.Put_Line (Frame_Defs.Image (The_Frame));

            Frame_Sender.Send_Mail (The_Connection_Id, The_Host_Id,
                                    The_Socket_Id, The_Time_Out,
                                    The_Success, The_Frame);

            if The_Success = False then
                Text_Io.Put_Line
                   ("ORB cannot connect the agent and set the agent to failure");
                Service_Manager.Set_Agent_To_Failure
                   (The_Host_Id, The_Socket_Id);
                Frame_Defs.Get (Frame_Defs.Exp_Socket_Field,
                                The_Frame, The_Exp_Socket_Id);
                Frame_Defs.Get (Frame_Defs.Exp_Host_Field,
                                The_Frame, The_Exp_Host_Id);
                Frame_Defs.Get (Frame_Defs.Message_Number_Field,
                                The_Frame, The_Message_Number);
                Frame_Defs.Init_Frame
                   ("orb ", The_Exp_Socket_Id, The_Exp_Host_Id,
                    Orb_Defs.Default_Orb_Socket, Orb_Defs.Default_Orb_Host,
                    0, The_Message_Number, "rjob", "fail",
                    "the agent does not respond", The_Echo_Frame);
                Text_Io.Put_Line ("ORB is going to send the frame : ");
                Send_Echo (The_Echo_Frame);

            end if;

        else
            Text_Io.Put_Line ("the service is not found");

            Frame_Defs.Get (Frame_Defs.Exp_Socket_Field,
                            The_Frame, The_Exp_Socket_Id);
            Frame_Defs.Get (Frame_Defs.Exp_Host_Field,
                            The_Frame, The_Exp_Host_Id);
            Frame_Defs.Get (Frame_Defs.Message_Number_Field,
                            The_Frame, The_Message_Number);
            Frame_Defs.Init_Frame
               ("orb ", The_Exp_Socket_Id, The_Exp_Host_Id,
                Orb_Defs.Default_Orb_Socket, Orb_Defs.Default_Orb_Host,
                0, The_Message_Number, "rjob", "fail",
                "the service  does not exist", The_Echo_Frame);  
            Text_Io.Put_Line ("ORB is going to send the _frame :");
            Send_Echo (The_Echo_Frame);

        end if;

    end Normal_Send;

    task Query_Manager_Task is
        entry Dispose;
    end Query_Manager_Task;

    task body Query_Manager_Task is

        The_Frame : Frame_Defs.Frame;
        The_Socket_Id : Orb_Defs.Socket_Id;
        The_Class : Orb_Defs.Class;
        Done : Boolean := False;

    begin

        Text_Io.Put_Line ("Demmarrage de la tache Query Manager");
        loop

            select

                accept Dispose do
                    Done := True;
                end Dispose;

            else



                if Letter_Box_Frames.Check = True then

                    Text_Io.Put_Line ("Query Manager is going to read BAL !!");

                    Letter_Box_Frames.Read (The_Frame);

                    Frame_Defs.Get (Frame_Defs.Service_Kind_Field,
                                    The_Frame, The_Class);

                    if The_Class = "regi" then
                        Text_Io.Put_Line ("ORB is going to register an agent");
                        Abonne_Agent (The_Frame);
                    else
                        if The_Class = "unre" then  
                            Text_Io.Put_Line
                               ("ORB is going to unregister an agent");
                            Desabonne_Agent (The_Frame);
                        else
                            Frame_Defs.Get (Frame_Defs.Dest_Socket_Field,
                                            The_Frame, The_Socket_Id);
                            if Orb_Defs."=" (The_Socket_Id,
                                             Orb_Defs.Null_Socket_Id) then
                                Text_Io.Put_Line
                                   ("ORB is going to find an agent for the service");
                                Normal_Send (The_Frame);
                            else  
                                Text_Io.Put_Line
                                   ("ORB is going to send the answer");
                                Direct_Send (The_Frame);
                            end if;
                        end if;
                    end if;  
                end if;

            end select;

            Text_Io.Put_Line ("The Query Manager is alive");

            exit when Done = True;

        end loop;


    end Query_Manager_Task;

    procedure Dispose is
    begin
        Query_Manager_Task.Dispose;
    end Dispose;

end Query_Manager;

E3 Meta Data

    nblk1=15
    nid=d
    hdr6=24
        [0x00] rec0=1e rec1=00 rec2=01 rec3=01e
        [0x01] rec0=1b rec1=00 rec2=08 rec3=04e
        [0x02] rec0=10 rec1=00 rec2=02 rec3=086
        [0x03] rec0=17 rec1=00 rec2=10 rec3=05a
        [0x04] rec0=1a rec1=00 rec2=0f rec3=030
        [0x05] rec0=19 rec1=00 rec2=05 rec3=062
        [0x06] rec0=14 rec1=00 rec2=04 rec3=032
        [0x07] rec0=1d rec1=00 rec2=07 rec3=044
        [0x08] rec0=16 rec1=00 rec2=0e rec3=0a8
        [0x09] rec0=14 rec1=00 rec2=0c rec3=022
        [0x0a] rec0=17 rec1=00 rec2=06 rec3=04a
        [0x0b] rec0=18 rec1=00 rec2=11 rec3=078
        [0x0c] rec0=17 rec1=00 rec2=12 rec3=036
        [0x0d] rec0=15 rec1=00 rec2=15 rec3=008
        [0x0e] rec0=1d rec1=00 rec2=0b rec3=000
        [0x0f] rec0=1f rec1=00 rec2=14 rec3=034
        [0x10] rec0=1b rec1=00 rec2=0a rec3=012
        [0x11] rec0=06 rec1=00 rec2=03 rec3=000
        [0x12] rec0=12 rec1=00 rec2=05 rec3=062
        [0x13] rec0=15 rec1=00 rec2=03 rec3=000
        [0x14] rec0=15 rec1=00 rec2=03 rec3=000
    tail 0x217645fa087c788554eb2 0x42a00088462060003
Free Block Chain:
  0xd: 0000  00 13 00 62 80 3a 20 20 20 20 54 65 78 74 5f 49  ┆   b :    Text_I┆
  0x13: 0000  00 09 00 72 80 07 6f 73 74 2c 20 30 2c 07 00 46  ┆   r  ost, 0,  F┆
  0x9: 0000  00 00 03 ef 80 32 20 20 54 65 78 74 5f 49 6f 2e  ┆     2  Text_Io.┆