org.cybergarage.http.HTTPStatus Maven / Gradle / Ivy
/******************************************************************
*
* 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
* - 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);
}
}
}