void RestoreSMS(int argc, char *argv[]) { GSM_Error error; GSM_MultiSMSMessage *SMS; GSM_SMS_Backup *Backup; GSM_SMSFolders folders; int smsnum = 0; gboolean restore8bit; SMS = malloc(sizeof(GSM_MultiSMSMessage)); if (SMS == NULL) { return; } Backup = malloc(sizeof(GSM_SMS_Backup)); if (Backup == NULL) { free(SMS); return; } if (argc == 4 && strcasecmp(argv[3],"-yes") == 0) always_answer_yes = TRUE; error = GSM_ReadSMSBackupFile(argv[2], Backup); Print_Error(error); restore8bit = answer_yes("%s", _("Do you want to restore binary SMS?")); GSM_Init(TRUE); error = GSM_GetSMSFolders(gsm, &folders); Print_Error(error); while (Backup->SMS[smsnum] != NULL) { if (restore8bit || Backup->SMS[smsnum]->Coding != SMS_Coding_8bit) { SMS->Number = 1; memcpy(&(SMS->SMS[0]), Backup->SMS[smsnum], sizeof(GSM_SMSMessage)); DisplayMultiSMSInfo(SMS, FALSE, FALSE, NULL, gsm); if (answer_yes(_("Restore %03i sms to folder \"%s\"%s?"), smsnum + 1, DecodeUnicodeConsole(folders.Folder[Backup->SMS[smsnum]->Folder - 1].Name), folders.Folder[Backup->SMS[smsnum]->Folder - 1].Memory == MEM_SM ? _(" (SIM)") : "")) { smprintf(gsm, _("saving %i SMS\n"),smsnum); error = GSM_AddSMS(gsm, Backup->SMS[smsnum]); Print_Error(error); } } smsnum++; } /* We don't need this anymore */ GSM_FreeSMSBackup(Backup); free(Backup); free(SMS); GSM_Terminate(); }
void AddSMS(int argc, char *argv[]) { GSM_Error error; GSM_MultiSMSMessage *SMS; GSM_SMS_Backup *Backup; int smsnum = 0; int folder; if (argc == 5 && strcasecmp(argv[4],"-yes") == 0) always_answer_yes = TRUE; SMS = malloc(sizeof(GSM_MultiSMSMessage)); if (SMS == NULL) { return; } Backup = malloc(sizeof(GSM_SMS_Backup)); if (Backup == NULL) { free(SMS); return; } folder = GetInt(argv[2]); error = GSM_ReadSMSBackupFile(argv[3], Backup); Print_Error(error); GSM_Init(TRUE); while (Backup->SMS[smsnum] != NULL) { Backup->SMS[smsnum]->Folder = folder; Backup->SMS[smsnum]->SMSC.Location = 1; SMS->Number = 1; SMS->SMS[0] = *(Backup->SMS[smsnum]); DisplayMultiSMSInfo(SMS, FALSE, FALSE, NULL, gsm); if (answer_yes("%s", _("Restore message?"))) { error=GSM_AddSMS(gsm, Backup->SMS[smsnum]); Print_Error(error); } smsnum++; } /* We don't need this anymore */ GSM_FreeSMSBackup(Backup); free(Backup); free(SMS); GSM_Terminate(); }
int main(int argc, char **argv) { GSM_Debug_Info *debug_info; GSM_Phone_ATGENData *Priv; GSM_Phone_Data *Data; unsigned char buffer[BUFFER_SIZE]; FILE *f; size_t len; GSM_StateMachine *s; GSM_Protocol_Message msg; GSM_Error error; GSM_MultiSMSMessage sms; GSM_SMSDConfig *smsd; #if 0 GSM_SMS_Backup bkp; #endif /* Check parameters */ if (argc != 2 && argc != 3) { printf("Not enough parameters!\nUsage: sms-at-parse comm.dump [PDU|TXT|TXTDETAIL]\n"); return 1; } /* Open file */ f = fopen(argv[1], "r"); if (f == NULL) { printf("Could not open %s\n", argv[1]); return 1; } /* Read data */ len = fread(buffer, 1, sizeof(buffer) - 1, f); if (!feof(f)) { printf("Could not read whole file %s\n", argv[1]); fclose(f); return 1; } smsd = SMSD_NewConfig("test"); /* Zero terminate data */ buffer[len] = 0; /* Close file */ fclose(f); /* Configure state machine */ debug_info = GSM_GetGlobalDebug(); GSM_SetDebugFileDescriptor(stderr, FALSE, debug_info); GSM_SetDebugLevel("textall", debug_info); /* Allocates state machine */ s = GSM_AllocStateMachine(); test_result(s != NULL); debug_info = GSM_GetDebug(s); GSM_SetDebugGlobal(TRUE, debug_info); /* Initialize AT engine */ Data = &s->Phone.Data; Data->ModelInfo = GetModelData(NULL, NULL, "unknown", NULL); Priv = &s->Phone.Data.Priv.ATGEN; Priv->ReplyState = AT_Reply_OK; Priv->Charset = AT_CHARSET_GSM; if (argc == 3 && strcmp(argv[2], "TXT") == 0) { Priv->SMSMode = SMS_AT_TXT; Priv->SMSTextDetails = FALSE; } else if (argc == 3 && strcmp(argv[2], "TXTDETAIL") == 0) { Priv->SMSMode = SMS_AT_TXT; Priv->SMSTextDetails = TRUE; } else { Priv->SMSMode = SMS_AT_PDU; } /* Init message */ msg.Type = 0; msg.Length = len; msg.Buffer = buffer; SplitLines(msg.Buffer, msg.Length, &Priv->Lines, "\x0D\x0A", 2, "\"", 1, TRUE); /* Pointer to store message */ s->Phone.Data.GetSMSMessage = &sms; /* Parse it */ error = ATGEN_ReplyGetSMSMessage(&msg, s); sms.SMS[0].Memory = MEM_SM; #if 0 bkp.SMS[0] = &sms.SMS[0]; bkp.SMS[1] = NULL; GSM_AddSMSBackupFile("/tmp/back", &bkp); #endif /* Display message */ if (error == ERR_NONE) { DisplayMultiSMSInfo(&sms, FALSE, TRUE, NULL, NULL); DisplayMultiSMSInfo(&sms, TRUE, TRUE, NULL, NULL); printf("Parts: %d, count: %d, ID16: %d, ID8: %d\n", sms.SMS[0].UDH.AllParts, sms.Number, sms.SMS[0].UDH.ID16bit, sms.SMS[0].UDH.ID8bit); SMSD_RunOnReceiveEnvironment(&sms, smsd, "1"); } /* This is normally done by ATGEN_Terminate */ FreeLines(&Priv->Lines); GetLineString(NULL, NULL, 0); /* Free state machine */ GSM_FreeStateMachine(s); gammu_test_result(error, "ATGEN_ReplyGetSMSMessage"); return 0; }