GSM_Error DUMMY_GetNote(GSM_StateMachine *s, GSM_NoteEntry *entry) { GSM_Backup Backup; char *filename=NULL; GSM_Error error; int location=0; location = entry->Location; filename = DUMMY_NotePath(s, entry); error = GSM_ReadBackupFile(filename, &Backup, GSM_Backup_VNote); free(filename); filename=NULL; if (error != ERR_NONE) { if (error == ERR_CANTOPENFILE) return ERR_EMPTY; return error; } if (Backup.Note[0] == NULL) return ERR_EMPTY; *entry = *(Backup.Note[0]); entry->Location = location; GSM_FreeBackup(&Backup); return ERR_NONE; }
GSM_Error DUMMY_GetAlarm(GSM_StateMachine *s, GSM_Alarm *entry) { GSM_Backup Backup; char *filename=NULL; GSM_Error error; int i; filename = DUMMY_AlarmPath(s, entry); error = GSM_ReadBackupFile(filename, &Backup, GSM_Backup_VCalendar); free(filename); filename=NULL; if (error != ERR_NONE) { if (error == ERR_CANTOPENFILE) return ERR_EMPTY; return error; } if (Backup.Calendar[0] == NULL) return ERR_EMPTY; entry->Repeating = FALSE; entry->Text[0] = 0; entry->Text[1] = 0; GSM_GetCurrentDateTime(&entry->DateTime); for (i = 0; i < Backup.Calendar[0]->EntriesNum; i++) { switch (Backup.Calendar[0]->Entries[i].EntryType) { case CAL_TONE_ALARM_DATETIME: entry->DateTime = Backup.Calendar[0]->Entries[i].Date; break; case CAL_TEXT: CopyUnicodeString(entry->Text, Backup.Calendar[0]->Entries[i].Text); break; case CAL_REPEAT_FREQUENCY: if (Backup.Calendar[0]->Entries[i].Number) { entry->Repeating = TRUE; } break; default: break; } } GSM_FreeBackup(&Backup); return ERR_NONE; }
GSM_Error DUMMY_GetMemory(GSM_StateMachine *s, GSM_MemoryEntry *entry) { GSM_Backup Backup; char *filename=NULL; GSM_Error error; int location=0,i=0; GSM_MemoryType type; type = entry->MemoryType; location = entry->Location; filename = DUMMY_MemoryPath(s, entry); error = GSM_ReadBackupFile(filename, &Backup, GSM_Backup_VCard); free(filename); filename=NULL; if (error != ERR_NONE) { if (error == ERR_CANTOPENFILE) return ERR_EMPTY; return error; } if (Backup.PhonePhonebook[0] == NULL && Backup.SIMPhonebook[0] == NULL) return ERR_EMPTY; if (Backup.PhonePhonebook[0] != NULL) { *entry = *(Backup.PhonePhonebook[0]); } else { *entry = *(Backup.SIMPhonebook[0]); } for (i = 0; i < entry->EntriesNum; i++) { if (entry->Entries[i].EntryType == PBK_Photo) { entry->Entries[i].Picture.Buffer = (unsigned char *)malloc(entry->Entries[i].Picture.Length); if (Backup.PhonePhonebook[0] != NULL) { memcpy(entry->Entries[i].Picture.Buffer, Backup.PhonePhonebook[0]->Entries[i].Picture.Buffer, entry->Entries[i].Picture.Length); } else { memcpy(entry->Entries[i].Picture.Buffer, Backup.SIMPhonebook[0]->Entries[i].Picture.Buffer, entry->Entries[i].Picture.Length); } } } entry->Location = location; entry->MemoryType = type; GSM_FreeBackup(&Backup); return ERR_NONE; }
int main(int argc, char **argv) { size_t pos = 0; GSM_MemoryEntry pbk; GSM_Error error; FILE *f; size_t len; gboolean generate = FALSE; GSM_Backup backup; int i; GSM_Debug_Info *debug_info; /* Configure debugging */ debug_info = GSM_GetGlobalDebug(); GSM_SetDebugFileDescriptor(stderr, FALSE, debug_info); GSM_SetDebugLevel("textall", debug_info); /* Check parameters */ if (argc != 3 && argc != 4) { printf("Not enough parameters!\nUsage: vcard-read file.vcf file.backup\n"); return 1; } /* Check for generating option */ if (argc == 4 && strcmp(argv[3], "generate") == 0) { generate = TRUE; } /* Open file */ f = fopen(argv[1], "r"); test_result(f != NULL); /* Read data */ len = fread(buffer, 1, sizeof(buffer) - 1, f); test_result(feof(f)); /* Zero terminate string */ buffer[len] = 0; /* We don't need file any more */ fclose(f); /* Parse vCard */ error = GSM_DecodeVCARD(NULL, buffer, &pos, &pbk, SonyEricsson_VCard21); gammu_test_result(error, "GSM_DecodeVCARD"); /* Encode vCard back */ pos = 0; error = GSM_EncodeVCARD(NULL, vcard_buffer, sizeof(vcard_buffer), &pos, &pbk, TRUE, SonyEricsson_VCard21); gammu_test_result(error, "GSM_EncodeVCARD"); /* * Best would be to compare here, but we never can get * absolutely same as original. */ printf("ORIGINAL:\n%s\n----\nENCODED:\n%s\n", buffer, vcard_buffer); /* Generate file if we should */ if (generate) { GSM_ClearBackup(&backup); strcpy(backup.Creator, "vCard tester"); pbk.Location = 0; backup.PhonePhonebook[0] = &pbk; backup.PhonePhonebook[1] = NULL; error = GSM_SaveBackupFile(argv[2], &backup, TRUE); gammu_test_result(error, "GSM_SaveBackupFile"); } /* Read file content */ GSM_ClearBackup(&backup); error = GSM_ReadBackupFile(argv[2], &backup, GSM_Backup_GammuUCS2); gammu_test_result(error, "GSM_ReadBackupFile"); /* Compare size */ test_result(pbk.EntriesNum == backup.PhonePhonebook[0]->EntriesNum); /* Compare content */ for (i = 0; i < pbk.EntriesNum; i++) { test_result(pbk.Entries[i].EntryType == backup.PhonePhonebook[0]->Entries[i].EntryType); printf("Entry type: %d\n", pbk.Entries[i].EntryType); switch (pbk.Entries[i].EntryType) { case PBK_Number_General: case PBK_Number_Mobile: case PBK_Number_Fax: case PBK_Number_Pager: case PBK_Number_Other: case PBK_Number_Messaging: case PBK_Number_Video: case PBK_Text_Note: case PBK_Text_Postal: case PBK_Text_Email: case PBK_Text_Email2: case PBK_Text_URL: case PBK_Text_LUID: case PBK_Text_Name: case PBK_Text_LastName: case PBK_Text_FirstName: case PBK_Text_SecondName: case PBK_Text_FormalName: case PBK_Text_NamePrefix: case PBK_Text_NameSuffix: case PBK_Text_NickName: case PBK_Text_Company: case PBK_Text_JobTitle: case PBK_Text_StreetAddress: case PBK_Text_City: case PBK_Text_State: case PBK_Text_Zip: case PBK_Text_Country: case PBK_Text_Custom1: case PBK_Text_Custom2: case PBK_Text_Custom3: case PBK_Text_Custom4: case PBK_Text_UserID: case PBK_Text_PictureName: case PBK_PushToTalkID: case PBK_Text_VOIP: case PBK_Text_SWIS: case PBK_Text_WVID: case PBK_Text_SIP: case PBK_Text_DTMF: test_result(mywstrncmp(pbk.Entries[i].Text, backup.PhonePhonebook[0]->Entries[i].Text, 0) == TRUE); break; case PBK_Photo: test_result((pbk.Entries[i].Picture.Length == backup.PhonePhonebook[0]->Entries[i].Picture.Length) && memcmp(pbk.Entries[i].Picture.Buffer, backup.PhonePhonebook[0]->Entries[i].Picture.Buffer, pbk.Entries[i].Picture.Length) == 0); free(pbk.Entries[i].Picture.Buffer); break; case PBK_Date: case PBK_LastModified: break; case PBK_Category: case PBK_Private: case PBK_RingtoneID: case PBK_PictureID: case PBK_CallLength: case PBK_Caller_Group: test_result(pbk.Entries[i].Number == backup.PhonePhonebook[0]->Entries[i].Number); break; } } error = PrintMemoryEntry(&pbk, NULL); gammu_test_result(error, "PrintMemoryEntry"); /* Free data */ GSM_FreeBackup(&backup); /* We're done */ return 0; }
void Restore(int argc, char *argv[]) { GSM_Error error; GSM_Backup Backup; GSM_FMStation FMStation; GSM_DateTime date_time; GSM_CalendarEntry Calendar; GSM_Bitmap Bitmap; GSM_Ringtone Ringtone; GSM_MemoryEntry Pbk; GSM_MemoryStatus MemStatus; GSM_ToDoEntry ToDo; GSM_ToDoStatus ToDoStatus; GSM_NoteEntry Note; GSM_Profile Profile; GSM_MultiWAPSettings Settings; GSM_GPRSAccessPoint GPRSPoint; GSM_WAPBookmark Bookmark; int i, j, used, max = 0; gboolean Past = TRUE, First; gboolean Found, DoRestore; error = GSM_ReadBackupFile(argv[2],&Backup,GSM_GuessBackupFormat(argv[2], FALSE)); Print_Error(error); signal(SIGINT, interrupt); fprintf(stderr, "%s\n", _("Press Ctrl+C to break...")); if (Backup.DateTimeAvailable) fprintf(stderr, LISTFORMAT "%s\n", _("Time of backup"),OSDateTime(Backup.DateTime,FALSE)); if (Backup.Model[0]!=0) fprintf(stderr, LISTFORMAT "%s\n", _("Phone"),Backup.Model); if (Backup.IMEI[0]!=0) fprintf(stderr, LISTFORMAT "%s\n", _("IMEI"),Backup.IMEI); if (Backup.Creator[0]!=0) fprintf(stderr, LISTFORMAT "%s\n", _("File created by"),Backup.Creator); if (argc == 4 && strcasecmp(argv[3],"-yes") == 0) always_answer_yes = TRUE; if (Backup.MD5Calculated[0]!=0) { if (strcmp(Backup.MD5Original,Backup.MD5Calculated)) { if (!answer_yes(_("Checksum in backup file do not match (original: %s, new: %s). Continue?"), Backup.MD5Original, Backup.MD5Calculated)) return; } } GSM_Init(TRUE); printf("%s\n", _("Please note that restoring data will cause existing data in phone to be deleted.")); printf("%s\n", _("Use addnew command if you just want to add some entries to your phone.")); DoRestore = FALSE; if (Backup.CallerLogos[0] != NULL) { Bitmap.Type = GSM_CallerGroupLogo; Bitmap.Location = 1; error=GSM_GetBitmap(gsm,&Bitmap); if (error == ERR_NONE) { if (answer_yes("%s", _("Restore phone caller groups and logos?"))) DoRestore = TRUE; } } if (DoRestore) { max = 0; while (Backup.CallerLogos[max]!=NULL) max++; for (i=0;i<max;i++) { error=GSM_SetBitmap(gsm,Backup.CallerLogos[i]); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } DoRestore = FALSE; if (Backup.PhonePhonebook[0] != NULL) { max = 0; while (Backup.PhonePhonebook[max]!=NULL) max++; MemStatus.MemoryType = MEM_ME; error=GSM_GetMemoryStatus(gsm, &MemStatus); /* Some phones do not support status, try reading some entry */ if (error != ERR_NONE) { Pbk.Location = 1; Pbk.MemoryType = MEM_ME; error = GSM_GetMemory(gsm, &Pbk); MemStatus.MemoryUsed = max; MemStatus.MemoryFree = max; } if (error == ERR_NONE || error == ERR_EMPTY) { fprintf(stderr, _("%i entries in backup file\n"),max); if (answer_yes("%s", _("Restore phone phonebook?"))) DoRestore = TRUE; } } if (DoRestore) { used = 0; for (i=0;i<MemStatus.MemoryUsed+MemStatus.MemoryFree;i++) { Pbk.MemoryType = MEM_ME; Pbk.Location = i + 1; Pbk.EntriesNum = 0; if (used<max && Backup.PhonePhonebook[used]->Location == Pbk.Location) { Pbk = *Backup.PhonePhonebook[used]; used++; if (Pbk.EntriesNum != 0) error=GSM_SetMemory(gsm, &Pbk); if (error == ERR_PERMISSION && GSM_IsPhoneFeatureAvailable(GSM_GetModelInfo(gsm), F_6230iCALLER)) { error=GSM_DeleteMemory(gsm, &Pbk); Print_Error(error); error=GSM_SetMemory(gsm, &Pbk); } if (error == ERR_MEMORY && GSM_IsPhoneFeatureAvailable(GSM_GetModelInfo(gsm), F_6230iCALLER)) { printf_err("%s\n", _("Probably caller group is missing from your backup, add it and use --restore again.")); GSM_Terminate(); Terminate(2); } if (Pbk.EntriesNum != 0 && error==ERR_NONE) { First = TRUE; for (j=0;j<Pbk.EntriesNum;j++) { if (Pbk.Entries[j].AddError == ERR_NONE) continue; if (First) { printf("\r"); printf(_("Location %d"), Pbk.Location); printf("%20s\n ", " "); First = FALSE; } PrintMemorySubEntry(&Pbk.Entries[j], gsm); printf(" %s\n", GSM_ErrorString(Pbk.Entries[j].AddError)); } } } if (Pbk.EntriesNum == 0) { /* Delete only when there was some content in phone */ if (MemStatus.MemoryUsed > 0) { error = GSM_DeleteMemory(gsm, &Pbk); if (error != ERR_EMPTY && error != ERR_NONE) { Print_Error(error); } } } fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / (MemStatus.MemoryUsed + MemStatus.MemoryFree) ); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } DoRestore = FALSE; if (Backup.SIMPhonebook[0] != NULL) { MemStatus.MemoryType = MEM_SM; error=GSM_GetMemoryStatus(gsm, &MemStatus); if (error==ERR_NONE) { max = 0; while (Backup.SIMPhonebook[max]!=NULL) max++; fprintf(stderr, _("%i entries in backup file\n"),max); if (answer_yes("%s", _("Restore SIM phonebook?"))) DoRestore = TRUE; } } if (DoRestore) { used = 0; for (i=0;i<MemStatus.MemoryUsed+MemStatus.MemoryFree;i++) { Pbk.MemoryType = MEM_SM; Pbk.Location = i + 1; Pbk.EntriesNum = 0; if (used<max && Backup.SIMPhonebook[used]->Location == Pbk.Location) { Pbk = *Backup.SIMPhonebook[used]; used++; if (Pbk.EntriesNum != 0) { error=GSM_SetMemory(gsm, &Pbk); if (error==ERR_NONE) { First = TRUE; for (j=0;j<Pbk.EntriesNum;j++) { if (Pbk.Entries[j].AddError == ERR_NONE) continue; if (First) { printf("\r"); printf(_("Location %d"), Pbk.Location); printf("%20s\n ", " "); First = FALSE; } PrintMemorySubEntry(&Pbk.Entries[j], gsm); printf(" %s\n",GSM_ErrorString(Pbk.Entries[j].AddError)); } } } } if (Pbk.EntriesNum == 0) error=GSM_DeleteMemory(gsm, &Pbk); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / (MemStatus.MemoryUsed + MemStatus.MemoryFree)); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } if (GSM_GetConfig(gsm, -1)->SyncTime == FALSE) { if (answer_yes("%s", _("Do you want to set phone date/time? (NOTE: in some phones it's required to correctly restore calendar notes and other items)"))) { GSM_GetCurrentDateTime(&date_time); error=GSM_SetDateTime(gsm, &date_time); Print_Error(error); } } DoRestore = FALSE; if (Backup.Calendar[0] != NULL) { Calendar.Location = 0; /* N6110 doesn't support getting calendar status */ error = GSM_GetNextCalendar(gsm,&Calendar,TRUE); if (error == ERR_NONE || error == ERR_INVALIDLOCATION || error == ERR_EMPTY) { max = 0; while (Backup.Calendar[max] != NULL) max++; fprintf(stderr, _("%i entries in backup file\n"),max); if (answer_yes("%s", _("Restore phone calendar notes?"))) { Past = answer_yes(" %s", _("Restore notes from the past?")); DoRestore = TRUE; } } } if (DoRestore) { fprintf(stderr, "%s ", _("Deleting old notes:")); error = GSM_DeleteAllCalendar(gsm); if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) { while (1) { error = GSM_GetNextCalendar(gsm,&Calendar,TRUE); if (error != ERR_NONE) break; error = GSM_DeleteCalendar(gsm,&Calendar); Print_Error(error); fprintf(stderr, "*"); } fprintf(stderr, "\n"); } else { fprintf(stderr, "%s\n", _("Done")); Print_Error(error); } for (i=0;i<max;i++) { if (!Past && GSM_IsCalendarNoteFromThePast(Backup.Calendar[i])) continue; Calendar = *Backup.Calendar[i]; error=GSM_AddCalendar(gsm,&Calendar); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } DoRestore = FALSE; if (Backup.ToDo[0] != NULL) { error = GSM_GetToDoStatus(gsm,&ToDoStatus); if (error == ERR_NONE) { max = 0; while (Backup.ToDo[max]!=NULL) max++; fprintf(stderr, _("%i entries in backup file\n"),max); if (answer_yes("%s", _("Restore phone todo?"))) DoRestore = TRUE; } } if (DoRestore) { ToDo = *Backup.ToDo[0]; error = GSM_SetToDo(gsm,&ToDo); } if (DoRestore && (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED)) { fprintf(stderr, "%s ", _("Deleting old todos:")); error=GSM_DeleteAllToDo(gsm); if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) { while (1) { error = GSM_GetNextToDo(gsm,&ToDo,TRUE); if (error != ERR_NONE) break; error = GSM_DeleteToDo(gsm,&ToDo); Print_Error(error); fprintf(stderr, "*"); } fprintf(stderr, "\n"); } else { fprintf(stderr, "%s\n", _("Done")); Print_Error(error); } for (i=0;i<max;i++) { ToDo = *Backup.ToDo[i]; ToDo.Location = 0; error=GSM_AddToDo(gsm,&ToDo); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } else if (DoRestore) { /* At first delete entries, that were deleted */ used = 0; error = GSM_GetNextToDo(gsm,&ToDo,TRUE); while (error == ERR_NONE) { used++; Found = FALSE; for (i=0;i<max;i++) { if (Backup.ToDo[i]->Location == ToDo.Location) { Found = TRUE; break; } } if (!Found) { error=GSM_DeleteToDo(gsm,&ToDo); Print_Error(error); } error = GSM_GetNextToDo(gsm,&ToDo,FALSE); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), used * 100 / ToDoStatus.Used); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); /* Now write modified/new entries */ for (i=0;i<max;i++) { ToDo = *Backup.ToDo[i]; error = GSM_SetToDo(gsm,&ToDo); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } DoRestore = FALSE; if (Backup.Note[0] != NULL) { error = GSM_GetNotesStatus(gsm,&ToDoStatus); if (error == ERR_NONE) { max = 0; while (Backup.Note[max]!=NULL) max++; fprintf(stderr, _("%i entries in backup file\n"),max); if (answer_yes("%s", _("Restore phone notes?"))) DoRestore = TRUE; } } if (DoRestore) { fprintf(stderr, "%s ", _("Deleting old notes:")); while (1) { error = GSM_GetNextNote(gsm,&Note,TRUE); if (error != ERR_NONE) break; error = GSM_DeleteNote(gsm,&Note); Print_Error(error); fprintf(stderr, "*"); } fprintf(stderr, "\n"); for (i=0;i<max;i++) { Note = *Backup.Note[i]; Note.Location = 0; error=GSM_AddNote(gsm,&Note); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } if (Backup.SMSC[0] != NULL && answer_yes("%s", _("Restore SIM SMSC profiles?"))) { max = 0; while (Backup.SMSC[max]!=NULL) max++; for (i=0;i<max;i++) { error=GSM_SetSMSC(gsm,Backup.SMSC[i]); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } if (Backup.StartupLogo != NULL && answer_yes("%s", _("Restore phone startup logo/text?"))) { error=GSM_SetBitmap(gsm,Backup.StartupLogo); Print_Error(error); } if (Backup.OperatorLogo != NULL && answer_yes("%s", _("Restore phone operator logo?"))) { error=GSM_SetBitmap(gsm,Backup.OperatorLogo); Print_Error(error); } DoRestore = FALSE; if (Backup.WAPBookmark[0] != NULL) { Bookmark.Location = 1; error = GSM_GetWAPBookmark(gsm,&Bookmark); if (error == ERR_NONE || error == ERR_INVALIDLOCATION) { if (answer_yes("%s", _("Restore phone WAP bookmarks?"))) DoRestore = TRUE; } } if (DoRestore) { fprintf(stderr, "%s ", _("Deleting old bookmarks:")); /* One thing to explain: DCT4 phones seems to have bug here. * When delete for example first bookmark, phone change * numeration for getting frame, not for deleting. So, we try to * get 1'st bookmark. Inside frame is "correct" location. We use * it later */ while (error==ERR_NONE) { error = GSM_DeleteWAPBookmark(gsm,&Bookmark); Bookmark.Location = 1; error = GSM_GetWAPBookmark(gsm,&Bookmark); fprintf(stderr, "*"); } fprintf(stderr, "\n"); max = 0; while (Backup.WAPBookmark[max]!=NULL) max++; for (i=0;i<max;i++) { Bookmark = *Backup.WAPBookmark[i]; Bookmark.Location = 0; error=GSM_SetWAPBookmark(gsm,&Bookmark); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } DoRestore = FALSE; if (Backup.WAPSettings[0] != NULL) { Settings.Location = 1; error = GSM_GetWAPSettings(gsm,&Settings); if (error == ERR_NONE) { if (answer_yes("%s", _("Restore phone WAP settings?"))) DoRestore = TRUE; } } if (DoRestore) { max = 0; while (Backup.WAPSettings[max]!=NULL) max++; for (i=0;i<max;i++) { error=GSM_SetWAPSettings(gsm,Backup.WAPSettings[i]); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } DoRestore = FALSE; if (Backup.MMSSettings[0] != NULL) { Settings.Location = 1; error = GSM_GetMMSSettings(gsm,&Settings); if (error == ERR_NONE) { if (answer_yes("%s", _("Restore phone MMS settings?"))) DoRestore = TRUE; } } if (DoRestore) { max = 0; while (Backup.MMSSettings[max]!=NULL) max++; for (i=0;i<max;i++) { error=GSM_SetMMSSettings(gsm,Backup.MMSSettings[i]); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } DoRestore = FALSE; if (Backup.Ringtone[0] != NULL) { Ringtone.Location = 1; Ringtone.Format = 0; error = GSM_GetRingtone(gsm,&Ringtone,FALSE); if (error == ERR_NONE || error ==ERR_EMPTY) { if (answer_yes("%s", _("Delete all phone user ringtones?"))) DoRestore = TRUE; } } if (DoRestore) { fprintf(stderr, LISTFORMAT, _("Deleting")); error=GSM_DeleteUserRingtones(gsm); Print_Error(error); fprintf(stderr, "%s\n", _("Done")); DoRestore = FALSE; if (answer_yes("%s", _("Restore user ringtones?"))) DoRestore = TRUE; } if (DoRestore) { max = 0; while (Backup.Ringtone[max]!=NULL) max++; for (i=0;i<max;i++) { error=GSM_RingtoneConvert(&Ringtone, Backup.Ringtone[i], Ringtone.Format); Print_Error(error); error=GSM_SetRingtone(gsm,&Ringtone,&i); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } DoRestore = FALSE; if (Backup.Profiles[0] != NULL) { Profile.Location = 1; error = GSM_GetProfile(gsm,&Profile); if (error == ERR_NONE) { if (answer_yes("%s", _("Restore phone profiles?"))) DoRestore = TRUE; } } if (DoRestore) { Profile.Location= 0; max = 0; while (Backup.Profiles[max]!=NULL) max++; for (i=0;i<max;i++) { Profile = *Backup.Profiles[i]; error=GSM_SetProfile(gsm,&Profile); Print_Error(error); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } DoRestore = FALSE; if (Backup.FMStation[0] != NULL) { FMStation.Location = 1; error = GSM_GetFMStation(gsm,&FMStation); if (error == ERR_NONE || error == ERR_EMPTY) { if (answer_yes("%s", _("Restore phone FM radio stations?"))) DoRestore = TRUE; } } if (DoRestore) { fprintf(stderr, "%s ", _("Deleting old FM stations:")); error=GSM_ClearFMStations(gsm); Print_Error(error); fprintf(stderr, "%s\n", _("Done")); max = 0; while (Backup.FMStation[max]!=NULL) max++; for (i=0;i<max;i++) { FMStation = *Backup.FMStation[i]; error=GSM_SetFMStation(gsm,&FMStation); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } DoRestore = FALSE; if (Backup.GPRSPoint[0] != NULL) { GPRSPoint.Location = 1; error = GSM_GetGPRSAccessPoint(gsm,&GPRSPoint); if (error == ERR_NONE || error == ERR_EMPTY) { if (answer_yes("%s", _("Restore phone GPRS Points?"))) DoRestore = TRUE; } } if (DoRestore) { max = 0; while (Backup.GPRSPoint[max]!=NULL) max++; for (i=0;i<max;i++) { error=GSM_SetGPRSAccessPoint(gsm,Backup.GPRSPoint[i]); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } GSM_FreeBackup(&Backup); GSM_Terminate(); }
void SaveFile(int argc, char *argv[]) { GSM_Error error; GSM_Backup Backup; int i; size_t data_size = 0; FILE *file; unsigned char Buffer[100000]; GSM_MemoryEntry *pbk; long int location; if (strcasecmp(argv[2],"CALENDAR") == 0) { if (argc < 5) { printf("%s\n", _("Where is backup filename and location?")); Terminate(2); } location = GetInt(argv[5]) - 1; error = GSM_ReadBackupFile(argv[4], &Backup,GSM_GuessBackupFormat(argv[4], FALSE)); if (error != ERR_NOTIMPLEMENTED) { Print_Error(error); } i = 0; while (Backup.Calendar[i] != NULL) { if (i == location) break; i++; } if (i != location || Backup.Calendar[i] == NULL) { printf("%s\n", _("Calendar note not found in file")); GSM_FreeBackup(&Backup); Terminate(2); } error = GSM_EncodeVCALENDAR(Buffer, sizeof(Buffer), &data_size, Backup.Calendar[i],TRUE,Nokia_VCalendar); GSM_FreeBackup(&Backup); Print_Error(error); } else if (strcasecmp(argv[2],"BOOKMARK") == 0) { if (argc < 5) { printf("%s\n", _("Where is backup filename and location?")); Terminate(2); } location = GetInt(argv[5]) - 1; error = GSM_ReadBackupFile(argv[4],&Backup,GSM_GuessBackupFormat(argv[4], FALSE)); if (error != ERR_NOTIMPLEMENTED) { Print_Error(error); } i = 0; while (Backup.WAPBookmark[i]!=NULL) { if (i == location) break; i++; } if (i != location || Backup.WAPBookmark[i] == NULL) { printf("%s\n", _("WAP bookmark not found in file")); GSM_FreeBackup(&Backup); Terminate(2); } error = GSM_EncodeURLFile(Buffer, &data_size, Backup.WAPBookmark[i]); GSM_FreeBackup(&Backup); Print_Error(error); } else if (strcasecmp(argv[2],"NOTE") == 0) { if (argc<5) { printf("%s\n", _("Where is backup filename and location?")); Terminate(2); } location = GetInt(argv[5]) - 1; error=GSM_ReadBackupFile(argv[4],&Backup,GSM_GuessBackupFormat(argv[4], FALSE)); if (error!=ERR_NOTIMPLEMENTED) Print_Error(error); i = 0; while (Backup.Note[i]!=NULL) { if (i == location) break; i++; } if (i != location || Backup.Note[i] == NULL) { printf("%s\n", _("Note not found in file")); GSM_FreeBackup(&Backup); Terminate(2); } error = GSM_EncodeVNTFile(Buffer, sizeof(Buffer), &data_size, Backup.Note[i]); GSM_FreeBackup(&Backup); Print_Error(error); } else if (strcasecmp(argv[2],"TODO") == 0) { if (argc<5) { printf("%s\n", _("Where is backup filename and location?")); Terminate(2); } location = GetInt(argv[5]) - 1; error=GSM_ReadBackupFile(argv[4],&Backup,GSM_GuessBackupFormat(argv[4], FALSE)); if (error!=ERR_NOTIMPLEMENTED) Print_Error(error); i = 0; while (Backup.ToDo[i]!=NULL) { if (i == location) break; i++; } if (i != location || Backup.ToDo[i] == NULL) { printf("%s\n", _("Todo note not found in file")); GSM_FreeBackup(&Backup); Terminate(2); } error = GSM_EncodeVTODO(Buffer, sizeof(Buffer), &data_size, Backup.ToDo[i], TRUE, Nokia_VToDo); GSM_FreeBackup(&Backup); Print_Error(error); } else if (strcasecmp(argv[2],"VCARD10") == 0 || strcasecmp(argv[2],"VCARD21") == 0) { if (argc<6) { printf("%s\n", _("Where is backup filename and location and memory type?")); Terminate(2); } location = GetInt(argv[6]) - 1; error=GSM_ReadBackupFile(argv[4],&Backup,GSM_GuessBackupFormat(argv[4], FALSE)); if (error!=ERR_NOTIMPLEMENTED) Print_Error(error); i = 0; if (strcasecmp(argv[5],"SM") == 0) { while (Backup.SIMPhonebook[i]!=NULL) { if (i == location) break; i++; } if (i != location || Backup.SIMPhonebook[i] == NULL) { printf("%s\n", _("Phonebook entry not found in file")); GSM_FreeBackup(&Backup); Terminate(2); } pbk = Backup.SIMPhonebook[i]; } else if (strcasecmp(argv[5],"ME") == 0) { while (Backup.PhonePhonebook[i]!=NULL) { if (i == location) break; i++; } if (i != location || Backup.PhonePhonebook[i] == NULL) { printf("%s\n", _("Phonebook entry not found in file")); GSM_FreeBackup(&Backup); Terminate(2); } pbk = Backup.PhonePhonebook[i]; } else { printf(_("Unknown memory type: \"%s\"\n"),argv[5]); GSM_FreeBackup(&Backup); Terminate(2); } if (strcasecmp(argv[2],"VCARD10") == 0) { error = GSM_EncodeVCARD(GSM_GetDebug(gsm), Buffer, sizeof(Buffer), &data_size, pbk, TRUE, Nokia_VCard10); GSM_FreeBackup(&Backup); Print_Error(error); } else { error = GSM_EncodeVCARD(GSM_GetDebug(gsm), Buffer, sizeof(Buffer), &data_size, pbk, TRUE, Nokia_VCard21); GSM_FreeBackup(&Backup); Print_Error(error); } } else { printf(_("Unknown backup format: \"%s\"\n"), argv[2]); Terminate(2); } file = fopen(argv[3],"wb"); if (file == NULL) { printf_err("%s", _("Error while opening file for writing!\n")); Terminate(3); } if (data_size != fwrite(Buffer,1,data_size,file)) { printf_err("%s", _("Error while writing file!\n")); } if (fclose(file) != 0) { printf_err("%s", _("Error while closing file!\n")); } }
void AddNew(int argc, char *argv[]) { GSM_Error error; GSM_Backup Backup; GSM_DateTime date_time; GSM_MemoryEntry Pbk; GSM_MemoryStatus MemStatus; GSM_ToDoEntry ToDo; GSM_ToDoStatus ToDoStatus; GSM_NoteEntry Note; GSM_CalendarEntry Calendar; GSM_WAPBookmark Bookmark; GSM_MemoryType MemoryType = 0; int i, max; error=GSM_ReadBackupFile(argv[2],&Backup,GSM_GuessBackupFormat(argv[2], FALSE)); if (error!=ERR_NOTIMPLEMENTED) Print_Error(error); if (Backup.DateTimeAvailable) { fprintf(stderr, LISTFORMAT "%s\n", _("Time of backup"),OSDateTime(Backup.DateTime,FALSE)); } if (Backup.Model[0]!=0) { fprintf(stderr, LISTFORMAT "%s\n", _("Phone"),Backup.Model); } if (Backup.IMEI[0]!=0) { fprintf(stderr, LISTFORMAT "%s\n", _("IMEI"),Backup.IMEI); } for (i = 3; i < argc; i++) { if (strcasecmp(argv[i],"-yes") == 0) { always_answer_yes = TRUE; } else if (strcasecmp(argv[i],"-memory") == 0 && i + 1 < argc) { i++; MemoryType = GSM_StringToMemoryType(argv[i]); if (MemoryType == 0) { printf_err(_("Unknown memory type (\"%s\")\n"),argv[i]); Terminate(2); } } else { printf_err(_("Unknown parameter (\"%s\")\n"), argv[i]); Terminate(2); } } signal(SIGINT, interrupt); fprintf(stderr, "%s\n", _("Press Ctrl+C to break...")); GSM_Init(TRUE); if (Backup.PhonePhonebook[0] != NULL) { MemStatus.MemoryType = (MemoryType == 0 ? MEM_ME : MemoryType); error=GSM_GetMemoryStatus(gsm, &MemStatus); /* Some phones do not support status, try reading some entry */ if (error != ERR_NONE) { Pbk.Location = 1; Pbk.MemoryType = MEM_ME; error = GSM_GetMemory(gsm, &Pbk); MemStatus.MemoryFree = 9999999; } if (error == ERR_NONE || error == ERR_EMPTY) { max = 0; while (Backup.PhonePhonebook[max] != NULL) { max++; } fprintf(stderr, _("%i entries in backup file\n"), max); if (MemStatus.MemoryFree < max) { fprintf(stderr, _("Memory has only %i free locations.Exiting\n"), MemStatus.MemoryFree); } else if (answer_yes("%s", _("Add phone phonebook entries?"))) { for (i = 0; i < max; i++) { Pbk = *Backup.PhonePhonebook[i]; Pbk.MemoryType = (MemoryType == 0 ? MEM_ME : MemoryType); error=GSM_AddMemory(gsm, &Pbk); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } } } if (Backup.SIMPhonebook[0] != NULL) { MemStatus.MemoryType = (MemoryType == 0 ? MEM_SM : MemoryType); error=GSM_GetMemoryStatus(gsm, &MemStatus); if (error==ERR_NONE) { max = 0; while (Backup.SIMPhonebook[max]!=NULL) max++; fprintf(stderr, _("%i entries in backup file\n"),max); if (MemStatus.MemoryFree < max) { fprintf(stderr, _("Memory has only %i free locations.Exiting\n"),MemStatus.MemoryFree); } else if (answer_yes("%s", _("Add SIM phonebook entries?"))) { for (i=0;i<max;i++) { Pbk = *Backup.SIMPhonebook[i]; Pbk.MemoryType = (MemoryType == 0 ? MEM_SM : MemoryType); error=GSM_AddMemory(gsm, &Pbk); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } } } if (GSM_GetConfig(gsm, -1)->SyncTime == FALSE) { if (answer_yes("%s", _("Do you want to set phone date/time? (NOTE: in some phones it's required to correctly restore calendar notes and other items)"))) { GSM_GetCurrentDateTime(&date_time); error=GSM_SetDateTime(gsm, &date_time); Print_Error(error); } } if (Backup.Calendar[0] != NULL) { Calendar.Location = 1; error = GSM_GetNextCalendar(gsm,&Calendar,TRUE); if (error == ERR_NONE || error == ERR_INVALIDLOCATION || error == ERR_EMPTY) { if (answer_yes("%s", _("Add phone calendar notes?"))) { max = 0; while (Backup.Calendar[max]!=NULL) max++; for (i=0;i<max;i++) { Calendar = *Backup.Calendar[i]; error=GSM_AddCalendar(gsm,&Calendar); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } } } if (Backup.ToDo[0] != NULL) { ToDo.Location = 1; error=GSM_GetToDoStatus(gsm,&ToDoStatus); if (error == ERR_NONE) { if (answer_yes("%s", _("Add phone ToDo?"))) { max = 0; while (Backup.ToDo[max]!=NULL) max++; for (i=0;i<max;i++) { ToDo = *Backup.ToDo[i]; error = GSM_AddToDo(gsm,&ToDo); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } } } if (Backup.Note[0] != NULL) { Note.Location = 1; if (answer_yes("%s", _("Add notes to phone?"))) { max = 0; while (Backup.Note[max]!=NULL) max++; for (i=0;i<max;i++) { Note = *Backup.Note[i]; error = GSM_AddNote(gsm,&Note); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } } if (Backup.WAPBookmark[0] != NULL) { Bookmark.Location = 1; error = GSM_GetWAPBookmark(gsm,&Bookmark); if (error == ERR_NONE || error == ERR_INVALIDLOCATION) { if (answer_yes("%s", _("Add phone WAP bookmarks?"))) { max = 0; while (Backup.WAPBookmark[max]!=NULL) max++; for (i=0;i<max;i++) { Bookmark = *Backup.WAPBookmark[i]; Bookmark.Location = 0; error=GSM_SetWAPBookmark(gsm,&Bookmark); Print_Error(error); fprintf(stderr, "\r"); fprintf(stderr, "%s ", _("Writing:")); fprintf(stderr, _("%i percent"), (i + 1) * 100 / max); if (gshutdown) { GSM_Terminate(); Terminate(4); } } fprintf(stderr, "\n"); } } } GSM_FreeBackup(&Backup); GSM_Terminate(); }