|
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: 25600 (0x6400) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Communication, seg_0570e6
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧
with Transport; with Text_Io; with Transport_Defs; with Utils; with Byte_Defs; with Our_Constantes; use Our_Constantes; with Message; use Message; with Our_String; with Id_Object; package body Communication is -- ****************************************************************************** -- Creation de la connection -- ========================= procedure Open_Transmit (The_Message : in out Message.Type_Of_Message; The_Connection_Data : in out Connection_Data) is Nul_Socket : Transport_Defs.Socket_Id (1 .. 2) := (0, 0); A_Message : Message.Type_Of_Message; The_Socket : Transport_Defs.Socket_Id (1 .. 2); begin -- verification de la socket -- ========================= A_Message := The_Message; A_Message.The_Socket_Send := Nul_Socket; if A_Message = The_Message then -- socket non definie -- ================== Transport.Open (The_Connection_Data.Connection, The_Connection_Data.Status, "TCP/IP", The_Socket); if Transport.Is_Open (The_Connection_Data.Connection) then Text_Io.Put_Line ("connection ouverte"); end if; The_Message.The_Socket_Send := Transport.Local_Socket (The_Connection_Data.Connection); The_Message.The_Host_Machine_Send := Transport.Local_Host (The_Connection_Data.Connection); else -- socket definie -- ============== Transport.Open (The_Connection_Data.Connection, The_Connection_Data.Status, "TCP/IP", The_Message.The_Socket_Receive); if Transport.Is_Open (The_Connection_Data.Connection) then Text_Io.Put_Line ("connection ouverte"); end if; end if; end Open_Transmit; -- ********************************************************************** procedure Connect_Transmit (The_Message : in out Message.Type_Of_Message; The_Connection_Data : in out Connection_Data) is begin while not (Transport.Is_Connected (The_Connection_Data.Connection)) loop Transport.Connect (The_Connection_Data.Connection, The_Connection_Data.Status, The_Message.The_Host_Machine_Receive, The_Message.The_Socket_Receive, Duration'Last); Text_Io.Put ("."); end loop; Text_Io.New_Line; if Transport.Is_Connected (The_Connection_Data.Connection) then null; -- ok connection realisee end if; end Connect_Transmit; -- ****************************************************************************** -- Transmission du message -- ======================= procedure Transmitter (The_Message : in Message.Type_Of_Message; The_Connection_Data : in out Connection_Data) is String_Tempo : Our_String.Variable_String; procedure Transmit_String (Str : Our_String.Variable_String; The_Connection : in out Connection_Data) is begin Transport.Transmit (The_Connection.Connection, The_Connection.Status, Utils.String_To_Byte_String (Our_String.Image (Str)), The_Connection.Count); end Transmit_String; begin Our_String.Copy (String_Tempo, Type_Of_Command'Image (The_Message.The_Command)); Our_String.Append (String_Tempo, "+++"); Transmit_String (String_Tempo, The_Connection_Data); Transport.Transmit (The_Connection_Data.Connection, The_Connection_Data.Status, Byte_Defs.Byte_String (The_Message. The_Host_Machine_Send), The_Connection_Data.Count); Transmit_String (Our_String.Value (Natural'Image (Natural (The_Message.The_Id_User_Send))), The_Connection_Data); Transport.Transmit (The_Connection_Data.Connection, The_Connection_Data.Status, Byte_Defs.Byte_String (The_Message. The_Host_Machine_Receive), The_Connection_Data.Count); Transmit_String (Our_String.Value (Natural'Image (Natural (The_Message.The_Id_User_Receive))), The_Connection_Data); Transport.Transmit (The_Connection_Data.Connection, The_Connection_Data.Status, Byte_Defs.Byte_String (The_Message. The_Host_Machine_To_Execute), The_Connection_Data.Count); if (The_Message.Command_Is_Ok = True) then Transmit_String (Our_String.Value (Natural'Image (1)), The_Connection_Data); else Transmit_String (Our_String.Value (Natural'Image (0)), The_Connection_Data); end if; Transmit_String (Our_String.Value (Natural'Image (The_Message. Number_Of_Return_Parameter)), The_Connection_Data); Transport.Transmit (The_Connection_Data.Connection, The_Connection_Data.Status, Byte_Defs.Byte_String (The_Message.The_Socket_Send), The_Connection_Data.Count); Transport.Transmit (The_Connection_Data.Connection, The_Connection_Data.Status, Byte_Defs.Byte_String (The_Message.The_Socket_Receive), The_Connection_Data.Count); Transport.Transmit (The_Connection_Data.Connection, The_Connection_Data.Status, Byte_Defs.Byte_String (The_Message. The_Socket_To_Execute), The_Connection_Data.Count); Our_String.Copy (String_Tempo, The_Message.Data); Transmit_String (String_Tempo, The_Connection_Data); end Transmitter; -- ****************************************************************************** -- etablissement de la connection -- ============================== procedure Open_Receive (The_Socket : in Transport_Defs.Socket_Id; The_Connection_Data : in out Connection_Data) is begin Transport.Open (The_Connection_Data.Connection, The_Connection_Data.Status, "TCP/IP", The_Socket); if Transport.Is_Open (The_Connection_Data.Connection) then Text_Io.Put_Line ("connection ouverte"); end if; end Open_Receive; -- ****************************************************************************** procedure Connect_Receive (The_Connection_Data : in out Connection_Data) is begin while not (Transport.Is_Connected (The_Connection_Data.Connection)) loop Transport.Connect (The_Connection_Data.Connection, The_Connection_Data.Status, Duration'Last); Text_Io.Put ("."); end loop; Text_Io.New_Line; if Transport.Is_Connected (The_Connection_Data.Connection) then null; -- connection realisee Ok end if; end Connect_Receive; -- ****************************************************************************** -- reception -- ========= procedure Receiver (The_Message : out Message.Type_Of_Message; The_Connection_Data : in out Connection_Data) is Data : Byte_Defs.Byte_String (1 .. 255); I : Positive := 1; Data_One : Byte_Defs.Byte_String (1 .. 2); Data_Four : Byte_Defs.Byte_String (1 .. 4); Data_Two : Byte_Defs.Byte_String (1 .. 2); String_Tempo : Our_String.Variable_String; End_Of_Data : Boolean := False; Last : Positive; The_String : String (1 .. Our_Constantes.Length_Of_A_Line); begin -- The_Message.The_Command Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data, The_Connection_Data.Count); String_Tempo := Our_String.Value (Utils.Byte_String_To_String (Data)); End_Of_Data := False; I := 1; while (not End_Of_Data) and (I <= (Our_Constantes.Length_Of_A_Line - 2)) loop if (Our_String.Char_At (String_Tempo, I) = '+') and (Our_String.Char_At (String_Tempo, I + 1) = '+') and (Our_String.Char_At (String_Tempo, I + 2) = '+') then String_Tempo := Our_String.Value (Utils.Byte_String_To_String (Data)); Our_String.Set_Length (String_Tempo, I - 1); End_Of_Data := True; else I := I + 1; end if; end loop; Our_Enumeration.Get (Our_String.Image (String_Tempo), The_Message.The_Command, Last); -- The_Message.The_Host_Machine_Send Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data_Four, The_Connection_Data.Count); The_Message.The_Host_Machine_Send := Transport_Defs.Host_Id (Data_Four); -- The_Message.The_Id_User_Send Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data_One, The_Connection_Data.Count); The_Message.The_Id_User_Send := Id_Object.Type_Id (Natural'Value (Utils.Byte_String_To_String (Data_One))); -- The_Message.The_Host_Machine_Receive Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data_Four, The_Connection_Data.Count); Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data_One, The_Connection_Data.Count); The_Message.The_Id_User_Receive := Id_Object.Type_Id (Natural'Value (Utils.Byte_String_To_String (Data_One))); -- The_Message.The_Host_Machine_To_Execute Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data_Four, The_Connection_Data.Count); The_Message.The_Host_Machine_To_Execute := Transport_Defs.Host_Id (Data_Four); --The_Message.Command_Is_Ok Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data_One, The_Connection_Data.Count); if (Natural'Value (Utils.Byte_String_To_String (Data_One)) = 1) then The_Message.Command_Is_Ok := True; else The_Message.Command_Is_Ok := False; end if; -- The_Message.Number_Of_The_Question Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data_One, The_Connection_Data.Count); The_Message.Number_Of_Return_Parameter := Natural'Value (Utils.Byte_String_To_String (Data_One)); -- The_Message.The_Socket_Send Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data_Two, The_Connection_Data.Count); The_Message.The_Socket_Send := Transport_Defs.Socket_Id (Data_Two); -- The_Message.The_Socket_Receive Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data_Two, The_Connection_Data.Count); The_Message.The_Socket_Receive := Transport_Defs.Socket_Id (Data_Two); -- The_Message.The_Socket_To_Execute Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data_Two, The_Connection_Data.Count); The_Message.The_Socket_To_Execute := Transport_Defs.Socket_Id (Data_Two); -- The_Message.Data -- ================ Transport.Receive (The_Connection_Data.Connection, The_Connection_Data.Status, Data, The_Connection_Data.Count); String_Tempo := Our_String.Value (Utils.Byte_String_To_String (Data)); End_Of_Data := False; I := 1; String_Tempo := Our_String.Value (Utils.Byte_String_To_String (Data)); while (not End_Of_Data) and (I <= Our_Constantes.Length_Of_A_Line - 2) loop if (Our_String.Char_At (String_Tempo, I) = '+') and (Our_String.Char_At (String_Tempo, I + 1) = '+') and (Our_String.Char_At (String_Tempo, I + 2) = '+') then String_Tempo := Our_String.Value (Utils.Byte_String_To_String (Data)); Our_String.Set_Length (String_Tempo, I - 1); End_Of_Data := True; else I := I + 1; end if; end loop; The_Message.Data := String_Tempo; end Receiver; -- ****************************************************************************** procedure Disconnect (The_Connection_Data : in out Connection_Data) is begin Transport.Disconnect (The_Connection_Data.Connection); end Disconnect; -- ****************************************************************************** procedure Close (The_Connection_Data : in out Connection_Data) is begin Transport.Close (The_Connection_Data.Connection); Text_Io.Put_Line ("connection fermee"); end Close; begin null; end Communication;
nblk1=18 nid=9 hdr6=22 [0x00] rec0=23 rec1=00 rec2=01 rec3=026 [0x01] rec0=14 rec1=00 rec2=02 rec3=002 [0x02] rec0=1a rec1=00 rec2=05 rec3=006 [0x03] rec0=00 rec1=00 rec2=03 rec3=01a [0x04] rec0=1a rec1=00 rec2=14 rec3=002 [0x05] rec0=13 rec1=00 rec2=0b rec3=004 [0x06] rec0=16 rec1=00 rec2=0a rec3=030 [0x07] rec0=15 rec1=00 rec2=10 rec3=07e [0x08] rec0=18 rec1=00 rec2=07 rec3=02e [0x09] rec0=14 rec1=00 rec2=17 rec3=066 [0x0a] rec0=15 rec1=00 rec2=16 rec3=02e [0x0b] rec0=18 rec1=00 rec2=0f rec3=004 [0x0c] rec0=0f rec1=00 rec2=06 rec3=016 [0x0d] rec0=17 rec1=00 rec2=0c rec3=002 [0x0e] rec0=15 rec1=00 rec2=15 rec3=00c [0x0f] rec0=14 rec1=00 rec2=04 rec3=01e [0x10] rec0=19 rec1=00 rec2=0e rec3=000 [0x11] rec0=19 rec1=00 rec2=0e rec3=000 [0x12] rec0=18 rec1=00 rec2=0c rec3=054 [0x13] rec0=18 rec1=00 rec2=06 rec3=036 [0x14] rec0=11 rec1=00 rec2=0f rec3=000 [0x15] rec0=19 rec1=00 rec2=06 rec3=000 [0x16] rec0=18 rec1=00 rec2=0c rec3=054 [0x17] rec0=19 rec1=00 rec2=06 rec3=000 tail 0x2154dde5087c59a4a9250 0x42a00088462060003 Free Block Chain: 0x9: 0000 00 13 00 28 80 12 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ┆ ( **********┆ 0x13: 0000 00 11 03 fc 00 00 00 00 00 00 00 27 20 20 20 20 ┆ ' ┆ 0x11: 0000 00 12 03 fb 80 14 20 3a 3d 20 4f 75 72 5f 53 74 ┆ := Our_St┆ 0x12: 0000 00 0d 03 c9 80 2d 20 20 20 44 61 74 61 5f 54 77 ┆ - Data_Tw┆ 0xd: 0000 00 18 00 6b 80 16 28 42 79 74 65 5f 44 65 66 73 ┆ k (Byte_Defs┆ 0x18: 0000 00 08 03 fc 80 0d 5f 44 61 74 61 2e 53 74 61 74 ┆ _Data.Stat┆ 0x8: 0000 00 00 00 1a 80 05 66 69 6e 69 65 05 00 0f 20 20 ┆ finie ┆