--:::::::::::::: --tcp_to_ulp.ada --:::::::::::::: ----------------------------------------------------------------------- -- -- DoD Protocols NA-00001-200 80-01024-100(-) -- E-Systems, Inc. August 07, 1985 -- -- TCP_TO_ULP.ADA Author : Jim Baldo -- ----------------------------------------------------------------------- with BUFFER_DATA; use BUFFER_DATA; with STARLET ; use STARLET ; with CONDITION_HANDLING ; use CONDITION_HANDLING ; with UNCHECKED_CONVERSION ; with TEXT_IO ; use TEXT_IO; with TASKING_SERVICES ; use TASKING_SERVICES ; with SYSTEM ; use SYSTEM ; package body TCP_TO_ULP_COMMUNICATE is function PHYSICAL_ADDRESS is new UNCHECKED_CONVERSION ( ADDRESS, UNSIGNED_LONGWORD ) ; type XUSER_MESSAGE_TYPE is record THE_USER_MESSAGE : USER_MESSAGE; THE_BUFFER : PACKED_BUFFER; THE_STATUS_PARAMS : STATUS_RECORD; end record; procedure MESSAGE_FOR_USER ( USER_MESS : in out USER_MESSAGE ) is MBX_STATUS : COND_VALUE_TYPE ; XUSER_MESSAGE : XUSER_MESSAGE_TYPE; begin --TEXT_IO.PUT_LINE("TCP - MESSAGE_FOR_USER " & --SHORT_INTEGER'IMAGE(USER_MESS.MESSAGE_NUMBER)); XUSER_MESSAGE.THE_USER_MESSAGE := USER_MESS; case USER_MESS.MESSAGE_NUMBER is when 10 | 19 => XUSER_MESSAGE.THE_BUFFER := USER_MESS.DATA_BUFFER.ALL; USER_MESS.DATA_BUFFER.IN_USE := FALSE; USER_MESS.DATA_BUFFER.STATUS := NONE; BUFFREE( USER_MESS.DATA_BUFFER, 0 ); when 15 => new_line;--debug put_line("About to send a STATUS to ULP"); XUSER_MESSAGE.THE_STATUS_PARAMS := USER_MESS.STATUS_PARAMS ; when others => null; end case; TASK_QIOW ( STATUS => MBX_STATUS, CHAN => USER_MESS.LOCAL_CONNECTION_NAME.CHANNEL_PTR, FUNC => IO_WRITEVBLK + IO_M_NOW, P1 => PHYSICAL_ADDRESS ( XUSER_MESSAGE'ADDRESS ), P2 => UNSIGNED_LONGWORD( XUSER_MESSAGE'SIZE/8 ) ) ; if not SUCCESS ( MBX_STATUS ) then PUT_LINE ( "Error in write attempt to ULP mailbox from TCP ") ;--for debug SIGNAL(MBX_STATUS) ; end if; case USER_MESS.MESSAGE_NUMBER is when 8 | 16 | 18 | 24 => --delete mailbox: successful close; abort; --connection timeout; connection reset DELMBX( STATUS => MBX_STATUS, CHAN => USER_MESS.LOCAL_CONNECTION_NAME.CHANNEL_PTR ) ; when others => null; end case; end MESSAGE_FOR_USER ; end TCP_TO_ULP_COMMUNICATE ;