void get_cookies(const char *headers, char ***dynamic_cookies, int *n_dynamic_cookies, char ***static_cookies, int *n_static_cookies) { int index = 0; char **header_lines = NULL; int n_header_lines = 0; split_string(headers, "\r\n", &header_lines, &n_header_lines); for(index=0; index<n_header_lines; index++) { char use_static = 0; char *result = NULL; int cparts_index = 0; char **cparts = NULL; int n_cparts = 0; if (strncmp(header_lines[index], "Set-Cookie:", 11) != 0) continue; split_string(&header_lines[index][12], ";", &cparts, &n_cparts); for(cparts_index=0; cparts_index<n_cparts; cparts_index++) { char *part = cparts[cparts_index]; while(*part == ' ') part++; if (strncmp(part, "expires=", 8) == 0) { use_static = 1; continue; } if (strncmp(part, "path=", 5) == 0) continue; if (strncmp(part, "domain=", 7) == 0) continue; if (strncmp(part, "HttpOnly", 8) == 0) continue; str_add(&result, "%s ", part); } free_splitted_string(cparts, n_cparts); if (use_static) add_cookie(static_cookies, n_static_cookies, result); else add_cookie(dynamic_cookies, n_dynamic_cookies, result); free(result); } free_splitted_string(header_lines, n_header_lines); }
void add_filter(grep_target *gpt, const char *par, int linenr) { char *err = NULL; string_array_t parts; init_string_array(&parts); split_string(par, ",", FALSE, &parts); if (string_array_get_n(&parts) != 4) error_exit(FALSE, "Parameter(s) missing for filter: %s (line %d)\n", err, linenr); if (add_grep_filter(gpt, string_array_get(&parts, 3), string_array_get(&parts, 0), string_array_get(&parts, 1), string_array_get(&parts, 2), &err) == FALSE) error_exit(FALSE, "Failed processing filter: %s (line %d)\n", err, linenr); free_splitted_string(&parts); }
void add_to_wc_do(key_value *kv, const char *in) { int loop = 0; string_array_t words; init_string_array(&words); split_string(in, " ", TRUE, &words); for(loop=0; loop<string_array_get_n(&words); loop++) { const char *word = string_array_get(&words, loop); int len = strlen(word), clean_loop = 0, out_index = 0; char *temp = (char *)calloc(1, len + 1); for(clean_loop=0; clean_loop<len; clean_loop++) { if (isalpha(word[clean_loop])) temp[out_index++] = word[clean_loop]; } temp[out_index] = 0x00; if (out_index && out_index >= word_cloud_min_word_size) { const int *count = get_from_kv(kv, temp); int *new_count = calloc(1, sizeof(int)); if (count) *new_count = *count + 1; else *new_count = 1; add_to_kv(kv, strdup(temp), new_count); } free(temp); } free_splitted_string(&words); }
void new_version_alert(void) { char new_version = 0; FILE *fh = fopen(SPAM_FILE, "r"); if (!fh) new_version = 1; else { char buffer[4096], *dummy = 0x00; fgets(buffer, sizeof buffer, fh); fclose(fh); dummy = strchr(buffer, '\n'); if (dummy) *dummy = 0x00; if (strcmp(buffer, VERSION) != 0) new_version = 1; } if (new_version) { struct utsname buf; FILE *fh = fopen(SPAM_FILE, "w"); if (fh) { fprintf(fh, "%s\n", VERSION); fclose(fh); } printf("Welcome to the new HTTPing version " VERSION "!\n\n"); #ifdef NC printf("Did you know that with -K you can start a fullscreen GUI version with nice graphs and lots more information? And that you can disable the moving graphs with -D?\n"); #ifndef FW printf("And if you compile this program with libfftw3, that it can also show a fourier transform of the measured values?\n"); #endif #else printf("Did you know that if you compile this program with NCURSES, that it then includes a nice GUI with lots more information and graphs?\n"); #endif #if !defined(TCP_TFO) && defined(linux) if (uname(&buf) == 0) { char **rparts = NULL; int n_rparts = 0; split_string(buf.release, ".", &rparts, &n_rparts); if (n_rparts >= 2 && ((atoi(rparts[0]) >= 3 && atoi(rparts[1]) >= 6) || atoi(rparts[0]) >= 4)) printf("This program supports TCP Fast Open! (if compiled in and only on Linux kernels 3.6 or more recent) See the readme.txt how to enable this.\n"); free_splitted_string(rparts, n_rparts); } #endif printf("\n\n"); } }
int load_config(const char *file) { char *description = NULL, *server_host = NULL, *username = NULL, *password = NULL, *nickname = NULL, *user_complete_name = NULL; int server_index = -1; int linenr = 0; int fd = open(file, O_RDONLY); if (fd == -1) { if (errno == ENOENT) return -1; error_exit(TRUE, "Cannot open config file %s\n", file); } conf_file = strdup(file); for(;;) { char *line = read_line_fd(fd); char *cmd, *par; char *is; if (!line) break; linenr++; if (strlen(line) == 0) { myfree(line); continue; } if (line[0] == '#' || line[0] == ';') { myfree(line); continue; } is = strchr(line, '='); if (!is) error_exit(FALSE, "config: line %d is missing either command or parameter! (%s)", linenr, line); /* find parameter */ par = is + 1; while(*par == ' ') par++; /* remove spaces around command */ /* spaces at the start */ cmd = line; while(*cmd == ' ') cmd++; /* spaces at the end */ *is = 0x00; is--; while(*is == ' ') { *is = 0x00; is--; } if (strcmp(cmd, "server") == 0 || strcmp(cmd, "send_after_login") == 0 || strcmp(cmd, "auto_join") == 0 || strcmp(cmd, "channel") == 0 || strcmp(cmd, "rejoin") == 0) { /* all stuff already known? */ if (server_host) { if (nickname == NULL) error_exit(FALSE, "nickname must be set for %s", server_host); server_index = add_server(server_host, username, password, nickname, user_complete_name, description ? description : server_host); myfree(server_host); server_host = NULL; myfree(username); myfree(password); myfree(nickname); myfree(user_complete_name); myfree(description); username = password = nickname = user_complete_name = description = NULL; } } if (strcmp(cmd, "server") == 0) { /* new server */ server_host = strdup(par); } else if (strcmp(cmd, "favorite") == 0) { int n = -1; string_array_t parts; init_string_array(&parts); split_string(par, " ", TRUE, &parts); n = string_array_get_n(&parts); if (n != 1 && n != 2) error_exit(FALSE, "favorite needs either be in format \"server channel\" or \"channel\""); if (n == 2) add_favorite(string_array_get(&parts, 0), string_array_get(&parts, 1)); else add_favorite(NULL, string_array_get(&parts, 0)); free_splitted_string(&parts); } else if (strcmp(cmd, "username") == 0) username = strdup(par); else if (strcmp(cmd, "password") == 0) password = strdup(par); else if (strcmp(cmd, "nick") == 0 || strcmp(cmd, "nickname") == 0) nickname = strdup(par); else if (strcmp(cmd, "name") == 0) user_complete_name = strdup(par); else if (strcmp(cmd, "dictionary_file") == 0) { const char *filename = explode_path(par); if (!filename) error_exit(TRUE, "Path '%s' is not understood\n", par); dictionary_file = filename; if (load_dictionary() == FALSE) error_exit(TRUE, "Failure loading dictionary file %s (%s)", filename, par); } else if (strcmp(cmd, "description") == 0) description = strdup(par); else if (strcmp(cmd, "server_exit_message") == 0) server_exit_message = strdup(par); else if (strcmp(cmd, "log_dir") == 0) log_dir = strdup(par); else if (strcmp(cmd, "part_message") == 0) part_message = strdup(par); else if (strcmp(cmd, "notify_nick") == 0) notify_nick = strdup(par); else if (strcmp(cmd, "userinfo") == 0) userinfo = strdup(par); else if (strcmp(cmd, "finger_str") == 0) finger_str = strdup(par); else if (strcmp(cmd, "mark_personal_messages") == 0) mark_personal_messages = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "meta-colors") == 0) colors_meta = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "headline_matcher") == 0) add_headline_matcher(par); else if (strcmp(cmd, "all-colors") == 0) colors_all = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "dcc_bind_to") == 0) dcc_bind_to = strdup(par); else if (strcmp(cmd, "update_clock_at_data") == 0) update_clock_at_data = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "nick-color") == 0) nick_color = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "use_nonbasic_colors") == 0) use_nonbasic_colors = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "ignore_unknown_irc_protocol_msgs") == 0) ignore_unknown_irc_protocol_msgs = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "auto_markerline") == 0) auto_markerline = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "inverse_window_heading") == 0) inverse_window_heading = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "keep_channels_sorted") == 0) keep_channels_sorted = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "allow_invite") == 0) allow_invite = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "show_headlines") == 0) show_headlines = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "remember_channels") == 0) remember_channels = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "allow_userinfo") == 0) allow_userinfo = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "extra_highlights") == 0) add_to_string_array(&extra_highlights, par); else if (strcmp(cmd, "only_one_markerline") == 0) only_one_markerline = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "auto_rejoin") == 0) auto_rejoin = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "ignore_mouse") == 0) ignore_mouse = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "irc_keepalive") == 0) irc_keepalive = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "space_after_start_marker") == 0) space_after_start_marker = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "jumpy_navigation") == 0) jumpy_navigation = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "mark_meta") == 0) mark_meta = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "user_column") == 0) user_column = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "full_user") == 0) full_user = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "grep_filter") == 0) add_filter(gp, par, linenr); else if (strcmp(cmd, "headline_filter") == 0) add_filter(hlgp, par, linenr); else if (strcmp(cmd, "show_parts") == 0) show_parts = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "show_mode_changes") == 0) show_mode_changes = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "show_nick_change") == 0) show_nick_change = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "show_joins") == 0) show_joins = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "store_config_on_exit") == 0) store_config_on_exit = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "partial_highlight_match") == 0) partial_highlight_match = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "topic_scroll") == 0) topic_scroll = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "notice_in_serverchannel") == 0) notice_in_server_channel = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "highlight") == 0) highlight = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "fuzzy_highlight") == 0) fuzzy_highlight = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "theme") == 0) { struct stat status; const char *filename = explode_path(par); if (!filename) error_exit(TRUE, "Path '%s' is not understood\n", par); if (stat(filename, &status) == -1) /* file doesn't exist, look for it under SYSCONFDIR */ { int len = strlen(SYSCONFDIR) + strlen(par) + 2; char *theme_path = malloc(len * sizeof(char)); snprintf(theme_path, len, "%s/%s", SYSCONFDIR, par); load_theme(theme_path); theme_file = theme_path; } else { load_theme(filename); theme_file = strdup(par); } myfree(filename); } else if (strcmp(cmd, "ignore_file") == 0) { struct stat status; const char *filename = explode_path(par); if (!filename) error_exit(TRUE, "Path '%s' is not understood\n", par); if (load_ignore_list(par) == TRUE) { } else if (load_ignore_list(filename) == TRUE) { } else if (stat(filename, &status) == -1) /* file doesn't exist, look elsewhere */ { int len = strlen(SYSCONFDIR) + strlen(par) + 2; char *ignore_file = malloc(len * sizeof(char)); /* look for it under SYSCONFDIR */ snprintf(ignore_file, len, "%s/%s", SYSCONFDIR, par); /* look for it under ~/.firc location */ if (stat(ignore_file, &status) == -1) snprintf(ignore_file, len, "%s/%s", dirname(conf_file), par); load_ignore_list(ignore_file); myfree(ignore_file); } myfree(filename); } else if (strcmp(cmd, "send_after_login") == 0) { server *ps = &server_list[server_index]; if (server_index == -1) error_exit(FALSE, "send_after_login: you need to define a server first\n"); add_to_string_array(&ps -> send_after_login, par); } else if (strcmp(cmd, "auto_join") == 0 || strcmp(cmd, "channel") == 0) { if (server_index == -1) error_exit(FALSE, "auto_join: you need to define a server first\n"); add_autojoin(server_index, par); } else if (strcmp(cmd, "rejoin") == 0) { add_channel(server_index, par); if (keep_channels_sorted) sort_channels(server_index); } else if (strcmp(cmd, "auto_private_channel") == 0) auto_private_channel = parse_false_true(par, cmd, linenr); else if (strcmp(cmd, "dcc_path") == 0) dcc_path = strdup(par); else if (strcmp(cmd, "default_colorpair") == 0) default_colorpair = parse_color_spec(par, linenr, cmd); else if (strcmp(cmd, "markerline_colorpair") == 0) markerline_colorpair = parse_color_spec(par, linenr, cmd); else if (strcmp(cmd, "highlight_colorpair") == 0) highlight_colorpair = parse_color_spec(par, linenr, cmd); else if (strcmp(cmd, "meta_colorpair") == 0) meta_colorpair = parse_color_spec(par, linenr, cmd); else if (strcmp(cmd, "error_colorpair") == 0) error_colorpair = parse_color_spec(par, linenr, cmd); else if (strcmp(cmd, "temp_colorpair") == 0) temp_colorpair = parse_color_spec(par, linenr, cmd); else if (strcmp(cmd, "check_for_mail") == 0) check_for_mail = atoi(par); else if (strcmp(cmd, "user_column_width") == 0) user_column_width = atoi(par); else if (strcmp(cmd, "delay_before_reconnect") == 0) delay_before_reconnect = atoi(par); else if (strcmp(cmd, "word_cloud_n") == 0) word_cloud_n = atoi(par); else if (strcmp(cmd, "word_cloud_refresh") == 0) { word_cloud_refresh = atoi(par); word_cloud_last_refresh = time(NULL); } else if (strcmp(cmd, "word_cloud_win_height") == 0) word_cloud_win_height = atoi(par); else if (strcmp(cmd, "max_channel_record_lines") == 0) max_channel_record_lines = atoi(par); else if (strcmp(cmd, "word_cloud_min_word_size") == 0) word_cloud_min_word_size = atoi(par); else { error_exit(FALSE, "'%s=%s' is not understood\n", cmd, par); } myfree(line); } close(fd); if (server_host) { if (nickname == NULL) error_exit(FALSE, "nickname must be set for %s", server_host); add_server(server_host, username, password, nickname, user_complete_name, description); myfree(server_host); myfree(username); myfree(password); myfree(nickname); myfree(user_complete_name); myfree(description); } return 0; }
void convert_ansi(const char *ansi_in, char *out, int *out_index, int out_len, BOOL *has_color) { char *ansi = strdup(ansi_in); int len = strlen(ansi); int cmd = 0, index = 0; string_array_t parts; BOOL bold = FALSE, underline = FALSE, reverse = FALSE; int fgc = 0, bgc = 1; /* white on black is default */ const char *values = ansi + 1; /* skip ^[ */ BOOL new_has_color = FALSE; init_string_array(&parts); /* remove terminating 'm' */ if (len > 0) { cmd = ansi[len - 1]; ansi[len - 1] = 0x00; } if (cmd != 'm') LOG("unexpected ansi command %c!\n", cmd); if (values[0] == '[') values++; split_string(values, ";", TRUE, &parts); for(index=0; index<string_array_get_n(&parts); index++) { int val = atoi(string_array_get(&parts, index)); if (val == 0) /* reset attributes */ { bold = underline = reverse = FALSE; fgc = 0; bgc = 1; new_has_color = FALSE; } else if (val == 1) /* bold */ new_has_color = bold = TRUE; else if (val == 4) /* underline */ new_has_color = underline = TRUE; else if (val == 6) /* blink, use reverse */ new_has_color = reverse = TRUE; else if (val == 7) /* reverse */ new_has_color = reverse = TRUE; else if (val >= 30 && val <= 37) /* foreground color */ { fgc = ansi_color_to_ncurses(val - 30); new_has_color = TRUE; } else if (val >= 40 && val <= 47) /* background color */ { bgc = ansi_color_to_ncurses(val - 40); new_has_color = TRUE; } } if (*has_color) *out_index += snprintf(&out[*out_index], out_len - *out_index, "\x03"); /* ^c terminate previous sequence */ if (bold) *out_index += snprintf(&out[*out_index], out_len - *out_index, "\x02"); /* ^B */ if (underline) *out_index += snprintf(&out[*out_index], out_len - *out_index, "\x1f"); /* ^U */ if (reverse) *out_index += snprintf(&out[*out_index], out_len - *out_index, "\x16"); /* ^V */ *out_index += snprintf(&out[*out_index], out_len - *out_index, "\x03%d,%d", fgc, bgc); *has_color = new_has_color; free_splitted_string(&parts); free(ansi); }