|  | @@ -44,6 +44,9 @@ static int64_t round_up_to_three_sig_figs(int64_t x) {
 | 
	
		
			
				|  |  |  /* encode our minimum viable timeout value */
 | 
	
		
			
				|  |  |  static void enc_tiny(char* buffer) { memcpy(buffer, "1n", 3); }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/* encode our maximum timeout value, about 1157 days */
 | 
	
		
			
				|  |  | +static void enc_huge(char* buffer) { memcpy(buffer, "99999999S", 10); }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  static void enc_ext(char* buffer, int64_t value, char ext) {
 | 
	
		
			
				|  |  |    int n = int64_ttoa(value, buffer);
 | 
	
		
			
				|  |  |    buffer[n] = ext;
 | 
	
	
		
			
				|  | @@ -51,6 +54,7 @@ static void enc_ext(char* buffer, int64_t value, char ext) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static void enc_seconds(char* buffer, int64_t sec) {
 | 
	
		
			
				|  |  | +  sec = round_up_to_three_sig_figs(sec);
 | 
	
		
			
				|  |  |    if (sec % 3600 == 0) {
 | 
	
		
			
				|  |  |      enc_ext(buffer, sec / 3600, 'H');
 | 
	
		
			
				|  |  |    } else if (sec % 60 == 0) {
 | 
	
	
		
			
				|  | @@ -74,10 +78,13 @@ static void enc_millis(char* buffer, int64_t x) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void grpc_http2_encode_timeout(grpc_millis timeout, char* buffer) {
 | 
	
		
			
				|  |  | +  const grpc_millis kMaxTimeout = 99999999000;
 | 
	
		
			
				|  |  |    if (timeout <= 0) {
 | 
	
		
			
				|  |  |      enc_tiny(buffer);
 | 
	
		
			
				|  |  |    } else if (timeout < 1000 * GPR_MS_PER_SEC) {
 | 
	
		
			
				|  |  |      enc_millis(buffer, timeout);
 | 
	
		
			
				|  |  | +  } else if (timeout >= kMaxTimeout) {
 | 
	
		
			
				|  |  | +    enc_huge(buffer);
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  |      enc_seconds(buffer,
 | 
	
		
			
				|  |  |                  timeout / GPR_MS_PER_SEC + (timeout % GPR_MS_PER_SEC != 0));
 |