diff -Nru sms-2.1.0/Makefile sms-2.1.0-idego/Makefile --- sms-2.1.0/Makefile 2006-12-29 11:05:09.000000000 +0100 +++ sms-2.1.0-idego/Makefile 2008-01-05 10:13:10.000000000 +0100 @@ -11,7 +11,7 @@ objects = main.o app.o config.o generic_sms.o era.o eranet.o \ miastoplusa.o orangembox.o plusmail.o plus.o lib/mr_curl/mr_curl.o \ - cgdbm.o o2uk.o + cgdbm.o o2uk.o idego.o objects2 = smsaddr.o cgdbm.o diff -Nru sms-2.1.0/app.cc sms-2.1.0-idego/app.cc --- sms-2.1.0/app.cc 2006-12-26 02:53:29.000000000 +0100 +++ sms-2.1.0-idego/app.cc 2008-01-05 10:08:11.000000000 +0100 @@ -27,7 +27,7 @@ cerr << "Usage:\n\n\tsms \n"; cerr << "\tsms -g era -n 602000000 -m \"sms body\"\n"; cerr << "\tdate | sms -s -g era -o phone_no=602000000 -m -\n\n"; - cerr << "-g gateway : era, eranet, miastoplusa, orangembox, plusmail, plus, o2uk\n"; + cerr << "-g gateway : era, eranet, miastoplusa, orangembox, plusmail, plus, o2uk, idego\n"; cerr << "-n no : phone number to sent SMS to\n"; cerr << "-m msg : message to sent, '-' means stdin\n"; cerr << "-c config : use specified config file instead of default ones\n"; diff -Nru sms-2.1.0/generic_sms.cc sms-2.1.0-idego/generic_sms.cc --- sms-2.1.0/generic_sms.cc 2006-12-26 03:03:58.000000000 +0100 +++ sms-2.1.0-idego/generic_sms.cc 2008-01-05 10:12:28.000000000 +0100 @@ -9,6 +9,8 @@ #include "plusmail.h" #include "plus.h" #include "o2uk.h" +#include "idego.h" + using namespace std; @@ -23,6 +25,7 @@ else if (config["gateway"] == "plusmail") sms = new PlusmailSMS(config); else if (config["gateway"] == "plus") sms = new PlusSMS(config); else if (config["gateway"] == "o2uk") sms = new O2ukSMS(config); + else if (config["gateway"] == "idego") sms = new IdegoSMS(config); else if (config["gateway"] == "test") sms = new TestSMS(config); else throw Exception("Unknown SMS->WWW gateway."); diff -Nru sms-2.1.0/idego.cc sms-2.1.0-idego/idego.cc --- sms-2.1.0/idego.cc 1970-01-01 01:00:00.000000000 +0100 +++ sms-2.1.0-idego/idego.cc 2008-01-05 18:12:27.000000000 +0100 @@ -0,0 +1,126 @@ +#include "idego.h" +#include "mr_pcre/mr_pcre.h" + +/* + * Obsługa komercyjnej bramki iSMS firmy Idego - http://isms.idego.pl + * krzysztof (at) idego (w) pl + */ + +using namespace std; + +IdegoSMS::IdegoSMS(Config &config) : GenericSMS(config) +{ + idego_user = config["idego_user"]; + idego_pass = config["idego_pass"]; + idego_sender = config["idego_sender"]; +} + +bool IdegoSMS::Send(const std::string &phone_no, const std::string &message) +{ + bool ok = false; + CURLcode status; + Curl_Form form; + Curl_Result result; + + curl.SSL_ignore(); + curl.AutoReferer(); + curl.FollowLocation(); + curl.SetOpt(CURLOPT_COOKIEFILE, ""); + + while (true) { + + form.AddField("username", idego_user); + form.AddField("password", idego_pass); + form.AddField("sender", idego_sender); + form.AddField("to", phone_no); + form.AddField("msg", message); + + status = curl.PerformPost("http://isms.idego.pl/api/post", form.PostFields()); + if (status) throw Exception("[1] - Błąd wysyłania SMS na adres http://isms.idego.pl/"); + + ok = curl.Body().find("STATUS: 2001") != string::npos; + if (!ok) { + + if (curl.Body().find("STATUS: 1000") != string::npos) { + throw Exception("[1] - STATUS 1000: Błąd wczytywania parametrów. Brak parametru \'to\'."); + } + else if (curl.Body().find("STATUS: 1001") != string::npos) { + throw Exception("[1] - STATUS 1001: Błąd wczytywania parametrów. Parametr \'to\' zawiera niedozwolone znaki."); + } + else if (curl.Body().find("STATUS: 1002") != string::npos) { + throw Exception("[1] - STATUS 1002: Błąd wczytywania parametrów. Brak parametru \'sender\'."); + } + else if (curl.Body().find("STATUS: 1003") != string::npos) { + throw Exception("[1] - STATUS 1003: Błąd wczytywania parametrów. Parametr \'sender\' może mieć maksymalnie 11 znaków."); + } + else if (curl.Body().find("STATUS: 1004") != string::npos) { + throw Exception("[1] - STATUS 1004: Błąd wczytywania parametrów. Parametr \'sender\' zawiera niedozwolone znaki."); + } + else if (curl.Body().find("STATUS: 1005") != string::npos) { + throw Exception("[1] - STATUS 1005: Błąd wczytywania parametrów. Brak parametru \'msg\'."); + } + else if (curl.Body().find("STATUS: 1006") != string::npos) { + throw Exception("[1] - STATUS 1006: Błąd wczytywania parametrów. Brak parametru \'username\'."); + } + else if (curl.Body().find("STATUS: 1007") != string::npos) { + throw Exception("[1] - STATUS 1007: Błąd wczytywania parametrów. Parametr \'username\' zawiera niedozwolone znaki."); + } + else if (curl.Body().find("STATUS: 1008") != string::npos) { + throw Exception("[1] - STATUS 1008: Błąd wczytywania parametrów. Brak parametru \'password\'."); + } + else if (curl.Body().find("STATUS: 1009") != string::npos) { + throw Exception("[1] - STATUS 1009: Błąd wczytywania parametrów. Parametr \'password\' zawiera niedozwolone znaki."); + } + else if (curl.Body().find("STATUS: 1010") != string::npos) { + throw Exception("[1] - STATUS 1010: Błąd wczytywania parametrów XML. Brak parametru \'xml\'."); + } + else if (curl.Body().find("STATUS: 1011") != string::npos) { + throw Exception("[1] - STATUS 1011: Błąd wczytywania parametrów XML. Obsługa API przez XMl możliwa jest wyłącznie za pomocą metody POST."); + } + else if (curl.Body().find("STATUS: 1012") != string::npos) { + throw Exception("[1] - STATUS 1012: Błąd wczytywania parametrów XML. Pobrane dane nie są poprawnym plikiem XML."); + } + else if (curl.Body().find("STATUS: 1100") != string::npos) { + throw Exception("[1] - STATUS 1100: Błąd autoryzacji. Podano niepoprawny login lub hasło."); + } + if (curl.Body().find("STATUS: 2000") != string::npos) { + throw Exception("[1] - STATUS 2000: Błąd wysyłania wiadomości SMS."); + } + else if (curl.Body().find("STATUS: 5000") != string::npos) { + throw Exception("[1] - STATUS 5000: Wiadomość oczekuje na przetworzenie."); + } + else if (curl.Body().find("STATUS: 5001") != string::npos) { + throw Exception("[1] - STATUS 5001: Wiadomość została wysłana do operatora i oczekuje na dostarczenie."); + } + else if (curl.Body().find("STATUS: 5002") != string::npos) { + throw Exception("[1] - STATUS 5002: Wiadomość została wysłana do operatora (bez otrzymania potwierdzenia odbioru)."); + } + else if (curl.Body().find("STATUS: 5003") != string::npos) { + throw Exception("[1] - STATUS 5003: Wiadomość została dostarczona do telefonu."); + } + else if (curl.Body().find("STATUS: 5004") != string::npos) { + throw Exception("[1] - STATUS 5004: Wiadomość nie została dostarczona do telefonu."); + } + else if (curl.Body().find("STATUS: 5005") != string::npos) { + throw Exception("[1] - STATUS 5005: Wiadomość nie została dostarczona z powodu upłynięcia czasu oczekiwania."); + } + else if (curl.Body().find("STATUS: 9000") != string::npos) { + throw Exception("[1] - STATUS 9000: Błąd wewnętrzny."); + } + else { + throw Exception("[1] - Błąd wysyłania wiadomości SMS."); + } + } + + break; + } + + return ok; +} + +bool IdegoSMS::ShowStats() +{ + cout << "Bramka iSMS nie posiada ograniczeń na ilość wysyłanych wiadomości SMS." << endl; + + return true; +} diff -Nru sms-2.1.0/idego.h sms-2.1.0-idego/idego.h --- sms-2.1.0/idego.h 1970-01-01 01:00:00.000000000 +0100 +++ sms-2.1.0-idego/idego.h 2008-01-05 10:28:37.000000000 +0100 @@ -0,0 +1,16 @@ +#ifndef __idego_sms +#define __idego_sms + +#include "generic_sms.h" +#include "config.h" + +class IdegoSMS : public GenericSMS { + std::string idego_user, idego_pass, idego_sender; +protected: + virtual bool Send(const std::string &phone_no, const std::string &message); +public: + IdegoSMS(Config &config); + virtual bool ShowStats(); +}; + +#endif