*********************************************************************
*
* I255615
*
* TCP/IP Password Client
*
* Written by William van den Heuvel, 1998
*
* Update: 1998-11-10
*
*********************************************************************
*
* this program uses the EZASMI assembler macro API:
* EZASMI TYPE=WRITE - send request mesage to server
* EZASMI TYPE=READ - receive reply message from server
*
***********************************************************************
*
* on entry,
* register 1 points to the API parameters.
*
*......................................................................
*
* on completion,
* register 15 will contain a return code (RC):
*
* RC=0 - normal completion (always)
*
***********************************************************************
**********************************************************************
*
I255615 CSECT
I255615 AMODE ANY
I255615 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,'I255615: 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
*
***********************************************************************
***********************************************************************
*
* make request message
A100 EQU *
*
*......................................................................
*
* get message
MVC DSA_REQUEST_LENGTH,REQUEST_LENGTH
MVC DSA_REQUEST_MESSAGE,REQUEST_MESSAGE
*
*......................................................................
*
* trace request message (EBCDIC)
L 2,DSA_REQUEST_LENGTH
LEMTRACE 4,'I255615: request: ',(DSA_REQUEST_MESSAGE,(2),C)
*
*......................................................................
*
* translate request message from EBCDIC to ISO-8859-1
L R1,DSA_REQUEST_LENGTH
LA R2,DSA_REQUEST_MESSAGE
EX R1,A110 execute TR instruction at A110
B A120
*
* the length of the first operand is supplied in R1
A110 TR 0(0,R2),ISO_8859_1
*
*......................................................................
*
* trace request message (ISO-8859-1)
A120 EQU *
L 2,DSA_REQUEST_LENGTH
LEMTRACE 0,'I255615: ISO-8859-1: ',(DSA_REQUEST_MESSAGE,(2),X)
*
***********************************************************************
***********************************************************************
*
* WRITE request message to server
*
B100 EQU *
LEMTRACE 0,'I255615: WRITE'
*
EZASMI TYPE=WRITE, X
TASK=(TIE), TASK storage (TIE) X
S=API_SOCKET, socket X
NBYTE=DSA_REQUEST_LENGTH, request message length X
BUF=DSA_REQUEST_MESSAGE, request message X
RETCODE=DSA_RETCODE, -1 (error) or 0 (successful) X
ERRNO=DSA_ERRNO, error number (if RETCODE = -1) X
ERROR=B110 if API error occurs
B B120
*
*......................................................................
*
* WRITE failed (ERROR exit)
B110 EQU *
LEMTRACE 8,'I255615: WRITE failed - ERROR exit'
B X100
*
*......................................................................
*
* if DSA_RETCODE is -1 then DSA_ERRNO contains the error code
B120 EQU *
*
L R15,DSA_RETCODE R15 = RETCODE
C R15,=F'-1' RETCODE = -1?
BNE B130 no; successful
*
*......................................................................
*
* unsuccessful
* DSA_ERRNO contains the error code
LEMTRACE 8,'I255615: WRITE failed - ERRNO=',(DSA_ERRNO,4,B)
B X100
*
*......................................................................
*
* successful
B130 EQU *
LEMTRACE 0,'I255615: WRITE successful'
*
***********************************************************************
***********************************************************************
*
* READ reply message from server
*
D100 EQU *
LEMTRACE 0,'I255615: READ'
*
XC DSA_REPLY_MESSAGE,DSA_REPLY_MESSAGE
*
EZASMI TYPE=READ, X
TASK=(TIE), TASK storage (TIE) X
S=API_SOCKET, socket X
NBYTE=REPLY_BUFFER_LENGTH, reply buffer length X
BUF=DSA_REPLY_MESSAGE, reply buffer X
RETCODE=DSA_RETCODE, -1 (error) or 0 (successful) X
ERRNO=DSA_ERRNO, error number (if RETCODE = -1) X
ERROR=D110 if API error occurs
B D120
*
*......................................................................
*
* READ failed (ERROR exit)
D110 EQU *
LEMTRACE 8,'I255615: READ failed - ERROR exit'
B X100
*
*......................................................................
*
* if DSA_RETCODE is -1 then DSA_ERRNO contains the error code
D120 EQU *
*
L R15,DSA_RETCODE R15 = RETCODE
C R15,=F'-1' RETCODE = -1?
BNE D130 no; successful
*
*......................................................................
*
* unsuccessful
* DSA_ERRNO contains the error code
LEMTRACE 8,'I255615: READ failed - ERRNO=',(DSA_ERRNO,4,B)
B X100
*
*......................................................................
*
* successful
D130 EQU *
LEMTRACE 0,'I255615: READ successful'
*
* get length of received reply
* RETCODE contains the number of bytes received
MVC DSA_REPLY_LENGTH,DSA_RETCODE
*
* if REPLY_LENGTH = 0 then the connection is cosed without data
* if REPLY_LENGTH > 0 then we have received data
*
* check if we have received data
L R15,DSA_REPLY_LENGTH
LTR R15,R15 any data?
BNZ D140 yes
*
* connection was cosed without any data
LEMTRACE 8,'I255615: no reply received (connection closed)'
B X100
*
*......................................................................
*
* reply message received
D140 EQU *
L 2,DSA_REPLY_LENGTH
LEMTRACE 0,'I255615: ISO-8859-1: ',(DSA_REPLY_MESSAGE,(2),X)
*
* translate reply message from ISO-8859-1 to EBCDIC
L R1,DSA_REPLY_LENGTH
LA R2,DSA_REPLY_MESSAGE
EX R1,D141 execute TR instruction
B D142
*
* the length of the first operand is supplied in R1
D141 TR 0(0,R2),EBCDIC
*
*.....................................................................s
*
* trace reply message (EBCDIC)
D142 EQU *
L 2,DSA_REPLY_LENGTH
LEMTRACE 4,'I255615: reply: ',(DSA_REPLY_MESSAGE,(2),C)
*
***********************************************************************
**********************************************************************
*
* return to caller
X100 EQU *
LEMTRACE 0,'I255615: exit'
LEMEXIT
*
*********************************************************************
**********************************************************************
*
* translation table from ISO-8859-1 to EBCDIC
*
EBCDIC EQU *
* .0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
DC X'000102030405060708090A0B0C0D0E0F' 0.
DC X'101112131415161718191A1B1C1D1E1F' 1.
DC X'40217F7B5B6C507D4D5D5C4E6B604B61' 2.
DC X'F0F1F2F3F4F5F6F7F8F97A5E4D7E6E6F' 3.
DC X'7CC1C2C3C4C5C6C7C8C9D1D2D3D4D5D6' 4.
DC X'D7D8D9E2E3E4E5E6E7E8E95BE05D5E6D' 5.
DC X'79818283848586878889919293949596' 6.
DC X'979899A2A3A4A5A6A7A8A9C07CD07E7F' 7.
DC X'808182838485868788898A8B8C8D8E8F' 8.
DC X'909192939495969798999A9B9C9D9E9F' 9.
DC X'A0A1A2B1A4A56AA7A8B4AA8AACADAEAF' A.
DC X'908FB2B3B4B5B6B7B8B9BA8BBCBDBEBF' B.
DC X'6465626663679E687471727378757677' C.
DC X'D069EDEEEBEFECD7FBFDFEDBFCDDDE59' D.
DC X'E0E1E2E343E5E6E754515253ECEDEEEF' E.
DC X'8CF1CDCECBCFCCF7F8F9DEDBDCDDFEDF' F.
* .0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
*
*********************************************************************
**********************************************************************
*
* translation table from EBCDIC to ISO-8859-1
*
ISO_8859_1 EQU *
* .0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
DC X'000102030405060708090A0B0C0D0E0F' 0.
DC X'101112131415161718191A1B1C1D1E1F' 1.
DC X'202122232425262728292A2B2C2D2E2F' 2.
DC X'303132333435363738393A3B3C3D3E3F' 3.
DC X'204142E44445464748494A2E3C282B4F' 4.
DC X'26E9EAEBE855565758DF5A242A293B5F' 5.
DC X'2D2FC2C4C0C1C3C5C7D1A62C255F3E3F' 6.
DC X'70C9CACBC8CDCECFCC603A2340273D22' 7.
DC X'80616263646566676869ABBBF08D8EB1' 8.
DC X'B06A6B6C6D6E6F7071729A9B9C9DC69F' 9.
DC X'A0A1737475767778797AAAABACADAEAF' A.
DC X'B0A3B2B3A9B5B6B7B8B9BABBBCBDBEBF' B.
DC X'7B414243444546474849CAF4F6F2F3F5' C.
DC X'7D4A4B4C4D4E4F505152DAFBFCFDFAFF' D.
DC X'5CE1535455565758595AEAD4D6D2D3D5' E.
DC X'30313233343536373839FAD8DCD9DAFF' F.
* .0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F
*
*********************************************************************
REQUEST_LENGTH DC A(REQUEST_MESSAGE_END-REQUEST_MESSAGE)
REQUEST_MESSAGE DC C'VERIFY x010003 cde3vfr4'
***REQUEST_MESSAGE DC CL8'SHUTDOWN'
REQUEST_MESSAGE_END EQU *
REPLY_BUFFER_LENGTH DC F'80'
**********************************************************************
*
* 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_REQUEST_LENGTH DS F
DSA_REQUEST_MESSAGE DS CL100
*
*......................................................................
*
DSA_REPLY_LENGTH DS F
DSA_REPLY_MESSAGE DS CL100
*
*......................................................................
*
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