#include "VoipMsSMSClient.h" #include #include #include #include #include CVoipMsSMSClient::CVoipMsSMSClient() { mVOIPMSSocket = new QNetworkAccessManager(); connect(mVOIPMSSocket,SIGNAL(finished(QNetworkReply*)),this,SLOT(VoipServerReplyFinished(QNetworkReply*))); } CVoipMsSMSClient::~CVoipMsSMSClient() { delete mVOIPMSSocket; mSMSMessagesList.clear(); } unsigned int CVoipMsSMSClient::SetVOIPMsSettings(CVoipMSSMSSettings *SettingsData) { mVOIPMsSettings = SettingsData; return RET_OK; } int CVoipMsSMSClient::DownloadSMSFromServer() { QDate EndDate; mCurStartDate = mVOIPMsSettings.mStartDate; if(mCurStartDate.daysTo(QDate::currentDate()) > VOIP_MS_SMS_DATESPAN) { EndDate = mCurStartDate.addDays(VOIP_MS_SMS_DATESPAN); } else { EndDate = mCurStartDate.addDays(mCurStartDate.daysTo(QDate::currentDate())); } SendSMSDownloadRequest(mCurStartDate,EndDate); // QString Url; // Url.clear(); // QTextStream UrlStream(&Url); // // Url = "https://www.voip.ms/api/v1/rest.php?api_username=jean-francois.martel@polymtl.ca&api_password=Pentium2&method=getSMS&from=2015-11-01&to=2015-11-11&did=5143606463&limit=50"; // UrlStream << VOIP_MS_API_URL // << "api_username=" << mVOIPMsSettings.mUsername << "&" // << "api_password=" << mVOIPMsSettings.mPassword << "&" // << "method=" << "getSMS" << "&" // << "from=" << mCurStartDate.toString("yyyy-MM-dd") << "&" // << "to=" << EndDate.toString("yyyy-MM-dd") << "&" // << "did=" << mVOIPMsSettings.mDefaultDID << "&" // << "limit=" << "50"; // qDebug() << "Cmd: " << Url; // mVOIPMSSocket->get(QNetworkRequest(Url)); // mCurStartDate = EndDate; return RET_OK; } int CVoipMsSMSClient::SendSMSDownloadRequest(QDate StartDate, QDate EndDate) { QString Url; Url.clear(); QTextStream UrlStream(&Url); qDebug() << "Sending request for dates from: " << StartDate.toString("yyyy-MM-dd") << " to: " << EndDate.toString("yyyy-MM-dd"); // Url = "https://www.voip.ms/api/v1/rest.php?api_username=jean-francois.martel@polymtl.ca&api_password=Pentium2&method=getSMS&from=2015-11-01&to=2015-11-11&did=5143606463&limit=50"; UrlStream << VOIP_MS_API_URL << "api_username=" << mVOIPMsSettings.mUsername << "&" << "api_password=" << mVOIPMsSettings.mPassword << "&" << "method=" << "getSMS" << "&" << "from=" << StartDate.toString("yyyy-MM-dd") << "&" << "to=" << EndDate.toString("yyyy-MM-dd") << "&" << "did=" << mVOIPMsSettings.mDefaultDID << "&" << "limit=" << "50"; qDebug() << "Cmd: " << Url; mVOIPMSSocket->get(QNetworkRequest(Url)); mCurStartDate = EndDate; return RET_OK; } unsigned int CVoipMsSMSClient::GetDidFromUserAccount(const QString username, const QString Password) { QString Method = "getDIDsInfo"; QString Url; Url.clear(); QTextStream UrlStream(&Url); UrlStream << VOIP_MS_API_URL << "api_username=" << username << "&" << "api_password=" << Password << "&" << "method=" << Method << "&"; mVOIPMSSocket->get(QNetworkRequest(Url)); return RET_OK; } void CVoipMsSMSClient::VoipServerReplyFinished(QNetworkReply *NetworkReply) { QByteArray Reply = NetworkReply->readAll(); QJsonDocument JsonReply = QJsonDocument::fromJson(Reply); QJsonObject JsonObject = JsonReply.object(); QStringList Keys = JsonObject.keys(); if(JsonObject["status"].toString() == "success") { if(Keys.contains("sms")) { QJsonArray SMSArray = JsonObject["sms"].toArray(); SMSReceived(&SMSArray); } else if(Keys.contains("dids")) { QJsonArray DIDsInfoArray = JsonObject["dids"].toArray(); DIDsInfoReceived(&DIDsInfoArray); } } else { if(JsonObject["status"].toString() == "no_sms") { SMSReceived(0); } else { qDebug() << "Failed VOIP.MS reply: " << JsonObject["status"].toString(); } } } unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray) { if(SMSArray != 0) { foreach (const QJsonValue & value, *SMSArray) { CSMSMessage NewMessage; QJsonObject obj = value.toObject(); NewMessage.mContact = obj["contact"].toString(); NewMessage.mDateTime = QDateTime::fromString(obj["date"].toString(),"yyyy-MM-dd HH:mm:ss"); NewMessage.mDID = obj["did"].toString(); NewMessage.mMessageText = obj["message"].toString(); NewMessage.mType = (SmsType_t)obj["type"].toString().toInt(); NewMessage.mVOIPMSDatabaseID = obj["id"].toString();//.toLongLong(); mSMSMessagesList.append(NewMessage); qDebug() << obj["contact"].toString().toUtf8() << " : " << obj["message"].toString().toUtf8(); } } if(mCurStartDate != QDate::currentDate()) { if(mSMSMessagesList.size() != 0) { mCurStartDate = QDate::fromString(mSMSMessagesList.last().mDateTime.toString("yyyy-MM-dd")); } QDate EndDate; if(mCurStartDate.daysTo(QDate::currentDate()) > VOIP_MS_SMS_DATESPAN) { EndDate = mCurStartDate.addDays(VOIP_MS_SMS_DATESPAN); } else { EndDate = mCurStartDate.addDays(mCurStartDate.daysTo(QDate::currentDate())); } SendSMSDownloadRequest(mCurStartDate,EndDate); } qDebug("Added %d messages in the list",mSMSMessagesList.size()); return RET_OK; } unsigned int CVoipMsSMSClient::DIDsInfoReceived(QJsonArray *DIDsInfoPtr) { QStringList DIDs; QJsonArray DIDsInfo = *DIDsInfoPtr; foreach (const QJsonValue & value, DIDsInfo) { QJsonObject DIDInfo = value.toObject(); QString CurDID = DIDInfo["did"].toString(); int SMSEnabled = DIDInfo["sms_enabled"].toString().toInt(); if(SMSEnabled == 1) { DIDs.append(CurDID); } qDebug("DID: %s - SMSEnabled %d",CurDID.toUtf8().data(),SMSEnabled); emit DIDSFetched(DIDs); } return RET_OK; } //https://www.voip.ms/api/v1/rest.php?api_username=jean-francois.martel@polymtl.ca&api_password=Pentium2&method=getBalance&advanced=True //https://www.voip.ms/api/v1/rest.php?api_username=jean-francois.martel@polymtl.ca&api_password=Pentium2&method=getSMS&from=2014-01-01&to=2015-11-11&did=5143606463&limit=50