Diffstat (limited to 'gammu/emb/common/service/backup') (more/less context) (show whitespace changes)
-rw-r--r-- | gammu/emb/common/service/backup/backgen.h | 4 | ||||
-rw-r--r-- | gammu/emb/common/service/backup/backtext.c | 221 | ||||
-rw-r--r-- | gammu/emb/common/service/backup/gsmback.c | 36 | ||||
-rw-r--r-- | gammu/emb/common/service/backup/gsmback.h | 2 |
4 files changed, 244 insertions, 19 deletions
diff --git a/gammu/emb/common/service/backup/backgen.h b/gammu/emb/common/service/backup/backgen.h index 9d7d973..9a930fc 100644 --- a/gammu/emb/common/service/backup/backgen.h +++ b/gammu/emb/common/service/backup/backgen.h @@ -8,54 +8,58 @@ #include "../gsmpbk.h" #include "../gsmcal.h" #include "../gsmlogo.h" #include "../gsmring.h" #include "../gsmdata.h" #include "../gsmprof.h" #include "../gsmmisc.h" #include "../sms/gsmsms.h" #define GSM_BACKUP_MAX_PHONEPHONEBOOK 501 #define GSM_BACKUP_MAX_SIMPHONEBOOK 251 #define GSM_BACKUP_MAX_CALLER 6 #define GSM_BACKUP_MAX_SMSC 10 #define GSM_BACKUP_MAX_WAPBOOKMARK 40 #define GSM_BACKUP_MAX_WAPSETTINGS 30 #define GSM_BACKUP_MAX_MMSSETTINGS 30 +#define GSM_BACKUP_MAX_SYNCMLSETTINGS 10 +#define GSM_BACKUP_MAX_CHATSETTINGS 10 #define GSM_BACKUP_MAX_RINGTONES 30 #define GSM_BACKUP_MAX_PROFILES 10 #define GSM_BACKUP_MAX_FMSTATIONS 20 #define GSM_BACKUP_MAX_GPRSPOINT 10 #define GSM_BACKUP_MAX_NOTE 10 /* FIXME */ typedef struct { char IMEI [MAX_IMEI_LENGTH]; char Model [MAX_MODEL_LENGTH+MAX_VERSION_LENGTH]; char Creator [80]; GSM_DateTime DateTime; bool DateTimeAvailable; char MD5Original [100]; char MD5Calculated [100]; GSM_MemoryEntry *PhonePhonebook [GSM_BACKUP_MAX_PHONEPHONEBOOK + 1]; GSM_MemoryEntry *SIMPhonebook [GSM_BACKUP_MAX_SIMPHONEBOOK + 1]; GSM_CalendarEntry *Calendar [GSM_MAXCALENDARTODONOTES + 1]; GSM_Bitmap *CallerLogos [GSM_BACKUP_MAX_CALLER + 1]; GSM_SMSC *SMSC [GSM_BACKUP_MAX_SMSC + 1]; GSM_WAPBookmark *WAPBookmark [GSM_BACKUP_MAX_WAPBOOKMARK + 1]; GSM_MultiWAPSettings *WAPSettings [GSM_BACKUP_MAX_WAPSETTINGS + 1]; GSM_MultiWAPSettings *MMSSettings [GSM_BACKUP_MAX_MMSSETTINGS + 1]; + GSM_SyncMLSettings *SyncMLSettings [GSM_BACKUP_MAX_SYNCMLSETTINGS + 1]; + GSM_ChatSettings *ChatSettings [GSM_BACKUP_MAX_CHATSETTINGS + 1]; GSM_Ringtone *Ringtone [GSM_BACKUP_MAX_RINGTONES + 1]; GSM_ToDoEntry *ToDo [GSM_MAXCALENDARTODONOTES + 1]; GSM_Profile *Profiles [GSM_BACKUP_MAX_PROFILES + 1]; GSM_FMStation *FMStation [GSM_BACKUP_MAX_FMSTATIONS +1]; GSM_GPRSAccessPoint *GPRSPoint [GSM_BACKUP_MAX_GPRSPOINT + 1]; GSM_NoteEntry *Note [GSM_BACKUP_MAX_NOTE + 1]; GSM_Bitmap *StartupLogo; GSM_Bitmap *OperatorLogo; } GSM_Backup; #define GSM_BACKUP_MAX_SMS 500 typedef struct { GSM_SMSMessage *SMS[GSM_BACKUP_MAX_SMS]; } GSM_SMS_Backup; 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 @@ -138,79 +138,80 @@ static void ReadLinkedBackupText(INI_Section *file_info, char *section, char *my 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, " = "); @@ -405,32 +406,43 @@ static void SavePbkEntry(FILE *file, GSM_MemoryEntry *Pbk, bool 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; @@ -644,32 +656,74 @@ static void SaveWAPSettingsEntry(FILE *file, GSM_MultiWAPSettings *settings, boo 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); @@ -752,48 +806,49 @@ static void SaveSMSCEntry(FILE *file, GSM_SMSC *SMSC, bool UseUnicode) 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); @@ -1062,32 +1117,39 @@ GSM_Error SaveBackup(char *FileName, GSM_Backup *backup, bool UseUnicode) } 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); @@ -1097,32 +1159,46 @@ GSM_Error SaveBackup(char *FileName, GSM_Backup *backup, bool UseUnicode) } 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); @@ -2643,33 +2719,158 @@ GSM_Error LoadBackup(char *FileName, GSM_Backup *backup, bool 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"); diff --git a/gammu/emb/common/service/backup/gsmback.c b/gammu/emb/common/service/backup/gsmback.c index 91ac745..c94a4d2 100644 --- a/gammu/emb/common/service/backup/gsmback.c +++ b/gammu/emb/common/service/backup/gsmback.c @@ -60,32 +60,44 @@ void GSM_FreeBackup(GSM_Backup *backup) backup->WAPBookmark[i] = NULL; i++; } i=0; while (backup->WAPSettings[i]!=NULL) { free(backup->WAPSettings[i]); backup->WAPSettings[i] = NULL; i++; } i=0; while (backup->MMSSettings[i]!=NULL) { free(backup->MMSSettings[i]); backup->MMSSettings[i] = NULL; i++; } i=0; + while (backup->SyncMLSettings[i]!=NULL) { + free(backup->SyncMLSettings[i]); + backup->SyncMLSettings[i] = NULL; + i++; + } + i=0; + while (backup->ChatSettings[i]!=NULL) { + free(backup->ChatSettings[i]); + backup->ChatSettings[i] = NULL; + i++; + } + i=0; while (backup->Ringtone[i]!=NULL) { free(backup->Ringtone[i]); backup->Ringtone[i] = NULL; i++; } i=0; while (backup->ToDo[i]!=NULL) { free(backup->ToDo[i]); backup->ToDo[i] = NULL; i++; } i=0; while (backup->Profiles[i]!=NULL) { free(backup->Profiles[i]); backup->Profiles[i] = NULL; i++; @@ -107,121 +119,125 @@ void GSM_FreeBackup(GSM_Backup *backup) i=0; while (backup->GPRSPoint[i]!=NULL) { free(backup->GPRSPoint[i]); backup->GPRSPoint[i] = NULL; i++; } i=0; while (backup->Note[i]!=NULL) { free(backup->Note[i]); backup->Note[i] = NULL; i++; } } GSM_Error GSM_SaveBackupFile(char *FileName, GSM_Backup *backup, bool UseUnicode) { - if (strstr(FileName,".lmb")) { + if (mystrcasestr(FileName,".lmb")) { return SaveLMB(FileName,backup); - } else if (strstr(FileName,".vcs")) { + } else if (mystrcasestr(FileName,".vcs")) { return SaveVCalendar(FileName,backup); - } else if (strstr(FileName,".vcf")) { + } else if (mystrcasestr(FileName,".vcf")) { return SaveVCard(FileName,backup); - } else if (strstr(FileName,".ldif")) { + } else if (mystrcasestr(FileName,".ldif")) { return SaveLDIF(FileName,backup); - } else if (strstr(FileName,".ics")) { + } else if (mystrcasestr(FileName,".ics")) { return SaveICS(FileName,backup); } else { return SaveBackup(FileName,backup, UseUnicode); } } GSM_Error GSM_ReadBackupFile(char *FileName, GSM_Backup *backup) { FILE *file; unsigned char buffer[300]; file = fopen(FileName, "rb"); if (file == NULL) return ERR_CANTOPENFILE; fread(buffer, 1, 9, file); /* Read the header of the file. */ fclose(file); GSM_ClearBackup(backup); /* Attempt to identify filetype */ - if (strstr(FileName,".vcs")) { + if (mystrcasestr(FileName,".vcs")) { return LoadVCalendar(FileName,backup); - } else if (strstr(FileName,".vcf")) { + } else if (mystrcasestr(FileName,".vcf")) { return LoadVCard(FileName,backup); - } else if (strstr(FileName,".ldif")) { + } else if (mystrcasestr(FileName,".ldif")) { return LoadLDIF(FileName,backup); - } else if (strstr(FileName,".ics")) { + } else if (mystrcasestr(FileName,".ics")) { return LoadICS(FileName,backup); } else if (memcmp(buffer, "LMB ",4)==0) { return LoadLMB(FileName,backup); } else if (buffer[0] == 0xFE && buffer[1] == 0xFF) { return LoadBackup(FileName,backup,true); } else if (buffer[0] == 0xFF && buffer[1] == 0xFE) { return LoadBackup(FileName,backup,true); } else { return LoadBackup(FileName,backup,false); } } void GSM_ClearBackup(GSM_Backup *backup) { backup->PhonePhonebook [0] = NULL; backup->SIMPhonebook [0] = NULL; backup->Calendar [0] = NULL; backup->CallerLogos [0] = NULL; backup->SMSC [0] = NULL; backup->WAPBookmark [0] = NULL; backup->WAPSettings [0] = NULL; backup->MMSSettings [0] = NULL; + backup->SyncMLSettings [0] = NULL; + backup->ChatSettings [0] = NULL; backup->Ringtone [0] = NULL; backup->Profiles [0] = NULL; backup->ToDo [0] = NULL; backup->GPRSPoint [0] = NULL; backup->FMStation [0] = NULL; backup->Note [0] = NULL; backup->StartupLogo = NULL; backup->OperatorLogo = NULL; backup->Creator [0] = 0; backup->IMEI [0] = 0; backup->Model [0] = 0; backup->DateTimeAvailable = false; backup->MD5Original [0] = 0; backup->MD5Calculated [0] = 0; } void GSM_GetBackupFormatFeatures(char *FileName, GSM_Backup_Info *info) { info->UseUnicode = false; info->IMEI = false; info->Model = false; info->DateTime = false; info->PhonePhonebook = false; info->SIMPhonebook = false; info->ToDo = false; info->Calendar = false; info->CallerLogos = false; info->SMSC = false; info->WAPBookmark = false; info->WAPSettings = false; info->MMSSettings = false; + info->SyncMLSettings = false; + info->ChatSettings = false; info->Ringtone = false; info->StartupLogo = false; info->OperatorLogo = false; info->Profiles = false; info->FMStation = false; info->GPRSPoint = false; info->Note = false; if (strstr(FileName,".lmb")) { info->PhonePhonebook = true; info->SIMPhonebook = true; info->CallerLogos = true; info->StartupLogo = true; } else if (strstr(FileName,".vcs")) { info->ToDo = true; info->Calendar = true; @@ -233,32 +249,34 @@ void GSM_GetBackupFormatFeatures(char *FileName, GSM_Backup_Info *info) } else if (strstr(FileName,".ldif")) { info->PhonePhonebook = true; } else { info->UseUnicode = true; info->IMEI = true; info->Model = true; info->DateTime = true; info->PhonePhonebook = true; info->SIMPhonebook = true; info->ToDo = true; info->Calendar = true; info->CallerLogos = true; info->SMSC = true; info->WAPBookmark = true; info->WAPSettings = true; info->MMSSettings = true; + info->SyncMLSettings = true; + info->ChatSettings = true; info->Ringtone = true; info->StartupLogo = true; info->OperatorLogo = true; info->Profiles = true; info->FMStation = true; info->GPRSPoint = true; info->Note = true; } } void GSM_GetBackupFileFeatures(char *FileName, GSM_Backup_Info *info, GSM_Backup *backup) { GSM_GetBackupFormatFeatures(FileName, info); if (info->PhonePhonebook && backup->PhonePhonebook[0] == NULL) info->PhonePhonebook = false; if (info->SIMPhonebook && backup->SIMPhonebook[0] == NULL) info->SIMPhonebook = false; diff --git a/gammu/emb/common/service/backup/gsmback.h b/gammu/emb/common/service/backup/gsmback.h index 1fd99b0..791e81d 100644 --- a/gammu/emb/common/service/backup/gsmback.h +++ b/gammu/emb/common/service/backup/gsmback.h @@ -16,32 +16,34 @@ void GSM_FreeBackup (GSM_Backup *backup); typedef struct { bool UseUnicode; bool IMEI; bool Model; bool DateTime; bool ToDo; bool PhonePhonebook; bool SIMPhonebook; bool Calendar; bool CallerLogos; bool SMSC; bool WAPBookmark; bool Profiles; bool WAPSettings; bool MMSSettings; + bool SyncMLSettings; + bool ChatSettings; bool Ringtone; bool StartupLogo; bool OperatorLogo; bool FMStation; bool GPRSPoint; bool Note; } GSM_Backup_Info; void GSM_GetBackupFormatFeatures(char *FileName, GSM_Backup_Info *info); void GSM_GetBackupFileFeatures (char *FileName, GSM_Backup_Info *info, GSM_Backup *backup); #endif #endif /* How should editor hadle tabs in this file? Add editor commands here. * vim: noexpandtab sw=8 ts=8 sts=8: |