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
19 #include "gsm-common.h"
22 #include "gsm-coding.h"
24 int GSM_SaveWAPBookmarkToSMS(GSM_MultiSMSMessage *SMS,
25 GSM_WAPBookmark *bookmark)
27 unsigned char Data[500];
32 strcpy(Data+current,"\x01\x06-\x1F");current=current+4;
33 strcpy(Data+current,"+application/x-wap-prov.browser-bookmarks");current=current+12+29;
36 strcpy(Data+current,"\x81\xEA");current=current+2;
38 EncodeUTF8(buffer,bookmark->title,strlen(bookmark->title));
39 if (strlen(bookmark->title)==strlen(buffer)) {
40 strcpy(Data+current,"\x00");current=current+1;
41 strcpy(Data+current,"\x01\x00");current=current+2;
43 strcpy(Data+current,"\x01\x01\x87\x68\x00");current=current+5;
46 strcpy(Data+current,"\x45\xC6\x7F");current=current+3;
48 /* The same to "title" block in WAP settings */
49 strcpy(Data+current,"\x01\x87\x15\x11\x03");current=current+5;
50 if (strlen(bookmark->title)==strlen(buffer)) {
51 strcpy(Data+current,bookmark->title);current=current+strlen(bookmark->title);
53 EncodeUnicode (Data+current, bookmark->title, strlen(bookmark->title));
54 current=current+2*strlen(bookmark->title);
59 /* The same to "homepage" block in WAP settings */
60 strcpy(Data+current,"\x01\x87\x17\x11\x03");current=current+5;
61 if (strlen(bookmark->title)==strlen(buffer)) {
62 strcpy(Data+current,bookmark->address);current=current+strlen(bookmark->address);
64 EncodeUnicode (Data+current, bookmark->address, strlen(bookmark->address));
65 current=current+2*strlen(bookmark->address);
71 strcpy(Data+current,"\x01\x01\x01");current=current+3;
73 if (current>(140-7)) { //more than 1 SMS
74 UDHType=GSM_WAPBookmarkUDHLong;
76 UDHType=GSM_WAPBookmarkUDH;
79 GSM_MakeMultiPartSMS2(SMS, Data,current, UDHType, GSM_Coding_Default);
84 GSM_Error GSM_ReadWAPBookmark(GSM_SMSMessage *message, GSM_WAPBookmark *bookmark)
86 unsigned char Data[250];
89 switch (message->UDHType) {
90 case GSM_WAPBookmarkUDH:
92 strcpy(Data+current,"\x01\x06-\x1F");current=current+4;
93 strcpy(Data+current,"+application/x-wap-prov.browser-bookmarks");current=current+12+29;
96 strcpy(Data+current,"\x81\xEA\x00");current=current+3;
98 strcpy(Data+current,"\x01\x00");current=current+2;
99 strcpy(Data+current,"\x45\xC6\x7F");current=current+3;
101 strcpy(Data+current,"\x01\x87\x15\x11\x03");current=current+5;
103 for (i=0;i<current;i++)
104 if (message->MessageText[i]!=Data[i]) return GE_UNKNOWN;
107 while (message->MessageText[current]!=0x00) {
108 bookmark->title[j++]=message->MessageText[current];
111 bookmark->title[j]=0;
116 while (message->MessageText[current]!=0x00) {
117 bookmark->address[j++]=message->MessageText[current];
120 bookmark->address[j]=0;
132 /* Made from sniff of WAP settings sent from Logo Manager with such file:
135 URL=http://OtherSites/
136 Gateway=192.168.71.81
137 ; 9200=Temporary,Normal 9201=Continuous,Normal 9202=Temp,Secure 9203=Continuous,Secure
139 DialString=+447973100501
140 ; Auth Type can be PAP, CHAP or MS_CHAP
143 PPPAuthPass=Multimedia
153 *application/x-wap-prov.browser-settings
182 /* Function created from software from
183 http://www.tektonica.com/projects/gsmsms/ */
184 int GSM_SaveWAPSettingsToSMS(GSM_MultiSMSMessage *SMS,
185 GSM_WAPSettings *settings)
187 unsigned char Data[500];
190 strcpy(Data+current,"\x01\x06\x04\x03\x94");current=current+5;
192 strcpy(Data+current,"\x81\xEA\x00");current=current+3;
194 strcpy(Data+current,"\x01\x00");current=current+2;
195 strcpy(Data+current,"\x45\xC6\x06");current=current+3;
197 strcpy(Data+current,"\x01\x87\x12");current=current+3;
198 switch (settings->bearer) {
199 case WAPSETTINGS_BEARER_DATA:Data[current++]=0x45;break;
200 case WAPSETTINGS_BEARER_SMS :Data[current++]=0x41;break;
203 strcpy(Data+current,"\x01\x87\x13\x11\x03");current=current+5;
204 strcpy(Data+current,settings->ipaddress);current=current+strlen(settings->ipaddress);
205 Data[current++]=0x00;
207 strcpy(Data+current,"\x01\x87\x14");current=current+3;
208 if (settings->iscontinuous) { Data[current++]=0x61; } //continuous
209 else { Data[current++]=0x60; } //temporary
211 strcpy(Data+current,"\x01\x87\x21\x11\x03");current=current+5;
212 strcpy(Data+current,settings->dialup);current=current+strlen(settings->dialup);
213 Data[current++]=0x00;
215 strcpy(Data+current,"\x01\x87\x22");current=current+3;
216 if (settings->isnormalauthentication) {
217 Data[current++]=0x70;//OTA_CSD_AUTHTYPE_PAP. Correct ?
219 Data[current++]=0x71;//OTA_CSD_AUTHTYPE_CHAP. Correct ?
222 strcpy(Data+current,"\x01\x87\x23\x11\x03");current=current+5;
223 strcpy(Data+current,settings->user);current=current+strlen(settings->user);
224 Data[current++]=0x00;
226 strcpy(Data+current,"\x01\x87\x24\x11\x03");current=current+5;
227 strcpy(Data+current,settings->password);current=current+strlen(settings->password);
228 Data[current++]=0x00;
230 strcpy(Data+current,"\x01\x87\x28");current=current+3;
231 if (settings->isISDNcall) { Data[current++]=0x73; } //ISDN
232 else { Data[current++]=0x72; } //analogue
234 strcpy(Data+current,"\x01\x87\x29");current=current+3;
235 //use constant OTA_CSD_CALLSPEED_AUTO => '6A';
236 if (settings->isspeed14400) { Data[current++]=0x6C; } //14400
237 else { Data[current++]=0x6B; } //9600
239 Data[current++]=0x01;
240 strcpy(Data+current,"\x01\x86\x07\x11\x03");current=current+5;
241 strcpy(Data+current,settings->homepage);current=current+strlen(settings->homepage);
242 Data[current++]=0x00;
244 strcpy(Data+current,"\x01\xC6\x08");current=current+3;
245 strcpy(Data+current,"\x01\x87\x15\x11\x03");current=current+5;
246 strcpy(Data+current,settings->title);current=current+strlen(settings->title);
247 Data[current++]=0x00;
250 strcpy(Data+current,"\x01\x01\x01");current=current+3;
252 GSM_MakeMultiPartSMS2(SMS, Data,current, GSM_WAPSettingsUDH, GSM_Coding_Default);