public void gather(BufferedReader bufferedReader) throws IOException, HttpException
	{
		//token map
		HashMap<String, String> headers = new HashMap<String, String>();
		
		//get status line
		String statusLine = bufferedReader.readLine();
		if (statusLine == null)
			throw new HttpException("Missing status line", StatusCode.BAD_REQUEST);
		
		//split status line
		String[] statusLineParts = statusLine.split(" ");
		if (statusLineParts.length < 3)
			throw new HttpException("Invalid status line parameters", StatusCode.BAD_REQUEST);
		
		//get request, path and specification
		this.method = statusLineParts[0];
		this.path = statusLineParts[1];
		this.specification = statusLineParts[2];
		
		//read lines
		String line = null;
		while ((line = bufferedReader.readLine()) != null)
		{
			//skip if empty
			if (line.isEmpty())
				break;
			
			//split
			String[] parts = line.split(": ");
			
			if (parts.length < 2)
				throw new HttpException("Incomplete header parameters", StatusCode.BAD_REQUEST);
			
			//put key and value
			String key = parts[0];
			String value = parts[1];
			headers.put(key, value);
		}
		
		//update
		this.host = headers.getOrDefault("Host", "localhost");
		this.userAgent = headers.getOrDefault("User-Agent", "Unspecified");
		this.authorisation = headers.getOrDefault("Authorization", "None");
	}