// PupTestEFTP.bcpl - Pup package test program // Copyright Xerox Corporation 1979, 1982 // Last modified February 15, 1982 5:28 PM by Boggs get "PupEFTP.decl" get "PupTest.decl" external [ //outgoing procedures EFTPReceive; EFTPSend //incoming procedures GetString; GetPartner Zero; MoveBlock; BlockEq; Block Puts; Endofs; Free; Allocate SetAllocation; ComputeThruput OpenPort; PutTemplate; Ws; Wss OpenEFTPSoc; CloseEFTPSoc; SendEFTPEnd SendEFTPBlock; ReceiveEFTPBlock //incoming statics State; Cmmd; checksums; checkdata keys; dsp; sysZone; pbiCount checkBuffer; sendPort; tp ] manifest realTimeClock = 430b //---------------------------------------------------------------------------- let EFTPReceive() be //a context //---------------------------------------------------------------------------- [ let inBuffer = Allocate(sysZone, 256) let soc = vec lenEFTPSoc [ OpenEFTPSoc(soc, table [ 0; 0; socketEFTPReceive ], 0) let total = pbiCount/2 SetAllocation(soc, total, total-1, total-1) soc>>PupSoc.doChecksum = checksums while ReceiveEFTPBlock(soc, inBuffer, 512, -1) eq 512 do if checkdata then unless BlockEq(checkBuffer, inBuffer, 256) do [ Ws("*NRcvr Data Compare Error."); break ] CloseEFTPSoc(soc) ] repeat ] //---------------------------------------------------------------------------- and EFTPSend() be //---------------------------------------------------------------------------- [ Ws("EFTP Send. ") let soc = vec lenEFTPSoc test Cmmd eq 0 ifso [ let name = vec 40 unless GetString("Receive Port: ", name, true, false) return if GetPartner(name, dsp, sendPort, 0, socketEFTPReceive) break ] repeat ifnot [ sendPort>>Port.socket↑1 = 0 sendPort>>Port.socket↑2 = socketEFTPReceive ] OpenEFTPSoc(soc, 0, sendPort) let total = pbiCount/2 SetAllocation(soc, total, total-1, total-1) Ws("- Checksums "); Ws(checksums ? "enabled.*N", "disabled.*N") soc>>PupSoc.doChecksum = checksums test SendEFTPBlock(soc, checkBuffer, 512, 12000) eq 512 ifso Ws("Connection open. '!' = 10,000 bytes*N") ifnot [ Ws("Failed."); CloseEFTPSoc(soc); return ] State = stateEFTP Zero(tp, lenTP) tp>>TP.timer = @realTimeClock [ if SendEFTPBlock(soc, checkBuffer, 512, 12000) ne 512 then [ Ws("*NSendEFTPBlock 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) & Cmmd eq 0 test SendEFTPEnd(soc, 3000) ifso Ws("*NClosed cleanly") ifnot Ws("*NClosed uncleanly") CloseEFTPSoc(soc) ]