/****************************************************************************** * Open the smscenter */ SMSCenter *cimd_open(char *hostname, int port, char *username, char *password) { SMSCenter *smsc = NULL; int ret = 0; /* create a SMSCenter structure */ smsc = smscenter_construct(); if (smsc == NULL) goto error; smsc->type = SMSC_TYPE_CIMD; smsc->cimd_hostname = gw_strdup(hostname); smsc->hostname = gw_strdup(hostname); /* Needed by read_into_buffer() */ smsc->cimd_port = port; smsc->cimd_username = gw_strdup(username); smsc->cimd_password = gw_strdup(password); ret = cimd_open_connection(smsc); if (ret < 0) goto error; sprintf(smsc->name, "CIMD:%s:%d:%s", smsc->cimd_hostname, smsc->cimd_port, smsc->cimd_username); return smsc; error: error(0, "cimd_open: could not open!"); smscenter_destruct(smsc); return NULL; }
SMSCenter *ois_open(int receiveport, const char *hostname, int port, int debug_level) { SMSCenter *smsc; int ret; ois_debug_level = debug_level & OIS_FLAG_DEBUG; SAY(2, "ois_open"); /* create a SMSCenter structure */ smsc = smscenter_construct(); if (smsc == NULL) { goto error; } smsc->type = SMSC_TYPE_OIS; smsc->receive_port = receiveport; smsc->hostname = gw_strdup(hostname); smsc->port = port; smsc->ois_flags = ois_debug_level; ret = ois_open_listener(smsc); if (ret < 0) { goto error; } sprintf(smsc->name, "OIS:TCP/X.25-Translator:localhost:%d:TCP:%.512s:%d", smsc->receive_port, smsc->hostname, smsc->port); return smsc; error: error(0, "ois_open: could not open"); smscenter_destruct(smsc); return NULL; }
void log_set_debug_places(const char *places) { char *p; p = strtok(gw_strdup(places), " ,"); num_places = 0; while (p != NULL && num_places < MAX_LOGGABLE_PLACES) { loggable_places[num_places++] = p; p = strtok(NULL, " ,"); } }
void wap_map_url_config(char *s) { char *in, *out; s = gw_strdup(s); in = strtok(s, " \t"); if (!in) return; out = strtok(NULL, " \t"); if (!out) return; wap_map_add_url(octstr_imm("unknown"), octstr_create(in), octstr_create(out), NULL, NULL, NULL, 0); gw_free(s); }
SMSCenter *smsc_open(CfgGroup *grp) { SMSCenter *smsc; Octstr *type, *host, *username, *password, *phone, *device; Octstr *preferred_prefix, *allowed_prefix, *denied_prefix; Octstr *alt_chars, *allow_ip; Octstr *sema_smscnua, *sema_homenua, *sema_report; Octstr *sender_prefix; long iwaitreport; long port, receive_port, our_port; long keepalive; long ois_debug; long alt_dcs; int typeno; type = cfg_get(grp, octstr_imm("smsc")); if (type == NULL) { error(0, "Required field 'smsc' missing for smsc group."); return NULL; } if (octstr_compare(type, octstr_imm("cimd")) == 0) typeno = SMSC_TYPE_CIMD; else if (octstr_compare(type, octstr_imm("emi_x25")) == 0) typeno = SMSC_TYPE_EMI_X25; else if (octstr_compare(type, octstr_imm("sema")) == 0) typeno = SMSC_TYPE_SEMA_X28; else if (octstr_compare(type, octstr_imm("ois")) == 0) typeno = SMSC_TYPE_OIS; else { error(0, "Unknown SMSC type '%s'", octstr_get_cstr(type)); octstr_destroy(type); return NULL; } host = cfg_get(grp, octstr_imm("host")); if (cfg_get_integer(&port, grp, octstr_imm("port")) == -1) port = 0; if (cfg_get_integer(&receive_port, grp, octstr_imm("receive-port")) == -1) receive_port = 0; if (cfg_get_integer(&our_port, grp, octstr_imm("our-port")) == -1) our_port = 0; username = cfg_get(grp, octstr_imm("smsc-username")); password = cfg_get(grp, octstr_imm("smsc-password")); phone = cfg_get(grp, octstr_imm("phone")); device = cfg_get(grp, octstr_imm("device")); preferred_prefix = cfg_get(grp, octstr_imm("preferred-prefix")); allowed_prefix = cfg_get(grp, octstr_imm("allowed-prefix")); denied_prefix = cfg_get(grp, octstr_imm("denied-prefix")); alt_chars = cfg_get(grp, octstr_imm("alt-charset")); allow_ip = cfg_get(grp, octstr_imm("connect-allow-ip")); sema_smscnua = cfg_get(grp, octstr_imm("smsc_nua")); sema_homenua = cfg_get(grp, octstr_imm("home_nua")); sema_report = cfg_get(grp, octstr_imm("wait_report")); if (sema_report == NULL) iwaitreport = 1; else octstr_parse_long(&iwaitreport, sema_report, 0, 0); if (cfg_get_integer(&keepalive, grp, octstr_imm("keepalive")) == -1) keepalive = 0; if (cfg_get_integer(&alt_dcs, grp, octstr_imm("alt-dcs")) == -1) alt_dcs = 0; if (alt_dcs > 1) alt_dcs = 1; if (cfg_get_integer(&ois_debug, grp, octstr_imm("ois-debug-level")) == -1) ois_debug = 0; sender_prefix = cfg_get(grp, octstr_imm("sender-prefix")); if (sender_prefix == NULL) sender_prefix = octstr_create("never"); smsc = NULL; switch (typeno) { case SMSC_TYPE_CIMD: if (host == NULL || port == 0 || username == NULL || password == NULL) error(0, "Required field missing for CIMD center."); else smsc = cimd_open(octstr_get_cstr(host), port, octstr_get_cstr(username), octstr_get_cstr(password)); break; case SMSC_TYPE_EMI_X25: if (phone == NULL || device == NULL || username == NULL || password == NULL) error(0, "Required field missing for EMI_X25 center."); else smsc = emi_open(octstr_get_cstr(phone), octstr_get_cstr(device), octstr_get_cstr(username), octstr_get_cstr(password)); break; case SMSC_TYPE_SEMA_X28: if (device == NULL || sema_smscnua == NULL || sema_homenua == NULL) error(0, "Required field missing for SEMA center."); else smsc = sema_open(octstr_get_cstr(sema_smscnua), octstr_get_cstr(sema_homenua), octstr_get_cstr(device), iwaitreport); break; case SMSC_TYPE_OIS: if (host == NULL || port == 0 || receive_port == 0) error(0, "Required field missing for OIS center."); else smsc = ois_open(receive_port, octstr_get_cstr(host), port, ois_debug); break; /* add new SMSCes here */ default: /* Unknown SMSC type */ break; } if (smsc != NULL) { if (cfg_get_integer(&smsc->alt_charset, grp, octstr_imm("alt-charset")) == -1) smsc->alt_charset = 0; if (preferred_prefix == NULL) smsc->preferred_prefix = NULL; else smsc->preferred_prefix = gw_strdup(octstr_get_cstr(preferred_prefix)); if (allowed_prefix == NULL) smsc->allowed_prefix = NULL; else smsc->allowed_prefix = gw_strdup(octstr_get_cstr(allowed_prefix)); if (denied_prefix == NULL) smsc->denied_prefix = NULL; else smsc->denied_prefix = gw_strdup(octstr_get_cstr(denied_prefix)); } octstr_destroy(type); octstr_destroy(host); octstr_destroy(username); octstr_destroy(password); octstr_destroy(phone); octstr_destroy(device); octstr_destroy(preferred_prefix); octstr_destroy(denied_prefix); octstr_destroy(allowed_prefix); octstr_destroy(alt_chars); octstr_destroy(allow_ip); octstr_destroy(sema_smscnua); octstr_destroy(sema_homenua); octstr_destroy(sema_report); octstr_destroy(sender_prefix); return smsc; }
static Cookie *parse_cookie(Octstr *cookiestr) { char *v = NULL; char *p = NULL; int delta = 0; Cookie *c = NULL; Octstr **f = NULL; if (cookiestr == NULL) { error(0, "parse_cookie: NULL argument"); return NULL; } v = gw_strdup(octstr_get_cstr (cookiestr)); p = strtok(v, ";"); c = cookie_create(); /* Never returns NULL */ while (p != NULL) { while (isspace((int)*p)) p++; /* Skip leading whitespace */ if (strncasecmp("version", p, 7) == 0) f = &c -> version; else if (strncasecmp("path", p, 4) == 0) f = &c -> path; else if (strncasecmp("domain", p, 6) == 0) f = &c -> domain; /* XXX DAVI: Shouldn't we check if domain is similar * to real domain, and to set domain to * real domain if not set by header ??? */ else if (strncasecmp("max-age", p, 7) == 0) { c -> max_age = atol(strrchr (p, '=') + 1); p = strtok(NULL, ";"); continue; } else if (strncasecmp("expires", p, 7) == 0) { delta = parse_http_date(p); if (delta != -1) c->max_age = delta; p = strtok(NULL, ";"); continue; } else if (strncasecmp("comment", p, 7) == 0 ) { /* Ignore comments */ p = strtok(NULL, ";"); continue; } else if (strncasecmp("secure", p, 6) == 0 ) { /* XXX DAVI: this should processed */ p = strtok(NULL, ";"); continue; } else { /* Name value pair - this should be first */ char *equals = NULL; if ((equals = strchr(p, '=')) != NULL) { *equals = '\0'; c->name = octstr_create(p); c->value = octstr_create(equals + 1); } else { error(0, "parse_cookie: Bad name=value cookie component (%s)", p); cookie_destroy(c); return NULL; } p = strtok(NULL, ";"); continue; } if (*f != NULL) { /* Undefined behaviour - 4.2.2 */ error(0, "parse_cookie: Duplicate cookie field (%s), discarding", p); p = strtok(NULL, ";"); continue; } *f = octstr_create("$"); octstr_append_cstr(*f, p); p = strtok(NULL, ";"); } /* Process version - 4.3.4 * XXX DAVI: Altough it seems to be "MUST" in RFC, no one sends a Version * tag when it's value is "0" if (c->version == NULL) { c->version = octstr_create(""); octstr_append_cstr(c->version, "$Version=\"0\";"); } */ gw_free (v); return c; }
int log_open(char *filename, int level, enum excl_state excl, char *do_rotatelog) { FILE *f = NULL; int i; gw_rwlock_wrlock(&rwlock); rotatelog = gw_strdup(do_rotatelog); if (num_logfiles == MAX_LOGFILES) { gw_rwlock_unlock(&rwlock); error(0, "Too many log files already open, not adding `%s'", filename); return -1; } if (strlen(filename) > FILENAME_MAX) { gw_rwlock_unlock(&rwlock); error(0, "Log filename too long: `%s'.", filename); return -1; } //if (rotate_logfile == NEVER && rotatelog && *rotatelog) { if (rotatelog && *rotatelog) { if (strcmp(rotatelog, "daily") == 0) rotate_logfile = DAILY; else if (strcmp(rotatelog, "weekly") == 0) rotate_logfile = WEEKLY; else if (strcmp(rotatelog, "monthly") == 0) rotate_logfile = MONTHLY; } /* * Check if the file is already opened for logging. * If there is an open file, then assign the file descriptor * that is already existing for this log file. */ for (i = 0; i < num_logfiles && f == NULL; ++i) { if (strcmp(logfiles[i].filename, filename) == 0) f = logfiles[i].file; } /* if not previously opened, then open it now */ if (f == NULL) { f = fopen(filename, "a"); if (f == NULL) { gw_rwlock_unlock(&rwlock); error(errno, "Couldn't open logfile `%s'.", filename); return -1; } } logfiles[num_logfiles].file = f; logfiles[num_logfiles].minimum_output_level = level; logfiles[num_logfiles].exclusive = excl; strcpy(logfiles[num_logfiles].filename, filename); ++num_logfiles; i = num_logfiles - 1; gw_rwlock_unlock(&rwlock); info(0, "Added logfile `%s' with level `%d'. Log rotation: %s. %d.", filename, level, rotatelog ? rotatelog : "never", rotate_logfile); return i; }