code: protected GuacamoleClientInformation getClientInformation(TunnelRequest request)
          throws GuacamoleException {
  
          // Get client information
          GuacamoleClientInformation info = new GuacamoleClientInformation();
  
          // Set width if provided
          Integer width = request.getWidth();
          if (width != null)
              info.setOptimalScreenWidth(width);
  
          // Set height if provided
          Integer height = request.getHeight();
          if (height != null)
              info.setOptimalScreenHeight(height);
  
          // Set resolution if provided
          Integer dpi = request.getDPI();
          if (dpi != null)
              info.setOptimalResolution(dpi);
  
          // Add audio mimetypes
          List<String> audioMimetypes = request.getAudioMimetypes();
          if (audioMimetypes != null)
              info.getAudioMimetypes().addAll(audioMimetypes);
  
          // Add video mimetypes
          List<String> videoMimetypes = request.getVideoMimetypes();
          if (videoMimetypes != null)
              info.getVideoMimetypes().addAll(videoMimetypes);
  
          // Add image mimetypes
          List<String> imageMimetypes = request.getImageMimetypes();
          if (imageMimetypes != null)
              info.getImageMimetypes().addAll(imageMimetypes);
  
          return info;
      }
docs: Reads and returns the client information provided within the given
  request.
  
  @param request
  The request describing tunnel to create.
  
  @return GuacamoleClientInformation
  An object containing information about the client sending the tunnel
  request.
  
  @throws GuacamoleException
  If the parameters of the tunnel request are invalid.