Files
vpp/src/plugins/http_static/http_static.h
Dave Barach c0a2527a83 http_static: derive mime type from file extensions
Type: improvement

Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I0f087477e257f5119d7d6182d19f8796773a1f19
2022-12-08 15:40:02 +00:00

182 lines
4.2 KiB
C

/*
* Copyright (c) 2017-2022 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __included_http_static_h__
#define __included_http_static_h__
#include <vnet/session/application_interface.h>
#include <vnet/session/session.h>
#include <http/http.h>
#include <vppinfra/hash.h>
#include <vppinfra/error.h>
#include <http_static/http_cache.h>
/** @file http_static.h
* Static http server definitions
*/
/** \brief Application session
*/
typedef struct
{
CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
u32 session_index;
/** rx thread index */
u32 thread_index;
/** vpp session index, handle */
u32 vpp_session_index;
session_handle_t vpp_session_handle;
/** Fully-resolved file path */
u8 *path;
/** Data to send */
u8 *data;
/** Data length */
u64 data_len;
/** Current data send offset */
u32 data_offset;
/** Need to free data in detach_cache_entry */
int free_data;
/** File cache pool index */
u32 cache_pool_index;
/** Content type, e.g. text, text/javascript, etc. */
http_content_type_t content_type;
} hss_session_t;
typedef struct hss_session_handle_
{
union
{
struct
{
u32 session_index;
u32 thread_index;
};
u64 as_u64;
};
} hss_session_handle_t;
STATIC_ASSERT_SIZEOF (hss_session_handle_t, sizeof (u64));
typedef struct hss_url_handler_args_
{
hss_session_handle_t sh;
union
{
/* Request args */
struct
{
u8 *request;
http_req_method_t reqtype;
};
/* Reply args */
struct
{
u8 *data;
uword data_len;
u8 free_vec_data;
http_status_code_t sc;
};
};
} hss_url_handler_args_t;
typedef enum hss_url_handler_rc_
{
HSS_URL_HANDLER_OK,
HSS_URL_HANDLER_ERROR,
HSS_URL_HANDLER_ASYNC,
} hss_url_handler_rc_t;
typedef hss_url_handler_rc_t (*hss_url_handler_fn) (hss_url_handler_args_t *);
typedef void (*hss_register_url_fn) (hss_url_handler_fn, char *, int);
typedef void (*hss_session_send_fn) (hss_url_handler_args_t *args);
/** \brief Main data structure
*/
typedef struct
{
/** Per thread vector of session pools */
hss_session_t **sessions;
/** Hash tables for built-in GET and POST handlers */
uword *get_url_handlers;
uword *post_url_handlers;
hss_cache_t cache;
/** root path to be served */
u8 *www_root;
/** Application index */
u32 app_index;
/** Cert and key pair for tls */
u32 ckpair_index;
/* API message ID base */
u16 msg_id_base;
vlib_main_t *vlib_main;
/*
* Config
*/
/** Enable debug messages */
int debug_level;
/** Number of preallocated fifos, usually 0 */
u32 prealloc_fifos;
/** Private segment size, usually 0 */
u64 private_segment_size;
/** Size of the allocated rx, tx fifos, roughly 8K or so */
u32 fifo_size;
/** The bind URI, defaults to tcp://0.0.0.0/80 */
u8 *uri;
/** Threshold for switching to ptr data in http msgs */
u64 use_ptr_thresh;
/** Enable the use of builtinurls */
u8 enable_url_handlers;
/** Max cache size before LRU occurs */
u64 cache_size;
/** hash table of file extensions to mime types string indices */
uword *mime_type_indices_by_file_extensions;
} hss_main_t;
extern hss_main_t hss_main;
int hss_create (vlib_main_t *vm);
/**
* Register a GET or POST URL handler
*/
void hss_register_url_handler (hss_url_handler_fn fp, const char *url,
http_req_method_t type);
void hss_session_send_data (hss_url_handler_args_t *args);
void hss_builtinurl_json_handlers_init (void);
hss_session_t *hss_session_get (u32 thread_index, u32 hs_index);
#endif /* __included_http_static_h__ */
/*
* fd.io coding-style-patch-verification: ON
*
* Local Variables:
* eval: (c-set-style "gnu")
* End:
*/