Пример #1
0
Файл: file.c Проект: pkot/gnokii
GNOKII_API gint DB_InsertSMS (const gn_sms * const data, const gchar * const phone)
{
  FILE *p;
  GString *buf;
  gchar *text;
    
  text = strEscape ((gchar *) data->user_data[0].u.text);
  
  if (action[0] == '\0')
    g_print ("Number: %s, Date: %02d-%02d-%02d %02d:%02d:%02d\nText:\n%s\n", \
             data->remote.number, data->smsc_time.year, data->smsc_time.month, \
             data->smsc_time.day, data->smsc_time.hour, data->smsc_time.minute, \
             data->smsc_time.second, text);
  else
  {
    buf = g_string_sized_new (256);
    g_string_printf (buf, "%s %s \"%02d-%02d-%02d %02d:%02d:%02d\"", \
                     action, data->remote.number, data->smsc_time.year, \
                     data->smsc_time.month, data->smsc_time.day, \
                     data->smsc_time.hour, data->smsc_time.minute, \
                     data->smsc_time.second);
    if ((p = popen (buf->str, "w")) == NULL)
    {
      g_free (text);
      g_string_free (buf, TRUE);
      return (1);
    }
    
    g_string_free (buf, TRUE);
    
    fprintf (p, "%s", text);
    pclose (p);
  }
  
  g_free (text);

  return (0);
}
Пример #2
0
GNOKII_API gint DB_InsertSMS(const gn_sms * const data, const gchar * const phone)
{
    GString *buf, *phnStr, *text;
    time_t rawtime;
    struct tm * timeinfo;
    int error, i;
    sqlite3_stmt *stmt;

    if (phone[0] == '\0')
        phnStr = g_string_new("");
    else {
        phnStr = g_string_sized_new(32);
        g_string_printf(phnStr, "'%s',", phone);
    }

    text = g_string_sized_new(480);
    g_string_append(text, strEscape((gchar *) data->user_data[0].u.text));

    time(&rawtime);
    timeinfo = localtime(&rawtime);

    buf = g_string_sized_new(1024);
    g_string_printf(buf, "INSERT INTO inbox (\"number\", \"smsdate\", \"insertdate\",\
                         \"text\", %s \"processed\") VALUES ('%s', \
                         '%02d-%02d-%02d %02d:%02d:%02d',\
                         '%02d-%02d-%02d %02d:%02d:%02d', '%s', %s 0)",
                    phone[0] != '\0' ? "\"phone\"," : "", data->remote.number,
                    data->smsc_time.year, data->smsc_time.month,
                    data->smsc_time.day, data->smsc_time.hour,
                    data->smsc_time.minute, data->smsc_time.second,
                    timeinfo->tm_year + 1900, timeinfo->tm_mon,
                    timeinfo->tm_mday, timeinfo->tm_hour,
                    timeinfo->tm_min, timeinfo->tm_sec,
                    text->str, phnStr->str);

    g_string_free(text, TRUE);
    g_string_free(phnStr, TRUE);

    error = sqlite3_prepare_v2(ppDbInbox, buf->str, -1, &stmt, NULL);
    if (error != SQLITE_OK) {
        g_print(_("%d: Parsing query %s failed!"), __LINE__, buf->str);
        g_print(_("Error: %s"), sqlite3_errmsg(ppDbInbox));
        return SMSD_NOK;
    }

    /* run query */
    for (i = 0; i < 6; i++) {
        error = sqlite3_step(stmt);
        if (error == SQLITE_DONE)
            break;

        sleep(1);
        sqlite3_reset(stmt);
    }

    if (error != SQLITE_DONE) {
        sqlite3_finalize(stmt);
        g_print(_("%d: INSERT INTO inbox failed.\n"), __LINE__);
        g_print(_("Error %d: %s\n"), error, sqlite3_errmsg(ppDbInbox));
        g_print(_("Query: %s\n"), buf->str);
        g_string_free(buf, TRUE);
        return SMSD_NOK;
    }

    sqlite3_finalize(stmt);
    g_string_free(buf, TRUE);
    return SMSD_OK;
}