#ifndef __CONTEXT_H #define __CONTEXT_H #ifdef __cplusplus extern "C" { #endif #define CONTEXT_MEM_SIZE 524288 struct __context { void *_cur_brk; unsigned char _mem[CONTEXT_MEM_SIZE]; }; extern struct __context *pmctx; #define __cur_brk (*((void **)&(pmctx->_cur_brk))) #define __mem ((unsigned char *)&((pmctx->_mem)[0])) extern void __mctx_init( void ); extern void *__sbrk( int incr ); struct csvn_tmplt_vars { const char *css; const char *owner; const char *author; const char *description; const char *keywords; const char *title; const char *favicon_path; const char *syntax_highlight_css; const char *logo; const char *logo_alt; const char *logo_link; const char *home_page; const char *snapshots; const char *status_line; const char *main_menu_logo; const char *main_menu_item; const char *left_menu_items; const char *popup_menu_items; const char *right_menu_items; const char *copyright_notice; const char *copyright; const char *page_type; const char *page_size; const char *num_of_repos; }; #define KIND_DIR 0 #define KIND_FILE 1 #define KIND_UNKNOWN 2 #define CSVN_INFO_INIT (struct csvn_info) { .kind = KIND_UNKNOWN, .revision = 0, .author = NULL, .date = 0, .mime = NULL, .lang = NULL } struct csvn_info { int kind; int revision; const char *author; time_t date; const char *mime; const char *lang; }; struct csvn_repository { const char *name; struct csvn_info info; const char *repo_root; const char *relative_path; struct csvn_info relative_info; const char *relative_html; const char *relative_href; const char *search_placeholder; const char *trunk; /* trunk directory name */ const char *branches; /* branches directory name */ const char *tags; /* tags directory name */ const char *checkout_prefix; const char *checkout_ro_prefix; int nbranches; /* number of branches */ int ntags; /* number of tags */ }; struct csvn_page { time_t modified; time_t expires; size_t size; const char *mimetype; const char *charset; int status; const char *status_message; const char *header; const char *footer; }; struct csvn_environment { const char *http_host; const char *https; const char *no_http; const char *path_info; const char *query_string; const char *request_uri; const char *request_scheme; const char *request_method; const char *script_name; const char *server_name; const char *server_port; const char *http_cookie; unsigned int content_lenght; const char *http_root; int authenticated; }; struct csvn_query { int ofs; int rev; const char *revision; const char *operation; const char *search; }; struct csvn_versions { const char *subversion; const char *nginx; const char *csvn; }; struct csvn_promotion { const char *analytic_links; const char *analytic_scripts; int donate; const char *donate_css; const char *donate_html; const char *donate_js; const char *donate_header; const char *donate_purpose; }; struct csvn_context { struct csvn_environment env; struct csvn_promotion promo; struct csvn_query query; struct csvn_page page; struct csvn_tmplt_vars vars; struct csvn_repository repo; struct csvn_versions vers; }; extern const char *ptype_repolist; extern const char *ptype_repo; extern struct csvn_context ctx; /* header/footer template variables: ================================ ${css} ${owner} ${author} ${description} ${keywords} ${title} ${favicon-path} ${syntax-highlight-css} ${logo} ${logo-alt} ${logo-link} ${home-page} ${snapshots} ${status-line} ${main-menu-logo} ${main-menu-item} ${left-menu-items} ${popup-menu-items} ${right-menu-items} ${relative-html} ${search-placeholder} ${analytic-links} ${analytic-scripts} ${donate-css} ${donate-html} ${donate-js} ${donate-header} ${donate-purpose} ${svn-version} ${nginx-version} ${csvn-version} ${copyright-notice} ${copyright} ${page-type} ${page-size} ${num-of-repos} */ extern void csvn_prepare_context( void ); extern void csvn_prepare_template_variables( void ); extern void csvn_release_template_variables( void ); extern void csvn_parse_query( void ); extern int ctx_grab_int_query_param( const char *name ); extern const char *ctx_remove_query_param( const char *query_string, const char *name ); #ifdef __cplusplus } #endif #endif /* __CONTEXT_H */