]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/cvs/src/client.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / cvs / src / client.h
1 /*
2  * Copyright (C) 1994-2008 The Free Software Foundation, Inc.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2, or (at your option)
7  * any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  */
14
15 /* Interface between the client and the rest of CVS.  */
16
17 /* Stuff shared with the server.  */
18 extern char *mode_to_string PROTO((mode_t));
19 extern int change_mode PROTO((char *, char *, int));
20
21 extern int gzip_level;
22 extern int file_gzip_level;
23
24 #if defined (CLIENT_SUPPORT) || defined (SERVER_SUPPORT)
25
26 /* Whether the connection should be encrypted.  */
27 extern int cvsencrypt;
28
29 /* Whether the connection should use per-packet authentication.  */
30 extern int cvsauthenticate;
31
32 #ifdef __STDC__
33 struct buffer;
34 #endif
35
36 # ifdef ENCRYPTION
37
38 #   ifdef HAVE_KERBEROS
39
40 /* We can't declare the arguments without including krb.h, and I don't
41    want to do that in every file.  */
42 extern struct buffer *krb_encrypt_buffer_initialize ();
43
44 #   endif /* HAVE_KERBEROS */
45
46 #   ifdef HAVE_GSSAPI
47
48 /* Set this to turn on GSSAPI encryption.  */
49 extern int cvs_gssapi_encrypt;
50
51 #   endif /* HAVE_GSSAPI */
52
53 # endif /* ENCRYPTION */
54
55 # ifdef HAVE_GSSAPI
56
57 /* We can't declare the arguments without including gssapi.h, and I
58    don't want to do that in every file.  */
59 extern struct buffer *cvs_gssapi_wrap_buffer_initialize ();
60
61 # endif /* HAVE_GSSAPI */
62
63 #endif /* defined (CLIENT_SUPPORT) || defined (SERVER_SUPPORT) */
64
65 #ifdef CLIENT_SUPPORT
66 /*
67  * Flag variable for seeing whether the server has been started yet.
68  * As of this writing, only edit.c:cvs_notify_check() uses it.
69  */
70 extern int server_started;
71
72 /* Is the -P option to checkout or update specified?  */
73 extern int client_prune_dirs;
74
75 # ifdef AUTH_CLIENT_SUPPORT
76 extern int use_authenticating_server;
77 # endif /* AUTH_CLIENT_SUPPORT */
78 # if defined (AUTH_CLIENT_SUPPORT) || defined (HAVE_GSSAPI)
79 void connect_to_pserver PROTO ((cvsroot_t *,
80                                 struct buffer **,
81                                 struct buffer **,
82                                 int, int ));
83 #   ifndef CVS_AUTH_PORT
84 #     define CVS_AUTH_PORT 2401
85 #   endif /* CVS_AUTH_PORT */
86 # endif /* (AUTH_CLIENT_SUPPORT) || defined (HAVE_GSSAPI) */
87
88 # if HAVE_KERBEROS
89 #   ifndef CVS_PORT
90 #     define CVS_PORT 1999
91 #   endif
92 # endif /* HAVE_KERBEROS */
93
94 /* Talking to the server. */
95 void send_to_server PROTO((const char *str, size_t len));
96 void read_from_server PROTO((char *buf, size_t len));
97
98 /* Internal functions that handle client communication to server, etc.  */
99 int supported_request PROTO ((char *));
100 void option_with_arg PROTO((char *option, char *arg));
101
102 /* Get the responses and then close the connection.  */
103 extern int get_responses_and_close PROTO((void));
104
105 extern int get_server_responses PROTO((void));
106
107 /* Start up the connection to the server on the other end.  */
108 void
109 start_server PROTO((void));
110
111 /* Send the names of all the argument files to the server.  */
112 void
113 send_file_names PROTO((int argc, char **argv, unsigned int flags));
114
115 /* Flags for send_file_names.  */
116 /* Expand wild cards?  */
117 # define SEND_EXPAND_WILD 1
118
119 /*
120  * Send Repository, Modified and Entry.  argc and argv contain only
121  * the files to operate on (or empty for everything), not options.
122  * local is nonzero if we should not recurse (-l option).
123  */
124 void
125 send_files PROTO((int argc, char **argv, int local, int aflag,
126                   unsigned int flags));
127
128 /* Flags for send_files.  */
129 # define SEND_BUILD_DIRS 1
130 # define SEND_FORCE 2
131 # define SEND_NO_CONTENTS 4
132 # define BACKUP_MODIFIED_FILES 8
133
134 /* Send an argument to the remote server.  */
135 void
136 send_arg PROTO((const char *string));
137
138 /* Send a string of single-char options to the remote server, one by one.  */
139 void send_options PROTO ((int argc, char * const *argv));
140
141 extern void send_a_repository PROTO ((const char *, const char *,
142                                       const char *));
143
144 #endif /* CLIENT_SUPPORT */
145 \f
146 /*
147  * This structure is used to catalog the responses the client is
148  * prepared to see from the server.
149  */
150
151 struct response
152 {
153     /* Name of the response.  */
154     char *name;
155
156 #ifdef CLIENT_SUPPORT
157     /*
158      * Function to carry out the response.  ARGS is the text of the
159      * command after name and, if present, a single space, have been
160      * stripped off.  The function can scribble into ARGS if it wants.
161      * Note that although LEN is given, ARGS is also guaranteed to be
162      * '\0' terminated.
163      */
164     void (*func) PROTO((char *args, int len));
165
166     /*
167      * ok and error are special; they indicate we are at the end of the
168      * responses, and error indicates we should exit with nonzero
169      * exitstatus.
170      */
171     enum {response_type_normal, response_type_ok, response_type_error} type;
172 #endif
173
174     /* Used by the server to indicate whether response is supported by
175        the client, as set by the Valid-responses request.  */
176     enum {
177       /*
178        * Failure to implement this response can imply a fatal
179        * error.  This should be set only for responses which were in the
180        * original version of the protocol; it should not be set for new
181        * responses.
182        */
183       rs_essential,
184
185       /* Some clients might not understand this response.  */
186       rs_optional,
187
188       /*
189        * Set by the server to one of the following based on what this
190        * client actually supports.
191        */
192       rs_supported,
193       rs_not_supported
194       } status;
195 };
196
197 /* Table of responses ending in an entry with a NULL name.  */
198
199 extern struct response responses[];
200
201 #ifdef CLIENT_SUPPORT
202
203 extern void client_senddate PROTO((const char *date));
204 extern void client_expand_modules PROTO((int argc, char **argv, int local));
205 extern void client_send_expansions PROTO((int local, char *where,
206                                           int build_dirs));
207 extern void client_nonexpanded_setup PROTO((void));
208
209 extern void send_init_command PROTO ((void));
210 \f
211 extern char **failed_patches;
212 extern int failed_patches_count;
213 extern char *toplevel_wd;
214 extern void client_import_setup PROTO((char *repository));
215 extern int client_process_import_file
216     PROTO((char *message, char *vfile, char *vtag,
217            int targc, char *targv[], char *repository, int all_files_binary,
218            int modtime));
219 extern void client_import_done PROTO((void));
220 extern void client_notify PROTO((const char *, const char *, const char *, int,
221                                  const char *));
222 #endif /* CLIENT_SUPPORT */