On 01/20/2014 08:45 PM, Alex Rousskov wrote: > Hello, > > FTP gateway[1] code[2] work well, and we are polishing it for the > official submission. The biggest change we need to make is to rearrange > where the new code lives in Squid src directory. In this email, I am > proposing how to structure that new code, but I start with a little bit > of a background on the classes involved: > > * The current official code has a server-side FTP client that translates > true HTTP requests (with ftp:// URIs) into FTP commands and FTP > responses into true HTTP responses. I call this "old FTP client" below. > > * The new FTP Gateway code uses a different server-side FTP client that > translates fake HTTP requests into FTP commands and FTP responses into > fake HTTP responses. There is now also client-side FTP server code that > translates true FTP commands into fake HTTP requests and fake HTTP > responses into true FTP responses. > > > Before the ftp-gw branch changes, most of the FTP code lived in two > source files (.cc and .h): > > src/ftp.* # server-side FTP code (i.e., "FTP client") > - # non-existent client-side FTP code (i.e., "FTP server") > > > In the current ftp-gw branch, FTP temporary lives in these files: > > src/FtpServer.* # code shared by old and new FTP clients > src/ftp.* # old FTP client > src/FtpGatewayServer.* # new FTP gw client > src/client_side.cc # new FTP gw server > > > I propose the following arrangement for the official submission: > > src/out/FtpServer.* # code shared by old and new FTP clients > src/out/FtpToHttp.* # old FTP client > src/out/FtpGateway.* # new FTP gw client > src/in/FtpGateway.* # new FTP gw server > src/ftp/* # FTP code shared by client and server sides > > > I am not happy about the "ToHttp" suffix for the old FTP client class > but cannot think of a better one. The primary difference between the old > and new FTP clients is that the former converts FTP responses into true > HTTP responses, while the latter just wraps FTP responses into "fake" > HTTP response wrappers (and unwraps them into native FTP responses on > the client side). > > > One alternative worth considering is accumulating FTP agent (client or > server) code in their own directories, better separating them from HTTP > agents (and agents for other protocols on the same side), even though we > have not done that for HTTP yet: > > src/out/ftp/Server.* # code shared by old and new FTP clients > src/out/ftp/ToHttp.* # old FTP client > src/out/ftp/Gateway.* # new FTP gw client > src/in/ftp/Gateway.* # new client-side FTP gw code > src/ftp/* # FTP code shared by client and server sides
I have not strong opinion on these. The "src/out/ftp/* looks better but probably it will result to directories with only one or two source files. The protocol related files (http*, ftp*, gopher*) are few files. > > There has been at least one discussion about related matters, but it did > not appear to reach consensus on the key questions relevant here. > Pleases review "[RFC] SourceLayout for client-side and server-side > components"[3] to avoid rehashing the same set of arguments here. Just a comment on "in" and "out" directories. I prefer the "client-side" and "server-side" instead of "in/out" or "client/server", because it describes better what really is this part of code. I remember when I was trying to read squid code, in many cases I was confused with "client*" or "server*" naming schemes. The client-side part of squid is a server and the "server-side" is a client. > > That old discussion uses CCC and SSS placeholders for client- and > server-side files. In my proposal above, CCC is "in" and SSS is "out". I > picked these misleading terms among all other misleading terms already > discussed simply because they are shorter. If we have to mislead, let's > at least not waste space! OK :-) > > > Thank you, > > Alex. > [1] http://wiki.squid-cache.org/Features/FtpGateway > [2] https://code.launchpad.net/~measurement-factory/squid/ftp-gw > [3] http://www.squid-cache.org/mail-archive/squid-dev/201303/0054.html >