public void parse(RawStreamReader receive) throws IOException {
		String line; int ti0;
		// Loop until response status line is found.
		while (!(line = new String(receive.readLine(), HttpClient.HTTP_HEADER_CHARSET).trim()).matches(HTTP_RESPONSE_STATUS_LINE_REGEX));
		if (debug[0])
			System.out.println(line);
		// Set HTTP version
		this.version = line.substring(line.indexOf("/") + 1, ti0 = line.indexOf(" "));
		// Set status code
		this.statusCode = Integer.parseInt(line.substring(ti0 + 1, ti0 + 4));
		// Set reason
		this.reason = line.substring(ti0 + 5);
		if (debug[1]) {
			System.out.println("Version: " + this.version) ;
			System.out.println("Status code: " + this.statusCode);
			System.out.println("Reason: " + this.reason);
		}
		
		// Clear all entries for new data.
		this.entries.clear();
		
		// Read the rest of the HTTP header and store the attributes.
		while (!(line = new String(receive.readLine(), HttpClient.HTTP_HEADER_CHARSET).trim()).isEmpty()) {
			if (debug[0])
				System.out.println(line);
			// Extract field name
			String field = line.substring(0, ti0 = line.indexOf(":")).trim().toLowerCase();
			// Extract value
			String value = line.substring(ti0 + 1).trim();
			
			if (debug[1])
				System.out.println("|Field: " + field + "|Value: " + value + "|");
			
			// Store the attributes
			List<String> tl0;
			if ((tl0 = this.entries.get(field)) != null) {
				tl0.add(value);
				if (debug[2])
					System.out.println(value + " added to " + field);
			}
			else {
				(tl0 = new LinkedList<String>()).add(value);
				this.entries.put(field, tl0);
				if (debug[2])
					System.out.println(field + " added and associated with " + value);
			}
		}
	}