********************************************************************* * * I255614 * * TCP/IP Password Client * * Written by William van den Heuvel, 1998 * * Update: 1998-11-10 William van den Heuvel * Update: 1999-03-18 William van den Heuvel * ********************************************************************* * * this program uses the EZASMI assembler macro API: * EZASMI TYPE=CONNECT - connect to server * EZASMI TYPE=GETSOCKNAME - get client IP address and port number * EZASMI TYPE=GETPEERNAME - get server IP address and port number * *********************************************************************** * * on entry, * register 1 points to the API parameters. * *...................................................................... * * on completion, * register 15 will contain a return code (RC): * * RC=0 - normal completion (always) * *********************************************************************** ********************************************************************** * I255614 CSECT I255614 AMODE ANY I255614 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 API EQU R10 API parameters GWA EQU R9 GLOBAL storage TIE EQU R8 TASK storage * USING API_DSECT,API USING DSA_DSECT,DSA USING GWA_DSECT,GWA USING TIE_DSECT,TIE * ********************************************************************* ********************************************************************* * LEMENTRY BASE=BASE,LENGTH=DSA_DSECT_LENGTH,PARAM=API,TRACE=0 * * note: * API -> API_DSECT * DSA -> DSA_DSECT * *********************************************************************** LEMTRACE 0,'I255614: entry' *********************************************************************** * * get GLOBAL storage (GWA) L GWA,API_GWA get pointer to GWA * * get TASK storage (TIE) L TIE,API_TIE get pointer to TIE * *********************************************************************** *********************************************************************** * * CONNECT to server * F100 EQU * * *...................................................................... * * trace CONNECT IP=0.0.0.0 PORT=0 * XR 2,2 IC 2,API_CONNECT_IP+0 XR 3,3 IC 3,API_CONNECT_IP+1 XR 4,4 IC 4,API_CONNECT_IP+2 XR 5,5 IC 5,API_CONNECT_IP+3 LEMTRACE 0,'I255614: CONNECT IP=', X (2,B),'.',(3,B),'.',(4,B),'.',(5,B), X ' PORT=',(API_CONNECT_PORT,2,B) * *...................................................................... * * initialize socket address structur MVC DSA_NAME_FAMILY,=H'2' FAMILY=2 (TCP) MVC DSA_NAME_PORT,API_CONNECT_PORT PORT MVC DSA_NAME_IP,API_CONNECT_IP IP-address MVC DSA_NAME_RESERVED,=D'0' reserved but not used * EZASMI TYPE=CONNECT, X TASK=(TIE), TASK storage (TIE) X S=API_SOCKET, socket X NAME=DSA_NAME, socket adress structure X RETCODE=DSA_RETCODE, -1 (error) or 0 (successful) X ERRNO=DSA_ERRNO, error number (if RETCODE = -1) X ERROR=F110 if API error occurs B F120 * *...................................................................... * * CONNECT failed (ERROR exit) F110 EQU * LEMTRACE 8,'I255614: CONNECT failed - ERROR exit' B F130 trace CONNECT_IP and CONNECT_PORT * *...................................................................... * * if DSA_RETCODE is -1 then DSA_ERRNO contains the error code F120 EQU * * L R15,DSA_RETCODE R15 = RETCODE C R15,=F'-1' RETCODE = -1? BNE F140 no; successful * *...................................................................... * * unsuccessful * DSA_ERRNO contains the error code LEMTRACE 8,'I255614: CONNECT failed - ERRNO=',(DSA_ERRNO,4,B) * *...................................................................... * * trace CONNECT_IP and CONNECT_PORT F130 EQU * * * CONNECT_IP= XR 2,2 IC 2,API_CONNECT_IP+0 XR 3,3 IC 3,API_CONNECT_IP+1 XR 4,4 IC 4,API_CONNECT_IP+2 XR 5,5 IC 5,API_CONNECT_IP+3 LEMTRACE 8,'I255614: CONNECT_IP=', X (2,B),'.',(3,B),'.',(4,B),'.',(5,B) * * CONNECT_PORT= LEMTRACE 8,'I255614: CONNECT_PORT=',(API_CONNECT_PORT,2,B) * * return to caller B X100 * *...................................................................... * * successful F140 EQU * LEMTRACE 0,'I255614: CONNECT successful' * *********************************************************************** *********************************************************************** * * GETSOCKNAME to obtain client IP address and port number * G100 EQU * LEMTRACE 0,'I255614: GETSOCKNAME' * EZASMI TYPE=GETSOCKNAME, X TASK=(TIE), TASK storage (TIE) X S=API_SOCKET, socket X NAME=DSA_NAME, socket address structure X RETCODE=DSA_RETCODE, -1 (error) or 0 (successful) X ERRNO=DSA_ERRNO, error number (if RETCODE = -1) X ERROR=G110 if API error occurs B G120 * *...................................................................... * * GETSOCKNAME failed (ERROR exit) G110 EQU * LEMTRACE 8,'I255614: GETSOCKNAME failed - ERROR exit' B X100 * *...................................................................... * * if DSA_RETCODE is -1 then DSA_ERRNO contains the error code G120 EQU * * L R15,DSA_RETCODE R15 = RETCODE C R15,=F'-1' RETCODE = -1? BNE G130 no; successful * *...................................................................... * * unsuccessful * DSA_ERRNO contains the error code LEMTRACE 8,'I255614: GETSOCKNAME failed - ERRNO=', X (DSA_ERRNO,4,B) B X100 * *...................................................................... * * successful G130 EQU * LEMTRACE 0,'I255614: GETSOCKNAME successful' * * copy IP-address and port number to API MVC API_CLIENT_IP,DSA_NAME_IP MVC API_CLIENT_PORT,DSA_NAME_PORT * *...................................................................... * * trace CLIENT_IP XR 2,2 IC 2,API_CLIENT_IP+0 XR 3,3 IC 3,API_CLIENT_IP+1 XR 4,4 IC 4,API_CLIENT_IP+2 XR 5,5 IC 5,API_CLIENT_IP+3 * LEMTRACE 4,'I255614: CLIENT_IP=', X (2,B),'.',(3,B),'.',(4,B),'.',(5,B) * *...................................................................... * * trace CLIENT_PORT LEMTRACE 4,'I255614: CLIENT_PORT=',(API_CLIENT_PORT,2,B) * *********************************************************************** *********************************************************************** * * GETPEERNAME to obtain server IP address and port number * H100 EQU * LEMTRACE 0,'I255614: GETPEERNAME' * EZASMI TYPE=GETPEERNAME, X TASK=(TIE), TASK storage (TIE) X S=API_SOCKET, socket X NAME=DSA_NAME, socket address structure X RETCODE=DSA_RETCODE, -1 (error) or 0 (successful) X ERRNO=DSA_ERRNO, error number (if RETCODE = -1) X ERROR=h110 if API error occurs B H120 * *...................................................................... * * GETPEERNAME failed (ERROR exit) H110 EQU * LEMTRACE 8,'I255614: GETPEERNAME failed - ERROR exit' B X100 * *...................................................................... * * if DSA_RETCODE is -1 then DSA_ERRNO contains the error code H120 EQU * * L R15,DSA_RETCODE R15 = RETCODE C R15,=F'-1' RETCODE = -1? BNE H130 no; successful * *...................................................................... * * unsuccessful * DSA_ERRNO contains the error code LEMTRACE 8,'I255614: GETPEERNAME failed - ERRNO=', X (DSA_ERRNO,4,B) B X100 * *...................................................................... * * successful H130 EQU * LEMTRACE 0,'I255614: GETPEERNAME successful' * * copy IP-address and port number of server to API MVC API_SERVER_IP,DSA_NAME_IP MVC API_SERVER_PORT,DSA_NAME_PORT * *...................................................................... * * trace SERVER_IP XR 2,2 IC 2,API_SERVER_IP+0 XR 3,3 IC 3,API_SERVER_IP+1 XR 4,4 IC 4,API_SERVER_IP+2 XR 5,5 IC 5,API_SERVER_IP+3 * LEMTRACE 4,'I255614: SERVER_IP=', X (2,B),'.',(3,B),'.',(4,B),'.',(5,B) * *...................................................................... * * trace SERVER_PORT LEMTRACE 4,'I255614: SERVER_PORT=',(API_SERVER_PORT,2,B) * *********************************************************************** *********************************************************************** * * call I255615 passing API * LR R1,API L R15,=V(I255615) BASR R14,R15 * *********************************************************************** ********************************************************************** * * return to caller X100 EQU * LEMTRACE 0,'I255614: exit' LEMEXIT * ********************************************************************* ********************************************************************** * * GWA Global Work Area * GWA_DSECT EZASMI TYPE=GLOBAL,STORAGE=DSECT * ********************************************************************* ********************************************************************** * * TIE Task Work Area * TIE_DSECT EZASMI TYPE=TASK,STORAGE=DSECT * ********************************************************************* *********************************************************************** * * DSA - Dynamic Storage Area (pointed to by register 13) * DSA_DSECT LEMDSA * *...................................................................... * DSA_RETCODE DS F return code * 0 = successful * -1 = check ERRNO for error code * DSA_ERRNO DS F error code (only if RETCODE=-1) * DSA_NAME DS 0XL16 DSA_NAME_FAMILY DS H FAMILY=2 (TCP) DSA_NAME_PORT DS H PORT number DSA_NAME_IP DS F IP address DSA_NAME_RESERVED DS XL8 reserved but not used * *...................................................................... * DS 0D D-align what follows DSA_DSECT_LENGTH EQU *-DSA_DSECT * *********************************************************************** * * API - parameters passed between modules * this dsect is address via register API * API_DSECT DSECT * *...................................................................... * * following fields are set by I25561: API_MAXSOC DS H maximum number of sockets for INITAPI API_CONNECT_IP DS XL4 IP-address of server for CONNECT API_CONNECT_PORT DS H port number of server for CONNECT * *...................................................................... * * following fields are set by I255611: API_GWA DS A pointer to GLOBAL storage for EZASMI macro API_TIE DS A pointer to TASK storage for EZASMI macro API_MAXSNO DS H highest socket number from INITAPI DS H unused * *...................................................................... * * following fields are set by I255612: API_LOCAL_IP DS XL4 IP-address of local host from GETHOSTID API_LOCAL_NAME DS CL26 local hostname (LL-string) from GETHOSTNAME * *...................................................................... * * following fields are set by I255613: API_SOCKET DS H socket number from SOCKET * *...................................................................... * * following fields are set by I255614: API_CLIENT_IP DS XL4 client IP adress from GETSOCKETNAME API_CLIENT_PORT DS H client port number from GETSOCKETNAME API_SERVER_IP DS XL4 server IP address from GETPEERNAME API_SERVER_PORT DS H server port number from GETPEERNAME * *********************************************************************** END