Source code of HPW routine I255614

Client program that runs on Host

 

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