// PupTestBSP.bcpl - Pup package test program
// Copyright Xerox Corporation 1979, 1982
// Last modified February 15, 1982 5:27 PM by Boggs
get "Pup0.decl"
get "Pup1.decl"
get "PupRTP.decl"
get "PupBSP.decl"
get "PupTest.decl"
external
[
//outgoing procedures
BSPReceive; BSPSend
//incoming procedures
Zero; MoveBlock; BlockEq
Puts; Endofs; Closes; Block; Free; Allocate
OpenLevel1Socket; CloseLevel1Socket; SetAllocation
OpenRTPSocket; CloseRTPSocket; ComputeThruput
BSPReadBlock; BSPWriteBlock; CreateBSPStream
OpenPort; PutTemplate; GetString; GetPartner; Ws; Wss
//incoming statics
State; Cmmd; checksums; checkdata
keys; dsp; sysZone; pbiCount
checkBuffer; sendPort; tp; ctxQ
]
manifest
[
socketBSPTest = 6
realTimeClock = 430b
]
structure Byte↑0,0 byte
//----------------------------------------------------------------------------
let BSPReceive() be //a context
//----------------------------------------------------------------------------
[
let inBuffer = Allocate(sysZone, 256)
let soc = vec lenBSPSoc
[
OpenLevel1Socket(soc, table [ 0; 0; socketBSPTest ])
let total = pbiCount/2
SetAllocation(soc, total, total-1, total-1)
soc>>PupSoc.doChecksum = checksums
OpenRTPSocket(soc, 0, modeListenAndReturn)
Block() repeatuntil soc>>BSPSoc.state eq stateOpen
let str = CreateBSPStream(soc)
[
if BSPReadBlock(str, inBuffer, 0, 512, 12000) ls 512 break //2 min
if checkdata then unless BlockEq(checkBuffer, inBuffer, 256) do
[ Ws("*NRcvr Data Compare Error."); break ]
] repeat
Closes(str)
] repeat
]
//----------------------------------------------------------------------------
and BSPSend() be
//----------------------------------------------------------------------------
[
Ws("BSP Send. ")
let soc = vec lenBSPSoc
test Cmmd eq 0
ifnot [ Cmmd = 0; OpenLevel1Socket(soc, 0, sendPort) ]
ifso unless OpenPort("Receive Port: ", soc, 0, socketBSPTest) return
let total = pbiCount/2
SetAllocation(soc, total, total-1, total-1)
Ws("- Checksums "); Ws(checksums ? "enabled*N", "disabled*N")
soc>>PupSoc.doChecksum = checksums
test OpenRTPSocket(soc)
ifso Ws("Connection open. '!' = 10,000 bytes*N")
ifnot [ Ws("Failed."); CloseLevel1Socket(soc); return ]
State = stateBSP
let str = CreateBSPStream(soc)
Zero(tp, lenTP)
tp>>TP.timer = @realTimeClock
[
unless BSPWriteBlock(str, checkBuffer, 0, 512) then
[ Ws("*NBSPWriteBlock Failed"); break ]
tp>>TP.count = tp>>TP.count + 512
if tp>>TP.count ge 10000 then
[
tp>>TP.count = tp>>TP.count - 10000
Puts(dsp, $!)
tp>>TP.bigCount = tp>>TP.bigCount+1
if tp>>TP.bigCount eq 50 then //500,000 bytes
[
ComputeThruput(tp)
tp>>TP.bigCount = 0
tp>>TP.timer = @realTimeClock
]
]
] repeatwhile Endofs(keys) & soc>>BSPSoc.state eq stateOpen & Cmmd eq 0
test Closes(str)
ifso Ws("*NClosed cleanly")
ifnot Ws("*NClosed uncleanly")
]