--- /dev/null
+/*
+
+ G N O K I I
+
+ A Linux/Unix toolset and driver for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+ Functions for manipulating WAP settings and bookmarks
+
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+
+#include "gsm-common.h"
+#include "gsm-wap.h"
+#include "gsm-sms.h"
+#include "gsm-coding.h"
+
+int GSM_SaveWAPBookmarkToSMS(GSM_MultiSMSMessage *SMS,
+ GSM_WAPBookmark *bookmark)
+{
+ unsigned char Data[500];
+ GSM_UDH UDHType;
+ u16 current=0;
+ u8 buffer[50*3];
+
+ strcpy(Data+current,"\x01\x06-\x1F");current=current+4;
+ strcpy(Data+current,"+application/x-wap-prov.browser-bookmarks");current=current+12+29;
+ Data[current++]=0x00;
+
+ strcpy(Data+current,"\x81\xEA");current=current+2;
+
+ EncodeUTF8(buffer,bookmark->title,strlen(bookmark->title));
+ if (strlen(bookmark->title)==strlen(buffer)) {
+ strcpy(Data+current,"\x00");current=current+1;
+ strcpy(Data+current,"\x01\x00");current=current+2;
+ } else {
+ strcpy(Data+current,"\x01\x01\x87\x68\x00");current=current+5;
+ }
+
+ strcpy(Data+current,"\x45\xC6\x7F");current=current+3;
+
+ /* The same to "title" block in WAP settings */
+ strcpy(Data+current,"\x01\x87\x15\x11\x03");current=current+5;
+ if (strlen(bookmark->title)==strlen(buffer)) {
+ strcpy(Data+current,bookmark->title);current=current+strlen(bookmark->title);
+ } else {
+ EncodeUnicode (Data+current, bookmark->title, strlen(bookmark->title));
+ current=current+2*strlen(bookmark->title);
+ Data[current++]=0x00;
+ }
+ Data[current++]=0x00;
+
+ /* The same to "homepage" block in WAP settings */
+ strcpy(Data+current,"\x01\x87\x17\x11\x03");current=current+5;
+ if (strlen(bookmark->title)==strlen(buffer)) {
+ strcpy(Data+current,bookmark->address);current=current+strlen(bookmark->address);
+ } else {
+ EncodeUnicode (Data+current, bookmark->address, strlen(bookmark->address));
+ current=current+2*strlen(bookmark->address);
+ Data[current++]=0x00;
+ }
+ Data[current++]=0x00;
+
+ /* Mark of end */
+ strcpy(Data+current,"\x01\x01\x01");current=current+3;
+
+ if (current>(140-7)) { //more than 1 SMS
+ UDHType=GSM_WAPBookmarkUDHLong;
+ } else {
+ UDHType=GSM_WAPBookmarkUDH;
+ }
+
+ GSM_MakeMultiPartSMS2(SMS, Data,current, UDHType, GSM_Coding_Default);
+
+ return 0;
+}
+
+GSM_Error GSM_ReadWAPBookmark(GSM_SMSMessage *message, GSM_WAPBookmark *bookmark)
+{
+ unsigned char Data[250];
+ int current=0,i,j;
+
+ switch (message->UDHType) {
+ case GSM_WAPBookmarkUDH:
+
+ strcpy(Data+current,"\x01\x06-\x1F");current=current+4;
+ strcpy(Data+current,"+application/x-wap-prov.browser-bookmarks");current=current+12+29;
+ Data[current++]=0x00;
+
+ strcpy(Data+current,"\x81\xEA\x00");current=current+3;
+
+ strcpy(Data+current,"\x01\x00");current=current+2;
+ strcpy(Data+current,"\x45\xC6\x7F");current=current+3;
+
+ strcpy(Data+current,"\x01\x87\x15\x11\x03");current=current+5;
+
+ for (i=0;i<current;i++)
+ if (message->MessageText[i]!=Data[i]) return GE_UNKNOWN;
+
+ j=0;
+ while (message->MessageText[current]!=0x00) {
+ bookmark->title[j++]=message->MessageText[current];
+ current++;
+ }
+ bookmark->title[j]=0;
+
+ current=current+6;
+
+ j=0;
+ while (message->MessageText[current]!=0x00) {
+ bookmark->address[j++]=message->MessageText[current];
+ current++;
+ }
+ bookmark->address[j]=0;
+
+ break;
+
+ default: /* error */
+ return GE_UNKNOWN;
+ break;
+ }
+
+ return GE_NONE;
+}
+
+/* Made from sniff of WAP settings sent from Logo Manager with such file:
+[GSMCSD]
+Name=Orange
+URL=http://OtherSites/
+Gateway=192.168.71.81
+; 9200=Temporary,Normal 9201=Continuous,Normal 9202=Temp,Secure 9203=Continuous,Secure
+Port=9201
+DialString=+447973100501
+; Auth Type can be PAP, CHAP or MS_CHAP
+PPPAuthType=PAP
+PPPAuthName=Orange
+PPPAuthPass=Multimedia
+; ISDN or ANALOGUE
+CallType=ISDN
+CallSpeed=14400
+
+SMS contenst:
+
+0106
+,
+1F
+*application/x-wap-prov.browser-settings
+00
+81ea01016a
+0045c606
+0187121145
+0187141101
+0187131103
+00
+0187211103
+00
+0187281172
+018729116b
+01872211700101c608
+0187151103
+ settings->title
+00
+01
+0186071103
+ settings->homepage
+0001c67f
+0187151103
+ settings->title
+00
+0187171103
+ settings->homepage
+00
+010101
+*/
+
+/* Function created from software from
+ http://www.tektonica.com/projects/gsmsms/ */
+int GSM_SaveWAPSettingsToSMS(GSM_MultiSMSMessage *SMS,
+ GSM_WAPSettings *settings)
+{
+ unsigned char Data[500];
+ u16 current=0;
+
+ strcpy(Data+current,"\x01\x06\x04\x03\x94");current=current+5;
+
+ strcpy(Data+current,"\x81\xEA\x00");current=current+3;
+
+ strcpy(Data+current,"\x01\x00");current=current+2;
+ strcpy(Data+current,"\x45\xC6\x06");current=current+3;
+
+ strcpy(Data+current,"\x01\x87\x12");current=current+3;
+ switch (settings->bearer) {
+ case WAPSETTINGS_BEARER_DATA:Data[current++]=0x45;break;
+ case WAPSETTINGS_BEARER_SMS :Data[current++]=0x41;break;
+ }
+
+ strcpy(Data+current,"\x01\x87\x13\x11\x03");current=current+5;
+ strcpy(Data+current,settings->ipaddress);current=current+strlen(settings->ipaddress);
+ Data[current++]=0x00;
+
+ strcpy(Data+current,"\x01\x87\x14");current=current+3;
+ if (settings->iscontinuous) { Data[current++]=0x61; } //continuous
+ else { Data[current++]=0x60; } //temporary
+
+ strcpy(Data+current,"\x01\x87\x21\x11\x03");current=current+5;
+ strcpy(Data+current,settings->dialup);current=current+strlen(settings->dialup);
+ Data[current++]=0x00;
+
+ strcpy(Data+current,"\x01\x87\x22");current=current+3;
+ if (settings->isnormalauthentication) {
+ Data[current++]=0x70;//OTA_CSD_AUTHTYPE_PAP. Correct ?
+ } else {
+ Data[current++]=0x71;//OTA_CSD_AUTHTYPE_CHAP. Correct ?
+ }
+
+ strcpy(Data+current,"\x01\x87\x23\x11\x03");current=current+5;
+ strcpy(Data+current,settings->user);current=current+strlen(settings->user);
+ Data[current++]=0x00;
+
+ strcpy(Data+current,"\x01\x87\x24\x11\x03");current=current+5;
+ strcpy(Data+current,settings->password);current=current+strlen(settings->password);
+ Data[current++]=0x00;
+
+ strcpy(Data+current,"\x01\x87\x28");current=current+3;
+ if (settings->isISDNcall) { Data[current++]=0x73; } //ISDN
+ else { Data[current++]=0x72; } //analogue
+
+ strcpy(Data+current,"\x01\x87\x29");current=current+3;
+//use constant OTA_CSD_CALLSPEED_AUTO => '6A';
+ if (settings->isspeed14400) { Data[current++]=0x6C; } //14400
+ else { Data[current++]=0x6B; } //9600
+
+ Data[current++]=0x01;
+ strcpy(Data+current,"\x01\x86\x07\x11\x03");current=current+5;
+ strcpy(Data+current,settings->homepage);current=current+strlen(settings->homepage);
+ Data[current++]=0x00;
+
+ strcpy(Data+current,"\x01\xC6\x08");current=current+3;
+ strcpy(Data+current,"\x01\x87\x15\x11\x03");current=current+5;
+ strcpy(Data+current,settings->title);current=current+strlen(settings->title);
+ Data[current++]=0x00;
+
+ /* Mark of end */
+ strcpy(Data+current,"\x01\x01\x01");current=current+3;
+
+ GSM_MakeMultiPartSMS2(SMS, Data,current, GSM_WAPSettingsUDH, GSM_Coding_Default);
+
+ return 0;
+}