📄 gsmsendsms.cc
字号:
// *************************************************************************// * GSM TA/ME library// *// * File: gsmsendsms.cc// *// * Purpose: GSM sms send program// *// * Author: Peter Hofmann (software@pxh.de)// *// * Created: 16.7.1999// *************************************************************************#ifdef HAVE_CONFIG_H#include <gsm_config.h>#endif#include <gsmlib/gsm_nls.h>#include <string>#ifdef WIN32#include <gsmlib/gsm_win32_serial.h>#else#include <gsmlib/gsm_unix_serial.h>#include <unistd.h>#endif#if defined(HAVE_GETOPT_LONG) || defined(WIN32)#include <getopt.h>#endif#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <gsmlib/gsm_me_ta.h>#include <gsmlib/gsm_util.h>#include <iostream>using namespace std;using namespace gsmlib;// options#ifdef HAVE_GETOPT_LONGstatic struct option longOpts[] ={ {"requeststat", no_argument, (int*)NULL, 'r'}, {"xonxoff", no_argument, (int*)NULL, 'X'}, {"sca", required_argument, (int*)NULL, 'C'}, {"device", required_argument, (int*)NULL, 'd'}, {"init", required_argument, (int*)NULL, 'I'}, {"baudrate", required_argument, (int*)NULL, 'b'}, {"test", no_argument, (int*)NULL, 't'}, {"help", no_argument, (int*)NULL, 'h'}, {"version", no_argument, (int*)NULL, 'v'}, {(char*)NULL, 0, (int*)NULL, 0}};#else#define getopt_long(argc, argv, options, longopts, indexptr) \ getopt(argc, argv, options)#endif// convert /r and /n to CR and LFstatic string unescapeString(char *line){ string result; bool escaped = false; int index = 0; while (line[index] != 0 && line[index] != CR && line[index] != LF) { if (escaped) { escaped = false; if (line[index] == 'r') result += CR; else if (line[index] == 'n') result += LF; else if (line[index] == '\\') result += '\\'; else result += line[index]; } else if (line[index] == '\\') escaped = true; else result += line[index]; ++index; } return result;}// *** main programint main(int argc, char *argv[]){ try { // handle command line options string device = "/dev/mobilephone"; bool test = false; string baudrate; Ref<GsmAt> at; string initString = DEFAULT_INIT_STRING; bool swHandshake = false; bool requestStatusReport = false; // service centre address (set on command line) string serviceCentreAddress; int opt; int dummy; while((opt = getopt_long(argc, argv, "C:I:d:b:thvXr", longOpts, &dummy)) != -1) switch (opt) { case 'C': serviceCentreAddress = optarg; break; case 'X': swHandshake = true; break; case 'I': initString = optarg; break; case 'd': device = optarg; break; case 'b': baudrate = optarg; break; case 't': test = true; break; case 'r': requestStatusReport = true; break; case 'v': cerr << argv[0] << stringPrintf(_(": version %s [compiled %s]"), VERSION, __DATE__) << endl; exit(0); break; case 'h': cerr << argv[0] << _(": [-b baudrate][-C sca][-d device][-h]" "[-I init string]\n" " [-t][-v][-X] phonenumber [text]") << endl << endl << _(" -b, --baudrate baudrate to use for device " "(default: 38400)") << endl << _(" -C, --sca SMS service centre address") << endl << _(" -d, --device sets the destination device to connect " "to") << endl << _(" -h, --help prints this message") << endl << _(" -I, --init device AT init sequence") << endl << _(" -r, --requeststat request SMS status report") << endl << _(" -t, --test convert text to GSM alphabet and " "vice\n" " versa, no SMS message is sent") << endl << _(" -v, --version prints version and exits") << endl << _(" -X, --xonxoff switch on software handshake") << endl << endl << _(" phonenumber recipient's phone number") << endl << _(" text optional text of the SMS message\n" " if omitted: read from stdin") << endl << endl; exit(0); break; case '?': throw GsmException(_("unknown option"), ParameterError); break; } if (! test) { // open the port and ME/TA Ref<Port> port = new#ifdef WIN32 Win32SerialPort#else UnixSerialPort#endif (device, baudrate == "" ? DEFAULT_BAUD_RATE : baudRateStrToSpeed(baudrate), initString, swHandshake); // switch message service level to 1 // this enables acknowledgement PDUs MeTa m(port); m.setMessageService(1); at = new GsmAt(m); } // check parameters if (optind == argc) throw GsmException(_("phone number and text missing"), ParameterError); if (optind + 2 < argc) throw GsmException(_("more than two parameters given"), ParameterError); // get phone number string phoneNumber = argv[optind]; // get text string text; if (optind + 1 == argc) { // read from stdin char s[1000]; cin.get(s, 1000); text = unescapeString(s); if (text.length() > 160) throw GsmException(_("text is larger than 160 characters"), ParameterError); } else text = argv[optind + 1]; if (test) cout << gsmToLatin1(latin1ToGsm(text)) << endl; else { // send SMS Ref<SMSSubmitMessage> submitSMS = new SMSSubmitMessage(text, phoneNumber); // set service centre address in new submit PDU if requested by user if (serviceCentreAddress != "") { Address sca(serviceCentreAddress); submitSMS->setServiceCentreAddress(sca); } submitSMS->setStatusReportRequest(requestStatusReport); submitSMS->setAt(at); Ref<SMSMessage> ackPDU; submitSMS->send(ackPDU); // print acknowledgement if available if (! ackPDU.isnull()) cout << ackPDU->toString(); } } catch (GsmException &ge) { cerr << argv[0] << _("[ERROR]: ") << ge.what() << endl; return 1; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -