|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 12288 (0x3000) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, seg_00b529
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧
WITH Byte_Defs; WITH Net_Info; WITH Transport; WITH Transport_Defs; WITH System_Interface; WITH Socket_System_Interface; WITH System; WITH Text_Io; WITH Unix_Base_Types; WITH Utils; PACKAGE BODY Server IS FUNCTION "=" (Left : Utils.Test_Level; Right : Utils.Test_Level) RETURN Boolean RENAMES Utils."="; FUNCTION "=" (Left : Transport_Defs.Status_Code; Right : Transport_Defs.Status_Code) RETURN Boolean RENAMES Transport_Defs."="; FUNCTION ">" (L, R : Byte_Defs.Byte) RETURN Boolean RENAMES Byte_Defs.">"; FUNCTION "-" (L, R : Byte_Defs.Byte) RETURN Byte_Defs.Byte RENAMES Byte_Defs."-"; FUNCTION Byte_String_To_Integer (Bs : Byte_Defs.Byte_String) RETURN Unix_Base_Types.Int IS Result : Unix_Base_Types.Int := 0; Int_Length : CONSTANT := 4; Normalized_Bs : Byte_Defs.Byte_String (0 .. Int_Length - 1) := (OTHERS => 0); Negative : Boolean := False; Shifter : Integer := 0; BEGIN IF Bs'Length < Int_Length THEN Normalized_Bs ((Normalized_Bs'Last - Bs'Length) + 1 .. Normalized_Bs'Last) := Bs; ELSE Normalized_Bs := Bs ((Bs'Last - Int_Length) + 1 .. Bs'Last); END IF; IF Normalized_Bs (0) > Byte_Defs.Byte (2 ** 7 - 1) THEN Negative := True; END IF; FOR I IN REVERSE Normalized_Bs'Range LOOP IF Negative THEN Normalized_Bs (I) := Byte_Defs.Byte'Last - Normalized_Bs (I); END IF; Result := Result + Integer (Normalized_Bs (I)) * (2 ** Shifter); Shifter := Shifter + 8; END LOOP; IF Negative THEN RETURN -Result - 1; ELSE RETURN Result; END IF; END Byte_String_To_Integer; PROCEDURE Start (Confidence_Level : Utils.Test_Level := Utils.One_Way) IS PACKAGE Log RENAMES Text_Io; Retry_Interval : CONSTANT Duration := 5.0; Transmit_Interval : CONSTANT Duration := 1.0; The_Passive_Connection : Transport.Connection_Id; The_Status : Transport_Defs.Status_Code := Transport_Defs.Disconnected; The_Network : CONSTANT Transport_Defs.Network_Name := Net_Info.Net_Name; The_Local_Socket : CONSTANT Transport_Defs.Socket_Id := Net_Info.Sparc_Socket; Messages_Received : Integer; Laddr_In_Ptr : Socket_System_Interface.Sockaddr_In_Ptr := NEW Socket_System_Interface.Sockaddr_In' (Sin_Family => Socket_System_Interface.Af_Inet, Sin_Port => Unix_Base_Types.Ushort (Byte_String_To_Integer (Byte_Defs.Byte_String (Transport_Defs.Normalize (The_Local_Socket)))), Sin_Addr => Socket_System_Interface.Inaddr_Any, Sin_Zero => (OTHERS => Ascii.Nul)); Laddrlen : Unix_Base_Types.Int := Laddr_In_Ptr.ALL'Size / System.Storage_Unit; Laddr_Ptr : Socket_System_Interface.Sockaddr_Ptr := NEW Socket_System_Interface.Sockaddr; Laddrlen_Ptr : Socket_System_Interface.Int_Ptr := NEW Unix_Base_Types.Int; Network_Socket : Unix_Base_Types.Int; Tcp_Connection : Unix_Base_Types.Int; System_Call_Result : Unix_Base_Types.Int; Length : Unix_Base_Types.Int; Bufsiz : CONSTANT Unix_Base_Types.Int := 1024; Buffer : Socket_System_Interface.Char_Array (0 .. Bufsiz); Buf : Unix_Base_Types.Char_Ptr; BEGIN Buf := Unix_Base_Types.To_Char_Ptr (Buffer (Buffer'First)'Address); Network_Socket := Socket_System_Interface.Socket (Af => Unix_Base_Types.Int (Socket_System_Interface.Af_Inet), Socket_Type => Socket_System_Interface.Sock_Stream, Protocol => 0); IF (Network_Socket < 0) THEN Log.Put_Line (Item => "+++ Socket failed"); RETURN; ELSE Log.Put_Line ("+++ Socket created"); END IF; System_Call_Result := Socket_System_Interface.Bind (S => Network_Socket, Addr => Laddr_In_Ptr, Addrlen => Laddrlen); IF (System_Call_Result < 0) THEN Log.Put_Line (Item => "+++ Bind failed"); RETURN; ELSE Log.Put_Line ("+++ Bind completed."); END IF; System_Call_Result := Socket_System_Interface.Listen (S => Network_Socket, Backlog => 5); LOOP Tcp_Connection := Socket_System_Interface.Saccept (S => Network_Socket, Addr => Laddr_Ptr, Addrlen => Laddrlen_Ptr); IF Tcp_Connection < 0 THEN Log.Put_Line ("*** Server Accept failed."); RETURN; ELSE Log.Put_Line ("+++ Server Accept completed."); END IF; LOOP Length := System_Interface.File_Io.Read (Fildes => Tcp_Connection, Buf => Buf, Nbyte => Bufsiz); IF Length <= 0 THEN Log.Put_Line ("*** Server read failed. Status = " & Integer'Image (Integer (Length))); EXIT; ELSE System_Call_Result := System_Interface.File_Io.Write (Fildes => Tcp_Connection, Buf => Buf, Nbyte => Length); IF System_Call_Result < 0 THEN Log.Put_Line ("*** Server write failed. Result = " & Integer'Image (System_Call_Result)); EXIT; ELSIF System_Call_Result /= Length THEN Log.Put_Line ("++* Server write Length /= Result." & " Bytes written = " & Integer'Image (System_Call_Result)); END IF; END IF; END LOOP; System_Call_Result := System_Interface.File_Io.Close (Fildes => Tcp_Connection); END LOOP; END Start; END Server;
nblk1=b nid=0 hdr6=16 [0x00] rec0=23 rec1=00 rec2=01 rec3=020 [0x01] rec0=00 rec1=00 rec2=0b rec3=00e [0x02] rec0=24 rec1=00 rec2=02 rec3=022 [0x03] rec0=00 rec1=00 rec2=0a rec3=018 [0x04] rec0=19 rec1=00 rec2=03 rec3=01e [0x05] rec0=00 rec1=00 rec2=09 rec3=006 [0x06] rec0=1c rec1=00 rec2=04 rec3=032 [0x07] rec0=01 rec1=00 rec2=08 rec3=010 [0x08] rec0=20 rec1=00 rec2=05 rec3=066 [0x09] rec0=1c rec1=00 rec2=06 rec3=03e [0x0a] rec0=13 rec1=00 rec2=07 rec3=000 tail 0x215077a4081fa705c7c56 0x489e0066482863c01