/**
  * Construct a new request signer.  Perform the request with the doRequest() method below.
  * 
  * A request can have either one file or a body, not both. 
  * 
  * The files array consists of arrays:
  * - file			the filename/path containing the data for the POST/PUT
  * - data			data for the file, omit when you have a file
  * - mime			content-type of the file
  * - filename		filename for content disposition header
  * 
  * When OAuth (and PHP) can support multipart/form-data then we can handle more than one file.
  * For now max one file, with all the params encoded in the query string.
  * 
  * @param string request
  * @param string method		http method.  GET, PUT, POST etc.
  * @param array params		name=>value array with request parameters
  * @param string body		optional body to send
  * @param array files		optional files to send (max 1 till OAuth support multipart/form-data posts)
  */
 function __construct($request, $method = null, $params = null, $body = null, $files = null)
 {
     parent::__construct($request, $method, $params, $body);
     // When there are files, then we can construct a POST with a single file
     if (!empty($files)) {
         $empty = true;
         foreach ($files as $f) {
             $empty = $empty && empty($f['file']) && !isset($f['data']);
         }
         if (!$empty) {
             if (!is_null($body)) {
                 throw new OAuthException2('When sending files, you can\'t send a body as well.');
             }
             $this->files = $files;
         }
     }
 }