//
//  File:   hzHttpProto.h
//
//  Legal Notice: This file is part of the HadronZoo C++ Class Library.
//
//  Copyright 2025 HadronZoo Project (http://www.hadronzoo.com)
//
//  The HadronZoo C++ Class Library is free software: You can redistribute it, and/or modify it under the terms of the GNU Lesser General Public License, as published by the Free
//  Software Foundation, either version 3 of the License, or any later version.
//
//  The HadronZoo C++ Class Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
//  A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public License along with the HadronZoo C++ Class Library. If not, see http://www.gnu.org/licenses.
//
//
//  This file serves only to define HTTP methods and return codes
//
#ifndef hzHttpProto_h
#define hzHttpProto_h
/*
**  Definitions
*/
#define HTTP_MAXHDR     4096    //  Header can never be this big!
enum    HttpMethod
{
    //  Category:   Internet
    //
    //  HTTP Request types
    HTTP_INVALID,       //  Invalid HTTP request method
    HTTP_GET,           //  (1.0) Request a page
    HTTP_HEAD,          //  (1.0) Request page header only
    HTTP_POST,          //  (1.0) Post a form submission
    HTTP_OPTIONS,       //  (1.1) Post a form submission
    HTTP_PUT,           //  (1.1) Put or overwrite a URL resource on the server (permissions required)
    HTTP_DELETE,        //  (1.1) Delete a URL resource (permissions required)
    HTTP_TRACE,         //  (1.1) Echos back a request so that a client can see what changes have been made by intermeadiate servers.
    HTTP_CONNECT        //  (1.1) HTTP tunneling
} ;
enum    HttpRC
{
    //  Category:   Internet
    //
    //  HTTP return codes
    HTTPMSG_NULL                    = 0,    //  Initial unset value for variables of this type. Not a valid HTTP response code.
    //  Request is granted
    HTTPMSG_OK                      = 200,  //  OK - No error
    HTTPMSG_NOCONTENT               = 204,  //  OK - No error
    //  Request is OK but no page supplied because ...
    HTTPMSG_REDIRECT_PERM           = 301,  //  Server is redirecting to another page (permanent redirect)
    HTTPMSG_FOUND_GOTO              = 302,  //  Temporary redirect
    HTTPMSG_NOT_MODIFIED            = 304,  //  The requested page has not been mofified, please use cached version.
    HTTPMSG_REDIRECT_TEMP           = 307,  //  Server is redirecting to another page (temporary redirect)
    //  Errors in Request (not found or otherwise denied)
    HTTPMSG_BAD_REQUEST             = 400,  //  ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
    HTTPMSG_UNAUTHORIZED            = 401,  //  ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
    HTTPMSG_FORBIDDEN               = 403,  //  ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
    HTTPMSG_NOTFOUND                = 404,  //  ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
    HTTPMSG_METHOD_NOT_ALLOWED      = 405,  //  ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
    HTTPMSG_REQUEST_TIME_OUT        = 408,  //  ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
    HTTPMSG_GONE                    = 410,  //  ErrorDocument 410 /error/HTTP_GONE.html.var
    HTTPMSG_LENGTH_REQUIRED         = 411,  //  ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
    HTTPMSG_PRECONDITION_FAILED     = 412,  //  ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
    HTTPMSG_ENTITY_TOO_LARGE        = 413,  //  ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
    HTTPMSG_REQUEST_URI_TOO_LARGE   = 414,  //  ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
    HTTPMSG_UNSUPPORTED_MEDIA_TYPE  = 415,  //  ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
    //  System Errors. Can't help you regardless of how reasonable the request!
    HTTPMSG_INTERNAL_SERVER_ERROR   = 500,  //  ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
    HTTPMSG_NOT_IMPLEMENTED         = 501,  //  ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
    HTTPMSG_BAD_GATEWAY             = 502,  //  ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
    HTTPMSG_SERVICE_UNAVAILABLE     = 503,  //  ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
    HTTPMSG_VARIANT_ALSO_VARIES     = 506   //  ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
} ;
#endif  //  hzHttpProto_h