static Octstr *make_part_delimiter(Octstr *boundary) { Octstr *part_delimiter; part_delimiter = octstr_create(""); add_delimiter(&part_delimiter); octstr_format_append(part_delimiter, "%s", "--"); octstr_append(part_delimiter, boundary); add_delimiter(&part_delimiter); return part_delimiter; }
/* * Parse a mapping table and create the appropriate targets or * check that a target type is registered with the device-mapper core. */ static int handle_table(struct lib_context *lc, struct dm_task *dmt, char *table, struct dm_versions *targets) { int line = 0, n, ret = 0; uint64_t start, size; char *nl = table, *p, ttype[32]; do { p = nl; line++; /* * Not using sscanf string allocation * because it's not available in dietlibc. */ *ttype = 0; if (sscanf(p, "%" PRIu64 " %" PRIu64 " %31s %n", &start, &size, ttype, &n) < 3) LOG_ERR(lc, 0, "Invalid format in table line %d", line); if (!(ret = valid_ttype(lc, ttype, targets))) break; nl = remove_delimiter((p += n), '\n'); if (dmt) ret = dm_task_add_target(dmt, start, size, ttype, p); add_delimiter(&nl, '\n'); } while (nl && ret); return ret; }
static void add_part_header(Octstr *content_keader, Octstr **wap_content) { if (use_content_header) { octstr_append(*wap_content, content_header); } add_delimiter(wap_content); }
static void add_content_transfer_encoding_type(Octstr *content_flag, Octstr *wap_content) { if (!content_flag) return; if (octstr_compare(content_flag, octstr_imm("base64")) == 0) octstr_append_cstr(wap_content, "Content-transfer-encoding: base64"); add_delimiter(&wap_content); }
static Octstr *make_close_delimiter(Octstr *boundary) { Octstr *close_delimiter; close_delimiter = octstr_create(""); add_delimiter(&close_delimiter); octstr_format_append(close_delimiter, "%s", "--"); octstr_append(close_delimiter, boundary); octstr_format_append(close_delimiter, "%s", "--"); /*add_delimiter(&close_delimiter);*/ return close_delimiter; }
static void add_content_type(Octstr *content_flag, Octstr **wap_content) { if (octstr_compare(content_flag, octstr_imm("wml")) == 0) *wap_content = octstr_format("%s", "Content-Type: text/vnd.wap.wml"); else if (octstr_compare(content_flag, octstr_imm("si")) == 0) *wap_content = octstr_format("%s", "Content-Type: text/vnd.wap.si"); else if (octstr_compare(content_flag, octstr_imm("sl")) == 0) *wap_content = octstr_format("%s", "Content-Type: text/vnd.wap.sl"); else if (octstr_compare(content_flag, octstr_imm("multipart")) == 0) *wap_content = octstr_format("%s", "Content-Type: multipart/related; boundary=fsahgwruijkfldsa"); else if (octstr_compare(content_flag, octstr_imm("mms")) == 0) *wap_content = octstr_format("%s", "Content-Type: application/vnd.wap.mms-message"); else if (octstr_compare(content_flag, octstr_imm("scrap")) == 0) *wap_content = octstr_format("%s", "no type at all"); else if (octstr_compare(content_flag, octstr_imm("nil")) == 0) *wap_content = octstr_create(""); if (octstr_len(*wap_content) > 0) add_delimiter(wap_content); }
static Octstr *push_content_create(void) { Octstr *push_content, *wap_content; Octstr *wap_file_content, *pap_content, *pap_file_content, *bpos, *bcos; wap_content = NULL; push_content = NULL; if (use_hardcoded) { push_content = octstr_create("\r\n\r\n" "--asdlfkjiurwgasf\r\n" "Content-Type: application/xml\r\n\r\n" "<?xml version=\"1.0\"?>" "<!DOCTYPE pap PUBLIC \"-//WAPFORUM//DTD PAP//EN\"" " \"http://www.wapforum.org/DTD/pap_1.0.dtd\">" "<pap>" "<push-message push-id=\"[email protected]\"" " deliver-before-timestamp=\"2002-11-01T06:45:00Z\"" " deliver-after-timestamp=\"2000-02-27T06:45:00Z\"" " progress-notes-requested=\"false\">" "<address address-value=\"WAPPUSH=+358408676001/" "[email protected]\">" "</address>" "<quality-of-service" " priority=\"low\"" " delivery-method=\"unconfirmed\"" " network-required=\"true\"" " network=\"GSM\"" " bearer-required=\"true\"" " bearer=\"SMS\">" "</quality-of-service>" "</push-message>" "</pap>\r\n\r\n" "--asdlfkjiurwgasf\r\n" "Content-Type: text/vnd.wap.si\r\n\r\n" "<?xml version=\"1.0\"?>" "<!DOCTYPE si PUBLIC \"-//WAPFORUM//DTD SI 1.0//EN\" " " \"http://www.wapforum.org/DTD/si.dtd\">" "<si>" "<indication href=\"http://wap.iobox.fi\"" " si-id=\"[email protected]\"" " action=\"signal-high\"" " created=\"1999-06-25T15:23:15Z\"" " si-expires=\"2002-12-30T00:00:00Z\">" "Want to test a fetch?" "</indication>" "</si>\r\n\r\n" "--asdlfkjiurwgasf--\r\n\r\n" ""); } else { add_content_type(content_flag, &wap_content); add_content_transfer_encoding_type(content_transfer_encoding, wap_content); add_part_header(content_header, &wap_content); /* Read the content file. (To be pushed)*/ if ((wap_file_content = octstr_read_file(octstr_get_cstr(content_file))) == NULL) panic(0, "Stopping"); if (accept_binary) { octstr_delete_matching(wap_file_content, octstr_imm(" ")); octstr_delete_matching(wap_file_content, octstr_imm("\n")); octstr_delete_matching(wap_file_content, octstr_imm("\r")); if (!octstr_is_all_hex(wap_file_content)) panic(0, "non-hex chars in the content file, cannot continue"); octstr_hex_to_binary(wap_file_content); } transfer_encode(content_transfer_encoding, wap_file_content); octstr_append(wap_content, wap_file_content); octstr_destroy(wap_file_content); /* Read the control file. (To control pushing)*/ pap_content = octstr_format("%s", "Content-Type: application/xml"); add_delimiter(&pap_content); add_delimiter(&pap_content); if ((pap_file_content = octstr_read_file(octstr_get_cstr(pap_file))) == NULL) panic(0, "Stopping"); octstr_append(pap_content, pap_file_content); octstr_destroy(pap_file_content); if (wap_content == NULL || pap_content == NULL) panic(0, "Cannot open the push content files"); push_content = octstr_create(""); if (add_preamble) octstr_append(push_content, octstr_imm("the parser should discard this")); octstr_append(push_content, bpos = make_part_delimiter(octstr_imm(boundary))); /*octstr_append(push_content, octstr_imm("\r\n"));*/ /* Do we accept an additional * clrf ? */ octstr_append(push_content, pap_content); octstr_append(push_content, bpos); octstr_destroy(bpos); octstr_append(push_content, wap_content); octstr_append(push_content, bcos = make_close_delimiter(octstr_imm(boundary))); if (add_epilogue) { octstr_append(push_content, octstr_imm("\r\n")); octstr_append(push_content, octstr_imm("the parser should discard this")); } octstr_destroy(bcos); octstr_destroy(pap_content); octstr_destroy(wap_content); } return push_content; }