home *** CD-ROM | disk | FTP | other *** search
- -----------------------------------------------------------------------
- --
- -- DoD Protocols NA-00003-200 80-01042-100(-)
- -- E-Systems, Inc. August 07, 1985
- --
- -- tcp_ulp_tester.ada Author : Jim Baldo
- --
- -----------------------------------------------------------------------
- with SYSTEM ; use SYSTEM ;
- with CONDITION_HANDLING ; use CONDITION_HANDLING ;
- with STARLET ; use STARLET ;
- with WITH_ULP_COMMUNICATE ; use WITH_ULP_COMMUNICATE ;
- with TEXT_IO ; use TEXT_IO ;
- with BUFFER_DATA ; use BUFFER_DATA ;
-
- procedure TCP_ULP_TESTER is
-
- package CONVERT_INT_16_TO_STRING is new INTEGER_IO( SIXTEEN_BITS ) ;
- package CONVERT_INT_32_TO_STRING is new INTEGER_IO( THIRTYTWO_BITS ) ;
-
- package INT_IO_16 is new INTEGER_IO ( SIXTEEN_BITS ) ;
- package INT_IO_32 is new INTEGER_IO ( THIRTYTWO_BITS ) ;
-
- type END_TEST_FLAG_TYPE is (END_TEST,TEST_RUNNING);
-
- MENU_SELECTION : SIXTEEN_BITS := 0 ;
- END_TEST_FLAG : END_TEST_FLAG_TYPE := TEST_RUNNING;
- CONNECTION_LCN : LCN_TYPE ;
- WHOIAM : constant THIRTYTWO_BITS := 1 ;
-
- --LCN storage
- type LCN_NAME_PTR_TYPE is record
- LCN : LCN_PTR_TYPE;
- LCN_NAME : STRING(1..6);
- end record;
-
- MAX_NUM_OF_LCN : constant SIXTEEN_BITS := 10;
-
- type ARRAY_OF_LCNS_TYPE is array(1..MAX_NUM_OF_LCN) of LCN_NAME_PTR_TYPE;
-
- ARRAY_OF_LCNS : ARRAY_OF_LCNS_TYPE ;
-
- procedure REVERSE_VIDEO is
-
- --This procedure selects a VT-100 like terminal into reverse video
- --mode.
-
- REVERSEVIDEO : STRING(1..4);
-
- begin
- REVERSEVIDEO(1) := ASCII.ESC;
- REVERSEVIDEO(2..4) := "[7m";
- PUT(REVERSEVIDEO);
- end REVERSE_VIDEO;
-
- procedure ATTRIBUTES_OFF is
-
- ATTRIBUTESOFF : STRING(1..3);
-
- begin
- ATTRIBUTESOFF(1) := ASCII.ESC;
- ATTRIBUTESOFF(2..3) := "[m";
- PUT(ATTRIBUTESOFF);
- end ATTRIBUTES_OFF;
-
- procedure CLEAR_SCREEN is
-
- --This procedure selects a VT-100 like terminal to clear the screen.
-
- CLEARSCREEN : STRING(1..4);
-
- begin
- CLEARSCREEN(1) := ASCII.ESC;
- CLEARSCREEN(2..4) := "[2J";
- PUT(CLEARSCREEN);
- end CLEAR_SCREEN;
-
- procedure BOLD is
-
- --This procedure selects a VT-100 like terminal to turn-on the bold
- --attribute.
-
- BOLD_CHAR : STRING(1..4);
-
- begin
- BOLD_CHAR(1) := ASCII.ESC;
- BOLD_CHAR(2..4) := "[1m";
- PUT(BOLD_CHAR);
- end BOLD;
-
- procedure BLINK is
-
- --This procedure selects a VT-100 like terminal to turn-on the blinking
- --attribute
-
- BLINK_CHAR : STRING(1..4);
-
- begin
- BLINK_CHAR(1) := ASCII.ESC;
- BLINK_CHAR(2..4) := "[5m";
- PUT(BLINK_CHAR);
- end BLINK;
-
- procedure HOME_POSITION is
-
- --This procedure places the cursor in the home position.
-
- HOMEPOSITION : STRING(1..4);
-
- begin
- HOMEPOSITION(1) := ASCII.ESC;
- HOMEPOSITION(2) := 'H';
- PUT(HOMEPOSITION);
- end HOME_POSITION;
-
- procedure SKIP_LINES(NUMBER_OF_LINES_TO_SKIP : in SIXTEEN_BITS ) is
-
- -- This procedure will skip lines
-
- begin
- for I in 1..NUMBER_OF_LINES_TO_SKIP loop
- NEW_LINE;
- end loop;
- end SKIP_LINES;
-
- procedure REMOVE_LCN_RECORD(LCN_NAME : in STRING ) is
-
- LCN_HOLDER : STRING(1..6) := " ";
-
- begin
- for I in 1..MAX_NUM_OF_LCN loop
- LCN_HOLDER := ARRAY_OF_LCNS(SIXTEEN_BITS(I)).LCN_NAME ;
- if LCN_HOLDER = LCN_NAME then
- ARRAY_OF_LCNS(I).LCN_NAME := " ";
- exit;
- end if;
- end loop;
- end REMOVE_LCN_RECORD;
-
- procedure ADD_LCN_RECORD(LCN_NAME_PTR : in LCN_NAME_PTR_TYPE ) is
-
- LCN_HOLDER : STRING(1..6) := " ";
-
- begin
- for I in 1..MAX_NUM_OF_LCN loop
- LCN_HOLDER := ARRAY_OF_LCNS(SIXTEEN_BITS(I)).LCN_NAME ;
- if LCN_HOLDER = " " then
- ARRAY_OF_LCNS(I) := LCN_NAME_PTR;
- exit;
- end if;
- end loop;
- end ADD_LCN_RECORD;
-
- procedure OBTAIN_LCN(LCN_NAME_PTR : in out LCN_NAME_PTR_TYPE) is
-
- LCN_NAME_STRING : STRING(1..6) := " ";
-
- begin
- for I in 1..MAX_NUM_OF_LCN loop
- LCN_NAME_STRING := ARRAY_OF_LCNS(I).LCN_NAME;
- if LCN_NAME_STRING = LCN_NAME_PTR.LCN_NAME then
- LCN_NAME_PTR := ARRAY_OF_LCNS(I);
- exit;
- end if;
- end loop;
- end OBTAIN_LCN;
-
- procedure INTIALIZE_LCNS is
-
- begin
- for I in 1..10 loop
- ARRAY_OF_LCNS(SIXTEEN_BITS(I)).LCN.LCN_PTR := null;
- ARRAY_OF_LCNS(SIXTEEN_BITS(I)).LCN_NAME := " ";
- end loop;
- end INTIALIZE_LCNS;
-
- procedure TEST_MESSAGE_GENERATOR is
-
- LCN : LCN_PTR_TYPE;
- MAX_MESSAGE_LENGTH : constant SIXTEEN_BITS := 200; -- Maximum message size
-
- type GENERATE_ANOTHER_MESSAGE_TYPE is (YES,NO);
- type MESSAGE_TYPE is array(1..MAX_MESSAGE_LENGTH) of CHARACTER;
-
- subtype INDEX_TYPE is SIXTEEN_BITS ;
-
- subtype PRECEDENCE_TYPE is SIXTEEN_BITS ;
- subtype TIMEOUT_TYPE is SIXTEEN_BITS ;
- subtype FOREIGN_PORT_TYPE is SIXTEEN_BITS ;
- subtype FOREIGN_NET_HOST_TYPE is THIRTYTWO_BITS ;
- subtype MY_PORT_TYPE is SIXTEEN_BITS ;
- subtype REMOTE_PORT_TYPE is SIXTEEN_BITS ;
-
- RESULT : NATURAL;
- MESSAGE_BUFFER : PACKED_BUFFER_PTR;
- BUFFER_TYPE : SIXTEEN_BITS ; --Temporary; Parameter should be removed
- --from BUFFGET
- GENERATE_ANOTHER_MESSAGE : GENERATE_ANOTHER_MESSAGE_TYPE := YES;
- INPUT_CHARACTER : CHARACTER := ASCII.NUL;
- MESSAGE : MESSAGE_TYPE;
- TYPE_OF_TCP_MESSAGE : STRING(1..7) := " ";
- SERVICE_REQUEST_PRIMITIVE : STRING(1..8) := " ";
- ACTIVE_OR_PASSIVE : STRING(1..7) := " ";
- COMPONENT_ACTIVE_OR_PASSIVE : ACKPASS ;
- FOREIGN_PORT : FOREIGN_PORT_TYPE := 0;
- FOREIGN_NET_HOST : FOREIGN_NET_HOST_TYPE := 0;
- PRECEDENCE : PRECEDENCE_TYPE := 0;
- TIMEOUT : TIMEOUT_TYPE := 15;
- SCREEN_MESSAGE : STRING(1..50);
- INDEX : INDEX_TYPE := 0;
- OPEN_PARAMETERS : OPEN_PARAMS ;
- RECEIVE_DATA : RECEIVE_PARAMS ;
- SEND_PARAMETERS : SEND_PARAMS;
- CLOSE_PARAMETERS : ABORT_CLOSE_PARAMS;
- ABORT_PARAMETERS : ABORT_CLOSE_PARAMS;
- STATUS_PARAMETERS : STATUS_PARAMS;
- X : TCP_OPTION_TYPE;
- MY_PORT : MY_PORT_TYPE ;
- REMOTE_PORT : REMOTE_PORT_TYPE;
- PTR : SIXTEEN_BITS := 0;
- YES_OR_NO : STRING(1..3);
- TCP_MESSAGE : WITH_ULP_COMMUNICATE.MESSAGE ;
- LCN_POINTER : LCN_PTR_TYPE ;
- BUFFER : PACKED_BUFFER_PTR ;
- REQUEST_OK : BOOLEAN := FALSE ;
- CHAR : CHARACTER := ' ';
- LCN_STRING : STRING(1..6) := " ";
- LCN_NAME_PTR : LCN_NAME_PTR_TYPE ;
- LENGTH : NATURAL;
-
- begin
- while GENERATE_ANOTHER_MESSAGE = YES loop
- -- Obtain a buffer
- BUFFGET(MESSAGE_BUFFER,BUFFER_TYPE);
- HOME_POSITION;
- CLEAR_SCREEN; -- Clear screen
- SKIP_LINES(3);
- SCREEN_MESSAGE := " ULP Message ";
- REVERSE_VIDEO;
- PUT_LINE(SCREEN_MESSAGE);
- ATTRIBUTES_OFF;
- SKIP_LINES(3);
- loop
- PUT_LINE("Input ULP service request primitive ");
- PUT("( OPEN, SEND, RECEIVE ,ALLOCATE, CLOSE, RESET,");
- PUT(" STATUS, EXIT) :");
- SERVICE_REQUEST_PRIMITIVE := " ";
- BOLD;
- TEXT_IO.GET_LINE(SERVICE_REQUEST_PRIMITIVE,RESULT);
- ATTRIBUTES_OFF;
- if SERVICE_REQUEST_PRIMITIVE(1..4) = "OPEN"
- or SERVICE_REQUEST_PRIMITIVE(1..4) = "open" then
- NEW_LINE ;
- PUT("Enter Local Port := ") ;
- BOLD ;
- INT_IO_16.GET( MY_PORT ) ;
- ATTRIBUTES_OFF ;
- loop
- NEW_LINE;
- PUT("ACTIVE or PASSIVE OPEN : ");
- ACTIVE_OR_PASSIVE := " "; -- Null string
- BOLD;
- TEXT_IO.GET_LINE(ACTIVE_OR_PASSIVE,RESULT);
- ATTRIBUTES_OFF;
- if ACTIVE_OR_PASSIVE(1..6) = "ACTIVE"
- or ACTIVE_OR_PASSIVE(1..6) = "active" then
- COMPONENT_ACTIVE_OR_PASSIVE := ACTIVE;
- NEW_LINE;
- PUT("Input Foreign Net Host : ");
- BOLD;
- INT_IO_32.GET(FOREIGN_NET_HOST);
- ATTRIBUTES_OFF;
- exit;
- elsif ACTIVE_OR_PASSIVE(1..7) = "PASSIVE"
- or ACTIVE_OR_PASSIVE(1..7) = "passive" then
- NEW_LINE;
- PUT("Input Foreign Net Host : ");
- BOLD;
- INT_IO_32.GET(FOREIGN_NET_HOST);
- ATTRIBUTES_OFF;
- COMPONENT_ACTIVE_OR_PASSIVE := PASSIVE;
- exit;
- else
- NEW_LINE;
- PUT_LINE("Your input was not PASSIVE or ACTIVE");
- PUT_LINE("Try again");
- end if;
- end loop;
- loop
- NEW_LINE;
- PUT("Input Foreign_port : ");
- BOLD;
- INT_IO_16.GET(FOREIGN_PORT);
- ATTRIBUTES_OFF;
- if FOREIGN_PORT in -1..255 then
- exit;
- else
- NEW_LINE;
- PUT_LINE("Your input was not within -1 - 255 ");
- PUT_LINE("Try again");
- end if;
- end loop;
- loop
- NEW_LINE;
- PUT("Input Precedence(0 - 7) : ");
- PRECEDENCE := 0; -- default
- BOLD;
- INT_IO_16.GET(PRECEDENCE);
- ATTRIBUTES_OFF;
- if PRECEDENCE in 0..7 then
- exit;
- else
- NEW_LINE;
- PUT_LINE("Your input was not within the range of 0-7 ");
- PUT_LINE("Try again");
- end if;
- end loop;
- loop
- NEW_LINE;
- PUT("Input Time out(15 - 255) :");
- TIMEOUT := 15; -- default
- BOLD;
- INT_IO_16.GET(TIMEOUT);
- ATTRIBUTES_OFF;
- if TIMEOUT in 15..255 then
- exit;
- else
- NEW_LINE;
- PUT_LINE("Your input was not within the range of 15-255 ");
- PUT_LINE("Try again");
- end if;
- end loop;
- --intialize all options to zero for now
- for I in 1..50 loop
- x(I) := 0;
- end loop;
- OPEN_PARAMETERS := (MY_PORT,
- FOREIGN_PORT,
- FOREIGN_NET_HOST,
- COMPONENT_ACTIVE_OR_PASSIVE,
- 0,
- TIMEOUT,
- LCN_POINTER,
- 0,
- PRECEDENCE,
- X);
- TCP_MESSAGE := ( OPEN, OPEN_PARAMETERS);
- MESSAGE_FOR_TCP(TCP_MESSAGE , REQUEST_OK);
- exit;
- elsif SERVICE_REQUEST_PRIMITIVE(1..4) = "EXIT" or
- SERVICE_REQUEST_PRIMITIVE(1..4) = "exit" then
- exit;
- elsif SERVICE_REQUEST_PRIMITIVE = "SEND "
- or SERVICE_REQUEST_PRIMITIVE = "send " then
- loop
- NEW_LINE;
- PUT("Input Time out(15 - 255) :");
- TIMEOUT := 15; -- default
- INT_IO_16.GET(TIMEOUT);
- if TIMEOUT in 15..255 then
- exit;
- end if;
- end loop;
- PUT_LINE("Input message below(Terminate with """" # """")");
- INDEX := 0; -- Intialize INDEX
- BUFFGET( MESSAGE_BUFFER, BUFFER_TYPE);
- INPUT_CHARACTER := ' ';
- while INPUT_CHARACTER /= ASCII.SHARP loop
- GET(INPUT_CHARACTER);
- INDEX := INDEX + 1;
- MESSAGE(INDEX) := INPUT_CHARACTER;
- end loop;
- PTR := 255 - INDEX;
- for I in 1.. INDEX loop
- MESSAGE_BUFFER.BYTE( PTR + I) :=
- CHARACTER'POS(MESSAGE(I));
- end loop;
- NEW_LINE;
- PUT_LINE("READY TO SEND MESSAGE");
- NEW_LINE;
- MESSAGE_BUFFER.TELNET_PTR := PTR + 1;
- MESSAGE_BUFFER.TCP_PTR := PTR;
- LCN_STRING(1..6) := " ";
- NEW_LINE;
- PUT("Input 6-character LCN name = ");
- BOLD;
- GET( LCN_STRING ) ;
- ATTRIBUTES_OFF;
- LCN_NAME_PTR.LCN_NAME(1..6) := LCN_STRING(1..6) ;
- OBTAIN_LCN(LCN_NAME_PTR);
- LCN_POINTER := LCN_NAME_PTR.LCN ;
- MESSAGE_BUFFER.TCP_PTR := 255 - INDEX - 1;
- SEND_PARAMETERS := ( LCN_POINTER, MESSAGE_BUFFER, INDEX - 1,
- 0, 0, TIMEOUT);
- TCP_MESSAGE := ( SEND, SEND_PARAMETERS);
- MESSAGE_FOR_TCP(TCP_MESSAGE, REQUEST_OK );
- NEW_LINE;
- PUT_LINE("JUST SENT MESSAGE");
- NEW_LINE;
- BUFFGET( BUFFER, 1);
- BUFFER.TCP_PTR := 1;
- BUFFER.TELNET_PTR := 255;
- LCN_POINTER.LCN_PTR := LCN_NAME_PTR.LCN.LCN_PTR ;
- BUFFGET( BUFFER , 0 );
- RECEIVE_DATA := ( LCN_POINTER, BUFFER, 190);
- TCP_MESSAGE := ( RECEIVE, RECEIVE_DATA);
- MESSAGE_FOR_TCP(TCP_MESSAGE, REQUEST_OK );
- exit;
- elsif SERVICE_REQUEST_PRIMITIVE(1..7) = "RECEIVE" or
- SERVICE_REQUEST_PRIMITIVE(1..7) = "receive" then
- LCN_STRING(1..6) := " ";
- PUT("Input 6-character LCN name = ");
- BOLD;
- GET( LCN_STRING ) ;
- ATTRIBUTES_OFF;
- LCN_NAME_PTR.LCN_NAME(1..6) := LCN_STRING(1..6) ;
- OBTAIN_LCN(LCN_NAME_PTR);
- LCN_POINTER := LCN_NAME_PTR.LCN ;
- BUFFGET( BUFFER ,0 ) ;
- RECEIVE_DATA := ( LCN_POINTER, BUFFER, 190);
- TCP_MESSAGE := ( RECEIVE, RECEIVE_DATA);
- MESSAGE_FOR_TCP(TCP_MESSAGE, REQUEST_OK );
- exit;
- elsif SERVICE_REQUEST_PRIMITIVE(1..5) = "CLOSE" or
- SERVICE_REQUEST_PRIMITIVE(1..5) = "close" then
- PUT("Input 6-character LCN name = ");
- LCN_STRING(1..6) := " ";
- BOLD;
- GET( LCN_STRING ) ;
- ATTRIBUTES_OFF;
- LCN_NAME_PTR.LCN_NAME(1..6) := LCN_STRING(1..6);
- OBTAIN_LCN(LCN_NAME_PTR);
- LCN_POINTER := LCN_NAME_PTR.LCN ;
- CLOSE_PARAMETERS.LOCAL_CONNECTION_NAME := LCN_POINTER ;
- TCP_MESSAGE := ( CLOSE, CLOSE_PARAMETERS);
- MESSAGE_FOR_TCP(TCP_MESSAGE, REQUEST_OK );
- exit;
- elsif SERVICE_REQUEST_PRIMITIVE = "RESET "
- or SERVICE_REQUEST_PRIMITIVE = "reset " then
- PUT("Input 6-character LCN name = ");
- LCN_STRING(1..6) := " ";
- BOLD;
- GET( LCN_STRING ) ;
- ATTRIBUTES_OFF;
- LCN_NAME_PTR.LCN_NAME(1..6) := LCN_STRING(1..6);
- OBTAIN_LCN(LCN_NAME_PTR);
- LCN_POINTER := LCN_NAME_PTR.LCN ;
- ABORT_PARAMETERS.LOCAL_CONNECTION_NAME := LCN_POINTER ;
- TCP_MESSAGE := ( ABOR_T, ABORT_PARAMETERS);
- MESSAGE_FOR_TCP(TCP_MESSAGE, REQUEST_OK );
- exit;
- elsif SERVICE_REQUEST_PRIMITIVE = "STATUS "
- or SERVICE_REQUEST_PRIMITIVE = "status " then
- PUT("Input 6-character LCN name = ");
- LCN_STRING(1..6) := " ";
- BOLD;
- GET( LCN_STRING ) ;
- ATTRIBUTES_OFF;
- LCN_NAME_PTR.LCN_NAME(1..6) := LCN_STRING(1..6);
- OBTAIN_LCN(LCN_NAME_PTR);
- STATUS_PARAMETERS.LOCAL_CONNECTION_NAME := LCN_NAME_PTR.LCN ;
- TCP_MESSAGE := ( STATUS, STATUS_PARAMETERS);
- MESSAGE_FOR_TCP(TCP_MESSAGE, REQUEST_OK );
- exit;
- else
- NEW_LINE;
- PUT_LINE("Bogus Service Request Primitive ");
- PUT_LINE("Try again");
- end if;
- end loop;
- loop
- NEW_LINE;
- PUT("Another message : ");
- YES_OR_NO := " ";
- BOLD;
- GET_LINE(YES_OR_NO,RESULT);
- ATTRIBUTES_OFF;
- if YES_OR_NO(1..3) = "YES" or YES_OR_NO(1..3) = "yes" then
- GENERATE_ANOTHER_MESSAGE := YES;
- exit;
- elsif YES_OR_NO(1..2) = "NO" or YES_OR_NO(1..2) = "no" then
- GENERATE_ANOTHER_MESSAGE := NO;
- exit;
- else
- NEW_LINE;
- PUT_LINE("Type Yes or No ");
- PUT_LINE("Try again ");
- end if;
- end loop;
- end loop;
- end TEST_MESSAGE_GENERATOR;
-
- procedure OBTAIN_A_PACKET_FROM_TCP is
-
- subtype CHR_COUNT_TYPE is SIXTEEN_BITS ;
- subtype TEMP_TYPE is SIXTEEN_BITS ;
- subtype CHAR_TYPE is CHARACTER;
- subtype CRLF_TYPE is STRING(1..2);
-
- MESSAGE_FOR_USER : USER_MESSAGE;
- CHR_COUNT : CHR_COUNT_TYPE;
- TEMP : TEMP_TYPE;
- CHAR : CHAR_TYPE;
- CRLF : CRLF_TYPE;
- BUFFER : PACKED_BUFFER_PTR ;
- TCP_MESSAGE : WITH_ULP_COMMUNICATE.MESSAGE ;
- RECEIVE_DATA : RECEIVE_PARAMS ;
- LCN_POINTER : LCN_PTR_TYPE ;
- CHANNEL_NAME : STRING(1..30) ;
- TO_CHANNEL : CHANNEL_TYPE;
- RETURN_STATUS : COND_VALUE_TYPE;
- FOREIGN_NET_HOST : THIRTYTWO_BITS := 0 ;
- FOREIGN_PORT : SIXTEEN_BITS := 0 ;
- LOCAL_NET_HOST : THIRTYTWO_BITS := 0 ;
- LOCAL_PORT : SIXTEEN_BITS := 0 ;
- FOREIGN_NET_HOST_STRING : STRING(1..5) := " " ;
- FOREIGN_PORT_STRING : STRING(1..5) := " " ;
- LOCAL_NET_HOST_STRING : STRING(1..5) := " " ;
- LOCAL_PORT_STRING : STRING(1..5) := " " ;
- DUMMY : CHARACTER ;
- ULP_MESSAGE_SIZE : constant UNSIGNED_LONGWORD := 650 ;
- INPUT_CHAR : CHARACTER := ' ';
- LCN_STRING : STRING(1..6) := " ";
- LCN_NAME_PTR : LCN_NAME_PTR_TYPE;
- LENGTH : NATURAL ;
-
- begin
- -- Obtain a message from TCP
- PUT( "Input Foreign_Net_Host := ") ;
- INT_IO_32.GET(FOREIGN_NET_HOST) ;
- NEW_LINE;
- PUT("Input FOREIGN_PORT := ") ;
- INT_IO_16.GET(FOREIGN_PORT) ;
- NEW_LINE ;
- PUT( "Input Local_Net_Host := ") ;
- INT_IO_32.GET(LOCAL_NET_HOST) ;
- NEW_LINE;
- PUT("Input Local_Port := ") ;
- INT_IO_16.GET(LOCAL_PORT) ;
- NEW_LINE ;
- CONVERT_INT_32_TO_STRING.PUT ( FOREIGN_NET_HOST_STRING ,
- FOREIGN_NET_HOST ) ;
- CONVERT_INT_16_TO_STRING.PUT ( FOREIGN_PORT_STRING ,
- FOREIGN_PORT ) ;
- CONVERT_INT_32_TO_STRING.PUT ( LOCAL_NET_HOST_STRING ,
- WHOIAM ) ;
- CONVERT_INT_16_TO_STRING.PUT ( LOCAL_PORT_STRING ,
- LOCAL_PORT ) ;
- CHANNEL_NAME(1..30) := " " ;
- CHANNEL_NAME(1..3) := "MBX";
- CHANNEL_NAME(4..8) := FOREIGN_NET_HOST_STRING ;
- CHANNEL_NAME(9..13) := FOREIGN_PORT_STRING ;
- CHANNEL_NAME(14..18) := LOCAL_NET_HOST_STRING ;
- CHANNEL_NAME(19..23) := LOCAL_PORT_STRING ;
- CREMBX( STATUS => RETURN_STATUS ,
- PRMFLG => true , -- permanent
- CHAN => TO_CHANNEL,
- MAXMSG => ULP_MESSAGE_SIZE, --size of message
- BUFQUO => 5 * ULP_MESSAGE_SIZE , --size of queue
- LOGNAM => CHANNEL_NAME(1..30) ) ; -- fixed name
- if NOT SUCCESS ( RETURN_STATUS ) then
- PUT_LINE("Could not create tcp channel") ;
- else
- MESSAGE_FOR_USER.LOCAL_CONNECTION_NAME.CHANNEL_PTR := TO_CHANNEL ;
- WAIT_FOR_TCP_MESSAGE(MESSAGE_FOR_USER);
- NEW_LINE;
- CLEAR_SCREEN;
- HOME_POSITION;
- case MESSAGE_FOR_USER.MESSAGE_NUMBER is
- when -1 =>
- NEW_LINE;
- PUT_LINE("Packet from TCP queue is null");
- NEW_LINE;
- when 2 =>
- NEW_LINE;
- PUT_LINE("Connection illegal ");
- NEW_LINE;
- when 3 =>
- NEW_LINE;
- PUT_LINE("Connection does not exist ");
- NEW_LINE;
- when 4 =>
- NEW_LINE;
- PUT_LINE("Foreign Socket Unspecified ");
- NEW_LINE;
- when 5=>
- NEW_LINE;
- PUT_LINE("Insufficient Resources ");
- NEW_LINE;
- when 6 =>
- NEW_LINE;
- PUT_LINE("Connection Closing ");
- NEW_LINE;
- when 7 =>
- NEW_LINE;
- PUT_LINE("Urgent data is coming");
- NEW_LINE;
- when 8 =>
- NEW_LINE;
- PUT_LINE("Connection Aborted");
- NEW_LINE;
- when 9 =>
- NEW_LINE;
- PUT_LINE("Precedence not allowed");
- NEW_LINE;
- when 10 =>
- NEW_LINE;
- PUT_LINE("Message for user");
- NEW_LINE;
- PUT_LINE("Here's the message : ");
- NEW_LINE;
- CHR_COUNT := 0;
- TEMP := MESSAGE_FOR_USER.DATA_BUFFER.TELNET_PTR -
- MESSAGE_FOR_USER.DATA_BUFFER.TCP_PTR;
- NEW_LINE;
- PUT("NUMBER OF CHARS TRANSMITTED := ");
- INT_IO_16.PUT(TEMP);
- NEW_LINE;
- begin
- while CHR_COUNT <= TEMP loop
- CHAR := CHARACTER'VAL(MESSAGE_FOR_USER.DATA_BUFFER.BYTE(
- MESSAGE_FOR_USER.DATA_BUFFER.TCP_PTR +
- CHR_COUNT));
- if CHAR = ASCII.CR then -- Put LF
- CRLF(1) := ASCII.CR;
- CRLF(2) := ASCII.LF;
- PUT(CRLF);
- else
- PUT(CHAR);
- end if;
- CHR_COUNT := CHR_COUNT + 1;
- end loop;
- BUFFGET( BUFFER, 1);
- RECEIVE_DATA := ( LCN_POINTER, BUFFER, 190);
- TCP_MESSAGE := ( RECEIVE, RECEIVE_DATA);
- exception
- when CONSTRAINT_ERROR =>
- PUT_LINE("Constraint error in received data");
- PUT("TCP_PTR := ");
- INT_IO_16.PUT(MESSAGE_FOR_USER.DATA_BUFFER.TCP_PTR);
- NEW_LINE;
- PUT("TELNET_PTR := ");
- INT_IO_16.PUT(MESSAGE_FOR_USER.DATA_BUFFER.TELNET_PTR);
- NEW_LINE;
- PUT("CHR_COUNT := ");
- INT_IO_16.PUT(CHR_COUNT);
- NEW_LINE;
- PUT("TEMP");
- INT_IO_16.PUT(TEMP);
- NEW_LINE;
- end;
- when 11 =>
- NEW_LINE;
- PUT_LINE("Security/Compartment Illegal");
- NEW_LINE;
- when 12 =>
- NEW_LINE;
- PUT_LINE("Connection exisits");
- NEW_LINE;
- when 14 =>
- NEW_LINE;
- PUT_LINE("Map LCN to a Port number");
- LCN_STRING := " ";
- PUT("INPUT 6-CHARACTER LCN NAME := ");
- BOLD;
- GET( LCN_STRING ) ;
- ATTRIBUTES_OFF;
- LCN_NAME_PTR.LCN_NAME := LCN_STRING ;
- LCN_NAME_PTR.LCN.LCN_PTR :=
- MESSAGE_FOR_USER.LOCAL_CONNECTION_NAME.LCN_PTR;
- ADD_LCN_RECORD(LCN_NAME_PTR);
- NEW_LINE;
- when 15 =>
- NEW_LINE;
- PUT_LINE("Status Information");
- NEW_LINE;
- PUT("Source Port := ");
- INT_IO_16.PUT(MESSAGE_FOR_USER.STATUS_PARAMS.SOURCE_PORT);
- NEW_LINE;
- PUT("Source Address := ");
- INT_IO_32.PUT(MESSAGE_FOR_USER.STATUS_PARAMS.SOURCE_ADDRESS);
- NEW_LINE;
- PUT("Destination Address := ");
- INT_IO_32.PUT(MESSAGE_FOR_USER.STATUS_PARAMS.DESTINATION_ADDRESS);
- NEW_LINE;
- PUT("Destination Port := ");
- INT_IO_16.PUT(MESSAGE_FOR_USER.STATUS_PARAMS.DESTINATION_PORT);
- NEW_LINE;
- PUT("Number of octets that can be accepted := ");
- INT_IO_16.PUT(MESSAGE_FOR_USER.STATUS_PARAMS.LOCAL_RCV_WINDOW);
- NEW_LINE;
- PUT("Number of octets that can be sent := ");
- INT_IO_16.PUT(MESSAGE_FOR_USER.STATUS_PARAMS.REMOTE_RCV_WINDOW);
- NEW_LINE;
- PUT("Precedence value := ");
- INT_IO_16.PUT(MESSAGE_FOR_USER.STATUS_PARAMS.PRECEDENCE);
- NEW_LINE;
- if MESSAGE_FOR_USER.STATUS_PARAMS.STATUS =
- CONNECTION_OPEN then
- NEW_LINE;
- PUT_LINE("Connection open");
- NEW_LINE;
- else
- NEW_LINE;
- PUT_LINE("Connection close");
- NEW_LINE;
- end if;
- case MESSAGE_FOR_USER.STATUS_PARAMS.CONNECTION_STATE is
- when CLOSED =>
- NEW_LINE;
- PUT_LINE("TCB is in closed state");
- NEW_LINE;
- when LISTEN =>
- NEW_LINE;
- PUT_LINE("TCB is in listen state");
- NEW_LINE;
- when SYN_SENT =>
- NEW_LINE;
- PUT_LINE("TCB is in the SYN SENT state");
- NEW_LINE;
- when SYN_RECEIVED =>
- NEW_LINE;
- PUT_LINE("TCB is in the SYN RECEIVED state");
- NEW_LINE;
- when ESTABLISHED =>
- NEW_LINE;
- PUT_LINE("TCB is in the ESTABLISHED state");
- NEW_LINE;
- when FIN_WAIT_1 =>
- NEW_LINE;
- PUT_LINE("TCB is in the FIN_WAIT_1 state");
- NEW_LINE;
- when FIN_WAIT_2 =>
- NEW_LINE;
- PUT_LINE("TCB is in the FIN_WAIT_2 state");
- NEW_LINE;
- when CLOSE_WAIT =>
- NEW_LINE;
- PUT_LINE("TCB is in the CLOSE_WAIT state");
- NEW_LINE;
- when LAST_ACK =>
- NEW_LINE;
- PUT_LINE("TCB is in the LAST_ACK state");
- NEW_LINE;
- when TIME_WAIT =>
- NEW_LINE;
- PUT_LINE("TCB is in the TIME_WAIT state");
- NEW_LINE;
- when CLOSING =>
- NEW_LINE;
- PUT_LINE("TCB is in the CLOSING state");
- NEW_LINE;
- end case;
- when 16 =>
- NEW_LINE;
- PUT_LINE("Connection reset by other host");
- NEW_LINE;
- when 17 =>
- NEW_LINE;
- PUT_LINE("Connection refused");
- NEW_LINE;
- when 18 =>
- NEW_LINE;
- PUT_LINE("OK on Close");
- NEW_LINE;
- when 19 =>
- NEW_LINE;
- PUT_LINE("Pushed buffer for user");
- NEW_LINE;
- when 20 =>
- NEW_LINE;
- PUT_LINE("Out of buffers in a lower layer");
- NEW_LINE;
- when 21 =>
- NEW_LINE;
- PUT_LINE("Unable to reset");
- NEW_LINE;
- when 22 =>
- NEW_LINE;
- PUT_LINE("IP is currently overloaded");
- NEW_LINE;
- when 23 =>
- NEW_LINE;
- PUT_LINE("Connection open for port");
- NEW_LINE;
- when 24 =>
- NEW_LINE;
- PUT_LINE("Connection aborted due to user timeout");
- NEW_LINE;
- when others =>
- NEW_LINE;
- PUT_LINE(" OOPS : NOT A VALID TELNET MESSAGE NUMBER !!!");
- NEW_LINE;
- end case;
- end if ;
- BOLD;
- BLINK;
- PUT("STRIKE ANY CHARACTER TO CONTINUE ");
- GET(DUMMY);
- ATTRIBUTES_OFF;
- exception
- when CONSTRAINT_ERROR =>
- PUT_LINE("CONSTRAINT ERROR in USER CONTROLLER");
- when others =>
- PUT_LINE("Unknown error in USER CONTROLLER");
- end OBTAIN_A_PACKET_FROM_TCP;
-
- procedure PRINT_TESTER_LOGO is
-
- -- This procedure clears the screen and prints
- -- out a logo.
-
- ROW : STRING(1..65);
- DUMMY : CHARACTER;--dummy character
-
- begin
- HOME_POSITION;
- CLEAR_SCREEN;
- ROW := " ";
- REVERSE_VIDEO;--reverse video
- for I in 1..10 loop
- NEW_LINE;
- PUT(ROW);
- end loop;
- NEW_LINE;
- ROW := " **************************************** ";
- PUT_LINE(ROW);
- ROW := " * * ";
- PUT_LINE(ROW);
- ROW := " * * ";
- PUT_LINE(ROW);
- ROW := " * E-Systems * ";
- PUT_LINE(ROW);
- ROW := " * ECI Division * ";
- PUT_LINE(ROW);
- ROW := " * TCP/ TESTER * ";
- PUT_LINE(ROW);
- ROW := " * * ";
- PUT_LINE(ROW);
- ROW := " * * ";
- PUT_LINE(ROW);
- ROW := " **************************************** ";
- PUT_LINE(ROW);
- ROW := " ";
- for I in 1..3 loop
- PUT_LINE(ROW);
- end loop;
- ROW := " Please any character to continue : ";
- REVERSE_VIDEO;--reverse video
- BLINK;
- PUT_LINE(ROW);
- GET(DUMMY);--DELAY
- ATTRIBUTES_OFF;
- end PRINT_TESTER_LOGO;
-
- procedure PRINT_TESTER_MENU(MENU_SELECTION_INPUT :
- out SIXTEEN_BITS ) is
-
- -- This procedure displays the menu and receives the
- -- the desired input to determine test selection.
- ROW1 : STRING(1..24);
- MENU_ROW : STRING(1..58);
- MENU_SELECTION : SIXTEEN_BITS := 0 ;
-
- begin
- loop
- HOME_POSITION;
- CLEAR_SCREEN; -- Clear screen
- REVERSE_VIDEO;
- for I in 1..5 loop
- NEW_LINE;
- end loop;
- MENU_ROW := " TEST MENU ";
- PUT_LINE(MENU_ROW);
- for I in 1..3 loop
- NEW_LINE;
- end loop;
- MENU_ROW := "1.) Create test packets ";
- PUT_LINE(MENU_ROW);
- MENU_ROW := "2.) Listen for packet ";
- PUT_LINE(MENU_ROW);
- MENU_ROW := "3.) Exit test program ";
- PUT_LINE(MENU_ROW);
- for I in 1..7 loop
- NEW_LINE;
- end loop;
- ROW1 := " Input menu entry : ";
- ATTRIBUTES_OFF;
- BLINK;
- BOLD;
- PUT_LINE(ROW1);
- INT_IO_16.GET(MENU_SELECTION);
- MENU_SELECTION_INPUT := MENU_SELECTION ;
- if MENU_SELECTION in 1..3 then
- exit; --Go back to main and process selection
- end if;
- -- assert :user has input invalided selection,
- -- force another input:
- end loop;
- ATTRIBUTES_OFF;
- end PRINT_TESTER_MENU;
-
- begin
- INIT; --intialize buffers
- INTIALIZE_LCNS;
- PRINT_TESTER_LOGO;
- loop
- PRINT_TESTER_MENU(MENU_SELECTION);
- case MENU_SELECTION is
-
- -- Create test packets
- when 1 =>
- TEST_MESSAGE_GENERATOR;
-
- when 2 =>
- OBTAIN_A_PACKET_FROM_TCP ;
-
- -- Exit program
- when 3 =>
- END_TEST_FLAG := END_TEST ;
-
- when others =>
- NEW_LINE;
- PUT_LINE("Error in case statement of TCP Tester");
- END_TEST_FLAG := END_TEST;
- end case;
- if END_TEST_FLAG = END_TEST then
- exit; -- Quit
- end if;
- end loop;
- exception
- when CONSTRAINT_ERROR =>
- PUT_LINE(" exception CONSTRAINT ERROR procedure TCP_TESTER");
- when others =>
- PUT_LINE(" exception OTHERS procedure TCP_TESTER ");
- end TCP_ULP_TESTER ;
-