#include "gwlib/gwlib.h"Include dependency graph for ota_prov.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.
Functions | |
| int | ota_pack_message (Msg **msg, Octstr *ota_doc, Octstr *doc_type, Octstr *from, Octstr *phone_number, Octstr *sec, Octstr *pin) |
| Msg * | ota_tokenize_settings (CfgGroup *grp, Octstr *from, Octstr *receiver) |
| Msg * | ota_tokenize_bookmarks (CfgGroup *grp, Octstr *from, Octstr *receiver) |
|
||||||||||||||||||||||||||||||||
|
Definition at line 207 of file ota_prov.c. References info(), msg_create, octstr_destroy(), octstr_dump, octstr_duplicate, octstr_format_append(), octstr_get_cstr, octstr_imm(), ota_compile(), ota_pack_push_headers(), ota_pack_udh(), and sms. Referenced by smsbox_req_sendota(), and smsbox_sendota_post(). 00209 {
00210 Octstr *ota_binary;
00211
00212 *msg = msg_create(sms);
00213 (*msg)->sms.sms_type = mt_push;
00214
00215 ota_pack_udh(msg, doc_type);
00216
00217 if (ota_compile(ota_doc, octstr_imm("UTF-8"), &ota_binary) == -1)
00218 goto cerror;
00219
00220 if (!ota_pack_push_headers(msg, doc_type, sec, pin, ota_binary))
00221 goto herror;
00222
00223 octstr_format_append((*msg)->sms.msgdata, "%S", ota_binary);
00224 (*msg)->sms.sender = octstr_duplicate(from);
00225 (*msg)->sms.receiver = octstr_duplicate(phone_number);
00226 (*msg)->sms.coding = DC_8BIT;
00227 (*msg)->sms.time = time(NULL);
00228
00229 octstr_dump((*msg)->sms.msgdata, 0);
00230 info(0, "/cgi-bin/sendota: XML request for target <%s>", octstr_get_cstr(phone_number));
00231
00232 octstr_destroy(ota_binary);
00233 octstr_destroy(ota_doc);
00234 octstr_destroy(doc_type);
00235 octstr_destroy(from);
00236 octstr_destroy(sec);
00237 octstr_destroy(pin);
00238 return 0;
00239
00240 herror:
00241 octstr_destroy(ota_binary);
00242 octstr_destroy(ota_doc);
00243 octstr_destroy(doc_type);
00244 octstr_destroy(from);
00245 octstr_destroy(sec);
00246 octstr_destroy(pin);
00247 return -2;
00248
00249 cerror:
00250 octstr_destroy(ota_doc);
00251 octstr_destroy(doc_type);
00252 octstr_destroy(from);
00253 octstr_destroy(sec);
00254 octstr_destroy(pin);
00255 return -1;
00256 }
|
Here is the call graph for this function:

|
||||||||||||||||
|
Definition at line 540 of file ota_prov.c. References cfg_get, msg_create, name, octstr_append(), octstr_append_char(), octstr_append_from_hex(), octstr_create, octstr_destroy(), octstr_duplicate, octstr_format_append(), octstr_imm(), sms, WBXML_TOK_END, WBXML_TOK_END_STR_I, WBXML_TOK_NAME_NAME, WBXML_TOK_NAME_URL, WBXML_TOK_STR_I, WBXML_TOK_TYPE_BOOKMARK, and WBXML_TOK_VALUE. Referenced by smsbox_req_sendota(). 00541 {
00542 Octstr *url, *name;
00543 Msg *msg;
00544
00545 url = NULL;
00546 name = NULL;
00547
00548 url = cfg_get(grp, octstr_imm("url"));
00549 name = cfg_get(grp, octstr_imm("name"));
00550
00551 msg = msg_create(sms);
00552
00553 /*
00554 * Append the User Data Header (UDH) including the lenght (UDHL)
00555 * WDP layer (start WDP headers)
00556 */
00557
00558 msg->sms.sms_type = mt_push;
00559 msg->sms.udhdata = octstr_create("");
00560
00561 octstr_append_from_hex(msg->sms.udhdata, "060504C34FC002");
00562 /* WDP layer (end WDP headers) */
00563
00564 /*
00565 * WSP layer (start WSP headers)
00566 */
00567
00568 msg->sms.msgdata = octstr_create("");
00569 /* PUSH ID, PDU type, header length, value length */
00570 octstr_append_from_hex(msg->sms.msgdata, "01062D1F2B");
00571 /* MIME-type: application/x-wap-prov.browser-bookmarks */
00572 octstr_format_append(msg->sms.msgdata, "%s",
00573 "application/x-wap-prov.browser-bookmarks");
00574 octstr_append_from_hex(msg->sms.msgdata, "00");
00575 /* charset UTF-8 */
00576 octstr_append_from_hex(msg->sms.msgdata, "81EA");
00577 /* WSP layer (end WSP headers) */
00578
00579 /*
00580 * WSP layer (start WSP data field)
00581 */
00582
00583 /* WBXML version 1.1 */
00584 octstr_append_from_hex(msg->sms.msgdata, "0101");
00585 /* charset UTF-8 */
00586 octstr_append_from_hex(msg->sms.msgdata, "6A00");
00587
00588 /* CHARACTERISTIC_LIST */
00589 octstr_append_from_hex(msg->sms.msgdata, "45");
00590 /* CHARACTERISTIC with content and attributes */
00591 octstr_append_from_hex(msg->sms.msgdata, "C6");
00592 /* TYPE=BOOKMARK */
00593 octstr_append_char(msg->sms.msgdata, WBXML_TOK_TYPE_BOOKMARK);
00594 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00595
00596 /* name */
00597 if (name != NULL) {
00598 /* PARM with attributes */
00599 octstr_append_from_hex(msg->sms.msgdata, "87");
00600 /* NAME=PROXY, VALUE, inline string */
00601 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_NAME);
00602 octstr_append_char(msg->sms.msgdata, WBXML_TOK_VALUE);
00603 octstr_append_char(msg->sms.msgdata, WBXML_TOK_STR_I);
00604 octstr_append(msg->sms.msgdata, octstr_duplicate(name));
00605 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END_STR_I);
00606 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00607 }
00608 /* URL */
00609 if (url != NULL) {
00610 /* PARM with attributes */
00611 octstr_append_from_hex(msg->sms.msgdata, "87");
00612 /* NAME=PROXY, VALUE, inline string */
00613 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_URL);
00614 octstr_append_char(msg->sms.msgdata, WBXML_TOK_VALUE);
00615 octstr_append_char(msg->sms.msgdata, WBXML_TOK_STR_I);
00616 octstr_append(msg->sms.msgdata, octstr_duplicate(url));
00617 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END_STR_I);
00618 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00619 }
00620
00621 /* end of CHARACTERISTIC */
00622 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00623 /* end of CHARACTERISTIC-LIST */
00624 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00625 /* WSP layer (end WSP data field) */
00626
00627 msg->sms.sender = from;
00628 msg->sms.receiver = octstr_duplicate(receiver);
00629 msg->sms.coding = DC_8BIT;
00630
00631 msg->sms.time = time(NULL);
00632
00633 octstr_destroy(name);
00634 octstr_destroy(url);
00635
00636 return msg;
00637 }
|
Here is the call graph for this function:

|
||||||||||||||||
|
Definition at line 259 of file ota_prov.c. References cfg_get, msg_create, octstr_append(), octstr_append_char(), octstr_append_from_hex(), octstr_compare(), octstr_create, octstr_destroy(), octstr_duplicate, octstr_format_append(), octstr_get_cstr, octstr_imm(), sms, username, WBXML_TOK_END, WBXML_TOK_END_STR_I, WBXML_TOK_NAME_BEARER, WBXML_TOK_NAME_CSD_CALLSPEED, WBXML_TOK_NAME_CSD_CALLTYPE, WBXML_TOK_NAME_CSD_DIALSTRING, WBXML_TOK_NAME_NAME, WBXML_TOK_NAME_PORT, WBXML_TOK_NAME_PPP_AUTHNAME, WBXML_TOK_NAME_PPP_AUTHSECRET, WBXML_TOK_NAME_PPP_AUTHTYPE, WBXML_TOK_NAME_PROXY, WBXML_TOK_STR_I, WBXML_TOK_TYPE_ADDRESS, WBXML_TOK_TYPE_NAME, WBXML_TOK_TYPE_URL, WBXML_TOK_VALUE, and WBXML_TOK_VALUE_PORT_9203. Referenced by smsbox_req_sendota(). 00260 {
00261 Octstr *url, *desc, *ipaddr, *phonenum, *username, *passwd;
00262 int speed, bearer, calltype, connection, security, authent;
00263 Msg *msg;
00264 Octstr *p;
00265
00266 url = NULL;
00267 desc = NULL;
00268 ipaddr = NULL;
00269 phonenum = NULL;
00270 username = NULL;
00271 passwd = NULL;
00272 bearer = -1;
00273 calltype = WBXML_TOK_VALUE_CONN_ISDN;
00274 connection = WBXML_TOK_VALUE_PORT_9201;
00275 security = 0;
00276 authent = WBXML_TOK_VALUE_AUTH_PAP;
00277
00278 url = cfg_get(grp, octstr_imm("location"));
00279 desc = cfg_get(grp, octstr_imm("service"));
00280 ipaddr = cfg_get(grp, octstr_imm("ipaddress"));
00281 phonenum = cfg_get(grp, octstr_imm("phonenumber"));
00282 p = cfg_get(grp, octstr_imm("bearer"));
00283 if (p != NULL) {
00284 if (strcasecmp(octstr_get_cstr(p), "data") == 0)
00285 bearer = WBXML_TOK_VALUE_GSM_CSD;
00286 else
00287 bearer = -1;
00288 octstr_destroy(p);
00289 }
00290 p = cfg_get(grp, octstr_imm("calltype"));
00291 if (p != NULL) {
00292 if (strcasecmp(octstr_get_cstr(p), "analog") == 0)
00293 calltype = WBXML_TOK_VALUE_CONN_ANALOGUE;
00294 else
00295 calltype = WBXML_TOK_VALUE_CONN_ISDN;
00296 octstr_destroy(p);
00297 }
00298
00299 speed = WBXML_TOK_VALUE_SPEED_9600;
00300 p = cfg_get(grp, octstr_imm("speed"));
00301 if (p != NULL) {
00302 if (octstr_compare(p, octstr_imm("14400")) == 0)
00303 speed = WBXML_TOK_VALUE_SPEED_14400;
00304 octstr_destroy(p);
00305 }
00306
00307 /* connection mode: UDP (port 9200) or TCP (port 9201)*/
00308 p = cfg_get(grp, octstr_imm("connection"));
00309 if (p != NULL) {
00310 if (strcasecmp(octstr_get_cstr(p), "temp") == 0)
00311 connection = WBXML_TOK_VALUE_PORT_9200;
00312 else
00313 connection = WBXML_TOK_VALUE_PORT_9201;
00314 octstr_destroy(p);
00315 }
00316
00317 /* dial in security: CHAP or PAP */
00318 p = cfg_get(grp, octstr_imm("pppsecurity"));
00319 if (p != NULL) {
00320 if (strcasecmp(octstr_get_cstr(p), "on") == 0)
00321 authent = WBXML_TOK_VALUE_AUTH_CHAP;
00322 else
00323 authent = WBXML_TOK_VALUE_AUTH_PAP;
00324 octstr_destroy(p);
00325 }
00326
00327 /* WTLS: for UDP (port 9202) or TCP (port 9203) */
00328 p = cfg_get(grp, octstr_imm("authentication"));
00329 if (p != NULL) {
00330 if (strcasecmp(octstr_get_cstr(p), "secure") == 0)
00331 security = 1;
00332 else
00333 security = WBXML_TOK_VALUE_PORT_9201;
00334 octstr_destroy(p);
00335 }
00336 if (security == 1)
00337 connection = (connection == WBXML_TOK_VALUE_PORT_9201)?
00338 WBXML_TOK_VALUE_PORT_9203 : WBXML_TOK_VALUE_PORT_9202;
00339
00340 username = cfg_get(grp, octstr_imm("login"));
00341 passwd = cfg_get(grp, octstr_imm("secret"));
00342
00343 msg = msg_create(sms);
00344
00345 /*
00346 * Append the User Data Header (UDH) including the lenght (UDHL)
00347 * WDP layer (start WDP headers)
00348 */
00349
00350 msg->sms.sms_type = mt_push;
00351 msg->sms.udhdata = octstr_create("");
00352
00353 /*
00354 * Within OTA spec this is "0B0504C34FC0020003040201", but it works
00355 * with the following too?!
00356 */
00357 octstr_append_from_hex(msg->sms.udhdata, "060504C34FC002");
00358 /* WDP layer (end WDP headers) */
00359
00360 /*
00361 * WSP layer (start WSP headers)
00362 */
00363
00364 msg->sms.msgdata = octstr_create("");
00365 /* PUSH ID, PDU type, header length, value length */
00366 octstr_append_from_hex(msg->sms.msgdata, "01062C1F2A");
00367 /* MIME-type: application/x-wap-prov.browser-settings */
00368 octstr_format_append(msg->sms.msgdata, "%s",
00369 "application/x-wap-prov.browser-settings");
00370 octstr_append_from_hex(msg->sms.msgdata, "00");
00371 /* charset UTF-8 */
00372 octstr_append_from_hex(msg->sms.msgdata, "81EA");
00373 /* WSP layer (end WSP headers) */
00374
00375 /*
00376 * WSP layer (start WSP data field)
00377 */
00378
00379 /* WBXML version 1.1 */
00380 octstr_append_from_hex(msg->sms.msgdata, "0101");
00381 /* charset UTF-8 */
00382 octstr_append_from_hex(msg->sms.msgdata, "6A00");
00383
00384 /* CHARACTERISTIC_LIST */
00385 octstr_append_from_hex(msg->sms.msgdata, "45");
00386 /* CHARACTERISTIC with content and attributes */
00387 octstr_append_from_hex(msg->sms.msgdata, "C6");
00388 /* TYPE=ADDRESS */
00389 octstr_append_char(msg->sms.msgdata, WBXML_TOK_TYPE_ADDRESS);
00390 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00391
00392 /* bearer type */
00393 if (bearer != -1) {
00394 /* PARM with attributes */
00395 octstr_append_from_hex(msg->sms.msgdata, "87");
00396 /* NAME=BEARER, VALUE=GSM_CSD */
00397 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_BEARER);
00398 octstr_append_char(msg->sms.msgdata, bearer);
00399 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00400 }
00401 /* IP address */
00402 if (ipaddr != NULL) {
00403 /* PARM with attributes */
00404 octstr_append_from_hex(msg->sms.msgdata, "87");
00405 /* NAME=PROXY, VALUE, inline string */
00406 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_PROXY);
00407 octstr_append_char(msg->sms.msgdata, WBXML_TOK_VALUE);
00408 octstr_append_char(msg->sms.msgdata, WBXML_TOK_STR_I);
00409 octstr_append(msg->sms.msgdata, octstr_duplicate(ipaddr));
00410 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END_STR_I);
00411 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00412 }
00413 /* connection type */
00414 if (connection != -1) {
00415 /* PARM with attributes */
00416 octstr_append_from_hex(msg->sms.msgdata, "87");
00417 /* NAME=PORT, VALUE */
00418 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_PORT);
00419 octstr_append_char(msg->sms.msgdata, connection);
00420 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00421 }
00422 /* phone number */
00423 if (phonenum != NULL) {
00424 /* PARM with attributes */
00425 octstr_append_from_hex(msg->sms.msgdata, "87");
00426 /* NAME=CSD_DIALSTRING, VALUE, inline string */
00427 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_CSD_DIALSTRING);
00428 octstr_append_char(msg->sms.msgdata, WBXML_TOK_VALUE);
00429 octstr_append_char(msg->sms.msgdata, WBXML_TOK_STR_I);
00430 octstr_append(msg->sms.msgdata, octstr_duplicate(phonenum));
00431 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END_STR_I);
00432 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00433 }
00434 /* authentication */
00435 /* PARM with attributes */
00436 octstr_append_from_hex(msg->sms.msgdata, "87");
00437 /* NAME=PPP_AUTHTYPE, VALUE */
00438 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_PPP_AUTHTYPE);
00439 octstr_append_char(msg->sms.msgdata, authent);
00440 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00441 /* user name */
00442 if (username != NULL) {
00443 /* PARM with attributes */
00444 octstr_append_from_hex(msg->sms.msgdata, "87");
00445 /* NAME=PPP_AUTHNAME, VALUE, inline string */
00446 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_PPP_AUTHNAME);
00447 octstr_append_char(msg->sms.msgdata, WBXML_TOK_VALUE);
00448 octstr_append_char(msg->sms.msgdata, WBXML_TOK_STR_I);
00449 octstr_append(msg->sms.msgdata, octstr_duplicate(username));
00450 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END_STR_I);
00451 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00452 }
00453 /* password */
00454 if (passwd != NULL) {
00455 /* PARM with attributes */
00456 octstr_append_from_hex(msg->sms.msgdata, "87");
00457 /* NAME=PPP_AUTHSECRET, VALUE, inline string */
00458 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_PPP_AUTHSECRET);
00459 octstr_append_char(msg->sms.msgdata, WBXML_TOK_VALUE);
00460 octstr_append_char(msg->sms.msgdata, WBXML_TOK_STR_I);
00461 octstr_append(msg->sms.msgdata, octstr_duplicate(passwd));
00462 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END_STR_I);
00463 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00464 }
00465 /* data call type */
00466 if (calltype != -1) {
00467 /* PARM with attributes */
00468 octstr_append_from_hex(msg->sms.msgdata, "87");
00469 /* NAME=CSD_CALLTYPE, VALUE */
00470 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_CSD_CALLTYPE);
00471 octstr_append_char(msg->sms.msgdata, calltype);
00472 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00473 }
00474 /* speed */
00475 /* PARM with attributes */
00476 octstr_append_from_hex(msg->sms.msgdata, "87");
00477 /* NAME=CSD_CALLSPEED, VALUE */
00478 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_CSD_CALLSPEED);
00479 octstr_append_char(msg->sms.msgdata, speed);
00480 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00481
00482 /* end CHARACTERISTIC TYPE=ADDRESS */
00483 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00484
00485 /* homepage */
00486 if (url != NULL) {
00487 /* CHARACTERISTIC with attributes */
00488 octstr_append_from_hex(msg->sms.msgdata, "86");
00489 /* TYPE=URL */
00490 octstr_append_char(msg->sms.msgdata, WBXML_TOK_TYPE_URL);
00491 octstr_append_char(msg->sms.msgdata, WBXML_TOK_VALUE);
00492 octstr_append_char(msg->sms.msgdata, WBXML_TOK_STR_I);
00493 octstr_append(msg->sms.msgdata, url);
00494 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END_STR_I);
00495 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00496 }
00497
00498 /* CHARACTERISTIC with content and attributes */
00499 octstr_append_from_hex(msg->sms.msgdata, "C6");
00500 /* TYPE=NAME */
00501 octstr_append_char(msg->sms.msgdata, WBXML_TOK_TYPE_NAME);
00502 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00503
00504 /* service description */
00505 if (desc != NULL) {
00506 /* PARAM with attributes */
00507 octstr_append_from_hex(msg->sms.msgdata, "87");
00508 /* NAME=NAME, VALUE, inline */
00509 octstr_append_char(msg->sms.msgdata, WBXML_TOK_NAME_NAME);
00510 octstr_append_char(msg->sms.msgdata, WBXML_TOK_VALUE);
00511 octstr_append_char(msg->sms.msgdata, WBXML_TOK_STR_I);
00512 octstr_append(msg->sms.msgdata, desc);
00513 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END_STR_I);
00514 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00515 }
00516
00517 /* end of CHARACTERISTIC */
00518 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00519 /* end of CHARACTERISTIC-LIST */
00520 octstr_append_char(msg->sms.msgdata, WBXML_TOK_END);
00521 /* WSP layer (end WSP data field) */
00522
00523 msg->sms.sender = from;
00524 msg->sms.receiver = octstr_duplicate(receiver);
00525 msg->sms.coding = DC_8BIT;
00526
00527 msg->sms.time = time(NULL);
00528
00529 octstr_destroy(url);
00530 octstr_destroy(desc);
00531 octstr_destroy(ipaddr);
00532 octstr_destroy(phonenum);
00533 octstr_destroy(username);
00534 octstr_destroy(passwd);
00535
00536 return msg;
00537 }
|
Here is the call graph for this function:
