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

⟦aa3890cd8⟧ Ada Source

    Length: 13312 (0x3400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, seg_00c4cd

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 Byte_Defs;
WITH Net_Info;
WITH Text_Io;
WITH Transport;
WITH Transport_Defs;
WITH Utils;
PACKAGE BODY Test_Transport_Level IS


   FUNCTION "=" (L, R : Transport_Defs.Status_Code) RETURN Boolean
       RENAMES Transport_Defs."=";



   Connection_Retry_Interval : CONSTANT Duration := 60.0;
   TYPE Retries IS RANGE 1 .. 3;




   PROCEDURE Start_Client IS

      Status            : Transport_Defs.Status_Code     := Transport_Defs.Ok;
      Connection        : Transport.Connection_Id;
      Message           : CONSTANT Byte_Defs.Byte_String :=
         Utils.String_To_Byte_String (Net_Info.Test_String);
      Bytes_Transmitted : Natural;
      Bytes_Received    : Natural;
      Open_Attempt      : Integer                        := 1;
      Rec_Buf           : Byte_Defs.Byte_String (1 .. 1024);

   BEGIN

      FOR Again IN 1 .. 3 LOOP

         Open_Loop:
            FOR I IN Retries LOOP

               IF NOT Transport.Is_Open (Connection => Connection) THEN

                  Transport.Open  
                     (Connection   => Connection,
                      Status       => Status,
                      Network      => Net_Info.Net_Name,
                      Local_Socket => Transport_Defs.Null_Socket_Id);

                  IF Status /= Transport_Defs.Ok THEN
                     Text_Io.Put_Line
                        ("*** Client Socket Open Failed. Error Code: " &
                         Transport_Defs.Image (Status));

                     IF Status = Transport_Defs.Socket_In_Use THEN
                        Text_Io.Put_Line ("--- Will retry.");
                        DELAY Connection_Retry_Interval;
                     ELSE
                        RETURN;
                     END IF;

                  ELSE
                     Text_Io.Put_Line ("+++ Client Socket Open");
                     EXIT Open_Loop;
                  END IF;
               END IF;


            END LOOP Open_Loop;

         IF NOT Transport.Is_Connected (Connection => Connection) THEN

            Transport.Connect (Connection    => Connection,
                               Status        => Status,
--                               Remote_Host   => Net_Info.R1000_Address,
                               Remote_Host   => Net_Info.Sparc_Address,
--                               Remote_Socket => Net_Info.R1000_Socket,
                               Remote_Socket => Net_Info.Sparc_Socket,
                               Max_Wait      => Duration'Last);

            IF Status /= Transport_Defs.Ok THEN
               Text_Io.Put_Line ("*** Client Connect Failed. Error Code: " &
                                 Transport_Defs.Image (Status));
               RETURN;

            ELSE
               Text_Io.Put_Line ("+++ Client Connected");
            END IF;

         ELSE

            Text_Io.Put_Line ("--* Client Socket Already Connected");

         END IF;


         Data_Transfer_Loop:           FOR I IN 1 .. 10 LOOP

               Bytes_Transmitted := 0;

               Transport.Transmit (Connection => Connection,
                                   Status     => Status,
                                   Data       => Message,
                                   Count      => Bytes_Transmitted,
                                   Max_Wait   => Duration'Last,
                                   More       => False);

               IF Status /= Transport_Defs.Ok THEN

                  Text_Io.Put_Line
                     ("*** Client Transmission Failed. Error Code: " &
                      Transport_Defs.Image (Status));

                  EXIT Data_Transfer_Loop;

               ELSIF Bytes_Transmitted /= Message'Length THEN

                  Text_Io.Put_Line ("--* Client Transmission Incomplete.");

               ELSE

                  Text_Io.Put_Line ("+++ Client Tranmission Completed.");

               END IF;


               Transport.Receive (Connection => Connection,
                                  Status     => Status,
                                  Data       => Rec_Buf,
                                  Count      => Bytes_Received,
                                  Max_Wait   => Duration'Last);

               IF Status /= Transport_Defs.Ok THEN

                  Text_Io.Put_Line ("*** Client Receive Failed. Error Code: " &
                                    Transport_Defs.Image (Status));

                  EXIT Data_Transfer_Loop;

               ELSE

                  Text_Io.Put_Line ("+++ Client Received: " &
                                    Utils.Byte_String_To_String
                                       (Rec_Buf (1 .. Bytes_Received)));

               END IF;


            END LOOP Data_Transfer_Loop;

         IF Transport.Is_Connected (Connection => Connection) THEN
            Transport.Disconnect (Connection => Connection);
         END IF;

         IF Transport.Is_Open (Connection => Connection) THEN
            Transport.Close (Connection => Connection);
         END IF;

         DELAY 5.0;

      END LOOP;
   END Start_Client;




   PROCEDURE Start_Server IS

      Status            : Transport_Defs.Status_Code := Transport_Defs.Ok;
      Connection        : Transport.Connection_Id;
      Bytes_Transmitted : Natural;
      Bytes_Received    : Natural;
      Rec_Buf           : Byte_Defs.Byte_String (1 .. 1024);


   BEGIN
      Accept_Loop:
         LOOP

            IF NOT Transport.Is_Open (Connection => Connection) THEN

               Transport.Open (Connection   => Connection,
                               Status       => Status,
                               Network      => Net_Info.Net_Name,
                               Local_Socket => Net_Info.R1000_Socket);

               IF Status /= Transport_Defs.Ok THEN
                  Text_Io.Put_Line
                     ("*** Server Socket Open Failed. Error Code: " &
                      Transport_Defs.Image (Status));
                  RETURN;

               ELSE
                  Text_Io.Put_Line ("+++ Server Socket Open");
               END IF;

            ELSE
               Text_Io.Put_Line
                  ("--* Server Socket Already Open, reusing socket");
            END IF;


            IF NOT Transport.Is_Connected (Connection => Connection) THEN

               Transport.Connect (Connection => Connection,
                                  Status     => Status,
                                  Max_Wait   => Duration'Last);

               IF Status /= Transport_Defs.Ok THEN
                  Text_Io.Put_Line ("*** Server Connect Failed. Error Code: " &
                                    Transport_Defs.Image (Status));
                  RETURN;

               ELSE
                  Text_Io.Put_Line ("+++ Server Connected");
               END IF;

            ELSE

               Text_Io.Put_Line ("--* Server Socket Already Connected");

            END IF;

            Data_Reception_Loop:
               LOOP

                  Bytes_Received := 0;

                  Transport.Receive (Connection => Connection,
                                     Status     => Status,
                                     Data       => Rec_Buf,
                                     Count      => Bytes_Received,
                                     Max_Wait   => Duration'Last);

                  IF Status /= Transport_Defs.Ok THEN

                     Text_Io.Put_Line
                        ("*** Server Receive Failed. Error Code: " &
                         Transport_Defs.Image (Status));

                     EXIT Data_Reception_Loop;

                  ELSE

                     Text_Io.Put_Line ("+++ Server Received: " &
                                       Utils.Byte_String_To_String
                                          (Rec_Buf (1 .. Bytes_Received)));

                  END IF;


                  IF Bytes_Received > 0 THEN

                     Bytes_Transmitted := 0;

                     Transport.Transmit (Connection => Connection,
                                         Status => Status,
                                         Data => Rec_Buf (1 .. Bytes_Received),
                                         Count => Bytes_Transmitted,
                                         Max_Wait => Duration'Last,
                                         More => False);

                     IF Status /= Transport_Defs.Ok THEN

                        Text_Io.Put_Line
                           ("*** Server Transmission Failed. Error Code: " &
                            Transport_Defs.Image (Status));

                        EXIT Data_Reception_Loop;

                     ELSIF Bytes_Transmitted /= Bytes_Received THEN

                        Text_Io.Put_Line
                           ("--* Server Transmission Incomplete.");

                     ELSE

                        Text_Io.Put_Line ("+++ Server Tranmission Completed.");

                     END IF;

                  END IF;

               END LOOP Data_Reception_Loop;

            IF Transport.Is_Connected (Connection => Connection) THEN
               Transport.Disconnect (Connection => Connection);
            END IF;

            IF Transport.Is_Open (Connection => Connection) THEN
               Transport.Close (Connection => Connection);
            END IF;

         END LOOP Accept_Loop;

   END Start_Server;


END Test_Transport_Level;

E3 Meta Data

    nblk1=c
    nid=0
    hdr6=18
        [0x00] rec0=28 rec1=00 rec2=01 rec3=040
        [0x01] rec0=02 rec1=00 rec2=0c rec3=038
        [0x02] rec0=1b rec1=00 rec2=02 rec3=032
        [0x03] rec0=1b rec1=00 rec2=03 rec3=002
        [0x04] rec0=1d rec1=00 rec2=04 rec3=000
        [0x05] rec0=1b rec1=00 rec2=05 rec3=004
        [0x06] rec0=23 rec1=00 rec2=06 rec3=038
        [0x07] rec0=01 rec1=00 rec2=0b rec3=02c
        [0x08] rec0=1b rec1=00 rec2=07 rec3=02c
        [0x09] rec0=1f rec1=00 rec2=08 rec3=010
        [0x0a] rec0=1a rec1=00 rec2=09 rec3=024
        [0x0b] rec0=1b rec1=00 rec2=0a rec3=000
    tail 0x21709649a820574e7297a 0x489e0066482863001