|  | #ifndef PROTOCOL_H | 
|  | #define PROTOCOL_H | 
|  |  | 
|  | enum protocol_version { | 
|  | protocol_unknown_version = -1, | 
|  | protocol_v0 = 0, | 
|  | protocol_v1 = 1, | 
|  | protocol_v2 = 2, | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * Used by a client to determine which protocol version to request be used when | 
|  | * communicating with a server, reflecting the configured value of the | 
|  | * 'protocol.version' config.  If unconfigured, a value of 'protocol_v0' is | 
|  | * returned. | 
|  | */ | 
|  | enum protocol_version get_protocol_version_config(void); | 
|  |  | 
|  | /* | 
|  | * Used by a server to determine which protocol version should be used based on | 
|  | * a client's request, communicated via the 'GIT_PROTOCOL' environment variable | 
|  | * by setting appropriate values for the key 'version'.  If a client doesn't | 
|  | * request a particular protocol version, a default of 'protocol_v0' will be | 
|  | * used. | 
|  | */ | 
|  | enum protocol_version determine_protocol_version_server(void); | 
|  |  | 
|  | /* | 
|  | * Used by a client to determine which protocol version the server is speaking | 
|  | * based on the server's initial response. | 
|  | */ | 
|  | enum protocol_version determine_protocol_version_client(const char *server_response); | 
|  |  | 
|  | #endif /* PROTOCOL_H */ |