/****************************************************************** * * CyberHTTP for Java * * Copyright (C) Satoshi Konno 2002 * * File: HTTPStatus.java * * Revision; * * 12/17/02 * - first revision. * 09/03/03 * - Added CONTINUE_STATUS. * 10/20/04 * - Brent Hills <bhills@openshores.com> * - Added PARTIAL_CONTENT and INVALID_RANGE; * 10/22/04 * - Added isSuccessful(). * 10/29/04 * - Fixed set() to set the version and the response code when the mothod is null. * - Fixed set() to read multi words of the response sring such as Not Found. * ******************************************************************/ package org.cybergarage.http; import java.util.StringTokenizer; import org.cybergarage.util.Debug; public class HTTPStatus { //////////////////////////////////////////////// // Code //////////////////////////////////////////////// public static final int CONTINUE = 100; public static final int OK = 200; // Thanks for Brent Hills (10/20/04) public static final int PARTIAL_CONTENT = 206; public static final int BAD_REQUEST = 400; public static final int NOT_FOUND = 404; public static final int PRECONDITION_FAILED = 412; // Thanks for Brent Hills (10/20/04) public static final int INVALID_RANGE = 416; public static final int INTERNAL_SERVER_ERROR = 500; public static final String code2String(int code) { switch (code) { case CONTINUE: return "Continue"; case OK: return "OK"; case PARTIAL_CONTENT: return "Partial Content"; case BAD_REQUEST: return "Bad Request"; case NOT_FOUND: return "Not Found"; case PRECONDITION_FAILED: return "Precondition Failed"; case INVALID_RANGE: return "Invalid Range"; case INTERNAL_SERVER_ERROR: return "Internal Server Error"; } return ""; } //////////////////////////////////////////////// // Constructor //////////////////////////////////////////////// public HTTPStatus() { setVersion(""); setStatusCode(0); setReasonPhrase(""); } public HTTPStatus(String ver, int code, String reason) { setVersion(ver); setStatusCode(code); setReasonPhrase(reason); } public HTTPStatus(String lineStr) { set(lineStr); } //////////////////////////////////////////////// // Member //////////////////////////////////////////////// private String version = ""; private int statusCode = 0; private String reasonPhrase = ""; public void setVersion(String value) { version = value; } public void setStatusCode(int value) { statusCode = value; } public void setReasonPhrase(String value) { reasonPhrase = value; } public String getVersion() { return version; } public int getStatusCode() { return statusCode; } public String getReasonPhrase() { return reasonPhrase; } //////////////////////////////////////////////// // Status //////////////////////////////////////////////// final public static boolean isSuccessful(int statCode) { if (200 <= statCode && statCode < 300) return true; return false; } public boolean isSuccessful() { return isSuccessful(getStatusCode()); } //////////////////////////////////////////////// // set //////////////////////////////////////////////// public void set(String lineStr) { if (lineStr == null) { setVersion(HTTP.VERSION); setStatusCode(INTERNAL_SERVER_ERROR); setReasonPhrase(code2String(INTERNAL_SERVER_ERROR)); return; } try { StringTokenizer st = new StringTokenizer(lineStr, HTTP.STATUS_LINE_DELIM); if (st.hasMoreTokens() == false) return; String ver = st.nextToken(); setVersion(ver.trim()); if (st.hasMoreTokens() == false) return; String codeStr = st.nextToken(); int code = 0; try { code = Integer.parseInt(codeStr); } catch (Exception e1) {} setStatusCode(code); String reason = ""; while (st.hasMoreTokens() == true) { if (0 <= reason.length()) reason += " "; reason += st.nextToken(); } setReasonPhrase(reason.trim()); } catch (Exception e) { Debug.warning(e); } } }