⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file.c

📁 魂牵梦萦厅一下谢谢间是一平步青云 二二二一一把把物的御用抗御 入徼
💻 C
字号:
/*  $Id: file.c,v 1.17 2006/10/03 21:26:38 pkot Exp $  S M S D  A Linux/Unix tool for the mobile phones.  This file is part of gnokii.  Gnokii is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2 of the License, or  (at your option) any later version.  Gnokii is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.  You should have received a copy of the GNU General Public License  along with gnokii; if not, write to the Free Software  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  Copyright (C) 2002-2005 Jan Derfinak    This file is a module to smsd for file access.*/#include "config.h"#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <dirent.h>#include <string.h>#include <glib.h>#include "smsd.h"#include "gnokii.h"#include "compat.h"#include "utils.h"static gchar *action;static gchar *spool;GNOKII_API void DB_Bye (void){  return;}GNOKII_API gint DB_ConnectInbox (DBConfig connect){  struct stat status;    if (connect.user[0] != '\0')  {    if ((stat (connect.user, &status)) != 0)    {      g_print (_("Cannot stat file %s!\n"), connect.user);      return (1);    }        if (!((S_IFREG & status.st_mode) &&         (((status.st_uid == geteuid ()) && (S_IXUSR & status.st_mode)) ||         ((status.st_gid == getegid ()) && (S_IXGRP & status.st_mode)) ||         (S_IXGRP & status.st_mode))))    {      g_print (_("File %s is not regular file or\nyou have not executable permission to this file!\n"),               connect.user);      return (2);    }  }    action = connect.user;    return (0);}GNOKII_API gint DB_ConnectOutbox (DBConfig connect){  struct stat status;    if (connect.host[0] == '\0')    g_print (_("You have not set spool directory, sms sending is disabled!\n"));  else  {    if ((stat (connect.host, &status)) != 0)    {      g_print (_("Cannot stat file %s!\n"), connect.host);      return (1);    }        if (!((S_IFDIR & status.st_mode) &&         (((status.st_uid == geteuid ()) && (S_IRUSR & status.st_mode) && (S_IWUSR & status.st_mode)) ||         ((status.st_gid == getegid ()) && (S_IRGRP & status.st_mode) && (S_IWGRP & status.st_mode)) ||         ((S_IROTH & status.st_mode) && (S_IWOTH & status.st_mode)))))    {      g_print (_("File %s is not directory or\nyou have not read and write permissions to this directory,\nsms sending is disabled!\n!"),               connect.host);      return (2);    }  }  spool = connect.host;  return (0);}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_sprintf (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);}GNOKII_API void DB_Look (const gchar * const phone){  DIR *dir;  struct dirent *dirent;  FILE *smsFile;  GString *buf;  gint numError, error;  if (spool[0] == '\0')  // if user don't set spool dir, sending is disabled    return;      if ((dir = opendir (spool)) == NULL)  {    g_print (_("Cannot open directory %s\n"), spool);    return;  }  buf = g_string_sized_new (64);    while ((dirent = readdir (dir)))  {    gn_sms sms;        if (strcmp (dirent->d_name, ".") == 0 || strcmp (dirent->d_name, "..") == 0 ||        strncmp (dirent->d_name, "ERR.", 4) == 0)      continue;        g_string_sprintf (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;    }        gn_sms_default_submit (&sms);    memset (&sms.remote.number, 0, sizeof (sms.remote.number));    fgets (sms.remote.number, sizeof (sms.remote.number), smsFile);    if (sms.remote.number[strlen (sms.remote.number) - 1] == '\n')      sms.remote.number[strlen (sms.remote.number) - 1] = '\0';        fgets ((gchar *) sms.user_data[0].u.text, GN_SMS_MAX_LENGTH + 1, smsFile);    if (sms.user_data[0].u.text[strlen ((gchar *) sms.user_data[0].u.text) - 1] == '\n')      sms.user_data[0].u.text[strlen ((gchar *) sms.user_data[0].u.text) - 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    {      error = WriteSMS (&sms);      sleep (1);    }    while ((error == GN_ERR_TIMEOUT || error == GN_ERR_FAILED) && numError++ < 3);    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_sprintf (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);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -