code: func NewClientWithParameters(endpoint *Endpoint, user, password string, params *Parameters) (*Client, error) {
  
  	// alloc a new client
  	client := &Client{
  		Parameters: *params,
  		username:   user,
  		password:   password,
  		url:        endpoint.url(),
  		useHTTPS:   endpoint.HTTPS,
  		// default transport
  		http: &clientRequest{ dial:params.Dial },
  	}
  
  	// switch to other transport if provided
  	if params.TransportDecorator != nil {
  		client.http = params.TransportDecorator()
  	}
  
  	// set the transport to some endpoint configuration
  	if err := client.http.Transport(endpoint); err != nil {
  		return nil, fmt.Errorf("Can't parse this key and certs: %s", err)
  	}
  
  	return client, nil
  }
docs: // NewClientWithParameters will create a new remote client on url, connecting with user and password
  // This function doesn't connect (connection happens only when CreateShell is called)