337 lines
27 KiB
MQL5
337 lines
27 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
enum ENUM_HTTP_STATUS
|
|
{
|
|
//--- Mql error
|
|
HTTP_STATUS_URL_NOT_ALLOWED = -1,
|
|
|
|
//--- Informational
|
|
HTTP_STATUS_CONTINUE = 100,
|
|
HTTP_STATUS_SWITCHING_PROTOCOLS = 101,
|
|
HTTP_STATUS_PROCESSING = 102,
|
|
HTTP_STATUS_EARLY_HINTS = 103,
|
|
|
|
//--- Successul
|
|
HTTP_STATUS_OK = 200,
|
|
HTTP_STATUS_CREATED = 201,
|
|
HTTP_STATUS_ACCEPTED = 202,
|
|
HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION = 203,
|
|
HTTP_STATUS_NO_CONTENT = 204,
|
|
HTTP_STATUS_RESET_CONTENT = 205,
|
|
HTTP_STATUS_PARTIAL_CONTENT = 206,
|
|
HTTP_STATUS_MULTI_STATUS = 207,
|
|
HTTP_STATUS_ALREADY_REPORTED = 208,
|
|
|
|
//--- Redirection messages
|
|
HTTP_STATUS_MULTIPLE_CHOICES = 300,
|
|
HTTP_STATUS_MOVED_PERMANENTLY = 301,
|
|
HTTP_STATUS_FOUND = 302,
|
|
HTTP_STATUS_SEE_OTHER = 303,
|
|
HTTP_STATUS_NOT_MODIFIED = 304,
|
|
HTTP_STATUS_USE_PROXY = 305,
|
|
HTTP_STATUS_SWITCH_PROXY = 306,
|
|
HTTP_STATUS_TEMPORARY_REDIRECT = 307,
|
|
HTTP_STATUS_PERMANENT_REDIRECT = 308,
|
|
|
|
//--- Client error
|
|
HTTP_STATUS_BAD_REQUEST = 400,
|
|
HTTP_STATUS_UNAUTHORIZED = 401,
|
|
HTTP_STATUS_PAYMENT_REQUIRED = 402,
|
|
HTTP_STATUS_FORBIDDEN = 403,
|
|
HTTP_STATUS_NOT_FOUND = 404,
|
|
HTTP_STATUS_METHOD_NOT_ALLOWED = 405,
|
|
HTTP_STATUS_NOT_ACCEPTABLE = 406,
|
|
HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED = 407,
|
|
HTTP_STATUS_REQUEST_TIMEOUT = 408,
|
|
HTTP_STATUS_CONFLICT = 409,
|
|
HTTP_STATUS_GONE = 410,
|
|
HTTP_STATUS_LENGTH_REQUIRED = 411,
|
|
HTTP_STATUS_PRECONDITION_FAILED = 412,
|
|
HTTP_STATUS_PAYLOAD_TOO_LARGE = 413,
|
|
HTTP_STATUS_URI_TOO_LONG = 414,
|
|
HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE = 415,
|
|
HTTP_STATUS_RANGE_NOT_SATISFIABLE = 416,
|
|
HTTP_STATUS_EXPECTATION_FAILED = 417,
|
|
HTTP_STATUS_MISDIRECTED_REQUEST = 421,
|
|
HTTP_STATUS_UNPROCESSABLE_ENTITY = 422,
|
|
HTTP_STATUS_LOCKED = 423,
|
|
HTTP_STATUS_FAILED_DEPENDENCY = 424,
|
|
HTTP_STATUS_TOO_EARLY = 425,
|
|
HTTP_STATUS_UPGRADE_REQUIRED = 426,
|
|
HTTP_STATUS_PRECONDITION_REQUIRED = 428,
|
|
HTTP_STATUS_TOO_MANY_REQUESTS = 429,
|
|
HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
|
|
HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS = 451,
|
|
|
|
//--- Server error
|
|
HTTP_STATUS_INTERNAL_SERVER_ERROR = 500,
|
|
HTTP_STATUS_NOT_IMPLEMENTED = 501,
|
|
HTTP_STATUS_BAD_GATEWAY = 502,
|
|
HTTP_STATUS_SERVICE_UNAVAILABLE = 503,
|
|
HTTP_STATUS_GATEWAY_TIMEOUT = 504,
|
|
HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED = 505,
|
|
HTTP_STATUS_VARIANT_ALSO_NEGOTIATES = 506,
|
|
HTTP_STATUS_INSUFFICIENT_STORAGE = 507,
|
|
HTTP_STATUS_LOOP_DETECTED = 508,
|
|
HTTP_STATUS_NOT_EXTENDED = 510,
|
|
HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| class : CHttpStatusCodes |
|
|
//| |
|
|
//| [PROPERTY] |
|
|
//| Name : CHttpStatusCodes |
|
|
//| Heritage : No heritage |
|
|
//| Description : Saved http status code. |
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
class CHttpStatusCodes
|
|
{
|
|
private:
|
|
|
|
ENUM_HTTP_STATUS m_status; // Stores the status used
|
|
|
|
public:
|
|
CHttpStatusCodes(void);
|
|
~CHttpStatusCodes(void);
|
|
|
|
//--- Set
|
|
void operator=(int status);
|
|
void operator=(ENUM_HTTP_STATUS status);
|
|
void SetStatusCode(ENUM_HTTP_STATUS status);
|
|
|
|
//--- Get
|
|
ENUM_HTTP_STATUS GetStatusCode(void);
|
|
string GetStatusCodeMessage(void);
|
|
string FormatStatusCode(void);
|
|
|
|
//--- Check which group the code is in
|
|
bool IsInformational(void); // Checks if the status code is in the informational response range (100 - 199)
|
|
bool IsSuccess(void); // Check if the status code is in the success range (200 - 299)
|
|
bool IsRedirection(void); // Check if the status code is in the redirect range (300 - 399)
|
|
bool IsClientError(void); // Checks if the status code is in the client error range (400 - 499)
|
|
bool IsServerError(void); // Check if the status code is in the server error range (500 - 599)
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| Constructor |
|
|
//+------------------------------------------------------------------+
|
|
CHttpStatusCodes::CHttpStatusCodes(void)
|
|
{
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Destructor |
|
|
//+------------------------------------------------------------------+
|
|
CHttpStatusCodes::~CHttpStatusCodes(void)
|
|
{
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CHttpStatusCodes::operator=(int status)
|
|
{
|
|
m_status = (ENUM_HTTP_STATUS)status;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CHttpStatusCodes::operator=(ENUM_HTTP_STATUS status)
|
|
{
|
|
m_status = status;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CHttpStatusCodes::SetStatusCode(ENUM_HTTP_STATUS status)
|
|
{
|
|
m_status = status;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
ENUM_HTTP_STATUS CHttpStatusCodes::GetStatusCode(void)
|
|
{
|
|
return(m_status);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
string CHttpStatusCodes::GetStatusCodeMessage(void)
|
|
{
|
|
switch(m_status)
|
|
{
|
|
case HTTP_STATUS_CONTINUE:
|
|
return "Continue";
|
|
case HTTP_STATUS_SWITCHING_PROTOCOLS:
|
|
return "Switching Protocols";
|
|
case HTTP_STATUS_PROCESSING:
|
|
return "Processing";
|
|
case HTTP_STATUS_EARLY_HINTS:
|
|
return "Early Hints";
|
|
|
|
case HTTP_STATUS_OK:
|
|
return "OK";
|
|
case HTTP_STATUS_CREATED:
|
|
return "Created";
|
|
case HTTP_STATUS_ACCEPTED:
|
|
return "Accepted";
|
|
case HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION:
|
|
return "Non-Authoritative Information";
|
|
case HTTP_STATUS_NO_CONTENT:
|
|
return "No Content";
|
|
case HTTP_STATUS_RESET_CONTENT:
|
|
return "Reset Content";
|
|
case HTTP_STATUS_PARTIAL_CONTENT:
|
|
return "Partial Content";
|
|
case HTTP_STATUS_MULTI_STATUS:
|
|
return "Multi-Status";
|
|
case HTTP_STATUS_ALREADY_REPORTED:
|
|
return "Already Reported";
|
|
|
|
case HTTP_STATUS_MULTIPLE_CHOICES:
|
|
return "Multiple Choices";
|
|
case HTTP_STATUS_MOVED_PERMANENTLY:
|
|
return "Moved Permanently";
|
|
case HTTP_STATUS_FOUND:
|
|
return "Found";
|
|
case HTTP_STATUS_SEE_OTHER:
|
|
return "See Other";
|
|
case HTTP_STATUS_NOT_MODIFIED:
|
|
return "Not Modified";
|
|
case HTTP_STATUS_USE_PROXY:
|
|
return "Use Proxy";
|
|
case HTTP_STATUS_SWITCH_PROXY:
|
|
return "Switch Proxy";
|
|
case HTTP_STATUS_TEMPORARY_REDIRECT:
|
|
return "Temporary Redirect";
|
|
case HTTP_STATUS_PERMANENT_REDIRECT:
|
|
return "Permanent Redirect";
|
|
|
|
case HTTP_STATUS_BAD_REQUEST:
|
|
return "Bad Request";
|
|
case HTTP_STATUS_UNAUTHORIZED:
|
|
return "Unauthorized";
|
|
case HTTP_STATUS_PAYMENT_REQUIRED:
|
|
return "Payment Required";
|
|
case HTTP_STATUS_FORBIDDEN:
|
|
return "Forbidden";
|
|
case HTTP_STATUS_NOT_FOUND:
|
|
return "Not Found";
|
|
case HTTP_STATUS_METHOD_NOT_ALLOWED:
|
|
return "Method Not Allowed";
|
|
case HTTP_STATUS_NOT_ACCEPTABLE:
|
|
return "Not Acceptable";
|
|
case HTTP_STATUS_PROXY_AUTHENTICATION_REQUIRED:
|
|
return "Proxy Authentication Required";
|
|
case HTTP_STATUS_REQUEST_TIMEOUT:
|
|
return "Request Timeout";
|
|
case HTTP_STATUS_CONFLICT:
|
|
return "Conflict";
|
|
case HTTP_STATUS_GONE:
|
|
return "Gone";
|
|
case HTTP_STATUS_LENGTH_REQUIRED:
|
|
return "Length Required";
|
|
case HTTP_STATUS_PRECONDITION_FAILED:
|
|
return "Precondition Failed";
|
|
case HTTP_STATUS_PAYLOAD_TOO_LARGE:
|
|
return "Payload Too Large";
|
|
case HTTP_STATUS_URI_TOO_LONG:
|
|
return "URI Too Long";
|
|
case HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE:
|
|
return "Unsupported Media Type";
|
|
case HTTP_STATUS_RANGE_NOT_SATISFIABLE:
|
|
return "Range Not Satisfiable";
|
|
case HTTP_STATUS_EXPECTATION_FAILED:
|
|
return "Expectation Failed";
|
|
case HTTP_STATUS_MISDIRECTED_REQUEST:
|
|
return "Misdirected Request";
|
|
case HTTP_STATUS_UNPROCESSABLE_ENTITY:
|
|
return "Unprocessable Entity";
|
|
case HTTP_STATUS_LOCKED:
|
|
return "Locked";
|
|
case HTTP_STATUS_FAILED_DEPENDENCY:
|
|
return "Failed Dependency";
|
|
case HTTP_STATUS_TOO_EARLY:
|
|
return "Too Early";
|
|
case HTTP_STATUS_UPGRADE_REQUIRED:
|
|
return "Upgrade Required";
|
|
case HTTP_STATUS_PRECONDITION_REQUIRED:
|
|
return "Precondition Required";
|
|
case HTTP_STATUS_TOO_MANY_REQUESTS:
|
|
return "Too Many Requests";
|
|
case HTTP_STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE:
|
|
return "Request Header Fields Too Large";
|
|
case HTTP_STATUS_UNAVAILABLE_FOR_LEGAL_REASONS:
|
|
return "Unavailable For Legal Reasons";
|
|
|
|
case HTTP_STATUS_INTERNAL_SERVER_ERROR:
|
|
return "Internal Server Error";
|
|
case HTTP_STATUS_NOT_IMPLEMENTED:
|
|
return "Not Implemented";
|
|
case HTTP_STATUS_BAD_GATEWAY:
|
|
return "Bad Gateway";
|
|
case HTTP_STATUS_SERVICE_UNAVAILABLE:
|
|
return "Service Unavailable";
|
|
case HTTP_STATUS_GATEWAY_TIMEOUT:
|
|
return "Gateway Timeout";
|
|
case HTTP_STATUS_HTTP_VERSION_NOT_SUPPORTED:
|
|
return "HTTP Version Not Supported";
|
|
case HTTP_STATUS_VARIANT_ALSO_NEGOTIATES:
|
|
return "Variant Also Negotiates";
|
|
case HTTP_STATUS_INSUFFICIENT_STORAGE:
|
|
return "Insufficient Storage";
|
|
case HTTP_STATUS_LOOP_DETECTED:
|
|
return "Loop Detected";
|
|
case HTTP_STATUS_NOT_EXTENDED:
|
|
return "Not Extended";
|
|
case HTTP_STATUS_NETWORK_AUTHENTICATION_REQUIRED:
|
|
return "Network Authentication Required";
|
|
default:
|
|
return "Unknown HTTP Status";
|
|
}
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
string CHttpStatusCodes::FormatStatusCode(void)
|
|
{
|
|
return(EnumToString(m_status)+" ["+IntegerToString((int)m_status)+"] - "+this.GetStatusCodeMessage());
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Checks if the status code is in the informational response |
|
|
//| range (100 - 199) |
|
|
//+------------------------------------------------------------------+
|
|
bool CHttpStatusCodes::IsInformational(void)
|
|
{
|
|
return(m_status >= 100 && m_status <= 199);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Check if the status code is in the success range (200 - 299) |
|
|
//+------------------------------------------------------------------+
|
|
bool CHttpStatusCodes::IsSuccess(void)
|
|
{
|
|
return(m_status >= 200 && m_status <= 299);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Check if the status code is in the redirect range (300 - 399) |
|
|
//+------------------------------------------------------------------+
|
|
bool CHttpStatusCodes::IsRedirection(void)
|
|
{
|
|
return(m_status >= 300 && m_status <= 399);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Checks if the status code is in the client error range |
|
|
//| (400 - 499) |
|
|
//+------------------------------------------------------------------+
|
|
bool CHttpStatusCodes::IsClientError(void)
|
|
{
|
|
return(m_status >= 400 && m_status <= 499);
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Check if the status code is in the server error range (500 - 599)|
|
|
//+------------------------------------------------------------------+
|
|
bool CHttpStatusCodes::IsServerError(void)
|
|
{
|
|
return(m_status >= 500 && m_status <= 599);
|
|
}
|
|
//+------------------------------------------------------------------+
|