|  | @@ -83,6 +83,21 @@ class BaseStub {
 | 
	
		
			
				|  |  |      return "https://" . $this->hostname . $service_name;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * extract $timeout from $metadata
 | 
	
		
			
				|  |  | +   * @param $metadata The metadata map
 | 
	
		
			
				|  |  | +   * @return list($metadata_copy, $timeout)
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  private function _extract_timeout_from_metadata($metadata) {
 | 
	
		
			
				|  |  | +    $timeout = false;
 | 
	
		
			
				|  |  | +    $metadata_copy = $metadata;
 | 
	
		
			
				|  |  | +    if (isset($metadata['timeout'])) {
 | 
	
		
			
				|  |  | +      $timeout = $metadata['timeout'];
 | 
	
		
			
				|  |  | +      unset($metadata_copy['timeout']);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return array($metadata_copy, $timeout);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    /* This class is intended to be subclassed by generated code, so all functions
 | 
	
		
			
				|  |  |       begin with "_" to avoid name collisions. */
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -99,8 +114,8 @@ class BaseStub {
 | 
	
		
			
				|  |  |                                   $argument,
 | 
	
		
			
				|  |  |                                   callable $deserialize,
 | 
	
		
			
				|  |  |                                   $metadata = array()) {
 | 
	
		
			
				|  |  | -    $call = new UnaryCall($this->channel, $method, $deserialize);
 | 
	
		
			
				|  |  | -    $actual_metadata = $metadata;
 | 
	
		
			
				|  |  | +    list($actual_metadata, $timeout)  = $this->_extract_timeout_from_metadata($metadata);
 | 
	
		
			
				|  |  | +    $call = new UnaryCall($this->channel, $method, $deserialize, $timeout);
 | 
	
		
			
				|  |  |      $jwt_aud_uri = $this->_get_jwt_aud_uri($method);
 | 
	
		
			
				|  |  |      if (is_callable($this->update_metadata)) {
 | 
	
		
			
				|  |  |        $actual_metadata = call_user_func($this->update_metadata,
 | 
	
	
		
			
				|  | @@ -126,8 +141,8 @@ class BaseStub {
 | 
	
		
			
				|  |  |                                         $arguments,
 | 
	
		
			
				|  |  |                                         callable $deserialize,
 | 
	
		
			
				|  |  |                                         $metadata = array()) {
 | 
	
		
			
				|  |  | -    $call = new ClientStreamingCall($this->channel, $method, $deserialize);
 | 
	
		
			
				|  |  | -    $actual_metadata = $metadata;
 | 
	
		
			
				|  |  | +    list($actual_metadata, $timeout)  = $this->_extract_timeout_from_metadata($metadata);
 | 
	
		
			
				|  |  | +    $call = new ClientStreamingCall($this->channel, $method, $deserialize, $timeout);
 | 
	
		
			
				|  |  |      $jwt_aud_uri = $this->_get_jwt_aud_uri($method);
 | 
	
		
			
				|  |  |      if (is_callable($this->update_metadata)) {
 | 
	
		
			
				|  |  |        $actual_metadata = call_user_func($this->update_metadata,
 | 
	
	
		
			
				|  | @@ -152,8 +167,8 @@ class BaseStub {
 | 
	
		
			
				|  |  |                                         $argument,
 | 
	
		
			
				|  |  |                                         callable $deserialize,
 | 
	
		
			
				|  |  |                                         $metadata = array()) {
 | 
	
		
			
				|  |  | -    $call = new ServerStreamingCall($this->channel, $method, $deserialize);
 | 
	
		
			
				|  |  | -    $actual_metadata = $metadata;
 | 
	
		
			
				|  |  | +    list($actual_metadata, $timeout)  = $this->_extract_timeout_from_metadata($metadata);
 | 
	
		
			
				|  |  | +    $call = new ServerStreamingCall($this->channel, $method, $deserialize, $timeout);
 | 
	
		
			
				|  |  |      $jwt_aud_uri = $this->_get_jwt_aud_uri($method);
 | 
	
		
			
				|  |  |      if (is_callable($this->update_metadata)) {
 | 
	
		
			
				|  |  |        $actual_metadata = call_user_func($this->update_metadata,
 | 
	
	
		
			
				|  | @@ -175,8 +190,8 @@ class BaseStub {
 | 
	
		
			
				|  |  |    public function _bidiRequest($method,
 | 
	
		
			
				|  |  |                                 callable $deserialize,
 | 
	
		
			
				|  |  |                                 $metadata = array()) {
 | 
	
		
			
				|  |  | -    $call = new BidiStreamingCall($this->channel, $method, $deserialize);
 | 
	
		
			
				|  |  | -    $actual_metadata = $metadata;
 | 
	
		
			
				|  |  | +    list($actual_metadata, $timeout)  = $this->_extract_timeout_from_metadata($metadata);
 | 
	
		
			
				|  |  | +    $call = new BidiStreamingCall($this->channel, $method, $deserialize, $timeout);
 | 
	
		
			
				|  |  |      $jwt_aud_uri = $this->_get_jwt_aud_uri($method);
 | 
	
		
			
				|  |  |      if (is_callable($this->update_metadata)) {
 | 
	
		
			
				|  |  |        $actual_metadata = call_user_func($this->update_metadata,
 |