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