*********************************************************************
*
* 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