summaryrefslogtreecommitdiff
path: root/doc/protocol-3-impl.txt
blob: 55920e1ddb804069de3a11b4d7f487baaaa4ce98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
A list of the important changes done to distcc to support protocol version 3.
More or less in dataflow order.
Does not include various little changes, such as a bug fix in argutil.c, and
making functions from static into global, which happened all around the code.

	- A new protocol version (3) is added. It
	  supports preprocessing on the server. It also transmits 
	  bulky data compressed, like protocol version 2.
	  - distcc.h: Added the enum for where to do the cpp.
	  - hosts.c: Map a set of features (currently a subset of
		where to do cpp and whether to do compression) onto
		a protocol number.
	  - rpc.c: The client sometimes sends either a file or
	    a link to the server. The server needs to be able to
	    accept either, so dcc_r_sometoken_int introduces some
	    alternation to the protocol.
	- Talking to the include server:
	  - compile.c: dcc_build_somewhere tries to talk to the
		include server, and pushes the information about
		the .d file to dcc_compile_remote. This is where
		the fallback-to-the-original-protocol code lives.
	  - include_server_if.c: Talk to the include server.
	- The communication from client to server. The client needs to
	  send multiple files, and perhaps links, to the server; the
	  client also needs to send its current working directory,
	  - remote.c: Entry points for sending multiple files to
	        the server.
	  - rpc.c: The server needs to handle not only files, but also
		links (directories are handled implicitly).
	  - clirpc.c: Added a function to send the current working
		directory.  Added a function, dcc_x_many_files. It sends
		multiple files to the server.  In addition, it changes
		the filenames to chop off the additions of the include
		server.
	  - serve.c: Added a function to receive the current working
		directory.
	- On the server side: the server receives multiple files
	  and the working directory, and builds a directory structure
	  (which it keeps a manifest of, to clean it up at the end).
	  - srvrpc.c:
	        Added a function, dcc_r_many_files, to receive multiple
		files.  In addition, it changes the filenames to put all
		the files under a "fake root" directory.
	  - serve.c: lots of work to set up "fake root" directories,
		chdir to the right place, produce a .d file, and
		absolutize include directives.
	  - tempfile.c: Creation of whole temp directories,
	        not just files.
	  - cleanup.c: Since we are receiving multiple files,
		we need to keep a dynamic list of what temporary
		files we create. Cleanup can now handle directories.
	- ".d" files: the client needs to find out where the dotd file
	        should go; the server needs to produce it, remove all
		references to its (the server's) local filesystem (there are no
		gcc options to do this) and send it back to the client.
	  - dotd.c: Most of the code that handles the dotd: figuring
		out if we need it, and where it should go; also,
		cleaning it up after it gets created on the server.
          - fix_debug_info.c: Rewrite an ELF .o file to refer to the 
                client-side filenames.
	  - clirpc.c Changed dcc_retrieve_results to retrieve
		the dotd file.