Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

ota_prov.h File Reference

#include "gwlib/gwlib.h"

Include dependency graph for ota_prov.h:

Include dependency graph

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

Included by dependency graph

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)
Msgota_tokenize_settings (CfgGroup *grp, Octstr *from, Octstr *receiver)
Msgota_tokenize_bookmarks (CfgGroup *grp, Octstr *from, Octstr *receiver)


Function Documentation

int ota_pack_message Msg **  msg,
Octstr ota_doc,
Octstr doc_type,
Octstr from,
Octstr phone_number,
Octstr sec,
Octstr pin
 

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:

Msg* ota_tokenize_bookmarks CfgGroup grp,
Octstr from,
Octstr receiver
 

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:

Msg* ota_tokenize_settings CfgGroup grp,
Octstr from,
Octstr receiver
 

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:

See file LICENSE for details about the license agreement for using, modifying, copying or deriving work from this software.