Source code of HPW routine I255602

Server program that runs on Host

 

*********************************************************************
*
*                                I255602
*
*                        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.
*
***********************************************************************
*
* this program uses the EZASMI assembler macro API:
* EZASMI TYPE=GETHOSTID   - get IP-address of local host
* EZASMI TYPE=GETHOSTNAME - get hostname  of local host
*
***********************************************************************
*
* on entry,
* register 1 points to the API parameters.
*
*......................................................................
*
* on completion,
* register 15 will contain a return code (RC):
*
* RC=0 - normal completion (always)
*
***********************************************************************




**********************************************************************
*
I255602  CSECT
I255602  AMODE ANY
I255602  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=4
*
* note:
*        API -> API_DSECT
*        DSA -> DSA_DSECT
*
***********************************************************************


         LEMTRACE 0,'I255602: 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
*
***********************************************************************






***********************************************************************
*
*        get IP-address of our own local host
*
C100     EQU   *
         LEMTRACE 0,'I255602: GETHOSTID'
*
*......................................................................
*
*        get input parameters for GETHOSTID
*        (none)
*
*......................................................................
*
         EZASMI TYPE=GETHOSTID,                                        X
               TASK=(TIE),            TASK storage (TIE)               X
               RETCODE=DSA_RETCODE,   -1 (error) or IP-address         X
               ERROR=C110             if API error occurs
         B     C120
*
*......................................................................
*
*        GETHOSTID failed (ERROR exit)
C110     EQU   *
         LEMTRACE 8,'I255602: GETHOSTID failed - ERROR exit'
         B     X100
*
*......................................................................
*
*        if RETCODE is -1 (error) then there is no IP-address
*        else RETCODE contains the IP-address of our own local host
*
*        error?
C120     EQU   *
         L    R15,DSA_RETCODE    R15 = RETCODE
         C    R15,=F'-1'         RETCODE = -1?
         BNE  C130               no; successful
*
*......................................................................
*
*        unsuccessful
         LEMTRACE 8,'I255602: GETHOSTID failed - RETCODE=-1'
         B     X100
*
*......................................................................
*
*        successful - get output from GETHOSTID
C130     EQU   *
         LEMTRACE 0,'I255602: GETHOSTID succesful'
*
*        save IP-address of server (local host)
*        RETCODE contains the IP-address
         MVC  API_LOCAL_IP,DSA_RETCODE
*
*......................................................................
*
*        TRACE:
         XR   2,2
         IC   2,API_LOCAL_IP+0
         XR   3,3
         IC   3,API_LOCAL_IP+1
         XR   4,4
         IC   4,API_LOCAL_IP+2
         XR   5,5
         IC   5,API_LOCAL_IP+3
*
         LEMTRACE 4,'I255602: LOCAL_IP=',                              X
               (2,B),'.',(3,B),'.',(4,B),'.',(5,B)
*
***********************************************************************






***********************************************************************
*
*        get hostname of our own local host
*
D100     EQU   *
         LEMTRACE 0,'I255602: GETHOSTNAME'
*
*        get input parameters for GETHOSTNAME
         MVC   DSA_HOST_NAMELEN,=F'24'     maximum length of hostname
         MVC   DSA_HOST_NAME(24),=CL24' '  blank hostname
*
         EZASMI TYPE=GETHOSTNAME,                                      X
               TASK=(TIE),                 TASK storage (TIE)          X
               NAME=DSA_HOST_NAME,         own local hostname          X
               NAMELEN=DSA_HOST_NAMELEN,   length of hostname          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
*
*......................................................................
*
*        GETHOSTNAME failed (ERROR exit)
D110     EQU   *
         LEMTRACE 8,'I255602: GETHOSTNAME 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,'I255602: GETHOSTNAME failed - ERRNO=',(DSA_ERRNO,4,B)
         B     X100
*
*......................................................................
*
*        successful - get output parameters from GETHOSTNAME
D130     EQU   *
*
*        DSA_HOST_NAME    contains the hostname
*        DSA_HOST_NAMELEN contains the length of the hostname
*
*        TRACE:
         LEMTRACE 0,'I255602: HOST_NAMELEN=',(DSA_HOST_NAMELEN,4,X)
         LEMTRACE 0,'I255602: HOST_NAME=',(DSA_HOST_NAME,24,X)
*
*        Note:
*        DSA_HOST_NAMELEN still contains the maximum length (24)
*        and not the actual length of the hostname in DSA_HOST_NAME
*        The name in DSA_HOST_NAME is padded with nulls (not blanks)
*
*        compute actual length of hostname
         LA     R1,DSA_HOST_NAME
         L      R15,DSA_HOST_NAMELEN
D131     CLI    0(R1),X'00'
         BE     D132
         LA     R1,1(R1)
         BCT    R15,D131
D132     EQU    *
         LA     R15,DSA_HOST_NAME
         SR     R1,R15                   R15 = length of hostname
         ST     R1,DSA_HOST_NAMELEN
*
*        copy hostname to API_LOCAL_NAME
*        API_LOCAL_NAME is an LL-string
         L      R1,DSA_HOST_NAMELEN
         STCM   R1,B'0011',API_LOCAL_NAME
         MVC    API_LOCAL_NAME+2(24),DSA_HOST_NAME
*
*......................................................................
*
*    TRACE:
     LEMTRACE 0,'I255602: API_LOCAL_NAME=',(API_LOCAL_NAME,26,X)
     LEMTRACE 4,'I255602: LOCAL_NAME=',(API_LOCAL_NAME,LL)
*
***********************************************************************




***********************************************************************
*
*        call I255603 passing API
*
         LR    R1,API
         L     R15,=V(I255603)
         BASR  R14,R15
*
***********************************************************************






**********************************************************************
*
*        return to caller
X100     EQU *
         LEMTRACE 0,'I255602: 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_HOST_NAMELEN    DS  F    length of following hostname
DSA_HOST_NAME       DS  CL24 hostname
*
*......................................................................
*
              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 I25560:
API_BIND_IP     DS  XL4  IP-address to listen on (0.0.0.0 means "any")
API_BIND_PORT   DS  H    port number to listen on (0 means "any")
API_MAXSOC      DS  H    maximum number of sockets          for INITAPI
API_BACKLOG     DS  F    backlog queue incoming connections  for LISTEN
*
*......................................................................
*
* following fields are set by I255601:
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 I255602:
API_LOCAL_IP    DS  XL4  IP-address of server            from GETHOSTID
API_LOCAL_NAME  DS  CL26 local hostname (LL-string)    from GETHOSTNAME
*
***********************************************************************
        END