summaryrefslogtreecommitdiffabout
path: root/gammu/emb/common/service/backup/backtext.c
Side-by-side diff
Diffstat (limited to 'gammu/emb/common/service/backup/backtext.c') (more/less context) (show whitespace changes)
-rw-r--r--gammu/emb/common/service/backup/backtext.c221
1 files changed, 211 insertions, 10 deletions
diff --git a/gammu/emb/common/service/backup/backtext.c b/gammu/emb/common/service/backup/backtext.c
index fee0f73..4cb1bb7 100644
--- a/gammu/emb/common/service/backup/backtext.c
+++ b/gammu/emb/common/service/backup/backtext.c
@@ -58,239 +58,240 @@ GSM_Error FindBackupChecksum(char *FileName, bool UseUnicode, char *checksum)
// dbgprintf("%s=%s\n",e->EntryName,e->EntryValue);
buffer = (unsigned char *)realloc(buffer,len+strlen(e->EntryName)+1);
strcpy(buffer+len,e->EntryName);
len+=strlen(e->EntryName);
buffer = (unsigned char *)realloc(buffer,len+strlen(e->EntryValue)+1);
strcpy(buffer+len,e->EntryValue);
len+=strlen(e->EntryValue);
}
}
}
//for (i=0;i<len;i++) printf("%02x",buffer[i]);
CalculateMD5(buffer, len, checksum);
free(buffer);
return ERR_NONE;
}
static unsigned char *ReadCFGText(INI_Section *cfg, unsigned char *section, unsigned char *key, bool Unicode)
{
unsigned char Buffer[500],Buffer2[500],*retval;
if (Unicode) {
EncodeUnicode(Buffer2,key,strlen(key));
retval = INI_GetValue(cfg,section,Buffer2,Unicode);
if (retval != NULL) return DecodeUnicodeString(retval);
return NULL;
} else {
strcpy(Buffer,section);
strcpy(Buffer2,key);
return INI_GetValue(cfg,section,key,Unicode);
}
}
static void SaveLinkedBackupText(FILE *file, char *myname, char *myvalue, bool UseUnicode)
{
int w,current;
unsigned char buffer2[1000],buffer3[1000];
current = strlen(myvalue); w = 0;
while (true) {
if (current > 200) {
memcpy(buffer2,myvalue+(strlen(myvalue)-current),200);
buffer2[200] = 0;
current = current - 200;
} else {
memcpy(buffer2,myvalue+(strlen(myvalue)-current),current);
buffer2[current] = 0;
current = 0;
}
if (UseUnicode) {
sprintf(buffer3,"%s%02i = %s%c%c",myname,w,buffer2,13,10);
EncodeUnicode(buffer2,buffer3,strlen(buffer3));
fwrite(buffer2,1,strlen(buffer3)*2,file);
} else {
fprintf(file,"%s%02i = %s%c%c",myname,w,buffer2,13,10);
}
if (current == 0) break;
w++;
}
}
static void ReadLinkedBackupText(INI_Section *file_info, char *section, char *myname, char *myvalue, bool UseUnicode)
{
unsigned char buffer2[300];
char *readvalue;
int i;
i=0;
myvalue[0] = 0;
while (true) {
sprintf(buffer2,"%s%02i",myname,i);
readvalue = ReadCFGText(file_info, section, buffer2, UseUnicode);
if (readvalue!=NULL) {
myvalue[strlen(myvalue)+strlen(readvalue)]=0;
memcpy(myvalue+strlen(myvalue),readvalue,strlen(readvalue));
} else break;
i++;
}
}
static void SaveBackupText(FILE *file, char *myname, char *myvalue, bool UseUnicode)
{
unsigned char buffer[10000], buffer2[10000];
if (myname[0] == 0x00) {
if (UseUnicode) {
EncodeUnicode(buffer,myvalue,strlen(myvalue));
fwrite(buffer,1,strlen(myvalue)*2,file);
} else fprintf(file,"%s",myvalue);
} else {
if (UseUnicode) {
sprintf(buffer,"%s = \"",myname);
EncodeUnicode(buffer2,buffer,strlen(buffer));
fwrite(buffer2,1,strlen(buffer)*2,file);
- fwrite(myvalue,1,UnicodeLength(myvalue)*2,file);
+ fwrite(EncodeUnicodeSpecialChars(myvalue),1,UnicodeLength(EncodeUnicodeSpecialChars(myvalue))*2,file);
sprintf(buffer,"\"%c%c",13,10);
EncodeUnicode(buffer2,buffer,strlen(buffer));
fwrite(buffer2,1,strlen(buffer)*2,file);
} else {
- sprintf(buffer,"%s = \"%s\"%c%c",myname,DecodeUnicodeString(myvalue),13,10);
+ sprintf(buffer,"%s = \"%s\"%c%c",myname,EncodeSpecialChars(DecodeUnicodeString(myvalue)),13,10);
fprintf(file,"%s",buffer);
EncodeHexBin(buffer,myvalue,UnicodeLength(myvalue)*2);
fprintf(file,"%sUnicode = %s%c%c",myname,buffer,13,10);
}
}
}
static bool ReadBackupText(INI_Section *file_info, char *section, char *myname, char *myvalue, bool UseUnicode)
{
unsigned char paramname[10000],*readvalue;
if (UseUnicode) {
EncodeUnicode(paramname,myname,strlen(myname));
readvalue = INI_GetValue(file_info, section, paramname, UseUnicode);
if (readvalue!=NULL) {
- CopyUnicodeString(myvalue,readvalue+2);
- myvalue[UnicodeLength(readvalue)*2-4]=0;
- myvalue[UnicodeLength(readvalue)*2-3]=0;
+ CopyUnicodeString(myvalue,DecodeUnicodeSpecialChars(readvalue+2));
+ myvalue[UnicodeLength(myvalue)*2-2]=0;
+ myvalue[UnicodeLength(myvalue)*2-1]=0;
+
dbgprintf("%s\n",DecodeUnicodeString(readvalue));
} else {
myvalue[0]=0;
myvalue[1]=0;
return false;
}
} else {
strcpy(paramname,myname);
strcat(paramname,"Unicode");
readvalue = ReadCFGText(file_info, section, paramname, UseUnicode);
if (readvalue!=NULL) {
dbgprintf("%s %i\n",readvalue,strlen(readvalue));
DecodeHexBin (myvalue, readvalue, strlen(readvalue));
myvalue[strlen(readvalue)/2]=0;
myvalue[strlen(readvalue)/2+1]=0;
dbgprintf("%s\n",DecodeUnicodeString(myvalue));
} else {
strcpy(paramname,myname);
readvalue = ReadCFGText(file_info, section, paramname, UseUnicode);
if (readvalue!=NULL) {
- EncodeUnicode(myvalue,readvalue+1,strlen(readvalue)-2);
+ EncodeUnicode(myvalue,DecodeSpecialChars(readvalue+1),strlen(DecodeSpecialChars(readvalue+1))-1);
} else {
myvalue[0]=0;
myvalue[1]=0;
return false;
}
}
}
return true;
}
static void SaveVCalDateTime(FILE *file, GSM_DateTime *dt, bool UseUnicode)
{
unsigned char buffer[100];
int Length = 3;
sprintf(buffer, " = ");
SaveVCALDateTime(buffer, &Length, dt, NULL);
SaveBackupText(file, "", buffer, UseUnicode);
}
static void SaveVCalDate(FILE *file, GSM_DateTime *dt, bool UseUnicode)
{
unsigned char buffer[100];
sprintf(buffer, " = %04d%02d%02d%c%c", dt->Year, dt->Month, dt->Day,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
/* ---------------------- backup files ------------------------------------- */
static void SavePbkEntry(FILE *file, GSM_MemoryEntry *Pbk, bool UseUnicode)
{
bool text;
char buffer[1000];
int j, i;
sprintf(buffer,"Location = %03i%c%c",Pbk->Location,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
for (j=0;j<Pbk->EntriesNum;j++) {
text = true;
switch (Pbk->Entries[j].EntryType) {
case PBK_Number_General:
sprintf(buffer,"Entry%02iType = NumberGeneral%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Number_Mobile:
sprintf(buffer,"Entry%02iType = NumberMobile%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Number_Work:
sprintf(buffer,"Entry%02iType = NumberWork%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Number_Fax:
sprintf(buffer,"Entry%02iType = NumberFax%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Number_Home:
sprintf(buffer,"Entry%02iType = NumberHome%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Number_Pager:
sprintf(buffer,"Entry%02iType = NumberPager%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Number_Other:
sprintf(buffer,"Entry%02iType = NumberOther%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Note:
sprintf(buffer,"Entry%02iType = Note%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Postal:
sprintf(buffer,"Entry%02iType = Postal%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Email:
sprintf(buffer,"Entry%02iType = Email%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Email2:
sprintf(buffer,"Entry%02iType = Email2%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_URL:
sprintf(buffer,"Entry%02iType = URL%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Name:
sprintf(buffer,"Entry%02iType = Name%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Caller_Group:
sprintf(buffer,"Entry%02iType = CallerGroup%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
@@ -325,192 +326,203 @@ static void SavePbkEntry(FILE *file, GSM_MemoryEntry *Pbk, bool UseUnicode)
break;
case PBK_Private:
sprintf(buffer,"Entry%02iType = Private%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"Entry%02iNumber = %i%c%c",j,Pbk->Entries[j].Number,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
text = false;
break;
case PBK_Text_LastName:
sprintf(buffer,"Entry%02iType = LastName%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_FirstName:
sprintf(buffer,"Entry%02iType = FirstName%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Company:
sprintf(buffer,"Entry%02iType = Company%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_JobTitle:
sprintf(buffer,"Entry%02iType = JobTitle%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_StreetAddress:
sprintf(buffer,"Entry%02iType = Address%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_City:
sprintf(buffer,"Entry%02iType = City%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_State:
sprintf(buffer,"Entry%02iType = State%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Zip:
sprintf(buffer,"Entry%02iType = Zip%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Country:
sprintf(buffer,"Entry%02iType = Country%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Custom1:
sprintf(buffer,"Entry%02iType = Custom1%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Custom2:
sprintf(buffer,"Entry%02iType = Custom2%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Custom3:
sprintf(buffer,"Entry%02iType = Custom3%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_Text_Custom4:
sprintf(buffer,"Entry%02iType = Custom4%c%c",j,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case PBK_SMSListID:
case PBK_RingtoneFileSystemID:
case PBK_Date:
break;
}
if (text) {
sprintf(buffer,"Entry%02iText",j);
SaveBackupText(file,buffer,Pbk->Entries[j].Text, UseUnicode);
}
switch (Pbk->Entries[j].EntryType) {
case PBK_Number_General:
case PBK_Number_Mobile:
case PBK_Number_Work:
case PBK_Number_Fax:
case PBK_Number_Home:
case PBK_Number_Other:
case PBK_Number_Pager:
if (Pbk->Entries[j].VoiceTag!=0) {
sprintf(buffer,"Entry%02iVoiceTag = %i%c%c",j,Pbk->Entries[j].VoiceTag,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
i = 0;
while (Pbk->Entries[j].SMSList[i]!=0) {
sprintf(buffer,"Entry%02iSMSList%02i = %i%c%c",j,i,Pbk->Entries[j].SMSList[i],13,10);
SaveBackupText(file, "", buffer, UseUnicode);
i++;
}
break;
default:
break;
}
}
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
+static void SaveNoteEntry(FILE *file, GSM_NoteEntry *Note, bool UseUnicode)
+{
+ char buffer[1000];
+
+ sprintf(buffer,"Location = %d%c%c", Note->Location,13,10);
+ SaveBackupText(file, "", buffer, UseUnicode);
+ SaveBackupText(file, "Text", Note->Text, UseUnicode);
+ sprintf(buffer, "%c%c",13,10);
+ SaveBackupText(file, "", buffer, UseUnicode);
+}
+
static void SaveCalendarEntry(FILE *file, GSM_CalendarEntry *Note, bool UseUnicode)
{
int i;
char buffer[1000];
sprintf(buffer,"Location = %d%c%c", Note->Location,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveBackupText(file, "", "Type = ", UseUnicode);
switch (Note->Type) {
case GSM_CAL_REMINDER : sprintf(buffer,"Reminder%c%c", 13,10); break;
case GSM_CAL_CALL : sprintf(buffer,"Call%c%c", 13,10); break;
case GSM_CAL_MEETING : sprintf(buffer,"Meeting%c%c", 13,10); break;
case GSM_CAL_BIRTHDAY : sprintf(buffer,"Birthday%c%c", 13,10); break;
case GSM_CAL_TRAVEL : sprintf(buffer,"Travel%c%c", 13,10); break;
case GSM_CAL_VACATION : sprintf(buffer,"Vacation%c%c", 13,10); break;
case GSM_CAL_MEMO : sprintf(buffer,"Memo%c%c", 13,10); break;
case GSM_CAL_ALARM : sprintf(buffer,"Alarm%c%c", 13,10); break;
case GSM_CAL_DAILY_ALARM : sprintf(buffer,"DailyAlarm%c%c", 13,10); break;
case GSM_CAL_T_ATHL : sprintf(buffer,"Training/Athletism%c%c", 13,10); break;
case GSM_CAL_T_BALL : sprintf(buffer,"Training/BallGames%c%c", 13,10); break;
case GSM_CAL_T_CYCL : sprintf(buffer,"Training/Cycling%c%c", 13,10); break;
case GSM_CAL_T_BUDO : sprintf(buffer,"Training/Budo%c%c", 13,10); break;
case GSM_CAL_T_DANC : sprintf(buffer,"Training/Dance%c%c", 13,10); break;
case GSM_CAL_T_EXTR : sprintf(buffer,"Training/ExtremeSports%c%c", 13,10); break;
case GSM_CAL_T_FOOT : sprintf(buffer,"Training/Football%c%c", 13,10); break;
case GSM_CAL_T_GOLF : sprintf(buffer,"Training/Golf%c%c", 13,10); break;
case GSM_CAL_T_GYM : sprintf(buffer,"Training/Gym%c%c", 13,10); break;
case GSM_CAL_T_HORS : sprintf(buffer,"Training/HorseRaces%c%c", 13,10); break;
case GSM_CAL_T_HOCK : sprintf(buffer,"Training/Hockey%c%c", 13,10); break;
case GSM_CAL_T_RACE : sprintf(buffer,"Training/Races%c%c", 13,10); break;
case GSM_CAL_T_RUGB : sprintf(buffer,"Training/Rugby%c%c", 13,10); break;
case GSM_CAL_T_SAIL : sprintf(buffer,"Training/Sailing%c%c", 13,10); break;
case GSM_CAL_T_STRE : sprintf(buffer,"Training/StreetGames%c%c", 13,10); break;
case GSM_CAL_T_SWIM : sprintf(buffer,"Training/Swimming%c%c", 13,10); break;
case GSM_CAL_T_TENN : sprintf(buffer,"Training/Tennis%c%c", 13,10); break;
case GSM_CAL_T_TRAV : sprintf(buffer,"Training/Travels%c%c", 13,10); break;
case GSM_CAL_T_WINT : sprintf(buffer,"Training/WinterGames%c%c", 13,10); break;
}
SaveBackupText(file, "", buffer, UseUnicode);
for (i=0;i<Note->EntriesNum;i++) {
switch (Note->Entries[i].EntryType) {
case CAL_START_DATETIME:
SaveBackupText(file, "", "StartTime", UseUnicode);
SaveVCalDateTime(file, &Note->Entries[i].Date, UseUnicode);
break;
case CAL_END_DATETIME:
SaveBackupText(file, "", "StopTime", UseUnicode);
SaveVCalDateTime(file, &Note->Entries[i].Date, UseUnicode);
break;
case CAL_ALARM_DATETIME:
SaveBackupText(file, "", "Alarm", UseUnicode);
SaveVCalDateTime(file, &Note->Entries[i].Date, UseUnicode);
sprintf(buffer,"AlarmType = Tone%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case CAL_SILENT_ALARM_DATETIME:
SaveBackupText(file, "", "Alarm", UseUnicode);
SaveVCalDateTime(file, &Note->Entries[i].Date, UseUnicode);
sprintf(buffer,"AlarmType = Silent%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case CAL_PRIVATE:
sprintf(buffer, "Private = %d%c%c",Note->Entries[i].Number,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case CAL_LOCATION:
SaveBackupText(file, "EventLocation", Note->Entries[i].Text, UseUnicode);
break;
case CAL_CONTACTID:
sprintf(buffer, "ContactID = %d%c%c",Note->Entries[i].Number,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case CAL_RECURRANCE:
sprintf(buffer, "Recurrance = %d%c%c",Note->Entries[i].Number/24,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case CAL_TEXT:
SaveBackupText(file, "Text", Note->Entries[i].Text, UseUnicode);
break;
case CAL_PHONE:
SaveBackupText(file, "Phone", Note->Entries[i].Text, UseUnicode);
break;
case CAL_REPEAT_STOPDATE:
SaveBackupText(file, "", "RepeatStopDate", UseUnicode);
SaveVCalDate(file, &Note->Entries[i].Date, UseUnicode);
break;
case CAL_REPEAT_STARTDATE:
SaveBackupText(file, "", "RepeatStartDate", UseUnicode);
SaveVCalDate(file, &Note->Entries[i].Date, UseUnicode);
break;
case CAL_REPEAT_DAYOFWEEK:
sprintf(buffer, "RepeatDayOfWeek = %d%c%c",Note->Entries[i].Number,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case CAL_REPEAT_DAY:
sprintf(buffer, "RepeatDay = %d%c%c",Note->Entries[i].Number,13,10);
@@ -564,316 +576,359 @@ static void SaveWAPSettingsEntry(FILE *file, GSM_MultiWAPSettings *settings, boo
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
for (i=0;i<settings->Number;i++) {
sprintf(buffer,"Title%02i",i);
SaveBackupText(file, buffer, settings->Settings[i].Title, UseUnicode);
sprintf(buffer,"HomePage%02i",i);
SaveBackupText(file, buffer, settings->Settings[i].HomePage, UseUnicode);
if (settings->Settings[i].IsContinuous) {
sprintf(buffer,"Type%02i = Continuous%c%c",i,13,10);
} else {
sprintf(buffer,"Type%02i = Temporary%c%c",i,13,10);
}
SaveBackupText(file, "", buffer, UseUnicode);
if (settings->Settings[i].IsSecurity) {
sprintf(buffer,"Security%02i = On%c%c",i,13,10);
} else {
sprintf(buffer,"Security%02i = Off%c%c",i,13,10);
}
SaveBackupText(file, "", buffer, UseUnicode);
switch (settings->Settings[i].Bearer) {
case WAPSETTINGS_BEARER_SMS:
sprintf(buffer,"Bearer%02i = SMS%c%c",i,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"Server%02i",i);
SaveBackupText(file, buffer, settings->Settings[i].Server, UseUnicode);
sprintf(buffer,"Service%02i",i);
SaveBackupText(file, buffer, settings->Settings[i].Service, UseUnicode);
break;
case WAPSETTINGS_BEARER_GPRS:
sprintf(buffer,"Bearer%02i = GPRS%c%c",i,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"IP%02i",i);
SaveBackupText(file, buffer, settings->Settings[i].IPAddress, UseUnicode);
case WAPSETTINGS_BEARER_DATA:
if (settings->Settings[i].Bearer == WAPSETTINGS_BEARER_DATA) {
sprintf(buffer,"Bearer%02i = Data%c%c",i,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
if (settings->Settings[i].IsISDNCall) {
sprintf(buffer,"CallType%02i = ISDN%c%c",i,13,10);
} else {
sprintf(buffer,"CallType%02i = Analogue%c%c",i,13,10);
}
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"IP%02i",i);
SaveBackupText(file, buffer, settings->Settings[i].IPAddress, UseUnicode);
}
sprintf(buffer,"Number%02i",i);
SaveBackupText(file, buffer, settings->Settings[i].DialUp, UseUnicode);
if (settings->Settings[i].ManualLogin) {
sprintf(buffer,"Login%02i = Manual%c%c",i,13,10);
} else {
sprintf(buffer,"Login%02i = Automatic%c%c",i,13,10);
}
SaveBackupText(file, "", buffer, UseUnicode);
if (settings->Settings[i].IsNormalAuthentication) {
sprintf(buffer,"Authentication%02i = Normal%c%c",i,13,10);
} else {
sprintf(buffer,"Authentication%02i = Secure%c%c",i,13,10);
}
SaveBackupText(file, "", buffer, UseUnicode);
switch (settings->Settings[i].Speed) {
case WAPSETTINGS_SPEED_9600 : sprintf(buffer,"CallSpeed%02i = 9600%c%c" ,i,13,10); break;
case WAPSETTINGS_SPEED_14400: sprintf(buffer,"CallSpeed%02i = 14400%c%c",i,13,10); break;
case WAPSETTINGS_SPEED_AUTO : sprintf(buffer,"CallSpeed%02i = auto%c%c" ,i,13,10); break;
}
switch (settings->Settings[i].Speed) {
case WAPSETTINGS_SPEED_9600 :
case WAPSETTINGS_SPEED_14400:
case WAPSETTINGS_SPEED_AUTO :
SaveBackupText(file, "", buffer, UseUnicode);
default:
break;
}
sprintf(buffer,"User%02i",i);
SaveBackupText(file, buffer, settings->Settings[i].User, UseUnicode);
sprintf(buffer,"Password%02i",i);
SaveBackupText(file, buffer, settings->Settings[i].Password, UseUnicode);
break;
case WAPSETTINGS_BEARER_USSD:
sprintf(buffer,"Bearer%02i = USSD%c%c",i,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"ServiceCode%02i",i);
SaveBackupText(file, buffer, settings->Settings[i].Code, UseUnicode);
if (settings->Settings[i].IsIP) {
sprintf(buffer,"IP%02i",i);
} else {
sprintf(buffer,"Number%02i",i);
}
SaveBackupText(file, buffer, settings->Settings[i].Service, UseUnicode);
}
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
}
+static void SaveChatSettingsEntry(FILE *file, GSM_ChatSettings *settings, bool UseUnicode)
+{
+ char buffer[10000];
+
+ sprintf(buffer,"HomePage");
+ SaveBackupText(file, buffer, settings->HomePage, UseUnicode);
+ sprintf(buffer,"User");
+ SaveBackupText(file, buffer, settings->User, UseUnicode);
+ sprintf(buffer,"Password");
+ SaveBackupText(file, buffer, settings->Password, UseUnicode);
+ SaveWAPSettingsEntry(file, &settings->Connection, UseUnicode);
+}
+
+static void SaveSyncMLSettingsEntry(FILE *file, GSM_SyncMLSettings *settings, bool UseUnicode)
+{
+ char buffer[10000];
+
+ sprintf(buffer,"User");
+ SaveBackupText(file, buffer, settings->User, UseUnicode);
+ sprintf(buffer,"Password");
+ SaveBackupText(file, buffer, settings->Password, UseUnicode);
+ sprintf(buffer,"PhonebookDB");
+ SaveBackupText(file, buffer, settings->PhonebookDataBase, UseUnicode);
+ sprintf(buffer,"CalendarDB");
+ SaveBackupText(file, buffer, settings->CalendarDataBase, UseUnicode);
+ sprintf(buffer,"Server");
+ SaveBackupText(file, buffer, settings->Server, UseUnicode);
+ if (settings->SyncPhonebook) {
+ sprintf(buffer,"SyncPhonebook = True%c%c",13,10);
+ } else {
+ sprintf(buffer,"SyncPhonebook = False%c%c",13,10);
+ }
+ SaveBackupText(file, "", buffer, UseUnicode);
+ if (settings->SyncCalendar) {
+ sprintf(buffer,"SyncCalendar = True%c%c",13,10);
+ } else {
+ sprintf(buffer,"SyncCalendar = False%c%c",13,10);
+ }
+ SaveBackupText(file, "", buffer, UseUnicode);
+ SaveWAPSettingsEntry(file, &settings->Connection, UseUnicode);
+}
+
static void SaveBitmapEntry(FILE *file, GSM_Bitmap *bitmap, bool UseUnicode)
{
unsigned char buffer[10000],buffer2[10000];
int x,y;
sprintf(buffer,"Width = %i%c%c",bitmap->BitmapWidth,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"Height = %i%c%c",bitmap->BitmapHeight,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
for (y=0;y<bitmap->BitmapHeight;y++) {
for (x=0;x<bitmap->BitmapWidth;x++) {
buffer[x] = ' ';
if (GSM_IsPointBitmap(bitmap,x,y)) buffer[x]='#';
}
buffer[bitmap->BitmapWidth] = 0;
sprintf(buffer2,"Bitmap%02i = \"%s\"%c%c",y,buffer,13,10);
SaveBackupText(file, "", buffer2, UseUnicode);
}
}
static void SaveCallerEntry(FILE *file, GSM_Bitmap *bitmap, bool UseUnicode)
{
unsigned char buffer[1000];
sprintf(buffer,"Location = %03i%c%c",bitmap->Location,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
if (!bitmap->DefaultName) SaveBackupText(file, "Name", bitmap->Text, UseUnicode);
if (!bitmap->DefaultRingtone) {
if (bitmap->FileSystemRingtone) {
sprintf(buffer,"FileRingtone = %02x%c%c",bitmap->RingtoneID,13,10);
} else {
sprintf(buffer,"Ringtone = %02x%c%c",bitmap->RingtoneID,13,10);
}
SaveBackupText(file, "", buffer, UseUnicode);
}
if (bitmap->BitmapEnabled) {
sprintf(buffer,"Enabled = True%c%c",13,10);
} else {
sprintf(buffer,"Enabled = False%c%c",13,10);
}
SaveBackupText(file, "", buffer, UseUnicode);
if (!bitmap->DefaultBitmap) SaveBitmapEntry(file, bitmap, UseUnicode);
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
static void SaveWAPBookmarkEntry(FILE *file, GSM_WAPBookmark *bookmark, bool UseUnicode)
{
unsigned char buffer[1000];
SaveBackupText(file, "URL", bookmark->Address, UseUnicode);
SaveBackupText(file, "Title", bookmark->Title, UseUnicode);
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
static void SaveStartupEntry(FILE *file, GSM_Bitmap *bitmap, bool UseUnicode)
{
unsigned char buffer[1000];
sprintf(buffer,"[Startup]%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
if (bitmap->Type == GSM_WelcomeNote_Text) {
SaveBackupText(file, "Text", bitmap->Text, UseUnicode);
}
if (bitmap->Type == GSM_StartupLogo) {
SaveBitmapEntry(file, bitmap, UseUnicode);
}
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
static void SaveSMSCEntry(FILE *file, GSM_SMSC *SMSC, bool UseUnicode)
{
unsigned char buffer[1000];
sprintf(buffer,"Location = %03i%c%c",SMSC->Location,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveBackupText(file, "Name", SMSC->Name, UseUnicode);
SaveBackupText(file, "Number", SMSC->Number, UseUnicode);
SaveBackupText(file, "DefaultNumber", SMSC->DefaultNumber, UseUnicode);
SaveBackupText(file, "", "Format = ", UseUnicode);
switch (SMSC->Format) {
case SMS_FORMAT_Text : sprintf(buffer,"Text"); break;
case SMS_FORMAT_Fax : sprintf(buffer,"Fax"); break;
case SMS_FORMAT_Email : sprintf(buffer,"Email"); break;
case SMS_FORMAT_Pager : sprintf(buffer,"Pager"); break;
}
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"%c%cValidity = ",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
switch (SMSC->Validity.Relative) {
case SMS_VALID_1_Hour : sprintf(buffer, "1hour" ); break;
case SMS_VALID_6_Hours : sprintf(buffer, "6hours" ); break;
case SMS_VALID_1_Day : sprintf(buffer, "24hours" ); break;
case SMS_VALID_3_Days : sprintf(buffer, "72hours" ); break;
case SMS_VALID_1_Week : sprintf(buffer, "1week" ); break;
case SMS_VALID_Max_Time :
default : sprintf(buffer,"MaximumTime" ); break;
}
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"%c%c%c%c",13,10,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
static void SaveRingtoneEntry(FILE *file, GSM_Ringtone *ringtone, bool UseUnicode)
{
unsigned char buffer[45000];
- int i,j;
sprintf(buffer,"Location = %i%c%c",ringtone->Location,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveBackupText(file, "Name", ringtone->Name, UseUnicode);
switch (ringtone->Format) {
case RING_NOKIABINARY:
- j = 0; i = 0;
EncodeHexBin(buffer,ringtone->NokiaBinary.Frame,ringtone->NokiaBinary.Length);
SaveLinkedBackupText(file, "NokiaBinary", buffer, UseUnicode);
break;
case RING_MIDI:
- j = 0; i = 0;
EncodeHexBin(buffer,ringtone->NokiaBinary.Frame,ringtone->NokiaBinary.Length);
SaveLinkedBackupText(file, "Pure Midi", buffer, UseUnicode);
break;
+ case RING_MMF:
+ EncodeHexBin(buffer,ringtone->NokiaBinary.Frame,ringtone->NokiaBinary.Length);
+ SaveLinkedBackupText(file, "SMAF", buffer, UseUnicode);
+ break;
case RING_NOTETONE:
break;
}
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
static void SaveOperatorEntry(FILE *file, GSM_Bitmap *bitmap, bool UseUnicode)
{
unsigned char buffer[1000];
sprintf(buffer,"[Operator]%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"Network = \"%s\"%c%c", bitmap->NetworkCode,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveBitmapEntry(file, bitmap, UseUnicode);
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
static void SaveToDoEntry(FILE *file, GSM_ToDoEntry *ToDo, bool UseUnicode)
{
unsigned char buffer[1000];
int j;
sprintf(buffer,"Location = %i%c%c",ToDo->Location,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
switch (ToDo->Priority) {
case GSM_Priority_High:
sprintf(buffer,"Priority = High%c%c",13,10);
break;
case GSM_Priority_Medium:
sprintf(buffer,"Priority = Medium%c%c",13,10);
break;
case GSM_Priority_Low:
sprintf(buffer,"Priority = Low%c%c",13,10);
break;
}
SaveBackupText(file, "", buffer, UseUnicode);
for (j=0;j<ToDo->EntriesNum;j++) {
switch (ToDo->Entries[j].EntryType) {
case TODO_END_DATETIME:
SaveBackupText(file, "", "DueTime", UseUnicode);
SaveVCalDateTime(file, &ToDo->Entries[j].Date, UseUnicode);
break;
case TODO_COMPLETED:
sprintf(buffer,"Completed = %s%c%c",ToDo->Entries[j].Number == 1 ? "yes" : "no" ,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case TODO_ALARM_DATETIME:
SaveBackupText(file, "", "Alarm", UseUnicode);
SaveVCalDateTime(file, &ToDo->Entries[j].Date, UseUnicode);
break;
case TODO_SILENT_ALARM_DATETIME:
SaveBackupText(file, "", "SilentAlarm", UseUnicode);
SaveVCalDateTime(file, &ToDo->Entries[j].Date, UseUnicode);
break;
case TODO_TEXT:
SaveBackupText(file, "Text", ToDo->Entries[j].Text, UseUnicode);
break;
case TODO_PRIVATE:
sprintf(buffer,"Private = %i%c%c",ToDo->Entries[j].Number,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case TODO_CATEGORY:
sprintf(buffer,"Category = %i%c%c",ToDo->Entries[j].Number,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case TODO_CONTACTID:
sprintf(buffer,"ContactID = %i%c%c",ToDo->Entries[j].Number,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
break;
case TODO_PHONE:
SaveBackupText(file, "Phone", ToDo->Entries[j].Text, UseUnicode);
break;
}
}
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
static void SaveProfileEntry(FILE *file, GSM_Profile *Profile, bool UseUnicode)
{
int j,k;
bool special;
unsigned char buffer[1000];
sprintf(buffer,"Location = %i%c%c",Profile->Location,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveBackupText(file, "Name",Profile->Name, UseUnicode);
if (Profile->DefaultName) {
sprintf(buffer,"DefaultName = true%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
@@ -982,227 +1037,248 @@ static void SaveProfileEntry(FILE *file, GSM_Profile *Profile, bool UseUnicode)
case PROFILE_SAVER_TIMEOUT_10MIN : sprintf(buffer,"10Minutes%c%c",13,10); break;
default : sprintf(buffer,"UNKNOWN%c%c",13,10);
}
SaveBackupText(file, "", buffer, UseUnicode);
}
}
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
static void SaveFMStationEntry(FILE *file, GSM_FMStation *FMStation, bool UseUnicode)
{
unsigned char buffer[1000];
sprintf(buffer,"Location = %i%c%c",FMStation->Location,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveBackupText(file, "StationName", FMStation->StationName, UseUnicode);
sprintf(buffer,"Frequency = %f%c%c",FMStation->Frequency,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
static void SaveGPRSPointEntry(FILE *file, GSM_GPRSAccessPoint *GPRSPoint, bool UseUnicode)
{
unsigned char buffer[1000];
sprintf(buffer,"Location = %i%c%c",GPRSPoint->Location,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveBackupText(file, "Name", GPRSPoint->Name, UseUnicode);
SaveBackupText(file, "URL", GPRSPoint->URL, UseUnicode);
if (GPRSPoint->Active) {
sprintf(buffer,"Active = Yes%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
GSM_Error SaveBackup(char *FileName, GSM_Backup *backup, bool UseUnicode)
{
int i;
unsigned char buffer[1000],checksum[200];
FILE *file;
file = fopen(FileName, "wb");
if (file == NULL) return ERR_CANTOPENFILE;
if (UseUnicode) {
sprintf(buffer,"%c%c", 0xFE, 0xFF);
SaveBackupText(file, "", buffer, false);
}
sprintf(buffer,"# Format of this file was designed for Gammu (see www.mwiacek.com)%c%c%c%c",13,10,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"[Backup]%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"IMEI = \"%s\"%c%c",backup->IMEI,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"Phone = \"%s\"%c%c",backup->Model,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
if (backup->Creator[0] != 0) {
sprintf(buffer,"Creator = \"%s\"%c%c",backup->Creator,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
}
if (backup->DateTimeAvailable) {
SaveBackupText(file, "", "DateTime", UseUnicode);
SaveVCalDateTime(file, &backup->DateTime, UseUnicode);
}
sprintf(buffer,"Format = 1.03%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
i=0;
while (backup->PhonePhonebook[i]!=NULL) {
sprintf(buffer,"[PhonePBK%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SavePbkEntry(file, backup->PhonePhonebook[i], UseUnicode);
i++;
}
i=0;
while (backup->SIMPhonebook[i]!=NULL) {
sprintf(buffer,"[SIMPBK%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SavePbkEntry(file, backup->SIMPhonebook[i], UseUnicode);
i++;
}
i=0;
while (backup->Calendar[i]!=NULL) {
sprintf(buffer,"[Calendar%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveCalendarEntry(file, backup->Calendar[i], UseUnicode);
i++;
}
i=0;
+ while (backup->Note[i]!=NULL) {
+ sprintf(buffer,"[Note%03i]%c%c",i+1,13,10);
+ SaveBackupText(file, "", buffer, UseUnicode);
+ SaveNoteEntry(file, backup->Note[i], UseUnicode);
+ i++;
+ }
+ i=0;
while (backup->CallerLogos[i]!=NULL) {
sprintf(buffer,"[Caller%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveCallerEntry(file, backup->CallerLogos[i], UseUnicode);
i++;
}
i=0;
while (backup->SMSC[i]!=NULL) {
sprintf(buffer,"[SMSC%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveSMSCEntry(file, backup->SMSC[i], UseUnicode);
i++;
}
i=0;
while (backup->WAPBookmark[i]!=NULL) {
sprintf(buffer,"[WAPBookmark%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveWAPBookmarkEntry(file, backup->WAPBookmark[i], UseUnicode);
i++;
}
i=0;
while (backup->WAPSettings[i]!=NULL) {
sprintf(buffer,"[WAPSettings%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveWAPSettingsEntry(file, backup->WAPSettings[i], UseUnicode);
i++;
}
i=0;
while (backup->MMSSettings[i]!=NULL) {
sprintf(buffer,"[MMSSettings%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveWAPSettingsEntry(file, backup->MMSSettings[i], UseUnicode);
i++;
}
i=0;
+ while (backup->SyncMLSettings[i]!=NULL) {
+ sprintf(buffer,"[SyncMLSettings%03i]%c%c",i+1,13,10);
+ SaveBackupText(file, "", buffer, UseUnicode);
+ SaveSyncMLSettingsEntry(file, backup->SyncMLSettings[i], UseUnicode);
+ i++;
+ }
+ i=0;
+ while (backup->ChatSettings[i]!=NULL) {
+ sprintf(buffer,"[ChatSettings%03i]%c%c",i+1,13,10);
+ SaveBackupText(file, "", buffer, UseUnicode);
+ SaveChatSettingsEntry(file, backup->ChatSettings[i], UseUnicode);
+ i++;
+ }
+ i=0;
while (backup->Ringtone[i]!=NULL) {
sprintf(buffer,"[Ringtone%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveRingtoneEntry(file, backup->Ringtone[i], UseUnicode);
i++;
}
i=0;
while (backup->ToDo[i]!=NULL) {
sprintf(buffer,"[TODO%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveToDoEntry(file, backup->ToDo[i], UseUnicode);
i++;
}
i=0;
while (backup->Profiles[i]!=NULL) {
sprintf(buffer,"[Profile%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveProfileEntry(file, backup->Profiles[i], UseUnicode);
i++;
}
i=0;
while (backup->FMStation[i]!=NULL) {
sprintf(buffer,"[FMStation%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveFMStationEntry(file, backup->FMStation[i], UseUnicode);
i++;
}
i=0;
while (backup->GPRSPoint[i]!=NULL) {
sprintf(buffer,"[GPRSPoint%03i]%c%c",i+1,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
SaveGPRSPointEntry(file, backup->GPRSPoint[i], UseUnicode);
i++;
}
if (backup->StartupLogo!=NULL) {
SaveStartupEntry(file, backup->StartupLogo, UseUnicode);
}
if (backup->OperatorLogo!=NULL) {
SaveOperatorEntry(file, backup->OperatorLogo, UseUnicode);
}
fclose(file);
FindBackupChecksum(FileName, UseUnicode, checksum);
file = fopen(FileName, "ab");
if (file == NULL) return ERR_CANTOPENFILE;
sprintf(buffer,"[Checksum]%c%c",13,10);
SaveBackupText(file, "", buffer, UseUnicode);
sprintf(buffer,"MD5=%s%c%c",checksum,13,10);
SaveBackupText(file, "", buffer, UseUnicode);
fclose(file);
return ERR_NONE;
}
static void ReadPbkEntry(INI_Section *file_info, char *section, GSM_MemoryEntry *Pbk, bool UseUnicode)
{
unsigned char buffer[10000];
char *readvalue;
int num,i;
INI_Entry *e;
Pbk->EntriesNum = 0;
e = INI_FindLastSectionEntry(file_info, section, UseUnicode);
while (e != NULL) {
num = -1;
if (UseUnicode) {
sprintf(buffer,"%s",DecodeUnicodeString(e->EntryName));
} else {
sprintf(buffer,"%s",e->EntryName);
}
if (strlen(buffer) == 11) {
if (mystrncasecmp("Entry", buffer, 5) &&
mystrncasecmp("Type", buffer+7, 4)) {
num = atoi(buffer+5);
}
}
e = e->Prev;
if (num != -1) {
sprintf(buffer,"Entry%02iType",num);
readvalue = ReadCFGText(file_info, section, buffer, UseUnicode);
if (mystrncasecmp(readvalue,"NumberGeneral",0)) {
Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_General;
} else if (mystrncasecmp(readvalue,"NumberMobile",0)) {
Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Mobile;
} else if (mystrncasecmp(readvalue,"NumberWork",0)) {
Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Work;
} else if (mystrncasecmp(readvalue,"NumberFax",0)) {
Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Fax;
} else if (mystrncasecmp(readvalue,"NumberHome",0)) {
Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Home;
} else if (mystrncasecmp(readvalue,"NumberOther",0)) {
Pbk->Entries[Pbk->EntriesNum].EntryType = PBK_Number_Other;
@@ -2563,193 +2639,318 @@ GSM_Error LoadBackup(char *FileName, GSM_Backup *backup, bool UseUnicode)
}
}
sprintf(buffer,"Startup");
readvalue = ReadCFGText(file_info, buffer, "Text", UseUnicode);
if (readvalue==NULL) {
readvalue = ReadCFGText(file_info, buffer, "Width", UseUnicode);
}
if (readvalue!=NULL) {
backup->StartupLogo = malloc(sizeof(GSM_Bitmap));
if (backup->StartupLogo == NULL) return ERR_MOREMEMORY;
ReadStartupEntry(file_info, buffer, backup->StartupLogo,UseUnicode);
}
sprintf(buffer,"Operator");
readvalue = ReadCFGText(file_info, buffer, "Network", UseUnicode);
if (readvalue!=NULL) {
backup->OperatorLogo = malloc(sizeof(GSM_Bitmap));
if (backup->OperatorLogo == NULL) return ERR_MOREMEMORY;
ReadOperatorEntry(file_info, buffer, backup->OperatorLogo,UseUnicode);
}
num = 0;
for (h = file_info; h != NULL; h = h->Next) {
found = false;
if (UseUnicode) {
EncodeUnicode(buffer,"FMStation",9);
if (mywstrncasecmp(buffer, h->SectionName, 9)) found = true;
} else {
if (mystrncasecmp("FMStation", h->SectionName, 9)) found = true;
}
if (found) {
readvalue = ReadCFGText(file_info, h->SectionName, "Location", UseUnicode);
if (readvalue==NULL) break;
if (num < GSM_BACKUP_MAX_FMSTATIONS) {
backup->FMStation[num] = malloc(sizeof(GSM_FMStation));
if (backup->FMStation[num] == NULL) return ERR_MOREMEMORY;
backup->FMStation[num + 1] = NULL;
} else {
dbgprintf("Increase GSM_BACKUP_MAX_FMSTATIONS\n");
return ERR_MOREMEMORY;
}
backup->FMStation[num]->Location = num + 1;
ReadFMStationEntry(file_info, h->SectionName, backup->FMStation[num],UseUnicode);
num++;
}
}
num = 0;
for (h = file_info; h != NULL; h = h->Next) {
found = false;
if (UseUnicode) {
EncodeUnicode(buffer,"GPRSPoint",9);
if (mywstrncasecmp(buffer, h->SectionName, 9)) found = true;
} else {
if (mystrncasecmp("GPRSPoint", h->SectionName, 9)) found = true;
}
if (found) {
readvalue = ReadCFGText(file_info, h->SectionName, "Location", UseUnicode);
if (readvalue==NULL) break;
if (num < GSM_BACKUP_MAX_GPRSPOINT) {
backup->GPRSPoint[num] = malloc(sizeof(GSM_GPRSAccessPoint));
if (backup->GPRSPoint[num] == NULL) return ERR_MOREMEMORY;
backup->GPRSPoint[num + 1] = NULL;
} else {
dbgprintf("Increase GSM_BACKUP_MAX_GPRSPOINT\n");
return ERR_MOREMEMORY;
}
backup->GPRSPoint[num]->Location = num + 1;
ReadGPRSPointEntry(file_info, h->SectionName, backup->GPRSPoint[num],UseUnicode);
num++;
}
}
num = 0;
for (h = file_info; h != NULL; h = h->Next) {
found = false;
if (UseUnicode) {
EncodeUnicode(buffer,"Note",4);
if (mywstrncasecmp(buffer, h->SectionName, 4)) found = true;
} else {
if (mystrncasecmp("Note", h->SectionName, 4)) found = true;
}
if (found) {
readvalue = ReadCFGText(file_info, h->SectionName, "Text", UseUnicode);
if (readvalue==NULL) break;
if (num < GSM_BACKUP_MAX_NOTE) {
backup->Note[num] = malloc(sizeof(GSM_NoteEntry));
if (backup->Note[num] == NULL) return ERR_MOREMEMORY;
backup->Note[num + 1] = NULL;
} else {
dbgprintf("Increase GSM_BACKUP_MAX_NOTE\n");
return ERR_MOREMEMORY;
}
ReadNoteEntry(file_info, h->SectionName, backup->Note[num],UseUnicode);
num++;
}
}
if (backup->MD5Original[0]!=0) {
FindBackupChecksum(FileName, UseUnicode, backup->MD5Calculated);
}
-
+ for (h = file_info; h != NULL; h = h->Next) {
+ found = false;
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"Backup",4);
+ if (mywstrncasecmp(buffer, h->SectionName, 6)) found = true;
+ } else {
+ if (mystrncasecmp("Backup", h->SectionName, 6)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"Checksum",4);
+ if (mywstrncasecmp(buffer, h->SectionName, 8)) found = true;
+ } else {
+ if (mystrncasecmp("Checksum", h->SectionName, 8)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"Profile",7);
+ if (mywstrncasecmp(buffer, h->SectionName, 7)) found = true;
+ } else {
+ if (mystrncasecmp("Profile", h->SectionName, 7)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"PhonePBK",8);
+ if (mywstrncasecmp(buffer, h->SectionName, 8)) found = true;
+ } else {
+ if (mystrncasecmp("PhonePBK", h->SectionName, 8)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"SIMPBK",6);
+ if (mywstrncasecmp(buffer, h->SectionName, 6)) found = true;
+ } else {
+ if (mystrncasecmp("SIMPBK", h->SectionName, 6)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"Calendar",8);
+ if (mywstrncasecmp(buffer, h->SectionName, 8)) found = true;
+ } else {
+ if (mystrncasecmp("Calendar", h->SectionName, 8)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"Caller",6);
+ if (mywstrncasecmp(buffer, h->SectionName, 6)) found = true;
+ } else {
+ if (mystrncasecmp("Caller", h->SectionName, 6)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"SMSC",4);
+ if (mywstrncasecmp(buffer, h->SectionName, 4)) found = true;
+ } else {
+ if (mystrncasecmp("SMSC", h->SectionName, 4)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"WAPBookmark",11);
+ if (mywstrncasecmp(buffer, h->SectionName, 11)) found = true;
+ if (!found) {
+ EncodeUnicode(buffer,"Bookmark",8);
+ if (mywstrncasecmp(buffer, h->SectionName, 8)) found = true;
+ }
+ } else {
+ if (mystrncasecmp("WAPBookmark", h->SectionName, 11)) found = true;
+ if (!found) {
+ if (mystrncasecmp("Bookmark", h->SectionName, 8)) found = true;
+ }
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"WAPSettings",11);
+ if (mywstrncasecmp(buffer, h->SectionName, 11)) found = true;
+ if (!found) {
+ EncodeUnicode(buffer,"Settings",8);
+ if (mywstrncasecmp(buffer, h->SectionName, 8)) found = true;
+ }
+ } else {
+ if (mystrncasecmp("WAPSettings", h->SectionName, 11)) found = true;
+ if (!found) {
+ if (mystrncasecmp("Settings", h->SectionName, 8)) found = true;
+ }
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"MMSSettings",8);
+ if (mywstrncasecmp(buffer, h->SectionName, 8)) found = true;
+ } else {
+ if (mystrncasecmp("MMSSettings", h->SectionName, 8)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"Ringtone",8);
+ if (mywstrncasecmp(buffer, h->SectionName, 8)) found = true;
+ } else {
+ if (mystrncasecmp("Ringtone", h->SectionName, 8)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"TODO",4);
+ if (mywstrncasecmp(buffer, h->SectionName, 4)) found = true;
+ } else {
+ if (mystrncasecmp("TODO", h->SectionName, 4)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"Startup",7);
+ if (mywstrncasecmp(buffer, h->SectionName, 7)) found = true;
+ } else {
+ if (mystrncasecmp("Startup", h->SectionName, 7)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"Operator",7);
+ if (mywstrncasecmp(buffer, h->SectionName, 8)) found = true;
+ } else {
+ if (mystrncasecmp("Operator", h->SectionName, 8)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"FMStation",9);
+ if (mywstrncasecmp(buffer, h->SectionName, 9)) found = true;
+ } else {
+ if (mystrncasecmp("FMStation", h->SectionName, 9)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"GPRSPoint",9);
+ if (mywstrncasecmp(buffer, h->SectionName, 9)) found = true;
+ } else {
+ if (mystrncasecmp("GPRSPoint", h->SectionName, 9)) found = true;
+ }
+ if (UseUnicode) {
+ EncodeUnicode(buffer,"Note",4);
+ if (mywstrncasecmp(buffer, h->SectionName, 4)) found = true;
+ } else {
+ if (mystrncasecmp("Note", h->SectionName, 4)) found = true;
+ }
+ if (!found) return ERR_NOTIMPLEMENTED;
+ }
return ERR_NONE;
}
/* ---------------------- backup files for SMS ----------------------------- */
static void ReadSMSBackupEntry(INI_Section *file_info, char *section, GSM_SMSMessage *SMS)
{
unsigned char buffer[10000], *readvalue;
GSM_SetDefaultSMSData(SMS);
SMS->PDU = SMS_Submit;
SMS->SMSC.Location = 0;
sprintf(buffer,"SMSC");
ReadBackupText(file_info, section, buffer, SMS->SMSC.Number, false);
sprintf(buffer,"ReplySMSC");
SMS->ReplyViaSameSMSC = false;
readvalue = ReadCFGText(file_info, section, buffer, false);
if (readvalue!=NULL) {
if (mystrncasecmp(readvalue,"True",0)) SMS->ReplyViaSameSMSC = true;
}
sprintf(buffer,"Class");
SMS->Class = -1;
readvalue = ReadCFGText(file_info, section, buffer, false);
if (readvalue!=NULL) SMS->Class = atoi(readvalue);
sprintf(buffer,"Sent");
readvalue = ReadCFGText(file_info, section, buffer, false);
if (readvalue!=NULL) {
ReadVCALDateTime(readvalue, &SMS->DateTime);
SMS->PDU = SMS_Deliver;
}
sprintf(buffer,"RejectDuplicates");
SMS->RejectDuplicates = false;
readvalue = ReadCFGText(file_info, section, buffer, false);
if (readvalue!=NULL) {
if (mystrncasecmp(readvalue,"True",0)) SMS->RejectDuplicates = true;
}
sprintf(buffer,"ReplaceMessage");
SMS->ReplaceMessage = 0;
readvalue = ReadCFGText(file_info, section, buffer, false);
if (readvalue!=NULL) SMS->ReplaceMessage = atoi(readvalue);
sprintf(buffer,"MessageReference");
SMS->MessageReference = 0;
readvalue = ReadCFGText(file_info, section, buffer, false);
if (readvalue!=NULL) SMS->MessageReference = atoi(readvalue);
sprintf(buffer,"State");
SMS->State = SMS_UnRead;
readvalue = ReadCFGText(file_info, section, buffer, false);
if (readvalue!=NULL) {
if (mystrncasecmp(readvalue,"Read",0)) SMS->State = SMS_Read;
else if (mystrncasecmp(readvalue,"Sent",0)) SMS->State = SMS_Sent;
else if (mystrncasecmp(readvalue,"UnSent",0)) SMS->State = SMS_UnSent;
}
sprintf(buffer,"Number");
ReadBackupText(file_info, section, buffer, SMS->Number, false);
sprintf(buffer,"Name");
ReadBackupText(file_info, section, buffer, SMS->Name, false);
sprintf(buffer,"Length");
SMS->Length = 0;
readvalue = ReadCFGText(file_info, section, buffer, false);
if (readvalue!=NULL) SMS->Length = atoi(readvalue);
sprintf(buffer,"Coding");
SMS->Coding = SMS_Coding_Default;
readvalue = ReadCFGText(file_info, section, buffer, false);
if (readvalue!=NULL) {
if (mystrncasecmp(readvalue,"Unicode",0)) {
SMS->Coding = SMS_Coding_Unicode;
} else if (mystrncasecmp(readvalue,"8bit",0)) {
SMS->Coding = SMS_Coding_8bit;
}
}
ReadLinkedBackupText(file_info, section, "Text", buffer, false);
DecodeHexBin (SMS->Text, buffer, strlen(buffer));
SMS->Text[strlen(buffer)/2] = 0;
SMS->Text[strlen(buffer)/2+1] = 0;
sprintf(buffer,"Folder");
readvalue = ReadCFGText(file_info, section, buffer, false);
if (readvalue!=NULL) SMS->Folder = atoi(readvalue);
SMS->UDH.Type = UDH_NoUDH;
SMS->UDH.Length = 0;
SMS->UDH.ID8bit = -1;
SMS->UDH.ID16bit = -1;
SMS->UDH.PartNumber = -1;
SMS->UDH.AllParts = -1;
sprintf(buffer,"UDH");
readvalue = ReadCFGText(file_info, section, buffer, false);
if (readvalue!=NULL) {
DecodeHexBin (SMS->UDH.Text, readvalue, strlen(readvalue));
SMS->UDH.Length = strlen(readvalue)/2;
GSM_DecodeUDHHeader(&SMS->UDH);
}
}
static GSM_Error GSM_ReadSMSBackupTextFile(char *FileName, GSM_SMS_Backup *backup)
{
INI_Section *file_info, *h;