* * BSTTEZAP.C COPYRIGHT TEI 2002-2011 * * USAGE: * * PLACE THE FOLLOWING LINE IN THE PROCEDURE SECTION. * COPY BSTTEZAP. * * PLACE THE FOLLOWING 2 LINES IN THE WORKING STORAGE SECTION. *01 EZA-CALL-DATA. COPY BSTTEZA. *01 EZACIC06-DATA. COPY BSTTEZA6. * NOTE: BSTTEZA6 IS CODED TO ALLOW FOR A MAXIMUM OF 64 * SOCKETS. (64 IS THE DEFAULT NUMBER OF SOCKETS * ALLOCATED BY THE INITAPI CALL.) IF MORE THAN 64 * SOCKETS ARE REQUIRED, HARD-CODE THE CONTENTS OF * BSTTEZA6 INTO THE PROGRAM AND CHANGE THE OCCURS * CLAUSE FOR THE FIELD EZ6-FLAG. ALSO CHANGE THE * LENGTH OF EZA-MASK TO BE EQUAL TO THE SIZE OF * EZ6-FLAGS DIVIDED BY 8. * * THE FOLLOWING ADDITIONAL FIELDS MUST BE DEFINED: * *01 BUFFER-IN PIC X(?????) VALUE SPACES. * NOTE: CHANGE LENGTH TO MAX SIZE NEEDED FOR SENDING DATA *01 BUFFER-OUT PIC X(?????) VALUE SPACES. * NOTE: CHANGE LENGTH TO MAX SIZE NEEDED FOR RECEIVING DATA *01 SELECT-MASKS. * 05 RSNDMSK PIC X(08) VALUE LOW-VALUES. * 05 WSNDMSK PIC X(08) VALUE LOW-VALUES. * 05 ESNDMSK PIC X(08) VALUE LOW-VALUES. * 05 RRETMSK PIC X(08) VALUE LOW-VALUES. * 05 WRETMSK PIC X(08) VALUE LOW-VALUES. * 05 ERETMSK PIC X(08) VALUE LOW-VALUES. * NOTE: CHANGE LENGTH TO MAX SIZE NEEDED SELECT PROCESSING. * THE LENGTHS *MUST* BE A MULTIPLE OF 4. * EACH 4 BYTES WILL HANDLE 32 SOCKETS. * PIC X(08) WILL ALLOW A MAXIMUM OF 64 SOCKETS. * (64 IS THE DEFAULT NUMBER OF SOCKETS ALLOCATED BY * THE INITAPI CALL.) * ALL XXXXMSK FIELDS MUST BE THE SAME SIZE. * * CHANGE LOG: * AUG 19, 2009 TT INITIAL VERSION * TT = TONY THIGPEN TONY@VSE2PDF.COM * APR 05, 2010 TT ALLOW CALLER TO SPECIFY SOCKET.SOCKTYPE * APR 05, 2010 TT UPDATED COMMENTS TO ADD COPY BSTTEZA8. * APR 05, 2010 TT RESET EZA-ERRNO IN EZA-BITS-TO-CHARACTERS, * EZA-CHARACTERS-TO-BITS, EZA-HOSTENT-EXTRACT * APR 05, 2010 TT ADDED EZA-FREEADDRINFO, EZA-GETADDRINFO, * EZA-RES-EXTRACT. UPDATED COMMENTS TO ADD * COPY BSTTEZA9. * MAY 05, 2010 TT UPDATED COMMENTS FOR EZA-RES-EXTRACT. * AUG 27, 2010 TT REMOVED EZA-ERRNO FROM GETHOSTBYNAME CALL. * AUG 27, 2010 TT ADDED NTOP & PTON SECTIONS. * SEP 04, 2010 TT MOVE EZA-HOSTENT-EXTRACT TO NEW COPYBOOK * BSTTEZAH REMOVING BSTTEZA8 DEPENDENCY. * SEP 04, 2010 TT MOVE EZA-RES-EXTRACT TO NEW COPYBOOK * BSTTEZAR REMOVING BSTTEZA9 DEPENDENCY. * EZA-ACCEPT SECTION. ACCEPT-START. MOVE 'ACCEPT' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE LOW-VALUES TO EZA-NAME. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-NAME EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. ACCEPT-EXIT. EXIT. EZA-BIND SECTION. BIND-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 9 LINES ARE EXAMPLES OF SETTING REQUIRED FIELDS. * MOVE LOW-VALUES TO EZA-NAME. * THE FOLLOWING FOR IPV4 CONNECTION. * MOVE EZA-INET TO EZA-NAME-FAMILY. * MOVE TO EZA-NAME-PORT. * MOVE TO EZA-NAME-IPADDRESS. * THE FOLLOWING FOR IPV6 CONNECTION. * MOVE EZA-INET6 TO EZA-NAMEV6-FAMILY. * MOVE TO EZA-NAMEV6-PORT. * MOVE TO EZA-NAMEV6-IPADDRESS. MOVE 'BIND' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-NAME EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. BIND-EXIT. EXIT. EZA-CLOSE SECTION. CLOSE-START. MOVE 'CLOSE' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. CLOSE-EXIT. EXIT. EZA-CONNECT SECTION. CONNECT-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 9 LINES ARE EXAMPLES OF SETTING REQUIRED FIELDS. * MOVE LOW-VALUES TO EZA-NAME. * THE FOLLOWING FOR IPV4 CONNECTION. * MOVE EZA-INET TO EZA-NAME-FAMILY. * MOVE TO EZA-NAME-PORT. * MOVE TO EZA-NAME-IPADDRESS. * THE FOLLOWING FOR IPV6 CONNECTION. * MOVE EZA-INET6 TO EZA-NAMEV6-FAMILY. * MOVE TO EZA-NAMEV6-PORT. * MOVE TO EZA-NAMEV6-IPADDRESS. MOVE 'CONNECT' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-NAME EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. CONNECT-EXIT. EXIT. EZA-FREEADDRINFO SECTION. FREEADDRINFO-START. MOVE 'FREEADDRINFO' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-RES EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. FREEADDRINFO-EXIT. EXIT. EZA-GETADDRINFO SECTION. GETADDRINFO-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 8 LINES ARE EXAMPLES OF SETTING REQUIRED FIELDS. * MOVE TO BUFFER-OUT. * MOVE LENGTH OF TO EZA-NODELEN. * MOVE OR SPACES TO EZA-SERVICE. * MOVE LENGTH OF OR ZEROES TO EZA-SERVLEN. * MOVE LOW-VALUES TO EZA-ADDRINFO. * MOVE TO EZA-AI-FAMILY. * COMPUTE EZA-AI-FLAGS = * MOVE EZA-STREAM TO EZA-AI-SOCKTYPE. MOVE 'GETADDRINFO' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-AI-PROTOCOL. MOVE +0 TO EZA-AI-ADDRLEN. SET EZA-AI-CANON-PTR TO NULLS. SET EZA-AI-ADDR-PTR TO NULLS. SET EZA-AI-NEXT-PTR TO NULLS. CALL 'BSTTEZSP' USING EZA-ADDRINFO EZA-HINTS. MOVE +0 TO EZA-CANNLEN. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION BUFFER-OUT EZA-NODELEN EZA-SERVICE EZA-SERVLEN EZA-HINTS EZA-RES EZA-CANNLEN EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. GETADDRINFO-EXIT. EXIT. EZA-GETCLIENTID SECTION. GETCLIENTID-START. MOVE 'GETCLIENTID' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE LOW-VALUES TO EZA-CLIENT. CALL 'EZASOKET' USING EZA-FUNCTION EZA-CLIENT EZA-ERRNO EZA-RETCODE. MOVE EZA-CLIENT-DOMAIN TO EZA-DOMAIN. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. * AFTER PERFORMING THIS SECTION, SOME FIELDS NEED TO BE PROCESSED. * THE FOLLOWING 1 LINE IS AN EXAMPLE OF PROCESSING THOSE FIELDS. * MOVE EZA-CLIENT TO WS-OURCLIENT. GETCLIENTID-EXIT. EXIT. EZA-GETHOSTBYNAME SECTION. GETHOSTBYNAME-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 2 LINES ARE EXAMPLES OF SETTING REQUIRED FIELDS. * MOVE TO BUFFER-OUT. * MOVE LENGTH OF TO EZA-NAMELEN. MOVE 'GETHOSTBYNAME' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-NAMELEN BUFFER-OUT EZA-HOSTENT EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. * USER EZA-HOSTENT-EXTRACT TO RETRIEVE THE RETURNED ADDRESSES GETHOSTBYNAME-EXIT. EXIT. EZA-GETHOSTID SECTION. GETHOSTID-START. MOVE 'GETHOSTID' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-RETCODE. * AFTER PERFORMING THIS SECTION, SOME FIELDS NEED TO BE PROCESSED. * THE FOLLOWING 1 LINE IS AN EXAMPLE OF PROCESSING THOSE FIELDS. * MOVE EZA-RETCODE-X TO . GETHOSTID-EXIT. EXIT. EZA-GETPEERNAME SECTION. GETPEERNAME-START. MOVE 'GETPEERNAME' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-NAME EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. GETPEERNAME-EXIT. EXIT. EZA-GIVESOCKET SECTION. GIVESOCKET-START. MOVE 'GIVESOCKET' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE SPACES TO EZA-CLIENT. MOVE EZA-DOMAIN TO EZA-CLIENT-DOMAIN. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-CLIENT EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. GIVESOCKET-EXIT. EXIT. EZA-INITAPI SECTION. INITAPI-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 11 LINES ARE EXAMPLES OF SETTING REQUIRED FIELDS. * THERE ARE SEVERAL DIFFERENCES BETWEEN Z/VSE, Z/OS BATCH, AND * Z/OS CICS. * MOVE TO EZA-MAXSOC. VSE * MOVE 'SOCKET' TO EZA-IDENT-TAG. VSE * MOVE TO EZA-IDENT-SYSID. VSE * MOVE TO EZA-IDENT-TCPNAME. ZOS * MOVE TO EZA-IDENT-ADSNAME. ZOS * MOVE SPACES TO EZA-SUBTASK. ZOS * MOVE TO EZA-SUBTASK. << BATCH ZOS * MOVE EIBTASKN TO EZA-SUBTASK-9X7 << CICS ZOS * MOVE 'L' TO EZA-SUBTASK-TYPE. << CICS - LISTENER ONLY MOVE 'INITAPI' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-MAXSNO. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-MAXSOC EZA-IDENT EZA-SUBTASK EZA-MAXSNO EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. INITAPI-EXIT. EXIT. EZA-LISTEN SECTION. LISTEN-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 1 LINE IS AN EXAMPLE OF SETTING REQUIRED FIELD. * MOVE +10 TO EZA-BACKLOG. MOVE 'LISTEN' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-BACKLOG EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. LISTEN-EXIT. EXIT. EZA-NTOP SECTION. NTOP-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 2 LINES ARE AN EXAMPLE OF SETTING REQUIRED FIELDS. * MOVE
TO EZA-AF. * MOVE
TO EZA-IPADDRESS. MOVE 'NTOP' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE LENGTH OF EZA-PRESENTABLE TO EZA-PRESENTABLELEN. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-AF EZA-IPADDRESS EZA-PRESENTABLE EZA-PRESENTABLELEN EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. * AFTER PERFORMING THIS SECTION, SOME FIELDS NEED TO BE PROCESSED. * THE FOLLOWING 1 LINE IN AN EXAMPLE OF PROCESSING THE FIELD. * MOVE EZA-PRESENTABLE (1: EZA-PRESENTABLELEN) TO . NTOP-EXIT. EXIT. EZA-PEEK SECTION. PEEK-START. MOVE 'PEEK' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE 'RECV' TO EZA-FUNCTION. MOVE +2 TO EZA-FLAGS. MOVE LENGTH OF BUFFER-IN TO EZA-NBYTE. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-FLAGS EZA-NBYTE BUFFER-IN EZA-ERRNO EZA-RETCODE. MOVE 'PEEK' TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. PEEK-EXIT. EXIT. EZA-PEEKFROM SECTION. PEEKFROM-START. MOVE 'PEEKFROM' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +2 TO EZA-FLAGS. MOVE LENGTH OF BUFFER-IN TO EZA-NBYTE. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-FLAGS EZA-NBYTE BUFFER-IN EZA-NAME EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. PEEKFROM-EXIT. EXIT. EZA-PTON SECTION. PTON-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 3 LINES ARE AN EXAMPLE OF SETTING REQUIRED FIELDS. * MOVE
TO EZA-AF. * MOVE TO EZA-PRESETABLE. * MOVE TO EZA-PRESETABLELEN. MOVE 'PTON' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-MAXSOC. MOVE SPACES TO EZA-IDENT. MOVE SPACES TO EZA-SUBTASK. MOVE +0 TO EZA-MAXSNO. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-AF EZA-PRESENTABLE EZA-PRESENTABLELEN EZA-IPADDRESS EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. * AFTER PERFORMING THIS SECTION, SOME FIELDS NEED TO BE PROCESSED. * THE FOLLOWING 1 LINE IN AN EXAMPLE OF PROCESSING THE FIELD. * MOVE EZA-IPADDRESS TO PTON-EXIT. EXIT. EZA-RECV SECTION. RECV-START. MOVE 'RECV' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-FLAGS. MOVE SPACES TO BUFFER-IN. MOVE LENGTH OF BUFFER-IN TO EZA-NBYTE. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-FLAGS EZA-NBYTE BUFFER-IN EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. * AFTER PERFORMING THIS SECTION, SOME FIELDS NEED TO BE PROCESSED. * THE FOLLOWING 2 LINES ARE AN EXAMPLE OF PROCESSING THOSE FIELDS. * MOVE EZA-RETCODE TO EZA-NBYTE. * PERFORM EZA-ASCII-TO-EBCDIC. RECV-EXIT. EXIT. EZA-RECVFROM SECTION. RECV-START. MOVE 'RECVFROM' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-FLAGS. MOVE LENGTH OF BUFFER-IN TO EZA-NBYTE. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-FLAGS EZA-NBYTE BUFFER-IN EZA-NAME EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. * AFTER PERFORMING THIS SECTION, SOME FIELDS NEED TO BE PROCESSED. * THE FOLLOWING 2 LINES ARE AN EXAMPLE OF PROCESSING THOSE FIELDS. * MOVE EZA-RETCODE TO EZA-NBYTE. * PERFORM EZA-ASCII-TO-EBCDIC. RECV-EXIT. EXIT. EZA-SELECT SECTION. SELECT-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 8 LINES ARE EXAMPLES OF SETTING REQUIRED FIELDS. * MOVE LOW-VALUES TO EZA-TIMEOUT. * MOVE 10 TO EZA-TIMEOUT-SECONDS. * MOVE LOW-VALUES TO RSNDMSK. * MOVE LOW-VALUES TO WSNDMSK. * MOVE LOW-VALUES TO ESNDMSK. * COMPUTE EZA-MAXSOC-SELECT = EZA-S + 1. * COMPUTE EZ6-SUB1 = EZA-S + 1. * MOVE '1' TO EZ6-FLAG (EZ6-SUB1). MOVE 'SELECT' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE LOW-VALUES TO RRETMSK. MOVE LOW-VALUES TO WRETMSK. MOVE LOW-VALUES TO ERETMSK. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-MAXSOC-SELECT EZA-TIMEOUT RSNDMSK WSNDMSK ESNDMSK RRETMSK WRETMSK ERETMSK EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. * AFTER PERFORMING THIS SECTION, SOME FIELDS NEED TO BE PROCESSED. * THE FOLLOWING 15 LINES ARE EXAMPLES OF PROCESSING THOSE FIELDS. * MOVE EZ6-MASK TO RSNDMSK (1 : LENGTH OF EZ6-MASK). * PERFORM EZA-SELECT. * IF EZA-RETCODE IS LESS THAN +0 * PERFORM ERROR-ROUTINE. * IF EZA-RETCODE IS EQUAL TO +0 * PERFORM TIMEOUT-ERROR-ROUTINE. * MOVE LOW-VALUES TO EZ6-MASK. * MOVE LENGTH OF EZ6-MASK TO EZ6-SUB1. * IF LENGTH OF ERETMSK IS LESS THAN EZ6-SUB1 * MOVE LENGTH OF ERETMSK TO EZ6-SUB1. * MOVE RRETMSK TO EZ6-MASK (1 : EZ6-SUB1). * PERFORM EZA-BITS-TO-CHARACTERS. * COMPUTE EZ6-SUB1 = EZA-S + 1. * IF EZ6-FLAG (EZ6-SUB1) IS NOT EQUAL TO '1' * PERFORM ERROR-ROUTINE. SELECT-EXIT. EXIT. EZA-SEND SECTION. SEND-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 3 LINES ARE EXAMPLES OF SETTING REQUIRED FIELDS. * MOVE TO BUFFER-OUT. * MOVE LENGTH OF TO EZA-NBYTE. * PERFORM EZA-EBCDIC-TO-ASCII. MOVE 'SEND' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-FLAGS. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-FLAGS EZA-NBYTE BUFFER-OUT EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. SEND-EXIT. EXIT. EZA-SETSOCKOPT SECTION. SETSOCKOPT-START. MOVE 'SETSOCKOPT' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-S EZA-OPTNAME EZA-OPTVAL EZA-OPTLEN EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. SETSOCKOPT-EXIT. EXIT. EZA-SETSOCKET-REUSEADDR SECTION. SO-REUSEADDR-START. MOVE X'00000004' TO EZA-OPTNAME. MOVE X'00000001' TO EZA-OPTVAL. MOVE +4 TO EZA-OPTLEN. MOVE +0 TO EZA-RETCODE. PERFORM EZA-SETSOCKOPT. SO-REUSEADDR-EXIT. EXIT. EZA-SETSOCOPT-V6-ONLY SECTION. SO-V6-ONLY-START. MOVE X'0001000A' TO EZA-OPTNAME. MOVE X'00000001' TO EZA-OPTVAL. MOVE +4 TO EZA-OPTLEN. MOVE +0 TO EZA-RETCODE. PERFORM EZA-SETSOCKOPT. SO-V6-ONLY-EXIT. EXIT. EZA-SOCKET SECTION. SOCKET-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS MAY NEED TO BE SET. * THE FOLLOWING 1 LINES ARE EXAMPLES OF SETTING REQUIRED FIELDS. * MOVE TO EZA-AF. * MOVE TO EZA-SOCTYPE. MOVE 'SOCKET' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. MOVE +0 TO EZA-PROTO. MOVE +0 TO EZA-ERRNO. MOVE +0 TO EZA-RETCODE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-AF EZA-SOCTYPE EZA-PROTO EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. * AFTER PERFORMING THIS SECTION, SOME FIELDS NEED TO BE PROCESSED. * THE FOLLOWING 1 LINE IS AN EXAMPLE OF PROCESSING THOSE FIELDS. * MOVE EZA-RETCODE TO EZA-S. SOCKET-EXIT. EXIT. EZA-TAKESOCKET SECTION. TAKESOCKET-START. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 2 LINES ARE EXAMPLES OF SETTING REQUIRED FIELDS. * MOVE TO EZA-CLIENT. * MOVE TO EZA-SOCRECV. MOVE 'TAKESOCKET' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. CALL 'EZASOKET' USING EZA-FUNCTION EZA-SOCRECV EZA-CLIENT EZA-ERRNO EZA-RETCODE. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. MOVE EZA-ERRNO TO CURRENT-ERROR. * AFTER PERFORMING THIS SECTION, SOME FIELDS NEED TO BE PROCESSED. * THE FOLLOWING 1 LINE IS AN EXAMPLE OF PROCESSING THOSE FIELDS. * MOVE EZA-RETCODE TO EZA-S. TAKESOCKET-EXIT. EXIT. EZA-TERMAPI SECTION. TERMAPI-START. MOVE 'TERMAPI' TO EZA-FUNCTION. PERFORM CONSOLE-TRACE. CALL 'EZASOKET' USING EZA-FUNCTION. MOVE EZA-FUNCTION TO CURRENT-FUNCTION. TERMAPI-EXIT. EXIT. EZA-ASCII-TO-EBCDIC SECTION. A2E-START. CALL 'EZACIC05' USING BUFFER-IN EZA-NBYTE. A2E-EXIT. EXIT. EZA-EBCDIC-TO-ASCII SECTION. E2A-START. CALL 'EZACIC04' USING BUFFER-OUT EZA-NBYTE. E2A-EXIT. EXIT. EZACIC06-SETUP SECTION. EZ6S-START. MOVE LENGTH OF EZ6-FLAGS TO EZ6-MAXSOC. SUBTRACT +1 FROM EZ6-MAXSOC. MOVE LENGTH OF EZ6-MASK TO EZ6-MASK-LENGTH. COMPUTE EZ6-SUB1 = (EZ6-MASK-LENGTH * 8) - 1. IF EZ6-SUB1 IS LESS THAN EZ6-MAXSOC MOVE EZ6-SUB1 TO EZ6-MAXSOC. EZ6S-EXIT. EXIT. EZA-BITS-TO-CHARACTERS SECTION. * THE FOLLOWING 1 LINE MUST BE PERFORMED ONCE BEFORE FIRST USE. * PERFORM EZACIC06-SETUP. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * THE FOLLOWING 2 LINES ARE EXAMPLES OF SETTING REQUIRED FIELDS. * MOVE xRETMSK TO EZ6-MASK. * PERFORM EZA-BITS-TO-CHARACTERS. B2C-START. MOVE 'EZACIC06 CTB' TO CURRENT-FUNCTION. MOVE ZEROES TO EZ6-FLAGS. MOVE LENGTH OF EZ6-FLAGS TO EZ6-MASK-LENGTH. MOVE +0 TO EZA-RETCODE. CALL 'EZACIC06' USING EZ6-BTOC EZ6-MASK EZ6-FLAGS EZ6-MASK-LENGTH EZA-RETCODE. * AFTER PERFORMING THIS SECTION, SOME FIELDS NEED TO BE PROCESSED. * EXAMINE EACH EZ6-FLAG AND PROCESS AS NEEDED. B2C-EXIT. EXIT. EZA-CHARACTERS-TO-BITS SECTION. * THE FOLLOWING 1 LINE MUST BE PERFORMED ONCE BEFORE FIRST USE. * PERFORM EZACIC06-SETUP. * BEFORE PERFORMING THIS SECTION, SOME FIELDS NEED TO BE SET. * SET EACH EZ6-FLAG AS NEEDED. C2B-START. MOVE 'EZACIC06 CTB' TO CURRENT-FUNCTION. MOVE LOW-VALUES TO EZ6-MASK. MOVE LENGTH OF EZ6-FLAGS TO EZ6-MASK-LENGTH. MOVE +0 TO EZA-RETCODE. CALL 'EZACIC06' USING EZ6-CTOB EZ6-MASK EZ6-FLAGS EZ6-MASK-LENGTH EZA-RETCODE. * AFTER PERFORMING THIS SECTION, SOME FIELDS NEED TO BE PROCESSED. * THE FOLLOWING 1 LINE IS AN EXAMPLE OF PROCESSING THOSE FIELDS. * MOVE EZ6-MASK to xSNDMSK-MASK. C2B-EXIT. EXIT. * * BSTTEZAP END *