cdc:nos2.source:nam5871:ippbins
Table of Contents
IPPBINS
Table Of Contents
- [00004] PROC IPPBINS (SOCKID, PORT, SOCKSTATUS)
- [00006] IPPBINS - BIND SOCKET
- [00041] PROC IPPRECV
- [00042] PROC IPUMCLR
- [00043] PROC NETPUT
- [00044] PROC XDRBYTE
- [00045] PROC XDRINT
Source Code
- IPPBINS.txt
- *DECK IPPBINS
- USETEXT TEXTIPL
- USETEXT TEXTXDR
- PROC IPPBINS (SOCKID, PORT, SOCKSTATUS);
- *CALL COPYRITE CDCNET - COPYRIGHT CONTROL DATA. 1992.
- # TITLE IPPBINS - BIND SOCKET #
- BEGIN # IPPBINS #
- #
- **** IPPBINS BIND SOCKET
- *
- * THIS PROCEDURE BINDS AN IP ADDRESS AND A PORT TO A SOCKET.
- *
- * PROC IPPBINS
- *
- * ENTRY SOCKID = INTEGER VALUE OF SOCKET
- * PORT = INTEGER VALUE OF PORT. IF THE PORT NUMBER
- * IS 0 THEN THE PORT IS ASSIGNED BY THE CDCNET
- * TCP/IP GATEWAY.
- *
- * EXIT SOCKSTATUS = COMPLETION STATUS
- *
- * METHOD IF THE SOCKET STATE IS NOT OPEN THEN RETURN WITH AN
- * APPROPRIATE STATUS INDICATION BASED ON THE CURRENT
- * STATE. IF THE SOCKET IS USING THE *UDP* PROTOCOL, THEN
- * SEND AN OPEN SAP REQUEST TO THE CDCNET TCP/IP GATEWAY.
- * IF A *PORT* IS NON-ZERO, INCLUDE IN THE ADDRESS PORTION
- * OF THE CALL REQUEST. THE PROCEDURE IPPRECV IS CALLED
- * TO WAIT FOR A CALL INDICATION FROM THE TCP/IP GATEWAY.
- * IF A RESPONSE IS NOT RECEIVED IN 60 SECONDS OR IF DATA
- * OTHER THAN A CALL RESPONSE IS RECEIVED, RETURN AN ERROR.
- * IF A VALID RESPONSE IS RECEIVED, STORE THE SOURCE ADDRESS
- * IN THE ACN ENTRY AND RETURN.
- #
- #
- **** PROC IPPBINS - XREF LIST
- #
- XREF
- BEGIN
- PROC IPPRECV; # RECEIVE BLOCK OF DATA #
- PROC IPUMCLR; # MEMORY CLEAR #
- PROC NETPUT; # OUTPUT A MESSAGE TO THE NETWORK #
- PROC XDRBYTE; # CONVERT BYTES TO XDR FORMAT #
- PROC XDRINT; # CONVERT INTEGERS TO XDR FORMAT #
- END
- #
- **
- #
- ITEM SOCKID I; # SOCKET IDENTIFIER #
- ITEM PORT I; # PORT NUMBER #
- ITEM SOCKSTATUS S:SOCKSTAT; # RETURNED SOCKET STATUS #
- ITEM BUFLENGTH I; # LENGTH OF RECEIVE BUFFER #
- ITEM BUFPOS I; # CURRENT POSITION IN BUFFER #
- ARRAY ADDRESS [00:00] S(ADDSIZE$);;# SOURCE ADDRESS FROM CALL RES#
- BASED ARRAY IPADDR [00:00] S(1);;# SOURCE ADDRESS FOR XDR CALL #
- CONTROL EJECT;
- #
- **** START MAIN PROCEDURE
- #
- IF ACN$STATE [SOCKID] NQ S"OPEN"
- THEN
- BEGIN
- SOCKSTATUS = SOCKSTAT"INVALIDST";
- RETURN;
- END
- IF (ACN$ABORT [SOCKID])
- THEN
- BEGIN # CONNECTION ABORTED #
- SOCKSTATUS = S"ABORT";
- RETURN;
- END
- SWITCH SOCK$:PTYPE SOCK$UDP:SOCKETUDP,
- SOCK$TCP:SOCKETTCP;
- GOTO SOCK$ [ACN$PTYPE [SOCKID]];
- BEGIN # SOCKET TYPE #
- SOCK$UDP:
- BUFPOS = 0; # INITIALIZE BUFFER POSITION #
- P<IP$ADDR$REC> = LOC (HST$ADDR);
- P<IPADDR> = LOC (HST$ADDR) + 1;# LOCATION FOR XDR ROUTINES #
- IP$UDPORT = 0; # CLEAR PORT OF LOCAL HOST ADDR #
- IF PORT NQ 0
- THEN
- BEGIN # ADD PORT TO THE HOST ADDRESS #
- IP$PIU = TRUE; # SET PORT IN USE #
- IP$PORT = PORT;
- END
- #
- **** PACK THE CALL REQUEST FOR THE UDP INTERFACE INTO *OUTBUF*.
- * THE REQUEST CONSISTS OF THE CALL TYPE, UDP VERSION, A BYTE
- * INDICATING WHAT IP ADDRESS FIELDS ARE INCULDED, AND THREE 32
- * BIT INTEGERS INCLUDING THE NETWORK, HOST, AND PORT. THE NETWORK
- * AND HOST PORTION COME FROM THE COMMON HST$ADDR ARRAY.
- #
- IPUMCLR (LOC (OUTBUF), 4); # CLEAR 4 WORDS OF OUTPUT #
- UDP$HEADER [0] = CALLREQ$;
- UDP$FIU [0] = IP$IPFIU [0];
- XDRBYTE (OUTBUF, BUFPOS, UDP$HEAD$REC, 4, XDROPER"WRITE");
- XDRINT (OUTBUF, BUFPOS, IPADDR, 3, XDROPER"WRITE");
- BUFPOS = BUFPOS + 14; # DESTINATION ADDRESS ZERO #
- P<ABH> = LOC (DABH); # BASE ABH POINTER #
- ABHADR [0] = SOCKID; # STORE CONNECTION NUMBER #
- ABHABN [0] = ACN$ABN [SOCKID]; # STORE APPLICATION BLOCK NUMBER#
- ABHTLC [0] = BUFPOS; # STORE TEXT LENGTH IN BYTES #
- ACN$ABN [SOCKID] = ACN$ABN [SOCKID] + 1;
- ACN$OBC [SOCKID] = ACN$OBC [SOCKID] + 1;
- NETPUT (DABH, OUTBUF); # SEND THE REQUEST #
- #
- **** WAIT FOR A RESPONSE FROM THE BIND. ONCE RECEIVED VERIFY THAT THE
- * RESPONSE IS A CALL RESPONSE. SAVE THE RETURNED IP ADDRESS IN
- * THE ACN SOCKET ENTRY.
- *
- #
- IPPRECV (SOCKID, WORKBUF, BUFLENGTH, ADDRESS, SOCKSTATUS);
- IF (SOCKSTATUS NQ S"OK") OR
- (REC$REQ [0] NQ CALLRES$)
- THEN
- BEGIN # BIND FAILED #
- SOCKSTATUS = S"REQFAIL";
- END
- ELSE
- BEGIN # MOVE IP ADDRESS TO ACN ENTRY #
- P<IP$ADDR$REC> = LOC (ADDRESS);
- ACN$SIPFIU [SOCKID] = IP$IPFIU [0];
- ACN$SIPHOST [SOCKID] = IP$IPHOST [0];
- ACN$SIPNET [SOCKID] = IP$IPNET [0];
- ACN$SIUPORT [SOCKID] = IP$UDPORT [0];
- ACN$STATE [SOCKID] = S"BOUND";
- SOCKSTATUS = S"OK";
- END
- GOTO BIND$END;
- SOCK$TCP:
- GOTO BIND$END;
- END # SOCKET TYPE #
- BIND$END:
- RETURN; # RETURN TO CALLER #
- END # IPPBINS #
- TERM
cdc/nos2.source/nam5871/ippbins.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator