05d292b2 (kx 2023-03-24 03:51:10 +0300 1)
05d292b2 (kx 2023-03-24 03:51:10 +0300 2) #ifndef __CONTEXT_H
05d292b2 (kx 2023-03-24 03:51:10 +0300 3) #define __CONTEXT_H
05d292b2 (kx 2023-03-24 03:51:10 +0300 4)
05d292b2 (kx 2023-03-24 03:51:10 +0300 5) #ifdef __cplusplus
05d292b2 (kx 2023-03-24 03:51:10 +0300 6) extern "C" {
05d292b2 (kx 2023-03-24 03:51:10 +0300 7) #endif
05d292b2 (kx 2023-03-24 03:51:10 +0300 8)
05d292b2 (kx 2023-03-24 03:51:10 +0300 9)
05d292b2 (kx 2023-03-24 03:51:10 +0300 10) #define CONTEXT_MEM_SIZE 524288
05d292b2 (kx 2023-03-24 03:51:10 +0300 11)
05d292b2 (kx 2023-03-24 03:51:10 +0300 12) struct __context
05d292b2 (kx 2023-03-24 03:51:10 +0300 13) {
05d292b2 (kx 2023-03-24 03:51:10 +0300 14) void *_cur_brk;
05d292b2 (kx 2023-03-24 03:51:10 +0300 15) unsigned char _mem[CONTEXT_MEM_SIZE];
05d292b2 (kx 2023-03-24 03:51:10 +0300 16) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 17)
05d292b2 (kx 2023-03-24 03:51:10 +0300 18) extern struct __context *pmctx;
05d292b2 (kx 2023-03-24 03:51:10 +0300 19)
05d292b2 (kx 2023-03-24 03:51:10 +0300 20) #define __cur_brk (*((void **)&(pmctx->_cur_brk)))
05d292b2 (kx 2023-03-24 03:51:10 +0300 21) #define __mem ((unsigned char *)&((pmctx->_mem)[0]))
05d292b2 (kx 2023-03-24 03:51:10 +0300 22)
05d292b2 (kx 2023-03-24 03:51:10 +0300 23) extern void __mctx_init( void );
05d292b2 (kx 2023-03-24 03:51:10 +0300 24) extern void *__sbrk( int incr );
05d292b2 (kx 2023-03-24 03:51:10 +0300 25)
05d292b2 (kx 2023-03-24 03:51:10 +0300 26)
05d292b2 (kx 2023-03-24 03:51:10 +0300 27) struct cgit_tmplt_vars {
05d292b2 (kx 2023-03-24 03:51:10 +0300 28) const char *css;
05d292b2 (kx 2023-03-24 03:51:10 +0300 29) const char *owner;
05d292b2 (kx 2023-03-24 03:51:10 +0300 30) const char *author;
05d292b2 (kx 2023-03-24 03:51:10 +0300 31) const char *description;
05d292b2 (kx 2023-03-24 03:51:10 +0300 32) const char *keywords;
05d292b2 (kx 2023-03-24 03:51:10 +0300 33) const char *title;
05d292b2 (kx 2023-03-24 03:51:10 +0300 34) const char *favicon_path;
05d292b2 (kx 2023-03-24 03:51:10 +0300 35) const char *syntax_highlight_css;
05d292b2 (kx 2023-03-24 03:51:10 +0300 36) const char *logo;
05d292b2 (kx 2023-03-24 03:51:10 +0300 37) const char *logo_alt;
05d292b2 (kx 2023-03-24 03:51:10 +0300 38) const char *logo_link;
05d292b2 (kx 2023-03-24 03:51:10 +0300 39) const char *home_page;
05d292b2 (kx 2023-03-24 03:51:10 +0300 40) const char *snapshots;
05d292b2 (kx 2023-03-24 03:51:10 +0300 41) const char *status_line;
05d292b2 (kx 2023-03-24 03:51:10 +0300 42) const char *main_menu_logo;
05d292b2 (kx 2023-03-24 03:51:10 +0300 43) const char *main_menu_item;
05d292b2 (kx 2023-03-24 03:51:10 +0300 44) const char *left_menu_items;
05d292b2 (kx 2023-03-24 03:51:10 +0300 45) const char *popup_menu_items;
05d292b2 (kx 2023-03-24 03:51:10 +0300 46) const char *right_menu_items;
05d292b2 (kx 2023-03-24 03:51:10 +0300 47) const char *copyright_notice;
05d292b2 (kx 2023-03-24 03:51:10 +0300 48) const char *copyright;
05d292b2 (kx 2023-03-24 03:51:10 +0300 49) const char *page_type;
05d292b2 (kx 2023-03-24 03:51:10 +0300 50) const char *page_size;
05d292b2 (kx 2023-03-24 03:51:10 +0300 51) const char *num_of_repos;
05d292b2 (kx 2023-03-24 03:51:10 +0300 52) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 53)
05d292b2 (kx 2023-03-24 03:51:10 +0300 54) #define CGIT_INFO_INIT (struct cgit_info) { .kind = GIT_OBJECT_INVALID, .revision = { 0 }, .oid = { 0 }, .mode = GIT_FILEMODE_TREE, .author = NULL, .date = -1, .offset = 0, .mime = NULL, .lang = NULL }
05d292b2 (kx 2023-03-24 03:51:10 +0300 55)
05d292b2 (kx 2023-03-24 03:51:10 +0300 56) struct cgit_info {
05d292b2 (kx 2023-03-24 03:51:10 +0300 57) git_object_t kind;
05d292b2 (kx 2023-03-24 03:51:10 +0300 58) char revision[GIT_OID_HEXSZ+1];
05d292b2 (kx 2023-03-24 03:51:10 +0300 59) char oid[GIT_OID_HEXSZ+1];
05d292b2 (kx 2023-03-24 03:51:10 +0300 60) git_filemode_t mode;
05d292b2 (kx 2023-03-24 03:51:10 +0300 61) const char *author;
05d292b2 (kx 2023-03-24 03:51:10 +0300 62) git_time_t date;
05d292b2 (kx 2023-03-24 03:51:10 +0300 63) int offset;
05d292b2 (kx 2023-03-24 03:51:10 +0300 64) const char *mime;
05d292b2 (kx 2023-03-24 03:51:10 +0300 65) const char *lang;
05d292b2 (kx 2023-03-24 03:51:10 +0300 66) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 67)
05d292b2 (kx 2023-03-24 03:51:10 +0300 68) struct cgit_repository {
05d292b2 (kx 2023-03-24 03:51:10 +0300 69) const char *name;
05d292b2 (kx 2023-03-24 03:51:10 +0300 70) struct cgit_info info;
05d292b2 (kx 2023-03-24 03:51:10 +0300 71) const char *git_root;
05d292b2 (kx 2023-03-24 03:51:10 +0300 72) const char *repo_root;
05d292b2 (kx 2023-03-24 03:51:10 +0300 73) const char *relative_path;
05d292b2 (kx 2023-03-24 03:51:10 +0300 74) struct cgit_info relative_info;
05d292b2 (kx 2023-03-24 03:51:10 +0300 75) const char *relative_html;
05d292b2 (kx 2023-03-24 03:51:10 +0300 76) const char *relative_href;
05d292b2 (kx 2023-03-24 03:51:10 +0300 77) const char *search_placeholder;
05d292b2 (kx 2023-03-24 03:51:10 +0300 78) const char *trunk; /* trunk directory name */
05d292b2 (kx 2023-03-24 03:51:10 +0300 79) const char *clone_prefix;
05d292b2 (kx 2023-03-24 03:51:10 +0300 80) const char *clone_ro_prefix;
05d292b2 (kx 2023-03-24 03:51:10 +0300 81) int nbranches; /* number of branches */
05d292b2 (kx 2023-03-24 03:51:10 +0300 82) int ncommits; /* number of commits (no more than 9999) */
05d292b2 (kx 2023-03-24 03:51:10 +0300 83) int ntags; /* number of tags */
05d292b2 (kx 2023-03-24 03:51:10 +0300 84) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 85)
05d292b2 (kx 2023-03-24 03:51:10 +0300 86) struct cgit_page {
05d292b2 (kx 2023-03-24 03:51:10 +0300 87) time_t modified;
05d292b2 (kx 2023-03-24 03:51:10 +0300 88) time_t expires;
05d292b2 (kx 2023-03-24 03:51:10 +0300 89) size_t size;
05d292b2 (kx 2023-03-24 03:51:10 +0300 90) const char *mimetype;
05d292b2 (kx 2023-03-24 03:51:10 +0300 91) const char *charset;
05d292b2 (kx 2023-03-24 03:51:10 +0300 92) int status;
05d292b2 (kx 2023-03-24 03:51:10 +0300 93) const char *status_message;
05d292b2 (kx 2023-03-24 03:51:10 +0300 94) const char *header;
05d292b2 (kx 2023-03-24 03:51:10 +0300 95) const char *footer;
05d292b2 (kx 2023-03-24 03:51:10 +0300 96) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 97)
05d292b2 (kx 2023-03-24 03:51:10 +0300 98) struct cgit_environment {
05d292b2 (kx 2023-03-24 03:51:10 +0300 99) const char *http_host;
05d292b2 (kx 2023-03-24 03:51:10 +0300 100) const char *https;
05d292b2 (kx 2023-03-24 03:51:10 +0300 101) const char *no_http;
05d292b2 (kx 2023-03-24 03:51:10 +0300 102) const char *path_info;
05d292b2 (kx 2023-03-24 03:51:10 +0300 103) const char *query_string;
05d292b2 (kx 2023-03-24 03:51:10 +0300 104) const char *request_uri;
05d292b2 (kx 2023-03-24 03:51:10 +0300 105) const char *request_scheme;
05d292b2 (kx 2023-03-24 03:51:10 +0300 106) const char *request_method;
05d292b2 (kx 2023-03-24 03:51:10 +0300 107) const char *script_name;
05d292b2 (kx 2023-03-24 03:51:10 +0300 108) const char *server_name;
05d292b2 (kx 2023-03-24 03:51:10 +0300 109) const char *server_port;
05d292b2 (kx 2023-03-24 03:51:10 +0300 110) const char *http_cookie;
05d292b2 (kx 2023-03-24 03:51:10 +0300 111) unsigned int content_lenght;
05d292b2 (kx 2023-03-24 03:51:10 +0300 112) const char *http_root;
05d292b2 (kx 2023-03-24 03:51:10 +0300 113) int authenticated;
05d292b2 (kx 2023-03-24 03:51:10 +0300 114) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 115)
05d292b2 (kx 2023-03-24 03:51:10 +0300 116) struct cgit_query {
05d292b2 (kx 2023-03-24 03:51:10 +0300 117) int ofs;
05d292b2 (kx 2023-03-24 03:51:10 +0300 118) const char *rev;
05d292b2 (kx 2023-03-24 03:51:10 +0300 119) const char *revision;
05d292b2 (kx 2023-03-24 03:51:10 +0300 120) const char *operation;
05d292b2 (kx 2023-03-24 03:51:10 +0300 121) const char *search;
05d292b2 (kx 2023-03-24 03:51:10 +0300 122) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 123)
05d292b2 (kx 2023-03-24 03:51:10 +0300 124) struct cgit_versions {
05d292b2 (kx 2023-03-24 03:51:10 +0300 125) const char *git;
05d292b2 (kx 2023-03-24 03:51:10 +0300 126) const char *nginx;
05d292b2 (kx 2023-03-24 03:51:10 +0300 127) const char *cgit;
05d292b2 (kx 2023-03-24 03:51:10 +0300 128) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 129)
05d292b2 (kx 2023-03-24 03:51:10 +0300 130) struct cgit_promotion {
05d292b2 (kx 2023-03-24 03:51:10 +0300 131) const char *analytic_links;
05d292b2 (kx 2023-03-24 03:51:10 +0300 132) const char *analytic_scripts;
05d292b2 (kx 2023-03-24 03:51:10 +0300 133) int donate;
05d292b2 (kx 2023-03-24 03:51:10 +0300 134) const char *donate_css;
05d292b2 (kx 2023-03-24 03:51:10 +0300 135) const char *donate_html;
05d292b2 (kx 2023-03-24 03:51:10 +0300 136) const char *donate_js;
05d292b2 (kx 2023-03-24 03:51:10 +0300 137) const char *donate_header;
05d292b2 (kx 2023-03-24 03:51:10 +0300 138) const char *donate_purpose;
05d292b2 (kx 2023-03-24 03:51:10 +0300 139) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 140)
05d292b2 (kx 2023-03-24 03:51:10 +0300 141) struct cgit_context {
05d292b2 (kx 2023-03-24 03:51:10 +0300 142) struct cgit_environment env;
05d292b2 (kx 2023-03-24 03:51:10 +0300 143) struct cgit_promotion promo;
05d292b2 (kx 2023-03-24 03:51:10 +0300 144) struct cgit_query query;
05d292b2 (kx 2023-03-24 03:51:10 +0300 145) struct cgit_page page;
05d292b2 (kx 2023-03-24 03:51:10 +0300 146) struct cgit_tmplt_vars vars;
05d292b2 (kx 2023-03-24 03:51:10 +0300 147) struct cgit_repository repo;
05d292b2 (kx 2023-03-24 03:51:10 +0300 148) struct cgit_versions vers;
05d292b2 (kx 2023-03-24 03:51:10 +0300 149) };
05d292b2 (kx 2023-03-24 03:51:10 +0300 150)
05d292b2 (kx 2023-03-24 03:51:10 +0300 151)
05d292b2 (kx 2023-03-24 03:51:10 +0300 152) extern const char *ptype_repolist;
05d292b2 (kx 2023-03-24 03:51:10 +0300 153) extern const char *ptype_repo;
05d292b2 (kx 2023-03-24 03:51:10 +0300 154)
05d292b2 (kx 2023-03-24 03:51:10 +0300 155) extern struct cgit_context ctx;
05d292b2 (kx 2023-03-24 03:51:10 +0300 156)
05d292b2 (kx 2023-03-24 03:51:10 +0300 157) /*
05d292b2 (kx 2023-03-24 03:51:10 +0300 158) header/footer template variables:
05d292b2 (kx 2023-03-24 03:51:10 +0300 159) ================================
05d292b2 (kx 2023-03-24 03:51:10 +0300 160) ${css}
05d292b2 (kx 2023-03-24 03:51:10 +0300 161) ${owner}
05d292b2 (kx 2023-03-24 03:51:10 +0300 162) ${author}
05d292b2 (kx 2023-03-24 03:51:10 +0300 163) ${description}
05d292b2 (kx 2023-03-24 03:51:10 +0300 164) ${keywords}
05d292b2 (kx 2023-03-24 03:51:10 +0300 165) ${title}
05d292b2 (kx 2023-03-24 03:51:10 +0300 166) ${favicon-path}
05d292b2 (kx 2023-03-24 03:51:10 +0300 167) ${syntax-highlight-css}
05d292b2 (kx 2023-03-24 03:51:10 +0300 168) ${logo}
05d292b2 (kx 2023-03-24 03:51:10 +0300 169) ${logo-alt}
05d292b2 (kx 2023-03-24 03:51:10 +0300 170) ${logo-link}
05d292b2 (kx 2023-03-24 03:51:10 +0300 171) ${home-page}
05d292b2 (kx 2023-03-24 03:51:10 +0300 172) ${snapshots}
05d292b2 (kx 2023-03-24 03:51:10 +0300 173) ${status-line}
05d292b2 (kx 2023-03-24 03:51:10 +0300 174) ${main-menu-logo}
05d292b2 (kx 2023-03-24 03:51:10 +0300 175) ${main-menu-item}
05d292b2 (kx 2023-03-24 03:51:10 +0300 176) ${left-menu-items}
05d292b2 (kx 2023-03-24 03:51:10 +0300 177) ${popup-menu-items}
05d292b2 (kx 2023-03-24 03:51:10 +0300 178) ${right-menu-items}
05d292b2 (kx 2023-03-24 03:51:10 +0300 179) ${relative-html}
05d292b2 (kx 2023-03-24 03:51:10 +0300 180) ${search-placeholder}
05d292b2 (kx 2023-03-24 03:51:10 +0300 181)
05d292b2 (kx 2023-03-24 03:51:10 +0300 182) ${analytic-links}
05d292b2 (kx 2023-03-24 03:51:10 +0300 183) ${analytic-scripts}
05d292b2 (kx 2023-03-24 03:51:10 +0300 184) ${donate-css}
05d292b2 (kx 2023-03-24 03:51:10 +0300 185) ${donate-html}
05d292b2 (kx 2023-03-24 03:51:10 +0300 186) ${donate-js}
05d292b2 (kx 2023-03-24 03:51:10 +0300 187) ${donate-header}
05d292b2 (kx 2023-03-24 03:51:10 +0300 188) ${donate-purpose}
05d292b2 (kx 2023-03-24 03:51:10 +0300 189)
05d292b2 (kx 2023-03-24 03:51:10 +0300 190) ${git-version}
05d292b2 (kx 2023-03-24 03:51:10 +0300 191) ${nginx-version}
05d292b2 (kx 2023-03-24 03:51:10 +0300 192) ${cgit-version}
05d292b2 (kx 2023-03-24 03:51:10 +0300 193) ${copyright-notice}
05d292b2 (kx 2023-03-24 03:51:10 +0300 194) ${copyright}
05d292b2 (kx 2023-03-24 03:51:10 +0300 195)
05d292b2 (kx 2023-03-24 03:51:10 +0300 196) ${page-type}
05d292b2 (kx 2023-03-24 03:51:10 +0300 197) ${page-size}
05d292b2 (kx 2023-03-24 03:51:10 +0300 198) ${num-of-repos}
05d292b2 (kx 2023-03-24 03:51:10 +0300 199) */
05d292b2 (kx 2023-03-24 03:51:10 +0300 200)
05d292b2 (kx 2023-03-24 03:51:10 +0300 201) extern void cgit_prepare_context( void );
05d292b2 (kx 2023-03-24 03:51:10 +0300 202) extern void cgit_prepare_template_variables( void );
05d292b2 (kx 2023-03-24 03:51:10 +0300 203) extern void cgit_release_template_variables( void );
05d292b2 (kx 2023-03-24 03:51:10 +0300 204)
05d292b2 (kx 2023-03-24 03:51:10 +0300 205) extern void cgit_parse_query( void );
05d292b2 (kx 2023-03-24 03:51:10 +0300 206)
05d292b2 (kx 2023-03-24 03:51:10 +0300 207) extern int ctx_grab_int_query_param( const char *name );
05d292b2 (kx 2023-03-24 03:51:10 +0300 208) extern const char *ctx_grab_str_query_param( const char *name );
05d292b2 (kx 2023-03-24 03:51:10 +0300 209) extern const char *ctx_remove_query_param( const char *query_string, const char *name );
05d292b2 (kx 2023-03-24 03:51:10 +0300 210)
05d292b2 (kx 2023-03-24 03:51:10 +0300 211)
05d292b2 (kx 2023-03-24 03:51:10 +0300 212) #ifdef __cplusplus
05d292b2 (kx 2023-03-24 03:51:10 +0300 213) }
05d292b2 (kx 2023-03-24 03:51:10 +0300 214) #endif
05d292b2 (kx 2023-03-24 03:51:10 +0300 215)
05d292b2 (kx 2023-03-24 03:51:10 +0300 216) #endif /* __CONTEXT_H */