static Octstr *make_connectreply_pdu(WSPMachine *m) { WSP_PDU *pdu; Octstr *os; List *caps; List *reply_headers; pdu = wsp_pdu_create(ConnectReply); pdu->u.ConnectReply.sessionid = m->session_id; caps = make_capabilities_reply(m); pdu->u.ConnectReply.capabilities = wsp_cap_pack_list(caps); wsp_cap_destroy_list(caps); reply_headers = make_reply_headers(m); pdu->u.ConnectReply.headers = wsp_headers_pack(reply_headers, 0, m->encoding_version); http_destroy_headers(reply_headers); os = wsp_pdu_pack(pdu); wsp_pdu_destroy(pdu); return os; }
/* * Pack contact points and application id list into sia content type. It is * defined in ota, p. 18. */ static Octstr *pack_sia(List *headers) { Octstr *sia_content; WSP_PDU *pdu; pdu = wsp_pdu_create(sia); pdu->u.sia.version = CURRENT_VERSION; pdu->u.sia.application_id_list = pack_appid_list(headers); pdu->u.sia.contactpoints = pack_server_address(); sia_content = wsp_pdu_pack(pdu); wsp_pdu_destroy(pdu); http_destroy_headers(headers); return sia_content; }
static Octstr *make_resume_reply_pdu(WSPMachine *m, List *headers) { WSP_PDU *pdu; Octstr *os; pdu = wsp_pdu_create(Reply); /* Not specified for Resume replies */ pdu->u.Reply.status = wsp_convert_http_status_to_wsp_status(HTTP_OK); if (headers == NULL) { headers = http_create_empty_headers(); pdu->u.Reply.headers = wsp_headers_pack(headers, 1, m->encoding_version); http_destroy_headers(headers); } else { pdu->u.Reply.headers = wsp_headers_pack(headers, 1, m->encoding_version); } pdu->u.Reply.data = octstr_create(""); os = wsp_pdu_pack(pdu); wsp_pdu_destroy(pdu); return os; }
int main(int argc, char **argv) { int i; Octstr *packet = NULL; Octstr *newpacket = NULL; WTP_PDU *pdu = NULL; Octstr *wsp_data = NULL; WSP_PDU *wsp = NULL; gwlib_init(); for (i = 1; i < argc; i++) { octstr_destroy(packet); packet = NULL; octstr_destroy(newpacket); newpacket = NULL; octstr_destroy(wsp_data); wsp_data = NULL; wtp_pdu_destroy(pdu); pdu = NULL; wsp_pdu_destroy(wsp); wsp = NULL; packet = octstr_read_file(argv[i]); pdu = wtp_pdu_unpack(packet); if (!pdu) { warning(0, "Unpacking PDU %s failed", argv[i]); continue; } debug("test", 0, "PDU %s:", argv[i]); wtp_pdu_dump(pdu, 0); newpacket = wtp_pdu_pack(pdu); if (!newpacket) { warning(0, "Repacking PDU %s failed", argv[i]); continue; } if (octstr_compare(packet, newpacket) != 0) { error(0, "Repacking PDU %s changed it", argv[i]); debug("test", 0, "Original:"); octstr_dump(packet, 1); debug("test", 0, "New:"); octstr_dump(newpacket, 1); continue; } if (pdu->type == Invoke) { wsp_data = pdu->u.Invoke.user_data; } else if (pdu->type == Result) { wsp_data = pdu->u.Result.user_data; } else { continue; } wsp_data = octstr_duplicate(wsp_data); wsp = wsp_pdu_unpack(wsp_data); if (!wsp) { warning(0, "Unpacking WSP data in %s failed", argv[i]); continue; } wsp_pdu_dump(wsp, 0); octstr_destroy(newpacket); newpacket = wsp_pdu_pack(wsp); if (!newpacket) { warning(0, "Repacking WSP data in %s failed", argv[i]); continue; } if (octstr_compare(wsp_data, newpacket) != 0) { error(0, "Repacking WSP data in %s changed it", argv[i]); debug("test", 0, "Original:"); octstr_dump(wsp_data, 1); debug("test", 0, "New:"); octstr_dump(newpacket, 1); continue; } } octstr_destroy(packet); octstr_destroy(newpacket); wtp_pdu_destroy(pdu); gwlib_shutdown(); return 0; }