code: func (fw *JSONRPC) makeRpcRequest(ctx context.Context, action string, info map[string]string, timeout int) error {
  	body, err := fw.getRequestBody(action, info, timeout)
  	if err != nil {
  		log.LoggerWContext(ctx).Error(fmt.Sprintf("Cannot encode JSON-RPC call: %s", err))
  		return err
  	}
  
  	req, err := http.NewRequest("POST", "https://"+fw.PfconfigHashNS+":"+fw.Port, bytes.NewBuffer(body))
  	if err != nil {
  		log.LoggerWContext(ctx).Error(fmt.Sprintf("Cannot create HTTP request for JSON-RPC call: %s", err))
  		return err
  	}
  	req.Header.Set("Content-Type", "application/json")
  	req.SetBasicAuth(fw.Username, fw.Password)
  
  	resp, err := fw.getHttpClient(ctx).Do(req)
  	if err != nil {
  		log.LoggerWContext(ctx).Error(fmt.Sprintf("Cannot make HTTP request for JSON-RPC call: %s", err))
  		return err
  	}
  	defer resp.Body.Close()
  
  	var result [1]string
  	err = json2.DecodeClientResponse(resp.Body, &result)
  	if err != nil {
  		log.LoggerWContext(ctx).Error(fmt.Sprintf("Cannot decode JSON-RPC response: %s", err))
  		return err
  	}
  
  	if result[0] == "OK" {
  		return nil
  	} else {
  		return fmt.Errorf("JSON-RPC call returned an error: %s", result[0])
  	}
  }
docs: // Make a JSON-RPC request
  // Returns an error unless the server acknowledges success