static void render_front(const char *m, const st_rss_item_t *e) { char fn[1024], *errmsg; /* catid = 1 - tech catid = 2 - blog catid = 3 - news */ char feeds_query[256]; sqlite3_snprintf(sizeof(feeds_query), feeds_query, "SELECT id, modified, link, title, description, pubdate from feeds where chanid IN (select id from channels where catid = '%q') order by id desc limit '%q', '%d'", query_category, query_limit, rssroll->feeds); //char *feeds_query = "SELECT id, modified, link, title, description, pubdate from feeds where chanid IN (select id from channels where catid = 2) order by id desc limit 10"; if (!strcmp(m, "FEEDS")) { if(sqlite3_exec(db, feeds_query, trace_feeds_callback, &callback_result, &errmsg) != SQLITE_OK) { render_error("cannot load database"); } } else if (!strcmp(m, "HEADER")) { snprintf(fn, sizeof(fn), "%s/%s/header.html", rssroll->htmldir, rssroll->webtheme); render_html(fn, NULL, NULL); } else if (!strcmp(m, "FOOTER")) { snprintf(fn, sizeof(fn), "%s/%s/footer.html", rssroll->htmldir, rssroll->webtheme); render_html(fn, NULL, NULL); } else d_printf("render_front: unknown macro '%s'<br>\n", m); }
static int render_html(const char *html_fn, render_cb r, const st_rss_item_t *e) { FILE *f; char s[8192]; if ((f = fopen(html_fn, "r")) == NULL) { d_printf("ERROR: fopen: %s: %s<br>\n", html_fn, strerror(errno)); return (1); } while (fgets(s, sizeof(s), f)) { char *a, *b; for (a = s; (b = strstr(a, "%%")) != NULL;) { *b = 0; d_printf("%s", a); a = b + 2; if ((b = strstr(a, "%%")) != NULL) { *b = 0; if (!strcmp(a, "RSSROLL_BASEURL")) d_printf("%s", rssroll->url); else if (!strcmp(a, "RSSROLL_NAME")) d_printf("%s", rssroll->name); else if (!strcmp(a, "RSSROLL_OWNER")) d_printf("%s", rssroll->owner); else if (!strcmp(a, "RSSROLL_CTYPE")) d_printf("%s", rssroll->ct_html); else if (!strcmp(a, "RSSROLL_CATEGORIES")){ char *errmsg; if(sqlite3_exec(db, "SELECT id, title FROM categories", trace_categories_callback, 0, &errmsg) != SQLITE_OK) { render_error("cannot load database"); } } else if (!strcmp(a, "PREV")) { if (callback_result == rssroll->feeds) d_printf("<a href='%s?%s/%ld'> <<< </a>", rssroll->url, query_category, strtol(query_limit, NULL, 0) + rssroll->feeds); } else if (!strcmp(a, "NEXT")) { if (strtol(query_limit, NULL, 0)) d_printf("<a href='%s?%s/%ld'> >>> </a>", rssroll->url, query_category, strtol(query_limit, NULL, 0) - rssroll->feeds); } else if (r != NULL) (*r)(a, e); a = b + 2; } } d_printf("%s", a); } fclose(f); return (0); }
void render_order(const char *m, void *arg) { char fn[1024]; struct tm tm_start, tm_end; time_t start, end; bcopy(localtime(&time_start), &tm_start, sizeof(tm_start)); start = mktime(&tm_start); bcopy(localtime(&time_stop), &tm_end, sizeof(tm_end)); end = mktime(&tm_end); if (!strcmp(m, "ORDERLIST")) { snprintf(fn, sizeof(fn), "%s/order_list.html", conf.htmldir); if (odbf.getrange(&odbh, start, end, order_getrange_cb, fn) == -1) { render_error("cannot load orders, see system log for details"); return; } total_ok = 1; } else if (!strcmp(m, "ORDERTOTALS")) { if (!total_ok) { if (odbf.getrange(&odbh, start, end, order_getrange_cb, NULL) == -1) { render_error("cannot load orders, see system log for details"); return; } total_ok = 1; } snprintf(fn, sizeof(fn), "%s/order_total.html", conf.htmldir); render_html(fn, render_order_totals, &grand_total); } else printf("render_order: unknown macro '%s'<br>\n", m); }
static void update_plugin() { Reader *reader; gchar *text; u_long val, since_last; gint clock_style_id; // GkrellmKrell *k; // gint i; /* See if we recieved SNMP responses */ simpleSNMPupdate(); /* Send new SNMP requests */ for (reader = readers; reader ; reader = reader->next) { // k = KRELL(panel); // k->previous = 0; if ( (! reader->session) && (! reader->old_error) ) { reader->session = simpleSNMPopen(reader->peer, reader->port, reader->community, reader); if (! reader->session) { text = reader->old_error; reader->old_error = render_error(reader); g_free(text); } } /* Send new SNMP requests */ if ( (reader->session) && ((GK.timer_ticks % reader->delay) == 0)) simpleSNMPsend(reader->session, reader->objid, reader->objid_length); if ( (reader->session) && (reader->sample) ) { if ((reader->error) && (reader->panel != NULL)) { if (!reader->old_error || strcmp(reader->error, reader->old_error) ) { text = reader->old_error; reader->old_error = g_strdup(reader->error); g_free(text); reader->panel->textstyle = gkrellm_panel_alt_textstyle(DEFAULT_STYLE_ID); text = render_error(reader); gtk_tooltips_set_tip(reader->tooltip, reader->panel->drawing_area, text, ""); gtk_tooltips_enable(reader->tooltip); g_free(text); } } else { if ((GK.timer_ticks % reader->delay) == 0) if (reader->chart != NULL) { /* 100: turn TimeTicks into seconds */ since_last = (reader->sample_time - reader->old_sample_time) / 100; if (reader->delta) val = (reader->sample_n - reader->old_sample_n) / ( (since_last < 1) ? 1 : since_last ) / ( (reader->divisor == 0) ? 1 : reader->divisor ); else val = reader->sample_n / ( (reader->divisor == 0) ? 1 : reader->divisor ); gkrellm_store_chartdata(reader->chart, 0, val); cb_draw_chart(reader); text = render_info(reader); gtk_tooltips_set_tip(reader->tooltip, reader->chart->drawing_area, text, ""); gtk_tooltips_enable(reader->tooltip); g_free(text); reader->old_sample_n = reader->sample_n; reader->old_sample_time = reader->sample_time; } /* if there are changes update label */ if (reader->panel != NULL) { reader->panel->textstyle = gkrellm_panel_textstyle(DEFAULT_STYLE_ID); if ( !reader->old_sample || strcmp(reader->sample, reader->old_sample) || (reader->sample_n != reader->old_sample_n) ) { g_free(reader->old_sample); reader->old_sample = g_strdup(reader->sample); text = render_label(reader); gkrellm_dup_string(&reader->panel->label->string, text); g_free(text); // i = atoi(text); text = render_info(reader); gtk_tooltips_set_tip(reader->tooltip, reader->panel->drawing_area, text, ""); gtk_tooltips_enable(reader->tooltip); g_free(text); reader->old_sample_n = reader->sample_n; reader->old_sample_time = reader->sample_time; } } } } else { if (reader->panel != NULL) reader->panel->textstyle = gkrellm_panel_alt_textstyle(DEFAULT_STYLE_ID); if (reader->panel != NULL) gtk_tooltips_disable(reader->tooltip); // i = -1; } // gkrellm_update_krell(panel, k, i); clock_style_id = gkrellm_lookup_meter_style_id(CLOCK_STYLE_NAME); if (reader->panel != NULL) gkrellm_draw_panel_label( reader->panel ); //GTK2 gkrellm_bg_panel_piximage(clock_style_id) ); if (reader->panel != NULL) gkrellm_draw_panel_layers(reader->panel); } }
string base_widget::render(int how) { string out; string input=render_input(how); string error; switch(how & error_mask) { case error_with: error=render_error(); break; case error_no: break; } string tmp_msg; if(!msg.empty()){ if(!id.empty()) { tmp_msg+="<lablel for=\""; tmp_msg+=id; tmp_msg+="\">"; tmp_msg+=escape(msg); tmp_msg+=":</label>"; } else { tmp_msg=escape(msg); tmp_msg+=":"; } } string help_text; if(!help.empty()) { if((how & as_mask)==as_table) help_text= ((how & as_xhtml) ? "<br/>" : "<br>") + escape(help); else help_text=escape(help); } if(error.empty()) { char const *frm=NULL; switch(how & as_mask) { case as_p: frm = "<p>%1% %2% %3%</p>\n"; break; case as_table: frm = "<tr><th>%1%</th><td>%2% %3%</td></tr>\n"; break; case as_ul: frm = "<li>%1% %2% %3%</li>\n"; break; case as_dl: frm = "<dt>%1%</dt>\n<dd>%2% %3%</dd>\n"; break; case as_space: frm = "%1% %2% %3%\n"; break; } assert(frm); out=(boost::format(frm) % tmp_msg % input % help_text).str(); } else { char const *frm=NULL; switch(how & as_mask) { case as_p: frm = "<p>%3%</p>\n<p>%1% %2% %4%</p>\n"; break; case as_table: frm = "<tr><th>%1%</th><td>%3% %2% %4%</td></tr>\n"; break; case as_ul: frm = "<li>%3% %1% %2% %4%</li>\n"; break; case as_dl: frm = "<dt>%3% %1%</dt>\n<dd>%2% %4%</dd>\n"; break; case as_space: frm = "%3% %1% %2% %4%\n"; break; } assert(frm); error="<span class=\"formerror\">" + error + "</span>"; out=(boost::format(frm) % tmp_msg % input % error % help_text).str(); } return out; }
int main(int argc, char *argv[]) { const char *s, *query_args; time_t if_modified_since = 0; int i; umask(007); load_default_config(); if (parse_configfile(rssrollrc, config_cb) == -1) { render_error("error: cannot open config file: %s", rssrollrc); goto done; } /*if (chdir("/tmp")) { printf("error main: chdir: /tmp: %s", strerror(errno)); render_error("chdir: /tmp: %s", strerror(errno)); goto done; } */ if (sqlite3_open(rssroll->dbpath, &db) != SQLITE_OK) { render_error("cannot load database: %s", rssroll->dbpath); goto done; } // default feeds snprintf(query_category, sizeof(query_string), "%d", rssroll->defcat); snprintf(query_limit, sizeof(query_limit), "0"); if ((q = get_query()) == NULL) { render_error("get_query"); printf("error main: get_query() NULL"); goto done; } if ((s = getenv("QUERY_STRING")) != NULL) { if (strlen(s) > 64) { printf("Status: 400\r\n\r\n You are trying to send very long query!\n"); fflush(stdout); return (0); } else if (strstr(s, "&") != NULL) { printf("warning main: escaped query '%s', user agent '%s', " "referer '%s'", s, q->user_agent ? q->user_agent : "(null)", q->referer ? q->referer : "(null)"); printf("Status: 400\r\n\r\nHTML escaped ampersand in cgi " "query string \"%s\"\n" "This might be a problem in your client \"%s\",\n" "or in the referring document \"%s\"\n" "See http://www.htmlhelp.org/tools/validator/problems.html" "#amp\n", s, q->user_agent ? q->user_agent : "", q->referer ? q->referer : ""); fflush(stdout); return (0); } else { for (i = 0; i < strlen(s); i++) { /* sanity check of the query string, accepts only alpha */ if (!isdigit(s[i])) { if(s[i] != '/') { printf("Status: 400\r\n\r\nYou are trying to send wrong query!\n"); fflush(stdout); return (0); } } } snprintf(query_string, sizeof(query_string), "%s", s); query_args = strtok(query_string, "/"); snprintf(query_category, sizeof(query_category), "%s", query_args); query_args = strtok(NULL, "/"); if (query_args != NULL) snprintf(query_limit, sizeof(query_limit), "%s", query_args); } } if ((q->referer != NULL && strstr(q->referer, "morisit")) || (s != NULL && strstr(s, "http://"))) { printf("Status: 503\r\n\r\nWe are not redirecting, " "nice try.\n"); fflush(stdout); return (0); } if (q->user_agent != NULL && !strncmp(q->user_agent, "Googlebot", 9)) { printf("Status: 503\r\n\r\nGooglebot you are not.\n"); fflush(stdout); return (0); } if ((s = getenv("IF_MODIFIED_SINCE")) != NULL) { if_modified_since = convert_rfc822_time(s); if (!if_modified_since) if_modified_since = (time_t)strtoul(s, NULL, 10); if (!if_modified_since) printf("warning main: invalid IF_MODIFIED_SINCE '%s'", s); } if ((s = getenv("HTTP_ACCEPT_ENCODING")) != NULL) { char *p = strstr(s, "gzip"); if (p != NULL && (strncmp(p, "gzip;q=0", 8) || atoi(p + 7) > 0.0)) { gz = gzdopen(fileno(stdout), "wb9"); if (gz == NULL) printf("error main: gzdopen"); else printf("Content-Encoding: gzip\r\n"); } } char fn[1024]; printf("%s\r\n\r\n", rssroll->ct_html); fflush(stdout); snprintf(fn, sizeof(fn), "%s/main.html", rssroll->htmldir); render_html(fn, &render_front, NULL); done: if (gz != NULL) { if (gzclose(gz) != Z_OK) printf("error main: gzclose"); gz = NULL; } else fflush(stdout); if (q != NULL) free_query(q); sqlite3_close(db); return (0); }