# Crow: crow Namespace Reference

crow Namespace Reference

The main namespace of the library. In this namespace is defined the most important classes and functions of the library. More...

## Namespaces

| multipart
| Encapsulates anything related to processing and organizing `multipart/xyz` messages.
| websocket
| Namespace that includes the Connection class and connection struct. Useful for WebSockets connection.

## Classes

class | Crow
| The main server application class. More...
struct | ci_hash
| Hashing function for ci_map (unordered_multimap). More...
struct | ci_key_eq
| Equals function for ci_map (unordered_multimap). More...
struct | routing_handle_result
class | Connection
| An HTTP connection. More...
struct | http_parser
struct | http_parser_settings
struct | request
| An HTTP request. More...
struct | response
| HTTP response. More...
class | Server
class | ILogHandler
class | CerrLogHandler
class | logger
struct | ILocalMiddleware
| Local middleware should extend ILocalMiddleware. More...
struct | CookieParser
struct | CORSRules
| Used for tuning CORS policies. More...
struct | CORSHandler
| CORSHandler is a global middleware for setting CORS headers. More...
struct | SessionMiddleware
struct | InMemoryStore
| InMemoryStore stores all entries in memory. More...
struct | FileStore
struct | UTF8
struct | HTTPParser
| A wrapper for `nodejs/http-parser`. More...
class | query_string
| A class to represent any data coming after the `?` in the request URL into key-value pairs. More...
struct | returnable
| An abstract class that allows any other class to be returned by a handler. More...
class | BaseRule
| A base class for all rules. More...
class | CatchallRule
class | WebSocketRule
| A rule dealing with websockets. More...
struct | RuleParameterTraits
| Allows the user to assign parameters using functions. More...
class | DynamicRule
| A rule that can change its parameters during runtime. More...
class | TaggedRule
| Default rule created when CROW_ROUTE is called. More...
class | Trie
| A search tree. More...
class | Blueprint
| A blueprint can be considered a smaller section of a Crow app, specifically where the router is conecerned. More...
class | Router
| Handles matching requests to existing rules and upgrade requests. More...
struct | SocketAdaptor
| A wrapper for the asio::ip::tcp::socket and asio::ssl::stream. More...
struct | SSLAdaptor

## Typedefs

using | ssl_context_t = asio::ssl::context
template<typename... Middlewares>
using | App = Crow< Middlewares... >
| Alias of Crow<Middlewares...>. Useful if you want a instance of an Crow application that require Middlewares.
using | SimpleApp = Crow<>
| Alias of Crow<>. Useful if you want a instance of an Crow application that doesn't require of Middlewares.
using | ci_map = std::unordered_multimap< std::string, std::string, ci_hash, ci_key_eq >
using | error_code = asio::error_code
using | tcp = asio::ip::tcp
typedef struct http_parser | http_parser
typedef struct http_parser_settings | http_parser_settings
typedef int(* | http_data_cb) (http_parser *, const char *at, size_t length)
typedef int(* | http_cb) (http_parser *)

## Enumerations

enum class

HTTPMethod : char {
DELETE = 0 , GET , HEAD , POST ,
PUT , CONNECT , OPTIONS , TRACE ,
PATCH , PURGE , COPY , LOCK ,
MKCOL , MOVE , PROPFIND , PROPPATCH ,
SEARCH , UNLOCK , BIND , REBIND ,
UNBIND , ACL , REPORT , MKACTIVITY ,
CHECKOUT , MERGE , MSEARCH , NOTIFY ,
SUBSCRIBE , UNSUBSCRIBE , MKCALENDAR , LINK ,
UNLINK , SOURCE , Delete = 0 , Get ,
Head , Post , Put , Connect ,
Options , Trace , Patch , Purge ,
Copy , Lock , MkCol , Move ,
Propfind , Proppatch , Search , Unlock ,
Bind , Rebind , Unbind , Acl ,
Report , MkActivity , Checkout , Merge ,
MSearch , Notify , Subscribe , Unsubscribe ,
MkCalendar , Link , Unlink , Source ,
InternalMethodCount
}

enum

status {
CONTINUE = 100 , SWITCHING_PROTOCOLS = 101 , OK = 200 , CREATED = 201 ,
ACCEPTED = 202 , NON_AUTHORITATIVE_INFORMATION = 203 , NO_CONTENT = 204 , RESET_CONTENT = 205 ,
PARTIAL_CONTENT = 206 , MULTIPLE_CHOICES = 300 , MOVED_PERMANENTLY = 301 , FOUND = 302 ,
SEE_OTHER = 303 , NOT_MODIFIED = 304 , TEMPORARY_REDIRECT = 307 , PERMANENT_REDIRECT = 308 ,
BAD_REQUEST = 400 , UNAUTHORIZED = 401 , FORBIDDEN = 403 , NOT_FOUND = 404 ,
METHOD_NOT_ALLOWED = 405 , NOT_ACCEPTABLE = 406 , PROXY_AUTHENTICATION_REQUIRED = 407 , CONFLICT = 409 ,
GONE = 410 , PAYLOAD_TOO_LARGE = 413 , UNSUPPORTED_MEDIA_TYPE = 415 , RANGE_NOT_SATISFIABLE = 416 ,
EXPECTATION_FAILED = 417 , PRECONDITION_REQUIRED = 428 , TOO_MANY_REQUESTS = 429 , UNAVAILABLE_FOR_LEGAL_REASONS = 451 ,
INTERNAL_SERVER_ERROR = 500 , NOT_IMPLEMENTED = 501 , BAD_GATEWAY = 502 , SERVICE_UNAVAILABLE = 503 ,
GATEWAY_TIMEOUT = 504 , VARIANT_ALSO_NEGOTIATES = 506
}

enum class | ParamType : char { INT , UINT , DOUBLE , STRING , PATH , MAX }
enum | http_connection_flags { F_CHUNKED = 1 << 0 , F_CONNECTION_KEEP_ALIVE = 1 << 1 , F_CONNECTION_CLOSE = 1 << 2 , F_TRAILING = 1 << 3 , F_UPGRADE = 1 << 4 , F_SKIPBODY = 1 << 5 , F_CONTENTLENGTH = 1 << 6 }
enum | http_errno

enum

state {
s_dead = 1 , s_start_req , s_req_method , s_req_spaces_before_url ,
s_req_schema , s_req_schema_slash , s_req_schema_slash_slash , s_req_server_start ,
s_req_server , s_req_server_with_at , s_req_path , s_req_query_string_start ,
s_req_query_string , s_req_http_start , s_req_http_H , s_req_http_HT ,
s_req_http_HTT , s_req_http_HTTP , s_req_http_I , s_req_http_IC ,
s_req_http_major , s_req_http_dot , s_req_http_minor , s_req_http_end ,
s_req_line_almost_done , s_header_field_start , s_header_field , s_header_value_discard_ws ,
s_header_value_discard_ws_almost_done , s_header_value_discard_lws , s_header_value_start , s_header_value ,
s_header_value_lws , s_header_almost_done , s_chunk_size_start , s_chunk_size ,
s_chunk_parameters , s_chunk_size_almost_done , s_headers_almost_done , s_headers_done ,
s_chunk_data , s_chunk_data_almost_done , s_chunk_data_done , s_body_identity ,
s_body_identity_eof , s_message_done
}

enum

header_states {
h_general = 0 , h_C , h_CO , h_CON ,
h_matching_connection , h_matching_proxy_connection , h_matching_content_length , h_matching_transfer_encoding ,
h_matching_upgrade , h_connection , h_content_length , h_content_length_num ,
h_content_length_ws , h_transfer_encoding , h_upgrade , h_matching_transfer_encoding_token_start ,
h_matching_transfer_encoding_chunked , h_matching_transfer_encoding_token , h_matching_connection_keep_alive , h_matching_connection_close ,
h_transfer_encoding_chunked , h_connection_keep_alive , h_connection_close
}

enum | http_host_state { s_http_host_dead = 1 , s_http_userinfo_start , s_http_userinfo , s_http_host_start , s_http_host_v6_start , s_http_host , s_http_host_v6 , s_http_host_v6_end , s_http_host_v6_zone_start , s_http_host_v6_zone , s_http_host_port_start , s_http_host_port }
enum class | LogLevel { DEBUG = 0 , INFO , WARNING , ERROR , CRITICAL , Debug = 0 , Info , Warning , Error , Critical }

## Functions

const std::string | crlf ("\r\n")
std::string | method_name (HTTPMethod method)
enum state | parse_url_char (enum state s, const char ch, http_parser *parser, const char *url_mark, const char *p)
size_t | http_parser_execute (http_parser *parser, const http_parser_settings *settings, const char *data, size_t len)
void | http_parser_init (http_parser *parser)
const char * | http_errno_name (enum http_errno err)
const char * | http_errno_description (enum http_errno err)
int | http_body_is_final (const struct http_parser *parser)
void | http_parser_set_max_header_size (uint32_t size)
template<typename T >
const std::string & | get_header_value (const T &headers, const std::string &key)
| Find and return the value associated with the key. (returns an empty string if nothing is found)
int | qs_strncmp (const char *s, const char *qs, size_t n)
size_t | qs_parse (char *qs, char *qs_kv[], size_t qs_kv_size, bool parse_url)
int | qs_decode (char *qs)
char * | qs_k2v (const char *key, char *const *qs_kv, size_t qs_kv_size, int nth)
char * | qs_scanvalue (const char *key, const char *qs, char *val, size_t val_len)
std::unique_ptr< std::pair< std::string, std::string > > | qs_dict_name2kv (const char *dict_name, char *const *qs_kv, size_t qs_kv_size, int nth=0)

## Variables

const char | cr = '\r'
const char | lf = '\n'
constexpr const char * | method_strings []
const std::unordered_map< std::string, std::string > | mime_types
constexpr const uint16_t | INVALID_BP_ID {((uint16_t)-1)}
const int | RULE_SPECIAL_REDIRECT_SLASH = 1
constexpr const char | VERSION [] = "1.1.1"

## Detailed Description

The main namespace of the library. In this namespace is defined the most important classes and functions of the library.

Within this namespace, the Crow class, Router class, Connection class, and other are defined.