97 lines
2.9 KiB
Plaintext
97 lines
2.9 KiB
Plaintext
{$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. |