00001 // $Id: HTTP_Status.cpp 90737 2010-06-21 09:46:14Z mcorino $ 00002 00003 #include "ace/INet/HTTP_Status.h" 00004 #include "ace/INet/HeaderBase.h" 00005 #include "ace/OS_NS_stdlib.h" 00006 00007 #if !defined (__ACE_INLINE__) 00008 #include "ace/INet/HTTP_Status.inl" 00009 #endif 00010 00011 ACE_RCSID(NET_CLIENT,ACE_HTTP_Status,"$Id: HTTP_Status.cpp 90737 2010-06-21 09:46:14Z mcorino $") 00012 00013 ACE_BEGIN_VERSIONED_NAMESPACE_DECL 00014 00015 namespace ACE 00016 { 00017 namespace HTTP 00018 { 00019 00020 const ACE_CString Status::HTTP_REASON_CONTINUE = "Continue"; 00021 const ACE_CString Status::HTTP_REASON_SWITCHING_PROTOCOLS = "Switching Protocols"; 00022 const ACE_CString Status::HTTP_REASON_OK = "OK"; 00023 const ACE_CString Status::HTTP_REASON_CREATED = "Created"; 00024 const ACE_CString Status::HTTP_REASON_ACCEPTED = "Accepted"; 00025 const ACE_CString Status::HTTP_REASON_NONAUTHORITATIVE = "Non-Authoritative Information"; 00026 const ACE_CString Status::HTTP_REASON_NO_CONTENT = "No Content"; 00027 const ACE_CString Status::HTTP_REASON_RESET_CONTENT = "Reset Content"; 00028 const ACE_CString Status::HTTP_REASON_PARTIAL_CONTENT = "Partial Content"; 00029 const ACE_CString Status::HTTP_REASON_MULTIPLE_CHOICES = "Multiple Choices"; 00030 const ACE_CString Status::HTTP_REASON_MOVED_PERMANENTLY = "Moved Permanently"; 00031 const ACE_CString Status::HTTP_REASON_FOUND = "Found"; 00032 const ACE_CString Status::HTTP_REASON_SEE_OTHER = "See Other"; 00033 const ACE_CString Status::HTTP_REASON_NOT_MODIFIED = "Not Modified"; 00034 const ACE_CString Status::HTTP_REASON_USEPROXY = "Use Proxy"; 00035 const ACE_CString Status::HTTP_REASON_TEMPORARY_REDIRECT = "Temporary Redirect"; 00036 const ACE_CString Status::HTTP_REASON_BAD_REQUEST = "Bad Request"; 00037 const ACE_CString Status::HTTP_REASON_UNAUTHORIZED = "Unauthorized"; 00038 const ACE_CString Status::HTTP_REASON_PAYMENT_REQUIRED = "Payment Required"; 00039 const ACE_CString Status::HTTP_REASON_FORBIDDEN = "Forbidden"; 00040 const ACE_CString Status::HTTP_REASON_NOT_FOUND = "Not Found"; 00041 const ACE_CString Status::HTTP_REASON_METHOD_NOT_ALLOWED = "Method Not Allowed"; 00042 const ACE_CString Status::HTTP_REASON_NOT_ACCEPTABLE = "Not Acceptable"; 00043 const ACE_CString Status::HTTP_REASON_PROXY_AUTHENTICATION_REQUIRED = "Proxy Authentication Required"; 00044 const ACE_CString Status::HTTP_REASON_REQUEST_TIMEOUT = "Request Time-out"; 00045 const ACE_CString Status::HTTP_REASON_CONFLICT = "Conflict"; 00046 const ACE_CString Status::HTTP_REASON_GONE = "Gone"; 00047 const ACE_CString Status::HTTP_REASON_LENGTH_REQUIRED = "Length Required"; 00048 const ACE_CString Status::HTTP_REASON_PRECONDITION_FAILED = "Precondition Failed"; 00049 const ACE_CString Status::HTTP_REASON_REQUESTENTITYTOOLARGE = "Request Entity Too Large"; 00050 const ACE_CString Status::HTTP_REASON_REQUESTURITOOLONG = "Request-URI Too Large"; 00051 const ACE_CString Status::HTTP_REASON_UNSUPPORTEDMEDIATYPE = "Unsupported Media Type"; 00052 const ACE_CString Status::HTTP_REASON_REQUESTED_RANGE_NOT_SATISFIABLE = "Requested Range Not Satisfiable"; 00053 const ACE_CString Status::HTTP_REASON_EXPECTATION_FAILED = "Expectation Failed"; 00054 const ACE_CString Status::HTTP_REASON_INTERNAL_SERVER_ERROR = "Internal Server Error"; 00055 const ACE_CString Status::HTTP_REASON_NOT_IMPLEMENTED = "Not Implemented"; 00056 const ACE_CString Status::HTTP_REASON_BAD_GATEWAY = "Bad Gateway"; 00057 const ACE_CString Status::HTTP_REASON_SERVICE_UNAVAILABLE = "Service Unavailable"; 00058 const ACE_CString Status::HTTP_REASON_GATEWAY_TIMEOUT = "Gateway Time-out"; 00059 const ACE_CString Status::HTTP_REASON_VERSION_NOT_SUPPORTED = "HTTP Version not supported"; 00060 const ACE_CString Status::HTTP_REASON_UNKNOWN = "???"; 00061 00062 Status::Status() 00063 : code_ (HTTP_NONE) 00064 { 00065 } 00066 00067 Status::Status(Code status) 00068 : code_ (status) 00069 { 00070 reason_ = get_reason(this->code_); 00071 } 00072 00073 Status::Status(Code status, const ACE_CString& reason) 00074 : code_ (status), reason_ (reason) 00075 { 00076 } 00077 00078 Status::Status(const Status& status) 00079 { 00080 *this = status; 00081 } 00082 00083 Status& Status::operator =(const Status& status) 00084 { 00085 this->code_ = status.get_status (); 00086 this->reason_ = status.get_reason (); 00087 return *this; 00088 } 00089 00090 void Status::set_status(const ACE_CString& status) 00091 { 00092 Code istat = (Code)ACE_OS::atoi (status.c_str ()); 00093 if (istat == HTTP_NONE || get_reason (istat) == HTTP_REASON_UNKNOWN) 00094 { 00095 this->code_ = INVALID; 00096 } 00097 else 00098 { 00099 this->code_ = istat; 00100 } 00101 } 00102 00103 const ACE_CString& Status::get_reason(Code status) 00104 { 00105 switch (status) 00106 { 00107 case HTTP_NONE: 00108 return ACE::INet::HeaderBase::EMPTY; 00109 case HTTP_CONTINUE: 00110 return HTTP_REASON_CONTINUE; 00111 case HTTP_SWITCHING_PROTOCOLS: 00112 return HTTP_REASON_SWITCHING_PROTOCOLS; 00113 case HTTP_OK: 00114 return HTTP_REASON_OK; 00115 case HTTP_CREATED: 00116 return HTTP_REASON_CREATED; 00117 case HTTP_ACCEPTED: 00118 return HTTP_REASON_ACCEPTED; 00119 case HTTP_NONAUTHORITATIVE: 00120 return HTTP_REASON_NONAUTHORITATIVE; 00121 case HTTP_NO_CONTENT: 00122 return HTTP_REASON_NO_CONTENT; 00123 case HTTP_RESET_CONTENT: 00124 return HTTP_REASON_RESET_CONTENT; 00125 case HTTP_PARTIAL_CONTENT: 00126 return HTTP_REASON_PARTIAL_CONTENT; 00127 case HTTP_MULTIPLE_CHOICES: 00128 return HTTP_REASON_MULTIPLE_CHOICES; 00129 case HTTP_MOVED_PERMANENTLY: 00130 return HTTP_REASON_MOVED_PERMANENTLY; 00131 case HTTP_FOUND: 00132 return HTTP_REASON_FOUND; 00133 case HTTP_SEE_OTHER: 00134 return HTTP_REASON_SEE_OTHER; 00135 case HTTP_NOT_MODIFIED: 00136 return HTTP_REASON_NOT_MODIFIED; 00137 case HTTP_USEPROXY: 00138 return HTTP_REASON_USEPROXY; 00139 case HTTP_TEMPORARY_REDIRECT: 00140 return HTTP_REASON_TEMPORARY_REDIRECT; 00141 case HTTP_BAD_REQUEST: 00142 return HTTP_REASON_BAD_REQUEST; 00143 case HTTP_UNAUTHORIZED: 00144 return HTTP_REASON_UNAUTHORIZED; 00145 case HTTP_PAYMENT_REQUIRED: 00146 return HTTP_REASON_PAYMENT_REQUIRED; 00147 case HTTP_FORBIDDEN: 00148 return HTTP_REASON_FORBIDDEN; 00149 case HTTP_NOT_FOUND: 00150 return HTTP_REASON_NOT_FOUND; 00151 case HTTP_METHOD_NOT_ALLOWED: 00152 return HTTP_REASON_METHOD_NOT_ALLOWED; 00153 case HTTP_NOT_ACCEPTABLE: 00154 return HTTP_REASON_NOT_ACCEPTABLE; 00155 case HTTP_PROXY_AUTHENTICATION_REQUIRED: 00156 return HTTP_REASON_PROXY_AUTHENTICATION_REQUIRED; 00157 case HTTP_REQUEST_TIMEOUT: 00158 return HTTP_REASON_REQUEST_TIMEOUT; 00159 case HTTP_CONFLICT: 00160 return HTTP_REASON_CONFLICT; 00161 case HTTP_GONE: 00162 return HTTP_REASON_GONE; 00163 case HTTP_LENGTH_REQUIRED: 00164 return HTTP_REASON_LENGTH_REQUIRED; 00165 case HTTP_PRECONDITION_FAILED: 00166 return HTTP_REASON_PRECONDITION_FAILED; 00167 case HTTP_REQUESTENTITYTOOLARGE: 00168 return HTTP_REASON_REQUESTENTITYTOOLARGE; 00169 case HTTP_REQUESTURITOOLONG: 00170 return HTTP_REASON_REQUESTURITOOLONG; 00171 case HTTP_UNSUPPORTEDMEDIATYPE: 00172 return HTTP_REASON_UNSUPPORTEDMEDIATYPE; 00173 case HTTP_REQUESTED_RANGE_NOT_SATISFIABLE: 00174 return HTTP_REASON_REQUESTED_RANGE_NOT_SATISFIABLE; 00175 case HTTP_EXPECTATION_FAILED: 00176 return HTTP_REASON_EXPECTATION_FAILED; 00177 case HTTP_INTERNAL_SERVER_ERROR: 00178 return HTTP_REASON_INTERNAL_SERVER_ERROR; 00179 case HTTP_NOT_IMPLEMENTED: 00180 return HTTP_REASON_NOT_IMPLEMENTED; 00181 case HTTP_BAD_GATEWAY: 00182 return HTTP_REASON_BAD_GATEWAY; 00183 case HTTP_SERVICE_UNAVAILABLE: 00184 return HTTP_REASON_SERVICE_UNAVAILABLE; 00185 case HTTP_GATEWAY_TIMEOUT: 00186 return HTTP_REASON_GATEWAY_TIMEOUT; 00187 case HTTP_VERSION_NOT_SUPPORTED: 00188 return HTTP_REASON_VERSION_NOT_SUPPORTED; 00189 default: 00190 return HTTP_REASON_UNKNOWN; 00191 } 00192 } 00193 00194 } 00195 } 00196 00197 ACE_END_VERSIONED_NAMESPACE_DECL