/ Published in: C++
Hey Guys,
This is a short and straightforward article (or let’s say „tip†or „mini-reviewâ€) that presents how to send SMS messages from your own C++ (Cpp / C plus plus) application through HTTP. You will see, it is gonna be really easy. I will focus on the necessary code, but I would like to draw your attention to all the hardware and software requirements that are essentially needed for SMS messaging.
Briefly about SMS technology for better understanding
If you are proficient in SMS technology, just skip this paragraph and move on to the next one. So well, if you want to send SMS messages from your C++ application, first you need to connect your software and an SMS gateway to each other. Why? Because your application let you compose the SMS messages (including the text, the recipient’s phone number, etc.), but if you want to send out the SMS, you need to connect to the SMSC (Short Message Service Center that stores, forwards, converts and delivers SMS messages). An SMS gateway is able to connect to the SMSC of the Mobile Service Provider via SMPP IP SMS connection or a GSM modem, so actually the SMS gateway can send out your message. To establish connection between the SMS gateway and the C++ application, I used HTTP requests and responses. For sending SMS messages through HTTP, your SMS gateway should have a built-in webserver (e.g. Ozeki NG – www.ozekisms.com). The built-in webserver allows you to send SMS messages from your C++ application by calling an URL (HTTP Get) or using the HTTP Post method.
So that, all you need to have for sending SMS from your C++ application using HTTP is Microsoft Visual Studio for C++ development, an SMS gateway and my code snippet!
Okay and finally a few lines about testing. To test your software by sending out SMS message(s) actually, you need to install a GSM modem connection or an IP SMS connection. Buti f you have not contracted with any mobile service provider (e.g. AT&T or T-Mobile), you can test the SMS sending by simulating it (e.g. Ozeki NG provides „HTTP Server Connection†that can be used for this purpose). For more details related to the configuration of the SMS gateway, please contact the vendor of your SMS gateway.
Happy coding! :)
This is a short and straightforward article (or let’s say „tip†or „mini-reviewâ€) that presents how to send SMS messages from your own C++ (Cpp / C plus plus) application through HTTP. You will see, it is gonna be really easy. I will focus on the necessary code, but I would like to draw your attention to all the hardware and software requirements that are essentially needed for SMS messaging.
Briefly about SMS technology for better understanding
If you are proficient in SMS technology, just skip this paragraph and move on to the next one. So well, if you want to send SMS messages from your C++ application, first you need to connect your software and an SMS gateway to each other. Why? Because your application let you compose the SMS messages (including the text, the recipient’s phone number, etc.), but if you want to send out the SMS, you need to connect to the SMSC (Short Message Service Center that stores, forwards, converts and delivers SMS messages). An SMS gateway is able to connect to the SMSC of the Mobile Service Provider via SMPP IP SMS connection or a GSM modem, so actually the SMS gateway can send out your message. To establish connection between the SMS gateway and the C++ application, I used HTTP requests and responses. For sending SMS messages through HTTP, your SMS gateway should have a built-in webserver (e.g. Ozeki NG – www.ozekisms.com). The built-in webserver allows you to send SMS messages from your C++ application by calling an URL (HTTP Get) or using the HTTP Post method.
So that, all you need to have for sending SMS from your C++ application using HTTP is Microsoft Visual Studio for C++ development, an SMS gateway and my code snippet!
Okay and finally a few lines about testing. To test your software by sending out SMS message(s) actually, you need to install a GSM modem connection or an IP SMS connection. Buti f you have not contracted with any mobile service provider (e.g. AT&T or T-Mobile), you can test the SMS sending by simulating it (e.g. Ozeki NG provides „HTTP Server Connection†that can be used for this purpose). For more details related to the configuration of the SMS gateway, please contact the vendor of your SMS gateway.
Happy coding! :)
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include<iostream> #include<sstream> #include<windows.h> #include<wininet.h> using namespace std; string encode(string url); int main(int argc, char** argv) { // the SMS gateway's host // and port string host = "localhost"; int port = 9502; // username // and password string username = "admin"; string password = "abc123"; // message string message = "This is a test SMS."; // originator's phone number string originator = "+44555555555"; // recipient's phone number. // to send the SMS to multiple recipients, separate them by using commas without spaces string recipient = "+44333333333"; // preparing the HTTPRequest URL stringstream url; url << "/api?action=sendmessage&username=" << encode(username); url << "&password=" << encode(password); url << "&recipient=" << encode(recipient); url << "&messagetype=SMS:TEXT&messagedata=" << encode(message); url << "&originator=" << encode(originator); url << "&responseformat=xml"; // create socket HINTERNET inet = InternetOpen("Ozeki", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); // open connection and bind it to the socket HINTERNET conn = InternetConnect(inet, host.c_str() , port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); // open the HTTP request HINTERNET sess = HttpOpenRequest(conn, "GET", url.str().c_str(), "HTTP/1.1", NULL, NULL, INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0); // check errors int error = GetLastError(); if(error == NO_ERROR) { // send HTTP request HttpSendRequest(sess, NULL, 0, NULL,0); // receive HTTP response int size = 1024; char *buffer = new char[size + 1]; DWORD read; int rsize = InternetReadFile(sess, (void *)buffer, size, &read); string s = buffer; s = s.substr(0, read); // check status code int pos = s.find("<statuscode>0</statuscode>"); // if statuscode is 0, write "Message sent." to output // else write "Error." if(pos > 0) cout << "Message sent." << endl; else cout << "Error." << endl; } system("pause"); } // encoding converts characters that are not allowed in a URL into character-entity equivalent string encode(string url) { char *hex = "0123456789abcdef"; stringstream s; for(unsigned int i = 0; i < url.length(); i++) { byte c = (char)url.c_str()[i]; if( ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') ){ s << c; } else { if(c == ' ') s << "%20"; else s << '%' << (hex[c >> 4]) << (hex[c & 15]); } } return s.str(); }