********************************************************************* * * I25560 * * TCP/IP Password Server * * Written by William van den Heuvel, 1998 * * Update: 1998-11-10 * ********************************************************************* * * This program is a TCP/IP server that listens on port x. * * It provides Password services submitted by the client program. * The client is a program that may run on any platform that * supports TCP/IP. * The client program submits the request by sending a TCP/IP message * to port x. The server listens on this port and returns a reply. * *********************************************************************** * * on entry, * register 1 points to a fullword that contains the address * of the PARM string. * * The PARM string is made by the Operating System when the PARM= * keyword was found on the EXEC statement. * The PARM string is a character string with a 2-byte length prefix * that shows the number of bytes that follow. * If there was no PARM string on the EXEC statement then the System * makes a dummy PARM string: in this case the 2-byte length prefix * contains 0. * *...................................................................... * * This is the main entry point of the program. * It's purpose is to accept and parse input parameters from the PARM * string and then call I255601 passing the parsed parameters. * * Currently, the PARM string is not used and is therefore ignored. * *...................................................................... * * on completion, * register 15 will contain a return code (RC): * * RC=0 - normal completion (always) * *********************************************************************** ********************************************************************** * I25560 CSECT I25560 AMODE ANY I25560 RMODE ANY * R0 EQU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 PARM - address of pointer to PARM-string) R11 EQU 11 BASE - base register of this program R12 EQU 12 CAA - reserved for LE R13 EQU 13 DSA - Dynamic Storage Area R14 EQU 14 return address R15 EQU 15 entry point address * DSA EQU R13 CAA EQU R12 BASE EQU R11 PARM EQU R10 API EQU R9 API parameters * USING PARM_DSECT,PARM USING DSA_DSECT,DSA USING API_DSECT,API * ********************************************************************* ********************************************************************* * LEMENTRY BASE=BASE,LENGTH=DSA_DSECT_LENGTH,PARAM=PARM TRACE=0 * * note: * PARM -> PARM_DSECT * DSA -> DSA_DSECT * *********************************************************************** * LEMTRACE 0,'I25560: entry' * *********************************************************************** * * make API parameters * XC DSA_API,DSA_API clear API LA API,DSA_API address API * * set parameters passed by user (parsed from PARM) MVC API_BIND_IP,USER_IP IP-address MVC API_BIND_PORT,USER_PORT port number MVC API_MAXSOC,USER_MAXSOC maximum number of sockets MVC API_BACKLOG,USER_BACKLOG backlog queued connects * *********************************************************************** * * call I255601 passing API * LR R1,API L R15,=V(I255601) BASR R14,R15 * *********************************************************************** * LEMTRACE 0,'I25560: exit' * *********************************************************************** * * return to caller * LEMEXIT * ********************************************************************* *********************************************************************** * * The following is the information that can be passed by the user * via the PARM string. * * The parsing of the PARM string is not yet implemented * hence the "user" information is temporarily specified as constants. * USER_IP DC AL1(0,0,0,0) IP-address (0,0,0,0 means accept any) USER_PORT DC H'11111' port number to listen on USER_MAXSOC DC H'100' max sockets USER_BACKLOG DC H'100' backlog (queue for incoming conects) * ********************************************************************* *********************************************************************** * * DSA - Dynamic Storage Area (pointed to by register 13) * DSA_DSECT LEMDSA * *...................................................................... * DS 0D D-align what follows DSA_API DS XL256 API to be passed to I25561 * *...................................................................... * DS 0D D-align what follows DSA_DSECT_LENGTH EQU *-DSA_DSECT * *********************************************************************** * * PARM - parameters passed by caller via register 1 * this dsect is address via register PARM * PARM_DSECT DSECT PARM_STRING DS A pointer to LL-string * *********************************************************************** * * API - parameters passed between modules * this dsect is address via register API * API_DSECT DSECT * * following fields are set by I25560: API_BIND_IP DS XL4 IP-address for BIND API_BIND_PORT DS H port number to listen on for BIND API_MAXSOC DS H maximum number of sockets for INITAPI API_BACKLOG DS F backlog queued incoming connections for LISTEN * *********************************************************************** END