// ISC License // // Copyright (c) 2024 Stephen Seo // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice appear in all copies. // // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY // AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR // OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR // PERFORMANCE OF THIS SOFTWARE. #ifndef SEODISPARATE_COM_C_SIMPLE_HTTP_HTTP_H_ #define SEODISPARATE_COM_C_SIMPLE_HTTP_HTTP_H_ // Standard library includes. #include // Third party includes. #include // Local includes. #include "config.h" typedef C_SIMPLE_HTTP_ParsedConfig C_SIMPLE_HTTP_HTTPTemplates; enum C_SIMPLE_HTTP_ResponseCode { C_SIMPLE_HTTP_Response_200_OK, C_SIMPLE_HTTP_Response_400_Bad_Request, C_SIMPLE_HTTP_Response_404_Not_Found, C_SIMPLE_HTTP_Response_500_Internal_Server_Error, }; // If the response code is an error, returns a full response string that doesn't // need to be free'd. Otherwise, returns as if error 500. const char *c_simple_http_response_code_error_to_response( enum C_SIMPLE_HTTP_ResponseCode response_code); /// Returned buffer must be "free"d after use. /// If the request is not valid, or 404, then the buffer will be NULL. char *c_simple_http_request_response( const char *request, unsigned int size, const C_SIMPLE_HTTP_HTTPTemplates *templates, size_t *out_size, enum C_SIMPLE_HTTP_ResponseCode *out_response_code ); /// Takes a PATH string and returns a "bare" path. /// This will simply omit the first instance of "?" or "#" and the rest of the /// string. /// Must be free'd if returns non-NULL. char *c_simple_http_strip_path(const char *path, size_t path_size); /// Returns a line from the request that starts with the "header" C-string. /// If returns non-NULL, must be free'd. char *c_simple_http_filter_request_header( const char *request, size_t request_size, const char *header); #endif // vim: ts=2 sts=2 sw=2