xref: /openbsd-src/gnu/usr.bin/cvs/src/server.h (revision b6c0222275d7627ee4b3daf0c986f90dee05daa5)
1 /* Interface between the server and the rest of CVS.  */
2 
3 /* Miscellaneous stuff which isn't actually particularly server-specific.  */
4 #ifndef STDIN_FILENO
5 #define STDIN_FILENO 0
6 #define STDOUT_FILENO 1
7 #define STDERR_FILENO 2
8 #endif
9 
10 #ifdef SERVER_SUPPORT
11 
12 /*
13  * Nonzero if we are using the server.  Used by various places to call
14  * server-specific functions.
15  */
16 extern int server_active;
17 extern int server_expanding;
18 
19 /* Server functions exported to the rest of CVS.  */
20 
21 /* Run the server.  */
22 extern int server PROTO((int argc, char **argv));
23 
24 /* We have a new Entries line for a file.  TAG or DATE can be NULL.  */
25 extern void server_register
26     PROTO((char *name, char *version, char *timestamp,
27 	     char *options, char *tag, char *date, char *conflict));
28 
29 /*
30  * We want to nuke the Entries line for a file, and (unless
31  * server_scratch_entry_only is subsequently called) the file itself.
32  */
33 extern void server_scratch PROTO((char *name));
34 
35 /*
36  * The file which just had server_scratch called on it needs to have only
37  * the Entries line removed, not the file itself.
38  */
39 extern void server_scratch_entry_only PROTO((void));
40 
41 /*
42  * We just successfully checked in FILE (which is just the bare
43  * filename, with no directory).  REPOSITORY is the directory for the
44  * repository.
45  */
46 extern void server_checked_in
47     PROTO((char *file, char *update_dir, char *repository));
48 
49 extern void server_copy_file
50     PROTO((char *file, char *update_dir, char *repository, char *newfile));
51 
52 /* Send the appropriate responses for a file described by FILE,
53    UPDATE_DIR, REPOSITORY, and VERS.  FILE_INFO is the result of
54    statting the file, or NULL if it hasn't been statted yet.  This is
55    called after server_register or server_scratch.  In the latter case
56    the file is to be removed (and vers can be NULL).  In the former
57    case, vers must be non-NULL, and UPDATED indicates whether the file
58    is now up to date (SERVER_UPDATED, yes, SERVER_MERGED, no,
59    SERVER_PATCHED, yes, but file is a diff from user version to
60    repository version).  */
61 enum server_updated_arg4 {SERVER_UPDATED, SERVER_MERGED, SERVER_PATCHED};
62 extern void server_updated
63     PROTO((struct file_info *finfo, Vers_TS *vers,
64 	   enum server_updated_arg4 updated, struct stat *,
65 	   unsigned char *checksum));
66 
67 /* Set the Entries.Static flag.  */
68 extern void server_set_entstat PROTO((char *update_dir, char *repository));
69 /* Clear it.  */
70 extern void server_clear_entstat PROTO((char *update_dir, char *repository));
71 
72 /* Set or clear a per-directory sticky tag or date.  */
73 extern void server_set_sticky PROTO((char *update_dir, char *repository,
74 				     char *tag, char *date, int nonbranch));
75 /* Send Template response.  */
76 extern void server_template PROTO ((char *, char *));
77 
78 extern void server_update_entries
79     PROTO((char *file, char *update_dir, char *repository,
80 	   enum server_updated_arg4 updated));
81 
82 /* Pointer to a malloc'd string which is the directory which
83    the server should prepend to the pathnames which it sends
84    to the client.  */
85 extern char *server_dir;
86 
87 enum progs {PROG_CHECKIN, PROG_UPDATE};
88 extern void server_prog PROTO((char *, char *, enum progs));
89 extern void server_cleanup PROTO((int sig));
90 
91 #ifdef SERVER_FLOWCONTROL
92 /* Pause if it's convenient to avoid memory blowout */
93 extern void server_pause_check PROTO((void));
94 #endif /* SERVER_FLOWCONTROL */
95 
96 #endif /* SERVER_SUPPORT */
97 
98 /* Stuff shared with the client.  */
99 struct request
100 {
101   /* Name of the request.  */
102   char *name;
103 
104 #ifdef SERVER_SUPPORT
105   /*
106    * Function to carry out the request.  ARGS is the text of the command
107    * after name and, if present, a single space, have been stripped off.
108    */
109   void (*func) PROTO((char *args));
110 #endif
111 
112   /* Stuff for use by the client.  */
113   enum {
114       /*
115        * Failure to implement this request can imply a fatal
116        * error.  This should be set only for commands which were in the
117        * original version of the protocol; it should not be set for new
118        * commands.
119        */
120       rq_essential,
121 
122       /* Some servers might lack this request.  */
123       rq_optional,
124 
125       /*
126        * Set by the client to one of the following based on what this
127        * server actually supports.
128        */
129       rq_supported,
130       rq_not_supported,
131 
132       /*
133        * If the server supports this request, and we do too, tell the
134        * server by making the request.
135        */
136       rq_enableme
137       } status;
138 };
139 
140 /* Table of requests ending with an entry with a NULL name.  */
141 extern struct request requests[];
142