|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 5260 (0x148c)
Types: TextFile
Names: »B«
└─⟦149519bd4⟧ Bits:30000546 8mm tape, Rational 1000, !projects 93-07-13
└─⟦124ff5788⟧ »DATA«
└─⟦this⟧
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
└─⟦129cab021⟧ »DATA«
└─⟦this⟧
└─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16
└─⟦6f12a12be⟧ »DATA«
└─⟦this⟧
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
└─⟦d65440be7⟧ »DATA«
└─⟦this⟧
with Host_Name;
with Low_Level_Message;
with Physical_Layer;
with Socket_Defs;
with Socket_Port;
with Socket_Port_Manager;
with Text_Io;
package body Protocol is
Protocol_Header : constant String := "Protocol";
Request_For_A_Behavior_Socket_Port : constant String :=
Protocol_Header & "Give me a socket port";
Response_Of_A_Request_For_A_Behavior_Socket_Port : constant String :=
Protocol_Header & "This is your socket port : ";
function Is_A_Kind_Of
(The_Message : Low_Level_Message.Object) return Boolean is
begin
if The_Message.The_String (1 .. Protocol_Header'Length) =
Protocol_Header then
return True;
else
return False;
end if;
end Is_A_Kind_Of;
function Is_A_Request_For_A_Behavior_Socket_Port
(The_Message : Low_Level_Message.Object) return Boolean is
begin
if The_Message.The_String
(1 .. Request_For_A_Behavior_Socket_Port'Length) =
Request_For_A_Behavior_Socket_Port then
return True;
else
return False;
end if;
end Is_A_Request_For_A_Behavior_Socket_Port;
function Ask_A_Behavior_Socket_Port
(The_Broker_Socket_Id : Socket_Defs.Socket_Id)
return Socket_Port.Object is
The_Local_Host_Name : Host_Name.Object;
The_Number_Of_Characters_Sent : Integer;
The_Number_Of_Characters_Received : Integer;
The_Result : Socket_Port.Object;
The_Request : Low_Level_Message.Object;
The_Response : Low_Level_Message.Object;
begin
Physical_Layer.Get_Host_Name (The_Local_Host_Name);
The_Request := Low_Level_Message.Create
(Request_For_A_Behavior_Socket_Port &
The_Local_Host_Name.The_String);
Physical_Layer.Send_String (The_Broker_Socket_Id, The_Request,
The_Number_Of_Characters_Sent);
Text_Io.Put_Line ("Protocol : Request message sent ... ");
Physical_Layer.Receive_String (The_Broker_Socket_Id, The_Response,
The_Number_Of_Characters_Received);
Text_Io.Put_Line ("Protocol : Response message received: " &
The_Response.The_String);
if The_Response.The_String
(1 .. Response_Of_A_Request_For_A_Behavior_Socket_Port'Length) /=
Response_Of_A_Request_For_A_Behavior_Socket_Port then
Text_Io.Put_Line ("Umps_Message.Init : Reception error");
raise Socket_Defs.Create_Behavior_Error;
else
The_Result :=
Socket_Port.Create
(Natural'Value
(The_Response.The_String
(Response_Of_A_Request_For_A_Behavior_Socket_Port'
Length + 1 .. The_Response.The_Size)));
return The_Result;
end if;
end Ask_A_Behavior_Socket_Port;
procedure Give_A_Behavior_Socket_Port
(The_Broker_Socket_Id : Socket_Defs.Socket_Id;
The_Buffer_Received : Low_Level_Message.Object) is
The_Behavior_Host_Name : Host_Name.Object;
The_Allocated_Behavior_Port_In_String : Low_Level_Message.Object;
The_Buffer_To_Send_Back : Low_Level_Message.Object;
The_Allocated_Behavior_Port : Socket_Port.Object;
Number_Of_Caracteres_Sent_Back : Integer;
Result : Boolean;
begin
Text_Io.Put_Line ("Protocol : A behavior asked for a Behavior_Number.");
The_Behavior_Host_Name :=
Host_Name.Create
(The_Buffer_Received.The_String
(Request_For_A_Behavior_Socket_Port'Length + 1 ..
The_Buffer_Received.The_String'Last));
Text_Io.Put_Line ("Protocol : Choose a Behavior port number => ");
Socket_Port_Manager.Allocate (The_Behavior_Host_Name,
The_Allocated_Behavior_Port, Result);
Text_Io.Put_Line ("-->" & Socket_Port.Image
(The_Allocated_Behavior_Port));
if Result = False then
The_Allocated_Behavior_Port_In_String := Socket_Port.Undefined;
Text_Io.Put_Line
("Protocol : allocate a new behavior number is impossible");
else
The_Allocated_Behavior_Port_In_String :=
Socket_Port.Image (The_Allocated_Behavior_Port);
end if;
The_Buffer_To_Send_Back :=
Low_Level_Message.Create
(Response_Of_A_Request_For_A_Behavior_Socket_Port &
The_Allocated_Behavior_Port_In_String.The_String);
Text_Io.Put_Line ("Protocol : Send the response ...");
Physical_Layer.Send_String
(The_Broker_Socket_Id, The_Buffer_To_Send_Back,
Number_Of_Caracteres_Sent_Back);
Text_Io.Put_Line ("Protocol : OK");
end Give_A_Behavior_Socket_Port;
end Protocol;