{$B-,V-,X+} UNIT nwPEP; { nwPEP unit as of 950301 / NwTP 0.6 API. (c) 1993,1995, R.Spronk } INTERFACE Uses Dos,nwIPX,nwMisc; { Primary IPX calls: Subf: Comments: Secondary calls: PEPsetupSendECB PEPsetupListenECB } Var Result:word; { unit errorcode variable } Type TpepHeader=Record IPXhdr :TipxHeader; { set packettype to $04 } TransactionID:Longint; clientType :word; end; Procedure PEPSetupListenECB(ESRptr:Pointer; ReceiveSocket:word; BufPtr:Pointer; BufSize:word; {out:} Var PepHdr:TpepHeader; Var ecb:Tecb); { Clears IPXheader and ECB, sets values of the required fields within the ecb and IPX header. } Procedure PEPSetupSendECB(ESRptr:pointer; SourceSocket:word; DestAddr:TinterNetworkAddress; BufPtr:pointer; BufSize:word; {out:} Var PepHdr:TpepHeader; Var ecb:Tecb); { Clears IPXheader and ECB, sets values of the required fields within the ecb and IPX header. } IMPLEMENTATION {==============================================================} Procedure PEPSetupListenECB(ESRptr:Pointer;ReceiveSocket:word; BufPtr:Pointer;BufSize:word; {out:} Var PepHdr:TpepHeader; Var ecb:Tecb); { Clears IPXheader and ECB, sets values of the required fields within the ecb and IPX header. } { ECB: ESR adress field, socket number, fragment count, frag.descriptor fields } begin FillChar(ecb,SizeOf(Tecb),#0); FillChar(pepHdr,SizeOF(TpepHeader),#0); WITH ECB do begin if ESRptr<>NIL then ESRaddress:=ESRptr; Fragmentcount:=2; socketNumber:=swap(ReceiveSocket); {hi-lo} Fragment[1].Address:=@pepHdr; Fragment[2].Address:=BufPtr; Fragment[1].size:=SizeOf(Tpepheader); Fragment[2].size:=BufSize; end; end; Procedure PEPsetupSendECB(ESRptr:pointer; SourceSocket:word; DestAddr:TinterNetworkAddress; BufPtr:pointer; BufSize:word; {out:} Var PepHdr:TpepHeader; Var ecb:Tecb); { Clears IPXheader and ECB, sets values of the required fields within the ecb and IPX header. } Var ImmAddr:TnodeAddress; Ticks:word; begin fillchar(pepHdr,SizeOf(TpepHeader),#0); with pepHdr.IPXhdr do begin PacketType:=PEP_PACKET_TYPE; Move(DestAddr,Destination,10); destination.socket:=swap(DestAddr.socket); {hi-lo} end; IPXGetLocalTarget(DestAddr,ImmAddr,Ticks); fillchar(ecb,sizeOf(ecb),#0); With ecb do begin if ESRptr<>NIL then ESRaddress:=ESRptr; socketNumber:=swap(SourceSocket); {hi-lo} Move(ImmAddr,ImmediateAddress,6); FragmentCount:=2; fragment[1].Address:=@pephdr; fragment[1].size:=SizeOf(TpepHeader); fragment[2].Address:=BufPtr; fragment[2].size:=BufSize; end; end; end.