1 /* Interface between the server and the rest of CVS. */
3 /* Miscellaneous stuff which isn't actually particularly server-specific. */
6 #define STDOUT_FILENO 1
7 #define STDERR_FILENO 2
13 * Nonzero if we are using the server. Used by various places to call
14 * server-specific functions.
16 extern int server_active;
17 extern int server_expanding;
19 /* Server functions exported to the rest of CVS. */
22 extern int server PROTO((int argc, char **argv));
24 /* See server.c for description. */
25 extern void server_pathname_check PROTO ((char *));
27 /* We have a new Entries line for a file. TAG or DATE can be NULL. */
28 extern void server_register
29 PROTO((char *name, char *version, char *timestamp,
30 char *options, char *tag, char *date, char *conflict));
32 /* Set the modification time of the next file sent. This must be
33 followed by a call to server_updated on the same file. */
34 extern void server_modtime PROTO ((struct file_info *finfo,
38 * We want to nuke the Entries line for a file, and (unless
39 * server_scratch_entry_only is subsequently called) the file itself.
41 extern void server_scratch PROTO((char *name));
44 * The file which just had server_scratch called on it needs to have only
45 * the Entries line removed, not the file itself.
47 extern void server_scratch_entry_only PROTO((void));
50 * We just successfully checked in FILE (which is just the bare
51 * filename, with no directory). REPOSITORY is the directory for the
54 extern void server_checked_in
55 PROTO((char *file, char *update_dir, char *repository));
57 extern void server_copy_file
58 PROTO((char *file, char *update_dir, char *repository, char *newfile));
60 /* Send the appropriate responses for a file described by FILE,
61 UPDATE_DIR, REPOSITORY, and VERS. FILE_INFO is the result of
62 statting the file, or NULL if it hasn't been statted yet. This is
63 called after server_register or server_scratch. In the latter case
64 the file is to be removed (and vers can be NULL). In the former
65 case, vers must be non-NULL, and UPDATED indicates whether the file
66 is now up to date (SERVER_UPDATED, yes, SERVER_MERGED, no,
67 SERVER_PATCHED, yes, but file is a diff from user version to
68 repository version, SERVER_RCS_DIFF, yes, like SERVER_PATCHED but
69 with an RCS style diff). */
70 enum server_updated_arg4
77 extern void server_updated
78 PROTO((struct file_info *finfo, Vers_TS *vers,
79 enum server_updated_arg4 updated, struct stat *,
80 unsigned char *checksum));
82 /* Whether we should send RCS format patches. */
83 extern int server_use_rcs_diff PROTO((void));
85 /* Set the Entries.Static flag. */
86 extern void server_set_entstat PROTO((char *update_dir, char *repository));
88 extern void server_clear_entstat PROTO((char *update_dir, char *repository));
90 /* Set or clear a per-directory sticky tag or date. */
91 extern void server_set_sticky PROTO((char *update_dir, char *repository,
92 char *tag, char *date, int nonbranch));
93 /* Send Template response. */
94 extern void server_template PROTO ((char *, char *));
96 extern void server_update_entries
97 PROTO((char *file, char *update_dir, char *repository,
98 enum server_updated_arg4 updated));
100 /* Pointer to a malloc'd string which is the directory which
101 the server should prepend to the pathnames which it sends
103 extern char *server_dir;
105 enum progs {PROG_CHECKIN, PROG_UPDATE};
106 extern void server_prog PROTO((char *, char *, enum progs));
107 extern void server_cleanup PROTO((int sig));
109 #ifdef SERVER_FLOWCONTROL
110 /* Pause if it's convenient to avoid memory blowout */
111 extern void server_pause_check PROTO((void));
112 #endif /* SERVER_FLOWCONTROL */
114 #ifdef AUTH_SERVER_SUPPORT
115 extern char *CVS_Username;
116 extern int system_auth;
117 #endif /* AUTH_SERVER_SUPPORT */
119 #endif /* SERVER_SUPPORT */
121 /* Stuff shared with the client. */
124 /* Name of the request. */
127 #ifdef SERVER_SUPPORT
129 * Function to carry out the request. ARGS is the text of the command
130 * after name and, if present, a single space, have been stripped off.
132 void (*func) PROTO((char *args));
135 /* Stuff for use by the client. */
138 * Failure to implement this request can imply a fatal
139 * error. This should be set only for commands which were in the
140 * original version of the protocol; it should not be set for new
145 /* Some servers might lack this request. */
149 * Set by the client to one of the following based on what this
150 * server actually supports.
156 * If the server supports this request, and we do too, tell the
157 * server by making the request.
163 /* Table of requests ending with an entry with a NULL name. */
164 extern struct request requests[];
166 /* Gzip library, see zlib.c. */
167 extern void gunzip_and_write PROTO ((int, char *, unsigned char *, size_t));
168 extern void read_and_gzip PROTO ((int, char *, unsigned char **, size_t *,