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

⟦c71b06033⟧ Ada Source

    Length: 8192 (0x2000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Mail_Sender, seg_05744f

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



package body Mail_Sender is

    procedure Init (The_Connection : in out Transport.Connection_Id;
                    The_Network_Kind : Transport_Defs.Network_Name;
                    The_Local_Socket : in out Orb_Defs.Socket_Id) is
        The_Status : Transport_Defs.Status_Code;
    begin
        Text_Io.Put_Line ("Mail Sender trying to open connection.");
        if Orb_Defs."=" (The_Local_Socket, Orb_Defs.Null_Socket_Id) then
            while not Transport.Is_Open (The_Connection) loop
                Transport.Open (Connection => The_Connection,
                                Status => The_Status,
                                Network => The_Network_Kind,
                                Local_Socket => Transport_Defs.Null_Socket_Id);
            end loop;
        else
            while not Transport.Is_Open (The_Connection) loop
                Transport.Open (Connection => The_Connection,
                                Status => The_Status,
                                Network => The_Network_Kind,
                                Local_Socket => The_Local_Socket);
            end loop;
        end if;
        The_Local_Socket := Transport.Local_Socket (The_Connection);
        Text_Io.Put_Line ("Connection opened by mail_sender.");
    end Init;

    procedure Send_Mail (The_Connection : Transport.Connection_Id;
                         The_Remote_Host : Transport_Defs.Host_Id;
                         The_Remote_Socket : Orb_Defs.Socket_Id;
                         The_Time_Out : Natural;
                         Success : out Boolean;
                         The_Mail_To_Send : Element) is
        The_Status : Transport_Defs.Status_Code;
        The_Mail_To_Send_Bytes : Frame_Defs.Communication_Data;
        The_Count : Natural;  
        Fin : Boolean := False;
        Index : Natural := The_Time_Out;
    begin

        while Fin = False loop
            Transport.Connect (Connection => The_Connection,
                               Status => The_Status,
                               Remote_Host => The_Remote_Host,
                               Remote_Socket => The_Remote_Socket);
            Index := Index - 1;
            if Index = 0 then
                Fin := True;
            else
                if Transport.Is_Connected (The_Connection) then
                    Fin := True;
                else
                    Fin := False;
                end if;
            end if;
            Text_Io.Put_Line ("Try to connect the socket");
            delay (2.0);
        end loop;

        if Transport_Defs.Image (The_Status) /=
           Transport_Defs.Image (Transport_Defs.Ok) then
            Success := False;
            Text_Io.Put_Line ("Problem to connect !!!!");
            if Index = 0 then
                Text_Io.Put_Line ("Time out while trying to connect");
            end if;
        else
            Success := True;
            Text_Io.Put_Line ("Connection made by mail sender.");

            Convert (The_Mail_To_Send, The_Mail_To_Send_Bytes);

            Transport.Transmit (Connection => The_Connection,
                                Status => The_Status,
                                Data => The_Mail_To_Send_Bytes,
                                Count => The_Count);

            if Transport_Defs.Image (The_Status) /=
               Transport_Defs.Image (Transport_Defs.Ok) then
                Success := False;
                Text_Io.Put_Line ("Problem while transmitting.");
            else
                Success := True;
                Text_Io.Put_Line ("Mail sender has transmited something.");

                Transport.Disconnect (The_Connection);

                Text_Io.Put_Line ("Disconnected.");
            end if;
        end if;
        Text_Io.Put_Line ("going out of send_mail with status = " &
                          Transport_Defs.Image (The_Status));
    end Send_Mail;

    procedure Close (The_Connection : Transport.Connection_Id) is
    begin
        Transport.Close (The_Connection);
    end Close;

end Mail_Sender;


E3 Meta Data

    nblk1=7
    nid=3
    hdr6=a
        [0x00] rec0=15 rec1=00 rec2=01 rec3=010
        [0x01] rec0=16 rec1=00 rec2=02 rec3=06c
        [0x02] rec0=1b rec1=00 rec2=04 rec3=010
        [0x03] rec0=17 rec1=00 rec2=07 rec3=07a
        [0x04] rec0=0a rec1=00 rec2=06 rec3=000
        [0x05] rec0=0a rec1=00 rec2=07 rec3=000
        [0x06] rec0=7a rec1=28 rec2=00 rec3=03c
    tail 0x21764435087c776451927 0x42a00088462060003
Free Block Chain:
  0x3: 0000  00 05 00 15 80 02 65 3b 02 00 0d 20 20 20 20 20  ┆      e;        ┆
  0x5: 0000  00 00 00 45 80 07 65 63 74 69 6f 6e 2c 07 00 34  ┆   E  ection,  4┆