5 A Linux/Unix toolset and driver for Nokia mobile phones.
7 Released under the terms of the GNU GPL, see file COPYING for more details.
9 Functions for manipulating WAP settings and bookmarks
21 #include "gsm-common.h"
24 #include "gsm-coding.h"
26 int GSM_SaveWAPBookmarkToSMS(GSM_MultiSMSMessage *SMS,
27 GSM_WAPBookmark *bookmark)
29 unsigned char Data[500];
34 strcpy(Data+current,"\x01\x06-\x1F");current=current+4;
35 strcpy(Data+current,"+application/x-wap-prov.browser-bookmarks");current=current+12+29;
38 strcpy(Data+current,"\x81\xEA");current=current+2;
40 EncodeUTF8(buffer,bookmark->title,strlen(bookmark->title));
41 if (strlen(bookmark->title)==strlen(buffer)) {
42 strcpy(Data+current,"\x00");current=current+1;
43 strcpy(Data+current,"\x01\x00");current=current+2;
45 strcpy(Data+current,"\x01\x01\x87\x68\x00");current=current+5;
48 strcpy(Data+current,"\x45\xC6\x7F");current=current+3;
50 /* The same to "title" block in WAP settings */
51 strcpy(Data+current,"\x01\x87\x15\x11\x03");current=current+5;
52 if (strlen(bookmark->title)==strlen(buffer)) {
53 strcpy(Data+current,bookmark->title);current=current+strlen(bookmark->title);
55 EncodeUnicode (Data+current, bookmark->title, strlen(bookmark->title));
56 current=current+2*strlen(bookmark->title);
61 /* The same to "homepage" block in WAP settings */
62 strcpy(Data+current,"\x01\x87\x17\x11\x03");current=current+5;
63 if (strlen(bookmark->title)==strlen(buffer)) {
64 strcpy(Data+current,bookmark->address);current=current+strlen(bookmark->address);
66 EncodeUnicode (Data+current, bookmark->address, strlen(bookmark->address));
67 current=current+2*strlen(bookmark->address);
73 strcpy(Data+current,"\x01\x01\x01");current=current+3;
75 if (current>(140-7)) { //more than 1 SMS
76 UDHType=GSM_WAPBookmarkUDHLong;
78 UDHType=GSM_WAPBookmarkUDH;
81 GSM_MakeMultiPartSMS2(SMS, Data,current, UDHType, GSM_Coding_Default);
86 GSM_Error GSM_ReadWAPBookmark(GSM_SMSMessage *message, GSM_WAPBookmark *bookmark)
88 unsigned char Data[250];
91 switch (message->UDHType) {
92 case GSM_WAPBookmarkUDH:
94 strcpy(Data+current,"\x01\x06-\x1F");current=current+4;
95 strcpy(Data+current,"+application/x-wap-prov.browser-bookmarks");current=current+12+29;
98 strcpy(Data+current,"\x81\xEA\x00");current=current+3;
100 strcpy(Data+current,"\x01\x00");current=current+2;
101 strcpy(Data+current,"\x45\xC6\x7F");current=current+3;
103 strcpy(Data+current,"\x01\x87\x15\x11\x03");current=current+5;
105 for (i=0;i<current;i++)
106 if (message->MessageText[i]!=Data[i]) return GE_UNKNOWN;
109 while (message->MessageText[current]!=0x00) {
110 bookmark->title[j++]=message->MessageText[current];
113 bookmark->title[j]=0;
118 while (message->MessageText[current]!=0x00) {
119 bookmark->address[j++]=message->MessageText[current];
122 bookmark->address[j]=0;
134 /* Made from sniff of WAP settings sent from Logo Manager with such file:
137 URL=http://OtherSites/
138 Gateway=192.168.71.81
139 ; 9200=Temporary,Normal 9201=Continuous,Normal 9202=Temp,Secure 9203=Continuous,Secure
141 DialString=+447973100501
142 ; Auth Type can be PAP, CHAP or MS_CHAP
145 PPPAuthPass=Multimedia
155 *application/x-wap-prov.browser-settings
184 /* Function created from software from
185 http://www.tektonica.com/projects/gsmsms/ */
186 int GSM_SaveWAPSettingsToSMS(GSM_MultiSMSMessage *SMS,
187 GSM_WAPSettings *settings)
189 unsigned char Data[500];
192 strcpy(Data+current,"\x01\x06\x04\x03\x94");current=current+5;
194 strcpy(Data+current,"\x81\xEA\x00");current=current+3;
196 strcpy(Data+current,"\x01\x00");current=current+2;
197 strcpy(Data+current,"\x45\xC6\x06");current=current+3;
199 strcpy(Data+current,"\x01\x87\x12");current=current+3;
200 switch (settings->bearer) {
201 case WAPSETTINGS_BEARER_DATA:Data[current++]=0x45;break;
202 case WAPSETTINGS_BEARER_SMS :Data[current++]=0x41;break;
205 strcpy(Data+current,"\x01\x87\x13\x11\x03");current=current+5;
206 strcpy(Data+current,settings->ipaddress);current=current+strlen(settings->ipaddress);
207 Data[current++]=0x00;
209 strcpy(Data+current,"\x01\x87\x14");current=current+3;
210 if (settings->iscontinuous) { Data[current++]=0x61; } //continuous
211 else { Data[current++]=0x60; } //temporary
213 strcpy(Data+current,"\x01\x87\x21\x11\x03");current=current+5;
214 strcpy(Data+current,settings->dialup);current=current+strlen(settings->dialup);
215 Data[current++]=0x00;
217 strcpy(Data+current,"\x01\x87\x22");current=current+3;
218 if (settings->isnormalauthentication) {
219 Data[current++]=0x70;//OTA_CSD_AUTHTYPE_PAP. Correct ?
221 Data[current++]=0x71;//OTA_CSD_AUTHTYPE_CHAP. Correct ?
224 strcpy(Data+current,"\x01\x87\x23\x11\x03");current=current+5;
225 strcpy(Data+current,settings->user);current=current+strlen(settings->user);
226 Data[current++]=0x00;
228 strcpy(Data+current,"\x01\x87\x24\x11\x03");current=current+5;
229 strcpy(Data+current,settings->password);current=current+strlen(settings->password);
230 Data[current++]=0x00;
232 strcpy(Data+current,"\x01\x87\x28");current=current+3;
233 if (settings->isISDNcall) { Data[current++]=0x73; } //ISDN
234 else { Data[current++]=0x72; } //analogue
236 strcpy(Data+current,"\x01\x87\x29");current=current+3;
237 //use constant OTA_CSD_CALLSPEED_AUTO => '6A';
238 if (settings->isspeed14400) { Data[current++]=0x6C; } //14400
239 else { Data[current++]=0x6B; } //9600
241 Data[current++]=0x01;
242 strcpy(Data+current,"\x01\x86\x07\x11\x03");current=current+5;
243 strcpy(Data+current,settings->homepage);current=current+strlen(settings->homepage);
244 Data[current++]=0x00;
246 strcpy(Data+current,"\x01\xC6\x08");current=current+3;
247 strcpy(Data+current,"\x01\x87\x15\x11\x03");current=current+5;
248 strcpy(Data+current,settings->title);current=current+strlen(settings->title);
249 Data[current++]=0x00;
252 strcpy(Data+current,"\x01\x01\x01");current=current+3;
254 GSM_MakeMultiPartSMS2(SMS, Data,current, GSM_WAPSettingsUDH, GSM_Coding_Default);