diff options
Diffstat (limited to 'src/client.h')
-rw-r--r-- | src/client.h | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/src/client.h b/src/client.h new file mode 100644 index 0000000..add35c1 --- /dev/null +++ b/src/client.h @@ -0,0 +1,221 @@ +/* + * Copyright (C) 1994-2005 The Free Software Foundation, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/* Interface between the client and the rest of CVS. */ + +/* Stuff shared with the server. */ +char *mode_to_string (mode_t); +int change_mode (const char *, const char *, int); + +extern int gzip_level; +extern int file_gzip_level; + +struct buffer; + +void make_bufs_from_fds (int, int, int, cvsroot_t *, + struct buffer **, struct buffer **, int); + + +#if defined (CLIENT_SUPPORT) || defined (SERVER_SUPPORT) + +/* Whether the connection should be encrypted. */ +extern int cvsencrypt; + +/* Whether the connection should use per-packet authentication. */ +extern int cvsauthenticate; + +# ifdef ENCRYPTION + +# ifdef HAVE_KERBEROS + +/* We can't declare the arguments without including krb.h, and I don't + want to do that in every file. */ +extern struct buffer *krb_encrypt_buffer_initialize (); + +# endif /* HAVE_KERBEROS */ + +# endif /* ENCRYPTION */ + +#endif /* defined (CLIENT_SUPPORT) || defined (SERVER_SUPPORT) */ + +#ifdef CLIENT_SUPPORT +/* + * Flag variable for seeing whether the server has been started yet. + * As of this writing, only edit.c:notify_check() uses it. + */ +extern int server_started; + +/* Is the -P option to checkout or update specified? */ +extern int client_prune_dirs; + +# ifdef AUTH_CLIENT_SUPPORT +extern int use_authenticating_server; +# endif /* AUTH_CLIENT_SUPPORT */ +# if defined (AUTH_CLIENT_SUPPORT) || defined (HAVE_GSSAPI) +void connect_to_pserver (cvsroot_t *, struct buffer **, struct buffer **, + int, int ); +# ifndef CVS_AUTH_PORT +# define CVS_AUTH_PORT 2401 +# endif /* CVS_AUTH_PORT */ +# ifndef CVS_PROXY_PORT +# define CVS_PROXY_PORT 8080 +# endif /* CVS_AUTH_PORT */ +# endif /* (AUTH_CLIENT_SUPPORT) || defined (HAVE_GSSAPI) */ + +# if HAVE_KERBEROS +# ifndef CVS_PORT +# define CVS_PORT 1999 +# endif +# endif /* HAVE_KERBEROS */ + +/* Talking to the server. */ +void send_to_server (const char *str, size_t len); +void read_from_server (char *buf, size_t len); + +/* Internal functions that handle client communication to server, etc. */ +bool supported_request (const char *); +void option_with_arg (const char *option, const char *arg); + +/* Get the responses and then close the connection. */ +int get_responses_and_close (void); + +int get_server_responses (void); + +/* Start up the connection to the server on the other end. */ +void +open_connection_to_server (cvsroot_t *root, struct buffer **to_server_p, + struct buffer **from_server_p); +void +start_server (void); + +/* Send the names of all the argument files to the server. */ +void +send_file_names (int argc, char **argv, unsigned int flags); + +/* Flags for send_file_names. */ +/* Expand wild cards? */ +# define SEND_EXPAND_WILD 1 + +/* + * Send Repository, Modified and Entry. argc and argv contain only + * the files to operate on (or empty for everything), not options. + * local is nonzero if we should not recurse (-l option). + */ +void +send_files (int argc, char **argv, int local, int aflag, + unsigned int flags); + +/* Flags for send_files. */ +# define SEND_BUILD_DIRS 1 +# define SEND_FORCE 2 +# define SEND_NO_CONTENTS 4 +# define BACKUP_MODIFIED_FILES 8 + +/* Send an argument to the remote server. */ +void +send_arg (const char *string); + +/* Send a string of single-char options to the remote server, one by one. */ +void +send_options (int argc, char * const *argv); + +void send_a_repository (const char *, const char *, const char *); + +#endif /* CLIENT_SUPPORT */ + +/* + * This structure is used to catalog the responses the client is + * prepared to see from the server. + */ + +struct response +{ + /* Name of the response. */ + const char *name; + +#ifdef CLIENT_SUPPORT + /* + * Function to carry out the response. ARGS is the text of the + * command after name and, if present, a single space, have been + * stripped off. The function can scribble into ARGS if it wants. + * Note that although LEN is given, ARGS is also guaranteed to be + * '\0' terminated. + */ + void (*func) (char *args, size_t len); + + /* + * ok and error are special; they indicate we are at the end of the + * responses, and error indicates we should exit with nonzero + * exitstatus. + */ + enum {response_type_normal, response_type_ok, response_type_error, + response_type_redirect} type; +#endif + + /* Used by the server to indicate whether response is supported by + the client, as set by the Valid-responses request. */ + enum { + /* + * Failure to implement this response can imply a fatal + * error. This should be set only for responses which were in the + * original version of the protocol; it should not be set for new + * responses. + */ + rs_essential, + + /* Some clients might not understand this response. */ + rs_optional, + + /* + * Set by the server to one of the following based on what this + * client actually supports. + */ + rs_supported, + rs_not_supported + } status; +}; + +/* Table of responses ending in an entry with a NULL name. */ + +extern struct response responses[]; + +#ifdef CLIENT_SUPPORT + +void client_senddate (const char *date); +void client_expand_modules (int argc, char **argv, int local); +void client_send_expansions (int local, char *where, int build_dirs); +void client_nonexpanded_setup (void); + +void send_init_command (void); + +extern char **failed_patches; +extern int failed_patches_count; +extern char *toplevel_wd; +void client_import_setup (char *repository); +int client_process_import_file + (char *message, char *vfile, char *vtag, int targc, char *targv[], + char *repository, int all_files_binary, int modtime); +void client_import_done (void); +void client_notify (const char *, const char *, const char *, int, + const char *); + +#if defined AUTH_CLIENT_SUPPORT || defined HAVE_KERBEROS || defined HAVE_GSSAPI +# include <sys/socket.h> +# include <netinet/in.h> +# include <arpa/inet.h> +# include <netdb.h> +struct hostent *init_sockaddr (struct sockaddr_in *, char *, unsigned int); +#endif + +#endif /* CLIENT_SUPPORT */ |