summaryrefslogtreecommitdiffabout
path: root/gammu/emb/common/service/backup/gsmback.c
Unidiff
Diffstat (limited to 'gammu/emb/common/service/backup/gsmback.c') (more/less context) (show whitespace changes)
-rw-r--r--gammu/emb/common/service/backup/gsmback.c280
1 files changed, 280 insertions, 0 deletions
diff --git a/gammu/emb/common/service/backup/gsmback.c b/gammu/emb/common/service/backup/gsmback.c
new file mode 100644
index 0000000..91ac745
--- a/dev/null
+++ b/gammu/emb/common/service/backup/gsmback.c
@@ -0,0 +1,280 @@
1/* (c) 2002-2004 by Marcin Wiacek & Michal Cihar */
2
3#include <string.h>
4#include <ctype.h>
5
6#include "../../phone/nokia/nfunc.h"
7#include "../../phone/nokia/dct3/n7110.h"
8#include "../../misc/coding/coding.h"
9#include "../../misc/cfg.h"
10#include "../gsmlogo.h"
11#include "../gsmmisc.h"
12#include "../gsmcal.h"
13#include "gsmback.h"
14#include "backtext.h"
15#include "backldif.h"
16#include "backlmb.h"
17#include "backvcs.h"
18#include "backvcf.h"
19#include "backics.h"
20
21#ifdef GSM_ENABLE_BACKUP
22
23void GSM_FreeBackup(GSM_Backup *backup)
24{
25 int i;
26
27 i=0;
28 while (backup->PhonePhonebook[i]!=NULL) {
29 free(backup->PhonePhonebook[i]);
30 backup->PhonePhonebook[i] = NULL;
31 i++;
32 }
33 i=0;
34 while (backup->SIMPhonebook[i]!=NULL) {
35 free(backup->SIMPhonebook[i]);
36 backup->SIMPhonebook[i] = NULL;
37 i++;
38 }
39 i=0;
40 while (backup->Calendar[i]!=NULL) {
41 free(backup->Calendar[i]);
42 backup->Calendar[i] = NULL;
43 i++;
44 }
45 i=0;
46 while (backup->CallerLogos[i]!=NULL) {
47 free(backup->CallerLogos[i]);
48 backup->CallerLogos[i] = NULL;
49 i++;
50 }
51 i=0;
52 while (backup->SMSC[i]!=NULL) {
53 free(backup->SMSC[i]);
54 backup->SMSC[i] = NULL;
55 i++;
56 }
57 i=0;
58 while (backup->WAPBookmark[i]!=NULL) {
59 free(backup->WAPBookmark[i]);
60 backup->WAPBookmark[i] = NULL;
61 i++;
62 }
63 i=0;
64 while (backup->WAPSettings[i]!=NULL) {
65 free(backup->WAPSettings[i]);
66 backup->WAPSettings[i] = NULL;
67 i++;
68 }
69 i=0;
70 while (backup->MMSSettings[i]!=NULL) {
71 free(backup->MMSSettings[i]);
72 backup->MMSSettings[i] = NULL;
73 i++;
74 }
75 i=0;
76 while (backup->Ringtone[i]!=NULL) {
77 free(backup->Ringtone[i]);
78 backup->Ringtone[i] = NULL;
79 i++;
80 }
81 i=0;
82 while (backup->ToDo[i]!=NULL) {
83 free(backup->ToDo[i]);
84 backup->ToDo[i] = NULL;
85 i++;
86 }
87 i=0;
88 while (backup->Profiles[i]!=NULL) {
89 free(backup->Profiles[i]);
90 backup->Profiles[i] = NULL;
91 i++;
92 }
93 i=0;
94 while (backup->FMStation[i]!=NULL) {
95 free(backup->FMStation[i]);
96 backup->FMStation[i] = NULL;
97 i++;
98 }
99 if (backup->StartupLogo!=NULL) {
100 free(backup->StartupLogo);
101 backup->StartupLogo = NULL;
102 }
103 if (backup->OperatorLogo!=NULL) {
104 free(backup->OperatorLogo);
105 backup->OperatorLogo = NULL;
106 }
107 i=0;
108 while (backup->GPRSPoint[i]!=NULL) {
109 free(backup->GPRSPoint[i]);
110 backup->GPRSPoint[i] = NULL;
111 i++;
112 }
113 i=0;
114 while (backup->Note[i]!=NULL) {
115 free(backup->Note[i]);
116 backup->Note[i] = NULL;
117 i++;
118 }
119}
120
121GSM_Error GSM_SaveBackupFile(char *FileName, GSM_Backup *backup, bool UseUnicode)
122{
123 if (strstr(FileName,".lmb")) {
124 return SaveLMB(FileName,backup);
125 } else if (strstr(FileName,".vcs")) {
126 return SaveVCalendar(FileName,backup);
127 } else if (strstr(FileName,".vcf")) {
128 return SaveVCard(FileName,backup);
129 } else if (strstr(FileName,".ldif")) {
130 return SaveLDIF(FileName,backup);
131 } else if (strstr(FileName,".ics")) {
132 return SaveICS(FileName,backup);
133 } else {
134 return SaveBackup(FileName,backup, UseUnicode);
135 }
136}
137
138GSM_Error GSM_ReadBackupFile(char *FileName, GSM_Backup *backup)
139{
140 FILE *file;
141 unsigned charbuffer[300];
142
143 file = fopen(FileName, "rb");
144 if (file == NULL) return ERR_CANTOPENFILE;
145 fread(buffer, 1, 9, file); /* Read the header of the file. */
146 fclose(file);
147
148 GSM_ClearBackup(backup);
149
150 /* Attempt to identify filetype */
151 if (strstr(FileName,".vcs")) {
152 return LoadVCalendar(FileName,backup);
153 } else if (strstr(FileName,".vcf")) {
154 return LoadVCard(FileName,backup);
155 } else if (strstr(FileName,".ldif")) {
156 return LoadLDIF(FileName,backup);
157 } else if (strstr(FileName,".ics")) {
158 return LoadICS(FileName,backup);
159 } else if (memcmp(buffer, "LMB ",4)==0) {
160 return LoadLMB(FileName,backup);
161 } else if (buffer[0] == 0xFE && buffer[1] == 0xFF) {
162 return LoadBackup(FileName,backup,true);
163 } else if (buffer[0] == 0xFF && buffer[1] == 0xFE) {
164 return LoadBackup(FileName,backup,true);
165 } else {
166 return LoadBackup(FileName,backup,false);
167 }
168}
169
170void GSM_ClearBackup(GSM_Backup *backup)
171{
172 backup->PhonePhonebook[0] = NULL;
173 backup->SIMPhonebook[0] = NULL;
174 backup->Calendar[0] = NULL;
175 backup->CallerLogos[0] = NULL;
176 backup->SMSC [0] = NULL;
177 backup->WAPBookmark[0] = NULL;
178 backup->WAPSettings[0] = NULL;
179 backup->MMSSettings[0] = NULL;
180 backup->Ringtone[0] = NULL;
181 backup->Profiles[0] = NULL;
182 backup->ToDo [0] = NULL;
183 backup->GPRSPoint[0] = NULL;
184 backup->FMStation[0] = NULL;
185 backup->Note [0] = NULL;
186 backup->StartupLogo = NULL;
187 backup->OperatorLogo = NULL;
188
189 backup->Creator [0] = 0;
190 backup->IMEI [0] = 0;
191 backup->Model [0] = 0;
192 backup->DateTimeAvailable = false;
193 backup->MD5Original[0] = 0;
194 backup->MD5Calculated[0] = 0;
195}
196
197void GSM_GetBackupFormatFeatures(char *FileName, GSM_Backup_Info *info)
198{
199 info->UseUnicode= false;
200 info->IMEI = false;
201 info->Model = false;
202 info->DateTime = false;
203 info->PhonePhonebook = false;
204 info->SIMPhonebook = false;
205 info->ToDo = false;
206 info->Calendar = false;
207 info->CallerLogos = false;
208 info->SMSC = false;
209 info->WAPBookmark = false;
210 info->WAPSettings = false;
211 info->MMSSettings = false;
212 info->Ringtone = false;
213 info->StartupLogo = false;
214 info->OperatorLogo = false;
215 info->Profiles = false;
216 info->FMStation = false;
217 info->GPRSPoint = false;
218 info->Note = false;
219
220 if (strstr(FileName,".lmb")) {
221 info->PhonePhonebook = true;
222 info->SIMPhonebook = true;
223 info->CallerLogos = true;
224 info->StartupLogo = true;
225 } else if (strstr(FileName,".vcs")) {
226 info->ToDo = true;
227 info->Calendar = true;
228 } else if (strstr(FileName,".vcf")) {
229 info->PhonePhonebook= true;
230 } else if (strstr(FileName,".ics")) {
231 info->ToDo = true;
232 info->Calendar = true;
233 } else if (strstr(FileName,".ldif")) {
234 info->PhonePhonebook= true;
235 } else {
236 info->UseUnicode= true;
237 info->IMEI = true;
238 info->Model = true;
239 info->DateTime = true;
240 info->PhonePhonebook = true;
241 info->SIMPhonebook = true;
242 info->ToDo = true;
243 info->Calendar = true;
244 info->CallerLogos = true;
245 info->SMSC = true;
246 info->WAPBookmark = true;
247 info->WAPSettings = true;
248 info->MMSSettings = true;
249 info->Ringtone = true;
250 info->StartupLogo = true;
251 info->OperatorLogo = true;
252 info->Profiles = true;
253 info->FMStation = true;
254 info->GPRSPoint = true;
255 info->Note = true;
256 }
257}
258
259void GSM_GetBackupFileFeatures(char *FileName, GSM_Backup_Info *info, GSM_Backup *backup)
260{
261 GSM_GetBackupFormatFeatures(FileName, info);
262
263 if (info->PhonePhonebook && backup->PhonePhonebook[0] == NULL) info->PhonePhonebook = false;
264 if (info->SIMPhonebook && backup->SIMPhonebook[0] == NULL) info->SIMPhonebook = false;
265 if (info->Calendar && backup->Calendar[0] == NULL) info->Calendar = false;
266 if (info->ToDo && backup->ToDo[0] == NULL) info->ToDo = false;
267 if (info->WAPBookmark && backup->WAPBookmark[0] == NULL) info->WAPBookmark = false;
268 if (info->WAPSettings && backup->WAPSettings[0] == NULL) info->WAPSettings = false;
269 if (info->MMSSettings && backup->MMSSettings[0] == NULL) info->MMSSettings = false;
270 if (info->FMStation && backup->FMStation[0] == NULL) info->FMStation = false;
271 if (info->GPRSPoint && backup->GPRSPoint[0] == NULL) info->GPRSPoint = false;
272 if (info->Profiles && backup->Profiles[0] == NULL) info->Profiles = false;
273 /* .... */
274}
275
276#endif
277
278/* How should editor hadle tabs in this file? Add editor commands here.
279 * vim: noexpandtab sw=8 ts=8 sts=8:
280 */