Diffstat (limited to 'gammu/emb/common/service/backup/gsmback.c') (more/less context) (ignore whitespace changes)
-rw-r--r-- | gammu/emb/common/service/backup/gsmback.c | 280 |
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 | |||
23 | void 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 | |||
121 | GSM_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 | |||
138 | GSM_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 | |||
170 | void 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 | |||
197 | void 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 | |||
259 | void 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 | */ | ||