gn_error sendringtone(int argc, char *argv[], gn_data *data, struct gn_statemachine *state) { gn_sms sms; gn_error error = GN_ERR_NOTSUPPORTED; gn_sms_default_submit(&sms); sms.user_data[0].type = GN_SMS_DATA_Ringtone; sms.user_data[1].type = GN_SMS_DATA_None; if ((error = gn_file_ringtone_read(optarg, &sms.user_data[0].u.ringtone))) { fprintf(stderr, _("Failed to load ringtone: %s\n"), gn_error_print(error)); return error; } /* The second argument is the destination, ie the phone number of recipient. */ snprintf(sms.remote.number, sizeof(sms.remote.number) - 1, "%s", argv[optind]); if (sms.remote.number[0] == '+') sms.remote.type = GN_GSM_NUMBER_International; else sms.remote.type = GN_GSM_NUMBER_Unknown; /* Get the SMS Center */ if (!sms.smsc.number[0]) { data->message_center = calloc(1, sizeof(gn_sms_message_center)); data->message_center->id = 1; if (gn_sm_functions(GN_OP_GetSMSCenter, data, state) == GN_ERR_NONE) { snprintf(sms.smsc.number, sizeof(sms.smsc.number), "%s", data->message_center->smsc.number); sms.smsc.type = data->message_center->smsc.type; } free(data->message_center); } if (!sms.smsc.type) sms.smsc.type = GN_GSM_NUMBER_Unknown; /* Send the message. */ data->sms = &sms; error = gn_sms_send(data, state); if (error == GN_ERR_NONE) { if (sms.parts > 1) { int j; fprintf(stderr, _("Message sent in %d parts with reference numbers:"), sms.parts); for (j = 0; j < sms.parts; j++) fprintf(stderr, " %d", sms.reference[j]); fprintf(stderr, "\n"); } else fprintf(stderr, _("Send succeeded with reference %d!\n"), sms.reference[0]); } else fprintf(stderr, _("SMS Send failed (%s)\n"), gn_error_print(error)); return error; }
gboolean libgnokii_sms_send_api(pegang *unit) { if(!holdgnokii_init) { printf("hold_gnokii_init aint initialized\n"); return FALSE; } //avoiding if(unit->sms_send_encapsulation->no_dest == NULL || strlen(unit->sms_send_encapsulation->no_dest) < 2 || unit->sms_send_encapsulation->msg == NULL || strlen(unit->sms_send_encapsulation->msg) < 2) { return FALSE; } gn_sms sms; gn_error error; gn_data data; int pos = 0; //memset to zero gn_sms_default_submit(&sms); gn_data_clear(&data); //set the dest number snprintf(sms.remote.number,sizeof(sms.remote.number),"%s",unit->sms_send_encapsulation->no_dest); sms.remote.type = libgnokii_nomorhp_tipe_api(unit->sms_send_encapsulation->no_dest); if(sms.remote.type == GN_GSM_NUMBER_Alphanumeric) { printf("Invalid Phone Number\n"); return FALSE; } //set txt to be sent and length of it error = libgnokii_bacatext_api(&sms.user_data[pos],unit); sms.user_data[pos].type = GN_SMS_DATA_Text; /* if ((sms.dcs.u.general.alphabet != GN_SMS_DCS_8bit) && !gn_char_def_alphabet(sms.user_data[pos].u.text)) sms.dcs.u.general.alphabet = GN_SMS_DCS_UCS2; sms.user_data[++pos].type = GN_SMS_DATA_None; */ //report the delivery sms.delivery_report = 1; //auto get sms center data.message_center = calloc(1, sizeof(gn_sms_message_center)); //allocate only for one element of data->message_center and size of its element is sizeof(gn_sms_message_center) data.message_center->id = 1; error = gn_sm_functions(GN_OP_GetSMSCenter, &data, state); if(error == GN_ERR_NONE) { snprintf(sms.smsc.number,sizeof(sms.smsc.number),"%s",data.message_center->smsc.number); // set to sms.smsc.number from data.sms.smsc.number sms.smsc.type = data.message_center->smsc.type; //g_slice_free(gn_sms_message_center,data->message_center); // free the ram free(data.message_center); } if(!sms.smsc.number[0]) { printf("failed once getting sms center number\n"); return FALSE; } if(!sms.smsc.type) { sms.smsc.type = GN_GSM_NUMBER_Unknown; } //now give the data.sms from what all we have in sms, and make sure before these data.sms has been freed... data.sms = &sms; //send the message error = gn_sms_send(&data,state); if(error == GN_ERR_NONE) { if(sms.parts > 1) { int j; printf("sms sent with : %d parts, and reference number is : ", sms.parts); for(j=0; j < sms.parts; j++) { printf("%d\n",sms.reference[j]); } } else { printf("one sms sent with reference number : %d\n",sms.reference[0]); } } else { printf("libgnokii error : %s\n",gn_error_print(error)); return FALSE; } free(sms.reference); return TRUE; }
GNOKII_API gint DB_Look (const gchar * const phone) { DIR *dir; struct dirent *dirent; FILE *smsFile; GString *buf; gint numError, error; gint empty = 1; if (spool[0] == '\0') // if user don't set spool dir, sending is disabled return (SMSD_NOK); if ((dir = opendir (spool)) == NULL) { g_print (_("Cannot open directory %s\n"), spool); return (SMSD_NOK); } buf = g_string_sized_new (64); while ((dirent = readdir (dir))) { gn_sms sms; gint slen = 0; if (strcmp (dirent->d_name, ".") == 0 || strcmp (dirent->d_name, "..") == 0 || strncmp (dirent->d_name, "ERR.", 4) == 0) continue; g_string_printf (buf, "%s/%s", spool, dirent->d_name); if ((smsFile = fopen (buf->str, "r")) == NULL) { g_print (_("Can't open file %s for reading!\n"), buf->str); continue; } empty = 0; gn_sms_default_submit (&sms); memset (&sms.remote.number, 0, sizeof (sms.remote.number)); if (fgets (sms.remote.number, sizeof (sms.remote.number), smsFile)) slen = strlen (sms.remote.number); if (slen < 1) { error = -1; fclose (smsFile); g_print (_("Remote number is empty in %s!\n"), buf->str); goto handle_file; } if (sms.remote.number[slen - 1] == '\n') sms.remote.number[slen - 1] = '\0'; /* Initialize SMS text */ memset (&sms.user_data[0].u.text, 0, sizeof (sms.user_data[0].u.text)); slen = fread ((gchar *) sms.user_data[0].u.text, 1, GN_SMS_MAX_LENGTH, smsFile); if (slen > 0 && sms.user_data[0].u.text[slen - 1] == '\n') sms.user_data[0].u.text[slen - 1] = '\0'; fclose (smsFile); // sms.delivery_report = (smsdConfig.smsSets & SMSD_READ_REPORTS); if (sms.remote.number[0] == '+') sms.remote.type = GN_GSM_NUMBER_International; else sms.remote.type = GN_GSM_NUMBER_Unknown; sms.user_data[0].length = strlen ((gchar *) sms.user_data[0].u.text); sms.user_data[0].type = GN_SMS_DATA_Text; sms.user_data[1].type = GN_SMS_DATA_None; if (!gn_char_def_alphabet (sms.user_data[0].u.text)) sms.dcs.u.general.alphabet = GN_SMS_DCS_UCS2; gn_log_xdebug ("Sending SMS: %s, %s\n", sms.remote.number, sms.user_data[0].u.text); numError = 0; do { if ((error = WriteSMS (&sms)) == GN_ERR_NONE) break; sleep (1); } while ((error == GN_ERR_TIMEOUT || error == GN_ERR_FAILED) && numError++ < 3); handle_file: if (error == GN_ERR_NONE) { if (unlink (buf->str)) g_print (_("Cannot unlink %s."), buf->str); } else { GString *buf2; buf2 = g_string_sized_new (64); g_string_printf (buf2, "%s/ERR.%s", spool, dirent->d_name); g_print (_("Cannot send sms from file %s\n"), buf->str); if (rename (buf->str, buf2->str)) { g_print (_("Cannot rename file %s to %s. Trying to unlink it.\n"), buf->str, buf2->str); if (unlink (buf->str)) g_print (_("Cannot unlink %s."), buf->str); } g_string_free (buf2, TRUE); } } g_string_free (buf, TRUE); closedir (dir); if (empty) return (SMSD_OUTBOXEMPTY); else return (SMSD_OK); }
GNOKII_API gint DB_Look(const gchar * const phone) { GString *buf, *phnStr, *timebuf; gint ret1, numError, error; time_t rawtime; struct tm * timeinfo; sqlite3_stmt * stmt; gint empty = 1; if (phone[0] == '\0') phnStr = g_string_new(""); else { phnStr = g_string_sized_new(32); g_string_printf(phnStr, "AND phone = '%s'", phone); } time(&rawtime); timeinfo = localtime(&rawtime); timebuf = g_string_sized_new(25); g_string_printf(timebuf, "'%02d:%02d:%02d'", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); sqlite3_exec(ppDbOutbox, "BEGIN TRANSACTION;", NULL, NULL, NULL); /* poll for outgoing messages */ buf = g_string_sized_new(256); g_string_printf(buf, "SELECT id, number, text, dreport FROM outbox \ WHERE processed=0 \ AND %s >= not_before \ AND %s <= not_after \ %s", timebuf->str, timebuf->str, phnStr->str); g_string_free(phnStr, TRUE); ret1 = sqlite3_prepare_v2(ppDbOutbox, buf->str, -1, &stmt, NULL); if (ret1 != SQLITE_OK) { g_print(_("%d: Parsing query %s failed!"), __LINE__, buf->str); g_print(_("Error: %s"), sqlite3_errmsg(ppDbOutbox)); return (SMSD_NOK); } g_string_printf(timebuf, "'%02d-%02d-%02d %02d:%02d:%02d'", timeinfo->tm_year, timeinfo->tm_mon, timeinfo->tm_mday, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec ); ret1 = sqlite3_step(stmt); while (ret1 == SQLITE_ROW) { int gerror = 0; gn_sms sms; empty = 0; gn_sms_default_submit(&sms); memset(&sms.remote.number, 0, sizeof (sms.remote.number)); sms.delivery_report = sqlite3_column_int(stmt, 3); strncpy(sms.remote.number, sqlite3_column_text(stmt, 1), sizeof (sms.remote.number) - 1); sms.remote.number[sizeof (sms.remote.number) - 1] = '\0'; if (sms.remote.number[0] == '+') sms.remote.type = GN_GSM_NUMBER_International; else sms.remote.type = GN_GSM_NUMBER_Unknown; strncpy((gchar *) sms.user_data[0].u.text, sqlite3_column_text(stmt, 2), 10 * GN_SMS_MAX_LENGTH + 1); sms.user_data[0].u.text[10 * GN_SMS_MAX_LENGTH] = '\0'; sms.user_data[0].length = strlen((gchar *) sms.user_data[0].u.text); sms.user_data[0].type = GN_SMS_DATA_Text; sms.user_data[1].type = GN_SMS_DATA_None; if (!gn_char_def_alphabet(sms.user_data[0].u.text)) sms.dcs.u.general.alphabet = GN_SMS_DCS_UCS2; gn_log_xdebug("Sending SMS: %s, %s\n", sms.remote.number, sms.user_data[0].u.text); numError = 0; do { if ((error = WriteSMS (&sms)) == GN_ERR_NONE) break; sleep(1); } while ((error == GN_ERR_TIMEOUT || error == GN_ERR_FAILED) && numError++ < 3); /* mark sended */ g_string_printf(buf, "UPDATE outbox SET processed=1, error='%d', \ processed_date=%s \ WHERE id=%d", gerror, timebuf->str, sqlite3_column_int(stmt, 0) ); sqlite3_exec(ppDbOutbox, buf->str, NULL, NULL, NULL); ret1 = sqlite3_step(stmt); } /* rollback if found any errors */ if (ret1 != SQLITE_DONE) { g_print(_("%d: SELECT FROM outbox command failed.\n"), __LINE__); g_print(_("Error: %s\n"), sqlite3_errmsg(ppDbOutbox)); sqlite3_finalize(stmt); sqlite3_exec(ppDbOutbox, "ROLLBACK TRANSACTION;", NULL, NULL, NULL); g_string_free(timebuf, TRUE); g_string_free(buf, TRUE); return (SMSD_NOK); } sqlite3_finalize(stmt); sqlite3_exec(ppDbOutbox, "COMMIT;", NULL, NULL, NULL); g_string_free(timebuf, TRUE); g_string_free(buf, TRUE); if (empty) return (SMSD_OUTBOXEMPTY); else return (SMSD_OK); }
static VALUE sendsms(VALUE self, VALUE names) { gn_sms sms; gn_error error; gn_data *data; //gn_sms_user_data *udata; struct RArray *names_array; int input_len, i, curpos = 0; names_array = RARRAY(names); VALUE current = names_array->ptr[0]; VALUE mobileno = names_array->ptr[1]; input_len = GN_SMS_MAX_LENGTH ; gn_sms_default_submit(&sms); memset(&sms.remote.number, 0, sizeof(sms.remote.number)); if(rb_respond_to(mobileno, rb_intern("to_s"))) { VALUE receipient_no = rb_funcall(mobileno, rb_intern("to_s"), 0); snprintf(sms.remote.number, 56, "%s",StringValuePtr(receipient_no)); } if (sms.remote.number[0] == '+') sms.remote.type = GN_GSM_NUMBER_International; else sms.remote.type = GN_GSM_NUMBER_Unknown; sms.dcs.u.general.alphabet = GN_SMS_DCS_DefaultAlphabet; if (!sms.smsc.number[0]) { data->message_center = calloc(1, sizeof(gn_sms_message_center)); data->message_center->id = 1; if (gn_sm_functions(GN_OP_GetSMSCenter, data, state) == GN_ERR_NONE) { if (sms.smsc.number[0] == '+') sms.smsc.type = GN_GSM_NUMBER_International; else sms.smsc.type = GN_GSM_NUMBER_Unknown; snprintf(sms.smsc.number, sizeof(sms.smsc.number), "%s", data->message_center->smsc.number); sms.smsc.type = data->message_center->smsc.type; } else { fprintf(stderr, _("Cannot read the SMSC number from your phone. If the sms send will fail, please use --smsc option explicitely giving the number.\n")); } free(data->message_center); } if (!sms.smsc.type) sms.smsc.type = GN_GSM_NUMBER_Unknown; if (curpos != -1) { sms.user_data[curpos].type = GN_SMS_DATA_Text; sms.dcs.u.general.alphabet = GN_SMS_DCS_DefaultAlphabet; if(rb_respond_to(current, rb_intern("to_s"))) { VALUE name = rb_funcall(current, rb_intern("to_s"), 0); snprintf(sms.user_data[curpos].u.text,255*MAX_SMS_PART,"%s",StringValuePtr(name));; sms.user_data[curpos].length = printf("Message is : %s, ", StringValuePtr(name)); } //printf("the length is %d",INT2NUM(strlen(sms.user_data[curpos].u.text))); if (sms.user_data[curpos].length < 1) { fprintf(stderr, _("Empty message. Quitting.\n")); return INT2NUM(GN_ERR_FAILED); } //sms.user_data[curpos].type = GN_SMS_DATA_Text; if (!gn_char_def_alphabet(sms.user_data[curpos].u.text)) sms.dcs.u.general.alphabet = GN_SMS_DCS_UCS2; sms.user_data[++curpos].type = GN_SMS_DATA_None; } data->sms = &sms; /* Send the message. */ error = gn_sms_send(data, state); if (error == GN_ERR_NONE) fprintf(stderr, _("Send succeeded!\n")); else fprintf(stderr, _("SMS Send failed (%s)\n")); return INT2NUM(error); }