|
|
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: 16384 (0x4000)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Communication, seg_056a99
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Text_Io;
with Utils;
package body Communication is
Network : constant Transport_Defs.Network_Name := "TCP/IP";
Count : Natural;
Sock : constant Transport_Defs.Socket_Id (1 .. 2) := (16#0A#, 16#2F#);
-- procedure qui extrait la socket et le host correspondant a la connection---------------------
procedure Format_Entete (Connection : Transport.Connection_Id;
Socket : out Transport_Defs.Socket_Id;
Host : out Transport_Defs.Host_Id);
-- procedure qui extrait la socket et le host places en tete de trame----------------------------
procedure Unformat_Entete (Trame : Byte_Defs.Byte_String;
Socket : out Transport_Defs.Socket_Id;
Host : out Transport_Defs.Host_Id);
procedure Ouvrir_Orb (Connection : in out Transport.Connection_Id) is
Status : Transport_Defs.Status_Code;
begin
if not Transport.Is_Open (Connection) then
Text_Io.Put ("ouverture reception : ");
Transport.Open (Connection, Status, Network, Sock);
Text_Io.Put_Line (Transport_Defs.Image (Status));
else
Text_Io.Put_Line ("connection deja ouverte");
end if;
end Ouvrir_Orb;
procedure Ouvrir_Autre (Connection : in out Transport.Connection_Id) is
Status : Transport_Defs.Status_Code;
begin
if not Transport.Is_Open (Connection) then
Text_Io.Put ("ouverture emission : ");
Transport.Open (Connection, Status, Network);
Text_Io.Put_Line (Transport_Defs.Image (Status));
else
Text_Io.Put_Line ("connection deja ouverte");
end if;
end Ouvrir_Autre;
procedure Fermer (Connection : Transport.Connection_Id) is
begin
if Transport.Is_Open (Connection) then
Text_Io.Put_Line ("fermeture connection");
Transport.Close (Connection);
else
Text_Io.Put_Line ("connection deja fermee");
end if;
end Fermer;
procedure Fermer_Orb (Connection : Transport.Connection_Id) is
begin
if Transport.Is_Open (Connection) then
Text_Io.Put_Line ("fermeture connection");
Transport.Close (Connection);
else
Text_Io.Put_Line ("connection deja fermee");
end if;
end Fermer_Orb;
procedure Reception (Trame : in out Byte_Defs.Byte_String;
Connection : Transport.Connection_Id) is
Status1 : Transport_Defs.Status_Code;
Status2 : Transport_Defs.Status_Code;
begin
Text_Io.Put_Line (" reception en attente d'un message ");
Transport.Connect (Connection, Status1);
Text_Io.Put_Line ("status connection reception : " &
Transport_Defs.Image (Status1));
if Transport.Is_Connected (Connection) then
Transport.Receive (Connection, Status2, Trame, Count);
Text_Io.Put_Line ("status reception : " &
Transport_Defs.Image (Status2));
Transport.Disconnect (Connection);
Text_Io.Put_Line ("reception deconnectee");
else
Text_Io.Put_Line ("message non recu car echec de connection");
end if;
Text_Io.Put_Line ("fin reception");
end Reception;
procedure Reception_Orb (Data : in out Byte_Defs.Byte_String;
Connection : Transport.Connection_Id;
Socket : out Transport_Defs.Socket_Id;
Host : out Transport_Defs.Host_Id) is
Status1 : Transport_Defs.Status_Code;
Status2 : Transport_Defs.Status_Code;
begin
Text_Io.Put_Line (" reception en attente d'un message ");
Transport.Connect (Connection, Status1);
Text_Io.Put_Line ("status connection reception : " &
Transport_Defs.Image (Status1));
if Transport.Is_Connected (Connection) then
Transport.Receive (Connection, Status2, Data, Count);
Text_Io.Put_Line ("status reception : " &
Transport_Defs.Image (Status2));
Unformat_Entete (Data, Socket, Host);
Transport.Disconnect (Connection);
Text_Io.Put_Line ("reception deconnectee");
else
Text_Io.Put_Line ("message non recu car echec de connection");
end if;
Text_Io.Put_Line ("fin reception");
end Reception_Orb;
procedure Emission (Trame : Byte_Defs.Byte_String;
Connection_Emission : Transport.Connection_Id;
Connection_Reception : Transport.Connection_Id) is
Rhost : Transport_Defs.Host_Id (1 .. 4) := (193, 54, 146, 132);
Status1 : Transport_Defs.Status_Code;
Status2 : Transport_Defs.Status_Code;
Socket : Transport_Defs.Socket_Id (1 .. 2);
Host : Transport_Defs.Host_Id (1 .. 4);
use Byte_Defs;
begin
Format_Entete (Connection_Reception, Socket, Host);
Text_Io.Put_Line ("debut emission");
Text_Io.Put_Line
("en attente de connection vers l'orb, veuillez patienter, ceci prend un certain temps");
while not (Transport.Is_Connected (Connection_Emission)) loop
Transport.Connect (Connection_Emission, Status1, Rhost, Sock);
end loop;
if Transport.Is_Connected (Connection_Emission) then
Text_Io.Put_Line ("status connection emission : " &
Transport_Defs.Image (Status1));
Transport.Transmit (Connection_Emission, Status2,
Byte_Defs.Byte_String (Socket) &
Byte_Defs.Byte_String (Host) & Trame, Count);
Text_Io.Put_Line ("status transmission : " &
Transport_Defs.Image (Status2));
Text_Io.Put_Line ("message transmis : " &
Utils.Byte_String_To_String (Trame));
Transport.Disconnect (Connection_Emission);
Text_Io.Put_Line ("emission deconnectee");
else
Text_Io.Put_Line ("message non transmis car echec de connection");
Transport.Disconnect (Connection_Emission);
end if;
Text_Io.Put_Line ("fin emission");
end Emission;
procedure Emission_Orb (Trame : Byte_Defs.Byte_String;
Connection : Transport.Connection_Id;
Socket : Transport_Defs.Socket_Id;
Host : Transport_Defs.Host_Id) is
--Rhost : Transport_Defs.Host_Id (1 .. 4) := (193, 54, 146, 133);
Status1 : Transport_Defs.Status_Code;
Status2 : Transport_Defs.Status_Code;
use Byte_Defs;
begin
Text_Io.Put_Line ("debut emission");
Text_Io.Put_Line ("socket avant emission orb: " &
Utils.Byte_String_To_String (Byte_Defs.Byte_String
(Socket)));
Text_Io.Put_Line ("host avant emission orb : " &
Utils.Byte_String_To_String
(Byte_Defs.Byte_String (Host)));
Text_Io.Put_Line ("en attente de connection");
while not (Transport.Is_Connected (Connection)) loop
Transport.Connect (Connection, Status1, Host, Socket);
end loop;
if Transport.Is_Connected (Connection) then
Text_Io.Put_Line ("status connection emission : " &
Transport_Defs.Image (Status1));
Transport.Transmit (Connection, Status2,
Byte_Defs.Byte_String (Socket) &
Byte_Defs.Byte_String (Host) & Trame, Count);
Text_Io.Put_Line ("status transmission : " &
Transport_Defs.Image (Status2));
Text_Io.Put_Line ("message transmis : " &
Utils.Byte_String_To_String (Trame));
Transport.Disconnect (Connection);
Text_Io.Put_Line ("emission deconnectee");
else
Text_Io.Put_Line ("message non transmis car echec de connection");
Transport.Disconnect (Connection);
end if;
Text_Io.Put_Line ("fin emission");
end Emission_Orb;
procedure Format_Entete (Connection : Transport.Connection_Id;
Socket : out Transport_Defs.Socket_Id;
Host : out Transport_Defs.Host_Id) is
begin
Socket := (Transport.Local_Socket (Connection));
Host := (Transport.Local_Host (Connection));
end Format_Entete;
procedure Unformat_Entete (Trame : Byte_Defs.Byte_String;
Socket : out Transport_Defs.Socket_Id;
Host : out Transport_Defs.Host_Id) is
begin
Socket := Transport_Defs.Socket_Id (Trame (1 .. 2));
Host := Transport_Defs.Host_Id (Trame (3 .. 6));
end Unformat_Entete;
end Communication;
nblk1=f
nid=b
hdr6=16
[0x00] rec0=18 rec1=00 rec2=01 rec3=02c
[0x01] rec0=19 rec1=00 rec2=0d rec3=008
[0x02] rec0=1a rec1=00 rec2=05 rec3=02e
[0x03] rec0=14 rec1=00 rec2=0f rec3=060
[0x04] rec0=14 rec1=00 rec2=04 rec3=02c
[0x05] rec0=01 rec1=00 rec2=02 rec3=018
[0x06] rec0=12 rec1=00 rec2=03 rec3=020
[0x07] rec0=13 rec1=00 rec2=0e rec3=05a
[0x08] rec0=13 rec1=00 rec2=0c rec3=026
[0x09] rec0=15 rec1=00 rec2=09 rec3=02c
[0x0a] rec0=0b rec1=00 rec2=0a rec3=000
[0x0b] rec0=0e rec1=00 rec2=0c rec3=000
[0x0c] rec0=14 rec1=00 rec2=0d rec3=046
[0x0d] rec0=15 rec1=00 rec2=0e rec3=044
[0x0e] rec0=16 rec1=00 rec2=0f rec3=000
tail 0x2176306e887c49ada242d 0x42a00088462060003
Free Block Chain:
0xb: 0000 00 06 00 17 80 14 74 5f 4c 69 6e 65 20 28 22 73 ┆ t_Line ("s┆
0x6: 0000 00 08 00 04 80 01 43 01 02 03 04 05 06 07 08 09 ┆ C ┆
0x8: 0000 00 07 03 fc 80 1c 20 55 74 69 6c 73 2e 42 79 74 ┆ Utils.Byt┆
0x7: 0000 00 00 03 fc 80 2f 20 20 20 20 20 20 54 65 78 74 ┆ / Text┆