From: Derrik P. <de...@de...> - 2005-09-06 13:16:45
|
All, I have, over the past months, been slowly building up a Perl-based implementation of an AFP (over TCP) client library, and have used it to successfully connect to MacOS (9.x and OS X) based AFP servers as a matter of experimentation. I've also used Apple's reference documentation as a basis for implementing the protocol. However, I tried connecting my home-brewed client implementation to the Netatalk AFP server, and thus far I've noticed a couple spots where Netatalk diverges from documented and/or observed proper behavior: - When initializing the DSI session, the response from the DSIOpenSession() operation returns an error code of 6. This just happens to be the length of the payload included with the response; this is however explicitly against the server-side behavior of the DSI shim layer as documented in "AppleTalk Filing Protocol Version 2.1 and 2.2" from the "AppleShare IP 6.3 Developer's Kit". The "error code" field is only to be used to contain error codes for response packets, and should contain kFPNoErr (0) if there is no error. It should only contain the payload length in case of a request packet, i.e., in the case of DSIWrite operations. - When the client issues a DSICloseSession() operation to tear down the DSI session, the server sends back its own DSICloseSession() request packet in its own request sequence. This is not as described in the above document, nor as observed in Apple's AFP server implementations, either on MacOS 9.x or OS X. The server should issue no response after the client sends a DSICloseSession() request. The client should then close the TCP session, at which point the conversation is over. I don't have a patch that amends this behavior, but if requested I'll look into implementing one. I figured you'd like to know so it can be corrected. -- Derrik Pates de...@de... |