#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 *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 */