diff options
Diffstat (limited to 'gammu/message.c')
-rw-r--r-- | gammu/message.c | 57 |
1 files changed, 33 insertions, 24 deletions
diff --git a/gammu/message.c b/gammu/message.c index 11a157e..2c8e577 100644 --- a/gammu/message.c +++ b/gammu/message.c @@ -135,17 +135,18 @@ void GetUSSD(int argc UNUSED, char *argv[]) GSM_SetIncomingUSSDCallback(gsm, IncomingUSSD2, NULL); - error=GSM_SetIncomingUSSD(gsm,TRUE); + error = GSM_SetIncomingUSSD(gsm, TRUE); Print_Error(error); - error=GSM_DialService(gsm, argv[2]); + num_replies = 0; + + error = GSM_DialService(gsm, argv[2]); /* Fallback to voice call, it can work with some phones */ if (error == ERR_NOTIMPLEMENTED || error == ERR_NOTSUPPORTED) { - error=GSM_DialVoice(gsm, argv[2], GSM_CALL_DefaultNumberPresence); + error = GSM_DialVoice(gsm, argv[2], GSM_CALL_DefaultNumberPresence); } Print_Error(error); - num_replies = 0; last_replies = 0; last_reply = time(NULL); while (!gshutdown) { @@ -155,14 +156,15 @@ void GetUSSD(int argc UNUSED, char *argv[]) } else if (num_replies == 0 && difftime(time(NULL), last_reply) > 60) { /* Wait one minute for reply */ gshutdown = TRUE; - } else if (num_replies > 0 && difftime(time(NULL), last_reply) > 30) { - /* Wait for consequent replies for 30 seconds */ + } else if (num_replies > 0 && difftime(time(NULL), last_reply) > 10) { + /* Wait for consequent replies for 10 seconds */ gshutdown = TRUE; } + GSM_ReadDevice(gsm, FALSE); } - error=GSM_SetIncomingUSSD(gsm, FALSE); + error = GSM_SetIncomingUSSD(gsm, FALSE); Print_Error(error); GSM_Terminate(); @@ -553,11 +555,16 @@ void SendSMSStatus (GSM_StateMachine *sm, int status, int MessageReference, void void SendSaveDisplaySMS(int argc, char *argv[]) { GSM_Error error; - GSM_MultiSMSMessage sms; + GSM_MultiSMSMessage *sms; GSM_Message_Type type; GSM_SMSFolders folders; int i=0; + sms = malloc(sizeof(GSM_MultiSMSMessage)); + if (sms == NULL) { + return; + } + if (strcasestr(argv[1], "savesms") != NULL) { type = SMS_Save; } else if (strcasestr(argv[1], "sendsmsdsms") != NULL) { @@ -567,23 +574,24 @@ void SendSaveDisplaySMS(int argc, char *argv[]) } else if (strcasestr(argv[1], "displaysms") != NULL) { type = SMS_Display; } else { + free(sms); return; } GSM_Init(TRUE); - error = CreateMessage(&type, &sms, argc, 2, argv, gsm); + error = CreateMessage(&type, sms, argc, 2, argv, gsm); Print_Error(error); switch (type) { case SMS_Display: - for (i = 0; i < sms.Number; i++) { + for (i = 0; i < sms->Number; i++) { printf(LISTFORMAT "%i\n", _("Message number"), i); - error = DisplaySMSFrame(&sms.SMS[i], gsm); + error = DisplaySMSFrame(&(sms->SMS[i]), gsm); Print_Error(error); } - printf(LISTFORMAT "%i\n", _("Number of messages"), sms.Number); + printf(LISTFORMAT "%i\n", _("Number of messages"), sms->Number); break; case SMS_Save: case SMS_SendSaved: @@ -598,15 +606,15 @@ void SendSaveDisplaySMS(int argc, char *argv[]) fflush(stderr); } - for (i=0;i<sms.Number;i++) { - printf(_("Saving SMS %i/%i\n"),i+1,sms.Number); - error = GSM_AddSMS(gsm, &sms.SMS[i]); + for (i = 0; i < sms->Number; i++) { + printf(_("Saving SMS %i/%i\n"),i+1,sms->Number); + error = GSM_AddSMS(gsm, &(sms->SMS[i])); Print_Error(error); printf(_("Saved in folder number %d \"%s\", location %i"), - sms.SMS[i].Folder, - DecodeUnicodeConsole(folders.Folder[sms.SMS[i].Folder-1].Name), - sms.SMS[i].Location); - if (sms.SMS[i].Memory == MEM_SM) { + sms->SMS[i].Folder, + DecodeUnicodeConsole(folders.Folder[sms->SMS[i].Folder-1].Name), + sms->SMS[i].Location); + if (sms->SMS[i].Memory == MEM_SM) { printf(", %s\n", _("SIM")); } else { printf(", %s\n", _("phone")); @@ -614,10 +622,10 @@ void SendSaveDisplaySMS(int argc, char *argv[]) if (type == SMS_SendSaved) { printf(_("Sending sms from folder \"%s\", location %i\n"), - DecodeUnicodeString(folders.Folder[sms.SMS[i].Folder-1].Name),sms.SMS[i].Location); + DecodeUnicodeString(folders.Folder[sms->SMS[i].Folder-1].Name),sms->SMS[i].Location); fflush(stdout); SMSStatus = ERR_TIMEOUT; - error = GSM_SendSavedSMS(gsm, 0, sms.SMS[i].Location); + error = GSM_SendSavedSMS(gsm, 0, sms->SMS[i].Location); Print_Error(error); printf("%s", _("....waiting for network answer")); fflush(stdout); @@ -639,11 +647,11 @@ void SendSaveDisplaySMS(int argc, char *argv[]) GSM_SetSendSMSStatusCallback(gsm, SendSMSStatus, NULL); - for (i=0;i<sms.Number;i++) { - printf(_("Sending SMS %i/%i"),i+1,sms.Number); + for (i=0;i<sms->Number;i++) { + printf(_("Sending SMS %i/%i"),i+1,sms->Number); fflush(stdout); SMSStatus = ERR_TIMEOUT; - error=GSM_SendSMS(gsm, &sms.SMS[i]); + error=GSM_SendSMS(gsm, &(sms->SMS[i])); Print_Error(error); printf("%s", _("....waiting for network answer")); fflush(stdout); @@ -662,6 +670,7 @@ void SendSaveDisplaySMS(int argc, char *argv[]) printf_err("%s", _("Something went wrong, unknown message operation!\n")); } + free(sms); GSM_Terminate(); } |