kreme@isis.cs.du.edu (Spam Spam Spam Spam Spam Spam Spam Spam) (03/29/91)
I have been asked to repost this to csa2. We are trying to insure that Andy receives at least 40 checks on the Zmodem Drivers, so we want to expose the offer to as many people as possible. I am also cross-posting this to alt.bbs Please direct all follow ups to csa2. ----------------- *** File: Zmodem.Finalrpt *** --------------------- A final summary report concerning Zmodem problems in v2.2 of ProTERM- specifically, failures to comply with the Zmodem specifications for required performance features. This report does not address optional features which should be incorporated into ProTERM; it focuses on the need to make ProTERM's implementation fully meet the Zmodem specification on all the required transport level features even as the optional features are being implemented. It is based on testing that was done using ProTERM, Zterm, White Knight, MicroPhone II, Telix, and Turmulator, among others, as test programs in the development of new protocol drivers for the Washington Apple Pi's TCS [TeleConferences System]. The new drivers implement all the required and optional features of the Zmodem specification except CRC32, RLE and LZW compression, and encryption/decryption, all of which would have required more memory than could be provided on the TCS. The Zmodem drivers provide a debugging screen display that permits observation of what the different communication programs are doing as well as what the TCS is doing. This display and the Zmodem specification docs of Oct. 14, 1988 form the basis for the observations reported below. A. SENDING. 1. When sending ProTERM does not respect the buffer size limit specified by the receiver in ZP0 and ZP1 of its ZRINIT header ... it just keeps sending without stopping and waiting for the ZACK response to its ZCRCW data subpackets before continuing. It's as if ProTERM thought ZP0 and ZP1 were both set to 0. 2. When sending ProTERM does not respect the CANFDX bit sent in the ZRINIT frame. Perhaps the decoding of ZF0 and ZF1 in the frame header is not going correctly. 3. When sending ProTERM uses ZCRCQ subpackets always where ZCRCW subpackets should be used. ZCRCQ subpackets should NOT be used, unless the receiver indicates it has FDX (Full Duplex) capability, which the TCS (on Apple //e's does not). The TCS drivers do indicate _no_ FDX capability by setting the CANFDX bit FALSE. 4. When starting a batch send, ProTERM sends multiple ZFILE frames instead of the standard single ZFILE frame. The number of duplications is equal to the number of files in the batch. I can't suggest an explanation to point to the bug for this one, but there is supposed to be only one ZFILE frame preceding each file. 5. When sending, ProTERM fails to follow the required format of the ZCRCW subpacket carrying the filename. The ZFILE header is followed by ZCRCW supacket giving the filename and (optionally) other file info. If the filename is sent with other file info, it is terminated with a single NUL, but if the filename alone is sent, the filename should be terminated with a _two(2)_ NULs. ProTERM terminates the filename with a single NUL though no other information is sent. 6. ProTERM fails to recognize the 5-CAN sequence to abort the send. (We actually use 8 CANs followed by 8 BS's as specified in the Zmodem docs, though just 5 consecutive is - or should be - sufficient to abort the send.) B. RECEIVING. 1. When receiving ProTERM's Zmodem sends a ZACK header after the _first_ $1900 byte bufferfull; but for every bufferfull after the first it returns a ZRPOS header that forces the sender BACK $100 bytes. It shouild be sending a ZACK header if there is no error (there were no errors occurring during these particular test transfers). 2. We believe that ProTERM does not write its buffer of received data to disk when downloading via Zmodem -- at least it doesn't do it properly. It should write the buffer out to disk whenever it gets an error (and must send a ZRPOS) and also when it receives a ZCRCW (wait) packet. ProTERM behaves as if it may only write when it gets an error, but at no other time. The indicated buffer size of $1900 bytes is respected by sending programs, but ProTERM itself should also protect itself against buffer overflows -- as ProTERM itself could potentially overflow its buffer and end up putting data into memory god-knows-where. 3. When receiving, ProTERM does not set the correct file length provided in the ZFILE frame's ZCRCW subpacket. Instead it pads the file length out to the next $80-byte boundary. 4. When receiving ProTERM's Zmodem responds to line noise errors incorrectly - it _just_ sends a ZRPOS header. It should FIRST send the sender's specified Attn Sequence and _THEN_ the ZRPOS header. It seems that ProTERM may fail to store the sending program's Attn sequence in response to the ZSINIT frame sent to it by the TCS as required by the Zmodem specifications. 5. We did try some heavy line noise with ProTERM, but the sending side must have missed the ZRPOS packet, or it must have been scrambled, because it just sat waiting for something to come from ProTERM (remember, Zmodem is receiver driven) to tell it what to do... but nothing ever came. It appears there is probably another bug to report... that ProTERM doesn't time out with Zmodem when there's an error on the sender's side and stuff stops coming in. It should RESEND the ZRPOS packet after timing out (about 10 seconds) to try to force the other side to "wake up"). -- | kreme@nyx.cs.du.edu |The Coven BBS (303) 777 2911 PCP via CODEN Stalr*nk too| |---------------------|100 Megs of storage. Areas for IBM/MAC/Apple. Games. | | If you don't get kissed good-night you get Kafka Dreams |