summaryrefslogtreecommitdiffabout
path: root/gammu/emb/common/service/backup
Side-by-side diff
Diffstat (limited to 'gammu/emb/common/service/backup') (more/less context) (ignore whitespace changes)
-rw-r--r--gammu/emb/common/service/backup/backgen.h2
-rw-r--r--gammu/emb/common/service/backup/backtext.c12
2 files changed, 9 insertions, 5 deletions
diff --git a/gammu/emb/common/service/backup/backgen.h b/gammu/emb/common/service/backup/backgen.h
index 9a930fc..9d97954 100644
--- a/gammu/emb/common/service/backup/backgen.h
+++ b/gammu/emb/common/service/backup/backgen.h
@@ -3,71 +3,71 @@
#ifndef __gsm_backgen_h
#define __gsm_backgen_h
#include "../../config.h"
#include "../../misc/misc.h"
#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;
extern GSM_Error GSM_ReadSMSBackupFile(char *FileName, GSM_SMS_Backup *backup);
-extern GSM_Error GSM_SaveSMSBackupFile(char *FileName, GSM_SMS_Backup *backup);
+extern GSM_Error GSM_AddSMSBackupFile (char *FileName, GSM_SMS_Backup *backup);
#endif
/* How should editor hadle tabs in this file? Add editor commands here.
* vim: noexpandtab sw=8 ts=8 sts=8:
*/
diff --git a/gammu/emb/common/service/backup/backtext.c b/gammu/emb/common/service/backup/backtext.c
index 4cb1bb7..07a3b22 100644
--- a/gammu/emb/common/service/backup/backtext.c
+++ b/gammu/emb/common/service/backup/backtext.c
@@ -2935,175 +2935,179 @@ static void ReadSMSBackupEntry(INI_Section *file_info, char *section, GSM_SMSMes
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;
char *readvalue;
int num;
backup->SMS[0] = NULL;
file_info = INI_ReadFile(FileName, false);
num = 0;
for (h = file_info; h != NULL; h = h->Next) {
if (mystrncasecmp("SMSBackup", h->SectionName, 9)) {
readvalue = ReadCFGText(file_info, h->SectionName, "Number", false);
if (readvalue==NULL) break;
if (num < GSM_BACKUP_MAX_SMS) {
backup->SMS[num] = malloc(sizeof(GSM_SMSMessage));
if (backup->SMS[num] == NULL) return ERR_MOREMEMORY;
backup->SMS[num + 1] = NULL;
} else {
dbgprintf("Increase GSM_BACKUP_MAX_SMS\n");
return ERR_MOREMEMORY;
}
backup->SMS[num]->Location = num + 1;
ReadSMSBackupEntry(file_info, h->SectionName, backup->SMS[num]);
num++;
}
}
return ERR_NONE;
}
GSM_Error GSM_ReadSMSBackupFile(char *FileName, GSM_SMS_Backup *backup)
{
FILE *file;
backup->SMS[0] = NULL;
file = fopen(FileName, "rb");
if (file == NULL) return(ERR_CANTOPENFILE);
fclose(file);
return GSM_ReadSMSBackupTextFile(FileName, backup);
}
-GSM_Error SaveSMSBackupTextFile(FILE *file, GSM_SMS_Backup *backup)
+static GSM_Error SaveSMSBackupTextFile(FILE *file, GSM_SMS_Backup *backup)
{
int i,w,current;
unsigned char buffer[10000];
GSM_DateTime DT;
fprintf(file,"\n# File created by Gammu (www.mwiacek.com) version %s\n",VERSION);
GSM_GetCurrentDateTime (&DT);
- fprintf(file,"# Saved %s\n\n",OSDateTime(DT,false));
+ fprintf(file,"# Saved ");
+ fprintf(file, "%04d%02d%02dT%02d%02d%02d",
+ DT.Year, DT.Month, DT.Day,
+ DT.Hour, DT.Minute, DT.Second);
+ fprintf(file," (%s)\n\n",OSDateTime(DT,false));
i=0;
while (backup->SMS[i]!=NULL) {
fprintf(file,"[SMSBackup%03i]\n",i);
switch (backup->SMS[i]->Coding) {
case SMS_Coding_Unicode:
case SMS_Coding_Default:
sprintf(buffer,"%s",DecodeUnicodeString(backup->SMS[i]->Text));
fprintf(file,"#");
current = 0;
for (w=0;w<(int)(strlen(buffer));w++) {
switch (buffer[w]) {
case 10:
fprintf(file,"\n#");
current = 0;
break;
case 13:
break;
default:
if (isprint(buffer[w])) {
fprintf(file,"%c",buffer[w]);
current ++;
}
if (current == 75) {
fprintf(file,"\n#");
current = 0;
}
}
}
fprintf(file,"\n");
break;
default:
break;
}
if (backup->SMS[i]->PDU == SMS_Deliver) {
SaveBackupText(file, "SMSC", backup->SMS[i]->SMSC.Number, false);
if (backup->SMS[i]->ReplyViaSameSMSC) fprintf(file,"SMSCReply = true\n");
fprintf(file,"Sent");
SaveVCalDateTime(file,&backup->SMS[i]->DateTime, false);
}
fprintf(file,"State = ");
switch (backup->SMS[i]->State) {
case SMS_UnRead : fprintf(file,"UnRead\n"); break;
case SMS_Read : fprintf(file,"Read\n"); break;
case SMS_Sent : fprintf(file,"Sent\n"); break;
case SMS_UnSent : fprintf(file,"UnSent\n"); break;
}
SaveBackupText(file, "Number", backup->SMS[i]->Number, false);
SaveBackupText(file, "Name", backup->SMS[i]->Name, false);
if (backup->SMS[i]->UDH.Type != UDH_NoUDH) {
EncodeHexBin(buffer,backup->SMS[i]->UDH.Text,backup->SMS[i]->UDH.Length);
fprintf(file,"UDH = %s\n",buffer);
}
switch (backup->SMS[i]->Coding) {
case SMS_Coding_Unicode:
case SMS_Coding_Default:
EncodeHexBin(buffer,backup->SMS[i]->Text,backup->SMS[i]->Length*2);
break;
default:
EncodeHexBin(buffer,backup->SMS[i]->Text,backup->SMS[i]->Length);
break;
}
SaveLinkedBackupText(file, "Text", buffer, false);
switch (backup->SMS[i]->Coding) {
case SMS_Coding_Unicode : fprintf(file,"Coding = Unicode\n"); break;
case SMS_Coding_Default : fprintf(file,"Coding = Default\n"); break;
case SMS_Coding_8bit : fprintf(file,"Coding = 8bit\n"); break;
}
fprintf(file,"Folder = %i\n",backup->SMS[i]->Folder);
fprintf(file,"Length = %i\n",backup->SMS[i]->Length);
fprintf(file,"Class = %i\n",backup->SMS[i]->Class);
fprintf(file,"ReplySMSC = ");
if (backup->SMS[i]->ReplyViaSameSMSC) fprintf(file,"True\n"); else fprintf(file,"False\n");
fprintf(file,"RejectDuplicates = ");
if (backup->SMS[i]->RejectDuplicates) fprintf(file,"True\n"); else fprintf(file,"False\n");
fprintf(file,"ReplaceMessage = %i\n",backup->SMS[i]->ReplaceMessage);
fprintf(file,"MessageReference = %i\n",backup->SMS[i]->MessageReference);
fprintf(file,"\n");
i++;
}
return ERR_NONE;
}
-GSM_Error GSM_SaveSMSBackupFile(char *FileName, GSM_SMS_Backup *backup)
+GSM_Error GSM_AddSMSBackupFile(char *FileName, GSM_SMS_Backup *backup)
{
FILE *file;
- file = fopen(FileName, "wb");
+ file = fopen(FileName, "ab");
if (file == NULL) return(ERR_CANTOPENFILE);
SaveSMSBackupTextFile(file,backup);
fclose(file);
return ERR_NONE;
}
#endif
/* How should editor hadle tabs in this file? Add editor commands here.
* vim: noexpandtab sw=8 ts=8 sts=8:
*/