From 8f5a0f68ff833db3037c5ac007da8d51bfc78d52 Mon Sep 17 00:00:00 2001 From: J-F Martel Date: Sun, 24 Jan 2016 10:25:54 -0500 Subject: [PATCH] dev --- Sources/MasterCtrl.cpp | 8 ++ Sources/MasterCtrl.h | 2 + Sources/NetworkDevicesMgr.cpp | 12 +++ Sources/NetworkDevicesMgr.h | 2 + Sources/ProtocolDefs.h | 10 ++- Sources/SMSDevice.cpp | 74 +++++++++++++++++ Sources/SMSDevice.h | 3 + Sources/VoipSMS/SMSMessage.cpp | 7 +- Sources/VoipSMS/SMSMessage.h | 3 +- Sources/VoipSMS/VoipMsSMSClient.cpp | 120 +++++++++++++++++++++++++++- Sources/VoipSMS/VoipMsSMSClient.h | 14 ++++ 11 files changed, 246 insertions(+), 9 deletions(-) diff --git a/Sources/MasterCtrl.cpp b/Sources/MasterCtrl.cpp index 84373f2..f0932c5 100644 --- a/Sources/MasterCtrl.cpp +++ b/Sources/MasterCtrl.cpp @@ -55,6 +55,8 @@ void CMasterCtrl::Start() mNetworkDevicesManager->mProgramHandle = this; mEthernetNetworkServer->mDevicesMgrHandle = mNetworkDevicesManager; mEthernetNetworkServer->mProgramHandle = this; + mVoipMsSMSClient->mProgramHandle = this; + connect(mVoipMsSMSClient,SIGNAL(DIDSFetched(QStringList)),mSettingsWindow,SLOT(DIDsListFetched(QStringList))); mAVReceiverDevice->ConnectToReceiver(); @@ -106,3 +108,9 @@ unsigned int CMasterCtrl::SettingsWindowClosed() mVoipMsSMSClient->DownloadSMSFromServer(); return RET_OK; } + +int CMasterCtrl::NewSMSMessagesArrived(QList NewMessages) +{ + mNetworkDevicesManager->NewSMSMessagesReceived(NewMessages); + return RET_OK; +} diff --git a/Sources/MasterCtrl.h b/Sources/MasterCtrl.h index df5acce..075807f 100644 --- a/Sources/MasterCtrl.h +++ b/Sources/MasterCtrl.h @@ -40,6 +40,8 @@ public: unsigned int SettingsWindowClosed(); + int NewSMSMessagesArrived(QList NewMessages); + //Modules requests... diff --git a/Sources/NetworkDevicesMgr.cpp b/Sources/NetworkDevicesMgr.cpp index c180fb8..3c56cdc 100644 --- a/Sources/NetworkDevicesMgr.cpp +++ b/Sources/NetworkDevicesMgr.cpp @@ -84,3 +84,15 @@ CNetworkDevice* CNetworkDevicesMgr::GetDevice(int DeviceID, int Address) return 0; } + +int CNetworkDevicesMgr::NewSMSMessagesReceived(QList NewMessages) +{ + for(int i = 0; i < mNetworkDevicesList.size(); i++) + { + if(mNetworkDevicesList.at(i)->GetDeviceID() == ID_SMS_CLIENT) + { + CSMSDevice *SMSDevice = (CSMSDevice*)mNetworkDevicesList.at(i); + SMSDevice->SendNewSMSReceived(NewMessages); + } + } +} diff --git a/Sources/NetworkDevicesMgr.h b/Sources/NetworkDevicesMgr.h index d7275df..3299e2e 100644 --- a/Sources/NetworkDevicesMgr.h +++ b/Sources/NetworkDevicesMgr.h @@ -28,6 +28,8 @@ public: CVoipMsSMSClient *mVoipMSInterfaceHandle; CMasterCtrl *mProgramHandle; + int NewSMSMessagesReceived(QList NewMessages); + private: QList mNetworkDevicesList; diff --git a/Sources/ProtocolDefs.h b/Sources/ProtocolDefs.h index 6d55bdc..417f186 100644 --- a/Sources/ProtocolDefs.h +++ b/Sources/ProtocolDefs.h @@ -122,13 +122,15 @@ enum IR_REMOTE_CMDS enum SMS_CLIENT_CMDS { SMS_CLIENT_DEVICE_ACK = 1, - SMS_CLIENT_DEVICE_STATUS_REQUEST, + SMS_CLIENT_DEVICE_STATUS_REQUEST, //2 SMS_CLIENT_DEVICE_STATUS_RESPONSE, - SMS_CLIENT_DEVICE_DID_INFO_REQUEST, + SMS_CLIENT_DEVICE_DID_INFO_REQUEST, //4 SMS_CLIENT_DEVICE_DID_INFO_RESPONSE, - SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST, + SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST, //6 SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE, - SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION, + SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION, //8 + SMS_CLIENT_DEVICE_SEND_SMS_REQUEST, + SMS_CLIENT_DEVICE_SEND_SMS_ACK, //10 SMS_CLIENT_DEVICE_MAX_MSG diff --git a/Sources/SMSDevice.cpp b/Sources/SMSDevice.cpp index 1430d56..c62fc96 100644 --- a/Sources/SMSDevice.cpp +++ b/Sources/SMSDevice.cpp @@ -80,8 +80,40 @@ int CSMSDevice::NewDeviceFrameReceived(int DeviceID, int DeviceAddress, int Mess FrameBuffer.seek(0); mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE,FrameData.size(),FrameData); + + FrameBuffer.close(); + delete FrameDataStrm; + break; } + case SMS_CLIENT_DEVICE_SEND_SMS_REQUEST: + { +// QBuffer FrameBuffer(&Data); +// FrameBuffer.open(QIODevice::ReadWrite); + QDataStream *FrameDataStrm = new QDataStream(Data); + + qint32 NbMsgs; + *FrameDataStrm >> NbMsgs; + if(NbMsgs > 0) + { + + QList SMSList; + for(int i = 0; i < NbMsgs; i++) + { + CSMSMessage NewMessage; + *FrameDataStrm >> NewMessage; + SMSList.append(NewMessage); + } + mVoipMsInterfaceHandle->SendSMS(&SMSList); + + } + + // FrameBuffer.close(); + delete FrameDataStrm; + + break; + + } case SMS_CLIENT_DEVICE_STATUS_REQUEST: case SMS_CLIENT_DEVICE_DID_INFO_RESPONSE: case SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION: @@ -104,6 +136,48 @@ void CSMSDevice::RequestStatus() mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_STATUS_REQUEST,0,QByteArray()); } +void CSMSDevice::SendSMSSentAck(bool Ack) +{ + QByteArray FrameData; + QBuffer FrameBuffer(&FrameData); + FrameBuffer.open(QIODevice::ReadWrite); + QDataStream *FrameDataStrm = new QDataStream(&FrameBuffer); + + qint32 ACKData = 0; + if(Ack) + { + ACKData = 1; + } + *FrameDataStrm << ACKData; + + mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_SEND_SMS_ACK,FrameData.size(),FrameData); + + + FrameBuffer.close(); + delete FrameDataStrm; +} + +void CSMSDevice::SendNewSMSReceived(QList NewMessages) +{ + QByteArray FrameData; + QBuffer FrameBuffer(&FrameData); + FrameBuffer.open(QIODevice::ReadWrite); + QDataStream *FrameDataStrm = new QDataStream(&FrameBuffer); + + // QList *SMSList = mVoipMsInterfaceHandle->GetSMSList(); + *FrameDataStrm << NewMessages.size(); + for(int i = 0; i < NewMessages.size(); i++) + { + *FrameDataStrm << NewMessages.at(i); + } + + FrameBuffer.seek(0); + mNetworkInterfacePtr->SendNetworkMessage(mDeviceID,mDeviceAddress,SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION,FrameData.size(),FrameData); + + FrameBuffer.close(); + delete FrameDataStrm; +} + void CSMSDevice::StatusReqTimerExpired() { if(++mStatusRequestsCount > 3) diff --git a/Sources/SMSDevice.h b/Sources/SMSDevice.h index 3282124..01de9d8 100644 --- a/Sources/SMSDevice.h +++ b/Sources/SMSDevice.h @@ -21,8 +21,11 @@ public: QTimer *mStatusRequestTimer; int mStatusRequestsCount; + void SendNewSMSReceived(QList NewMessages); + private: void RequestStatus(); + void SendSMSSentAck(bool Ack); public slots: void StatusReqTimerExpired(); diff --git a/Sources/VoipSMS/SMSMessage.cpp b/Sources/VoipSMS/SMSMessage.cpp index ee12009..8e4a538 100644 --- a/Sources/VoipSMS/SMSMessage.cpp +++ b/Sources/VoipSMS/SMSMessage.cpp @@ -5,7 +5,12 @@ CSMSMessage::CSMSMessage() { - + this->mContact = "INVALID"; + this->mDateTime = QDateTime::currentDateTime(); + this->mDID = "INVALID"; + this->mMessageText = "INVALID"; + this->mType = SMS_INVALID_TYPE; + this->mVOIPMSDatabaseID = "INVALID"; } QDataStream &operator<<(QDataStream &out, const CSMSMessage &source) diff --git a/Sources/VoipSMS/SMSMessage.h b/Sources/VoipSMS/SMSMessage.h index 33a49f8..9a1b341 100644 --- a/Sources/VoipSMS/SMSMessage.h +++ b/Sources/VoipSMS/SMSMessage.h @@ -8,7 +8,8 @@ typedef enum eSMSType { SMS_SENT_TYPE, - SMS_RECEIVED_TYPE + SMS_RECEIVED_TYPE, + SMS_INVALID_TYPE }SmsType_t; class CSMSMessage diff --git a/Sources/VoipSMS/VoipMsSMSClient.cpp b/Sources/VoipSMS/VoipMsSMSClient.cpp index 80ed4d7..dd54b03 100644 --- a/Sources/VoipSMS/VoipMsSMSClient.cpp +++ b/Sources/VoipSMS/VoipMsSMSClient.cpp @@ -5,6 +5,7 @@ #include #include #include +#include "MasterCtrl.h" CVoipMsSMSClient::CVoipMsSMSClient() { @@ -21,6 +22,8 @@ CVoipMsSMSClient::CVoipMsSMSClient() mFirstDownloadDone = false; + mProgramHandle = 0; + } CVoipMsSMSClient::~CVoipMsSMSClient() @@ -60,6 +63,8 @@ int CVoipMsSMSClient::SendSMSDownloadRequest(QDate StartDate, QDate EndDate) // 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"; + StopSMSCheckTimer(); + UrlStream << VOIP_MS_API_URL << "api_username=" << mVOIPMsSettings.mUsername << "&" << "api_password=" << mVOIPMsSettings.mPassword << "&" @@ -70,9 +75,55 @@ int CVoipMsSMSClient::SendSMSDownloadRequest(QDate StartDate, QDate EndDate) << "limit=" << VOIP_MS_SMS_MAX_COUNT; // qDebug() << "Cmd: " << Url; + mVOIPMSSocket->get(QNetworkRequest(Url)); mCurStartDate = EndDate; + mLastRequestCmd = "getSMS"; + + + return RET_OK; +} + +int CVoipMsSMSClient::SendSMS(QList *SMSList) +{ + + if(SMSList->size() == 0) + { + return RET_ERROR; + } + + SendSMS(SMSList->at(0)); + + if(SMSList->size() > 1) + { + for(int i = 1; i < SMSList->size(); i++) + { + mPendingSMSSendList.append(SMSList->at(i)); + } + } + + return RET_OK; +} + +int CVoipMsSMSClient::SendSMS(CSMSMessage Message) +{ + QString Url; + Url.clear(); + QTextStream UrlStream(&Url); + + StopSMSCheckTimer(); + UrlStream << VOIP_MS_API_URL + << "api_username=" << mVOIPMsSettings.mUsername << "&" + << "api_password=" << mVOIPMsSettings.mPassword << "&" + << "method=" << "sendSMS" << "&" + << "did=" << Message.mDID << "&" + << "dst=" << Message.mContact << "&" + << "message=" << Message.mMessageText; + + qDebug() << "Sending SMS Msg : " << Url; + mVOIPMSSocket->get(QNetworkRequest(Url)); + mLastRequestCmd = "sendSMS"; return RET_OK; } @@ -90,6 +141,7 @@ int CVoipMsSMSClient::CheckForNewSMS() return RET_ERROR; } + QDate Today = QDate::currentDate(); QDate StartDate = mSMSMessagesList.at(0).mDateTime.date(); SendSMSDownloadRequest(StartDate,Today); @@ -103,12 +155,15 @@ unsigned int CVoipMsSMSClient::GetDidFromUserAccount(const QString username, con Url.clear(); QTextStream UrlStream(&Url); + StopSMSCheckTimer(); + UrlStream << VOIP_MS_API_URL << "api_username=" << username << "&" << "api_password=" << Password << "&" << "method=" << Method << "&"; mVOIPMSSocket->get(QNetworkRequest(Url)); + mLastRequestCmd = Method; return RET_OK; } @@ -116,22 +171,29 @@ unsigned int CVoipMsSMSClient::GetDidFromUserAccount(const QString username, con void CVoipMsSMSClient::VoipServerReplyFinished(QNetworkReply *NetworkReply) { QByteArray Reply = NetworkReply->readAll(); + NetworkReply->deleteLater(); QJsonDocument JsonReply = QJsonDocument::fromJson(Reply); QJsonObject JsonObject = JsonReply.object(); QStringList Keys = JsonObject.keys(); if(JsonObject["status"].toString() == "success") { - if(Keys.contains("sms")) + if(mLastRequestCmd == "getSMS") + // if(Keys.contains("sms")) { QJsonArray SMSArray = JsonObject["sms"].toArray(); SMSReceived(&SMSArray); } - else if(Keys.contains("dids")) + else if(mLastRequestCmd == "getDIDsInfo") + // else if(Keys.contains("dids")) { QJsonArray DIDsInfoArray = JsonObject["dids"].toArray(); DIDsInfoReceived(&DIDsInfoArray); } + else if(mLastRequestCmd == "sendSMS") + { + SendSMSAckReceived(true); + } } else { @@ -140,7 +202,40 @@ void CVoipMsSMSClient::VoipServerReplyFinished(QNetworkReply *NetworkReply) { SMSReceived(0); } + if(mLastRequestCmd == "sendSMS") + { + SendSMSAckReceived(false); + } } + Reply.clear(); +} + +int CVoipMsSMSClient::SendSMSAckReceived(bool Success) +{ + if(Success) + { + qDebug("SMS sent successfuly"); + if(mPendingSMSSendList.size() != 0) + { + CSMSMessage Msg = mPendingSMSSendList.takeFirst(); + SendSMS(Msg); + } + else + { + CheckForNewSMS(); +// StartSMSCheckTimer(); + } + } + else + { + qDebug("SMS send failed"); + mPendingSMSSendList.clear(); + StartSMSCheckTimer(); + } + + + + return RET_OK; } unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray) @@ -200,6 +295,8 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray) } if(mFirstDownloadDone == true && NewMessages.size() > 0) { + mProgramHandle->NewSMSMessagesArrived(NewMessages); + qDebug() << "Added " << NewMessages.size() << " new SMS messages"; qDebug("-----------------------------------------------------------------------"); qDebug(" "); @@ -240,6 +337,8 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray) mSMSMessagesList.append(NewMessages); if(mFirstDownloadDone == true && NewMessages.size() > 0) { + mProgramHandle->NewSMSMessagesArrived(NewMessages); + qDebug() << "Added " << NewMessages.size() << " new SMS messages"; qDebug("-----------------------------------------------------------------------"); qDebug(" "); @@ -283,7 +382,8 @@ unsigned int CVoipMsSMSClient::SMSReceived(QJsonArray *SMSArray) mFirstDownloadDone = true; - mCheckNewSMSTimer->start(VOIP_MS_SMS_CHECK_TIMEOUT); +// mCheckNewSMSTimer->start(VOIP_MS_SMS_CHECK_TIMEOUT); + StartSMSCheckTimer(); qDebug("Timer started"); } @@ -327,6 +427,8 @@ unsigned int CVoipMsSMSClient::DIDsInfoReceived(QJsonArray *DIDsInfoPtr) emit DIDSFetched(DIDs); } + StartSMSCheckTimer(); + return RET_OK; } @@ -398,6 +500,18 @@ QString CVoipMsSMSClient::GetDefaultDID() return mVOIPMsSettings.mDefaultDID; } +void CVoipMsSMSClient::StartSMSCheckTimer() +{ + if(mFirstDownloadDone == true) + { + mCheckNewSMSTimer->start(VOIP_MS_SMS_CHECK_TIMEOUT); + } +} + +void CVoipMsSMSClient::StopSMSCheckTimer() +{ + mCheckNewSMSTimer->stop(); +} //https://www.voip.ms/api/v1/rest.php?api_username=jean-francois.martel@polymtl.ca&api_password=Pentium2&method=getBalance&advanced=True diff --git a/Sources/VoipSMS/VoipMsSMSClient.h b/Sources/VoipSMS/VoipMsSMSClient.h index c1ae6df..36d049a 100644 --- a/Sources/VoipSMS/VoipMsSMSClient.h +++ b/Sources/VoipSMS/VoipMsSMSClient.h @@ -26,6 +26,8 @@ enum VoipMSRetValues VOIPMS_RET_NO_DID_FOUND }; +class CMasterCtrl; + class CVoipMsSMSClient : public QObject { Q_OBJECT @@ -40,6 +42,8 @@ public: QList mSMSMessagesList; + CMasterCtrl *mProgramHandle; + unsigned int GetDidFromUserAccount(const QString username, const QString Password); unsigned int SetVOIPMsSettings(CVoipMSSMSSettings *SettingsData); unsigned int NewSMSNotification(QString DID); @@ -50,12 +54,20 @@ public: int GetSMSCount(); QString GetDefaultDID(); + int SendSMS(QList *SMSList); + int SendSMS(CSMSMessage Message); + private: QNetworkAccessManager *mVOIPMSSocket; unsigned int SMSReceived(QJsonArray *sms); unsigned int DIDsInfoReceived(QJsonArray *DIDsInfo); + int SendSMSAckReceived(bool Success); + + void StartSMSCheckTimer(); + void StopSMSCheckTimer(); + CVoipMSSMSSettings mVOIPMsSettings; @@ -66,6 +78,8 @@ private: QTimer *mCheckNewSMSTimer; bool mFirstDownloadDone; + QString mLastRequestCmd; + QList mPendingSMSSendList;