summaryrefslogtreecommitdiff
path: root/contrib/win32/smsd_mfc
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/win32/smsd_mfc')
-rw-r--r--contrib/win32/smsd_mfc/about.cpp54
-rw-r--r--contrib/win32/smsd_mfc/about.h16
-rw-r--r--contrib/win32/smsd_mfc/common.h20
-rw-r--r--contrib/win32/smsd_mfc/config.cpp32
-rw-r--r--contrib/win32/smsd_mfc/config.h15
-rw-r--r--contrib/win32/smsd_mfc/editpbk.cpp21
-rw-r--r--contrib/win32/smsd_mfc/editpbk.h15
-rw-r--r--contrib/win32/smsd_mfc/loguser.cpp56
-rw-r--r--contrib/win32/smsd_mfc/loguser.h22
-rw-r--r--contrib/win32/smsd_mfc/main.cpp908
-rw-r--r--contrib/win32/smsd_mfc/mgui.sln21
-rw-r--r--contrib/win32/smsd_mfc/mgui.vcproj564
-rw-r--r--contrib/win32/smsd_mfc/sendsms.cpp91
-rw-r--r--contrib/win32/smsd_mfc/sendsms.h21
14 files changed, 1856 insertions, 0 deletions
diff --git a/contrib/win32/smsd_mfc/about.cpp b/contrib/win32/smsd_mfc/about.cpp
new file mode 100644
index 0000000..f9f2a99
--- /dev/null
+++ b/contrib/win32/smsd_mfc/about.cpp
@@ -0,0 +1,54 @@
+
+#include "common.h"
+
+#include <afxwin.h>
+#include <afxext.h>
+#include <afxcview.h>
+#include <winsock.h>
+#include <mysql.h>
+
+#include "../../common/misc/misc.h"
+#include <gammu-config.h>
+
+#include "resource.h"
+#include "about.h"
+
+CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
+{
+}
+
+void CAboutDlg::OnShowWindow(BOOL bShow, UINT nStatus)
+{
+ CString txt;
+
+ CDialog::OnShowWindow(bShow, nStatus);
+
+ txt = "Built ";
+ txt = txt + __TIME__;
+ txt = txt + " ";
+ txt = txt + __DATE__;
+ if (strlen(GetCompiler()) != 0) {
+ txt = txt + " in ";
+ txt = txt + GetCompiler();
+ }
+ SetDlgItemText (IDC_STATIC3, txt);
+
+ txt = "Using Gammu ";
+ txt = txt + VERSION;
+ SetDlgItemText (IDC_STATIC4, txt);
+
+ txt = "Using MySQL library ";
+ txt = txt + mysql_get_client_info();
+ SetDlgItemText (IDC_STATIC5, txt);
+
+ txt = "";
+ if (strlen(GetOS()) != 0) {
+ txt = "Run on ";
+ txt = txt + GetOS();
+ }
+ SetDlgItemText (IDC_STATIC6, txt);
+}
+
+BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
+ ON_WM_SHOWWINDOW()
+END_MESSAGE_MAP()
diff --git a/contrib/win32/smsd_mfc/about.h b/contrib/win32/smsd_mfc/about.h
new file mode 100644
index 0000000..f47f99b
--- /dev/null
+++ b/contrib/win32/smsd_mfc/about.h
@@ -0,0 +1,16 @@
+#include <afxwin.h>
+#include <afxext.h>
+#include <afxcview.h>
+
+#include "resource.h"
+
+class CAboutDlg : public CDialog
+{
+public:
+ CStatic Version;
+ CAboutDlg();
+ enum {IDD = IDD_ABOUT};
+ afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
+protected:
+ DECLARE_MESSAGE_MAP()
+};
diff --git a/contrib/win32/smsd_mfc/common.h b/contrib/win32/smsd_mfc/common.h
new file mode 100644
index 0000000..4f8191d
--- /dev/null
+++ b/contrib/win32/smsd_mfc/common.h
@@ -0,0 +1,20 @@
+
+// Modify the following defines if you have to target a platform prior to the ones specified below.
+// Refer to MSDN for the latest info on corresponding values for different platforms.
+#ifndef WINVER // Allow use of features specific to Windows 95 and Windows NT 4 or later.
+#define WINVER 0x0400 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
+#endif
+
+#ifndef _WIN32_WINNT // Allow use of features specific to Windows NT 4 or later.
+#define _WIN32_WINNT 0x0400 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
+#endif
+
+#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
+#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
+#endif
+
+#ifndef _WIN32_IE // Allow use of features specific to IE 4.0 or later.
+#define _WIN32_IE 0x0400 // Change this to the appropriate value to target IE 5.0 or later.
+#endif
+
+#define PHONES_NUM 10 \ No newline at end of file
diff --git a/contrib/win32/smsd_mfc/config.cpp b/contrib/win32/smsd_mfc/config.cpp
new file mode 100644
index 0000000..07d1ef3
--- /dev/null
+++ b/contrib/win32/smsd_mfc/config.cpp
@@ -0,0 +1,32 @@
+
+#include "common.h"
+
+#include <afxwin.h>
+#include <afxext.h>
+#include <afxcview.h>
+
+#include "resource.h"
+#include "config.h"
+
+CConfigDlg::CConfigDlg() : CDialog(CConfigDlg::IDD)
+{
+}
+
+void CConfigDlg::OnShowWindow(BOOL bShow, UINT nStatus)
+{
+// HTREEITEM hChapter;
+
+ CDialog::OnShowWindow(bShow, nStatus);
+
+// CTreeCtrl& tree = (CTreeView*)GetDlgItem(IDC_TREE1)-> ->GetTreeCtrl();
+
+ //hChapter = tree.InsertItem(Row0[0]);
+ //tree.InsertItem( "Phones", hChapter);
+ //tree.InsertItem( "Inbox", hChapter);
+ //tree.InsertItem( "Outbox", hChapter );
+ //tree.InsertItem( "Sent items", hChapter );
+}
+
+BEGIN_MESSAGE_MAP(CConfigDlg, CDialog)
+ ON_WM_SHOWWINDOW()
+END_MESSAGE_MAP()
diff --git a/contrib/win32/smsd_mfc/config.h b/contrib/win32/smsd_mfc/config.h
new file mode 100644
index 0000000..4f8ea81
--- /dev/null
+++ b/contrib/win32/smsd_mfc/config.h
@@ -0,0 +1,15 @@
+#include <afxwin.h>
+#include <afxext.h>
+#include <afxcview.h>
+
+#include "resource.h"
+
+class CConfigDlg : public CDialog
+{
+public:
+ CConfigDlg();
+ enum {IDD = IDD_CONFIG};
+ afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
+protected:
+ DECLARE_MESSAGE_MAP()
+};
diff --git a/contrib/win32/smsd_mfc/editpbk.cpp b/contrib/win32/smsd_mfc/editpbk.cpp
new file mode 100644
index 0000000..87be928
--- /dev/null
+++ b/contrib/win32/smsd_mfc/editpbk.cpp
@@ -0,0 +1,21 @@
+
+#include "common.h"
+
+#include <afxwin.h>
+#include <afxext.h>
+#include <afxcview.h>
+
+#include "resource.h"
+#include ".\editpbk.h"
+
+CEditPbkDlg::CEditPbkDlg() : CDialog(CEditPbkDlg::IDD)
+{
+}
+
+void CEditPbkDlg::DoDataExchange(CDataExchange* pDX)
+{
+ CDialog::DoDataExchange(pDX);
+}
+
+BEGIN_MESSAGE_MAP(CEditPbkDlg, CDialog)
+END_MESSAGE_MAP()
diff --git a/contrib/win32/smsd_mfc/editpbk.h b/contrib/win32/smsd_mfc/editpbk.h
new file mode 100644
index 0000000..f759180
--- /dev/null
+++ b/contrib/win32/smsd_mfc/editpbk.h
@@ -0,0 +1,15 @@
+#include <afxwin.h>
+#include <afxext.h>
+#include <afxcview.h>
+
+#include "resource.h"
+
+class CEditPbkDlg : public CDialog
+{
+public:
+ enum {IDD = IDD_EDITPBK};
+ CEditPbkDlg();
+protected:
+ DECLARE_MESSAGE_MAP()
+ virtual void DoDataExchange(CDataExchange* pDX);
+};
diff --git a/contrib/win32/smsd_mfc/loguser.cpp b/contrib/win32/smsd_mfc/loguser.cpp
new file mode 100644
index 0000000..6f6e837
--- /dev/null
+++ b/contrib/win32/smsd_mfc/loguser.cpp
@@ -0,0 +1,56 @@
+
+#include "common.h"
+
+#include <afxwin.h>
+#include <afxext.h>
+#include <afxcview.h>
+
+#include "resource.h"
+#include ".\loguser.h"
+
+CLogUserDlg::CLogUserDlg() : CDialog(CLogUserDlg::IDD)
+{
+}
+
+void CLogUserDlg::DoDataExchange(CDataExchange* pDX)
+{
+ CDialog::DoDataExchange(pDX);
+
+ DDX_Text(pDX, IDC_EDIT1, IP);
+ DDX_Text(pDX, IDC_EDIT2, User);
+ DDX_Text(pDX, IDC_EDIT3, Pass);
+}
+
+BEGIN_MESSAGE_MAP(CLogUserDlg, CDialog)
+ ON_WM_SHOWWINDOW()
+ ON_EN_CHANGE(IDC_EDIT1, OnEnChangeEdit1)
+ ON_EN_CHANGE(IDC_EDIT2, OnEnChangeEdit2)
+END_MESSAGE_MAP()
+
+void CLogUserDlg::OnShowWindow(BOOL bShow, UINT nStatus)
+{
+ CDialog::OnShowWindow(bShow, nStatus);
+
+ CheckIDOK();
+
+ GetDlgItem(IDC_EDIT1)->SetFocus();
+}
+
+void CLogUserDlg::CheckIDOK()
+{
+ GetDlgItem(IDOK)->EnableWindow(FALSE);
+
+ if (User != "" && IP != "") GetDlgItem(IDOK)->EnableWindow(TRUE);
+}
+
+void CLogUserDlg::OnEnChangeEdit1()
+{
+ UpdateData(TRUE);
+ CheckIDOK();
+}
+
+void CLogUserDlg::OnEnChangeEdit2()
+{
+ UpdateData(TRUE);
+ CheckIDOK();
+}
diff --git a/contrib/win32/smsd_mfc/loguser.h b/contrib/win32/smsd_mfc/loguser.h
new file mode 100644
index 0000000..8398b4f
--- /dev/null
+++ b/contrib/win32/smsd_mfc/loguser.h
@@ -0,0 +1,22 @@
+#include <afxwin.h>
+#include <afxext.h>
+#include <afxcview.h>
+
+#include "resource.h"
+
+class CLogUserDlg : public CDialog
+{
+public:
+ CString User;
+ CString Pass;
+ CString IP;
+ enum {IDD = IDD_LOGUSER};
+ CLogUserDlg();
+ afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
+ afx_msg void OnEnChangeEdit1();
+ afx_msg void OnEnChangeEdit2();
+protected:
+ DECLARE_MESSAGE_MAP()
+ void CheckIDOK();
+ virtual void DoDataExchange(CDataExchange* pDX);
+};
diff --git a/contrib/win32/smsd_mfc/main.cpp b/contrib/win32/smsd_mfc/main.cpp
new file mode 100644
index 0000000..cce274a
--- /dev/null
+++ b/contrib/win32/smsd_mfc/main.cpp
@@ -0,0 +1,908 @@
+
+#include "common.h"
+
+#include <afx.h>
+#include <afxwin.h>
+#include <afxext.h>
+#include <afxcview.h>
+#include <afxrich.h>
+#include <afxtempl.h>
+
+#include <windows.h>
+#include <winsock.h>
+#include <mysql.h>
+#include <locale.h>
+
+#include "../../common/misc/coding/coding.h"
+
+#include "resource.h"
+#include "loguser.h"
+#include "sendsms.h"
+#include "editpbk.h"
+#include "config.h"
+#include "about.h"
+
+#pragma comment(lib, "libmysql.lib")
+
+char *server = new char(200);
+char *user = new char(200);
+char *password = new char(200);
+MYSQL MainDB;
+HWND MainHWND;
+
+void DispSMSInfo(CString *txt, char *Class, char *UDH, char *Text, char *TextDecoded, char *Coding)
+{
+ unsigned char buf[1000],buf2[1000];
+
+ if (UDH[0] != 0) (*txt) = (*txt) + "UDH AVAILABLE\r\n";
+ if (!strcmp(Class,"0") || !strcmp(Class,"1") || !strcmp(Class,"2") || !strcmp(Class,"3")) {
+ (*txt) = (*txt) + "Class: "+Class+"\r\n";
+ }
+ if (!strcmp(Coding,"8bit")) {
+ (*txt) = (*txt) + "BINARY\r\n";
+ } else {
+ if (!strcmp(Coding,"Unicode")) (*txt) = (*txt) + "Unicode ";
+ (*txt) = (*txt) + "text: ";
+ if (Text[0] == 0) {
+ (*txt) = (*txt) + TextDecoded;
+ } else {
+ DecodeHexUnicode(buf, (unsigned char *)Text, strlen(Text));
+ (*txt) = (*txt) + DecodeUnicodeString(buf);
+ }
+ }
+}
+
+char *DecodeDateTime(char *DT)
+{
+ static char buffer[100];
+
+ if (strlen(DT)<14) {
+ buffer[0] = 0;
+ } else {
+ sprintf(buffer,"%c%c%c%c-%c%c-%c%c %c%c:%c%c:%c%c",
+ DT[0],DT[1],DT[2],DT[3],DT[4],
+ DT[5],DT[6],
+ DT[7],DT[8],
+ DT[9],DT[10],
+ DT[11],DT[12],
+ DT[13],DT[14]);
+ }
+
+ return buffer;
+}
+
+char *DecodeValidity(char *Validity)
+{
+ static char buffer[100];
+
+ if (!strcmp(Validity,"-1")) {
+ sprintf(buffer,"default");
+ } else if (!strcmp(Validity,"0")) {
+ sprintf(buffer,"5 minutes");
+ } else if (!strcmp(Validity,"255")) {
+ sprintf(buffer,"max. time");
+ } else {
+ sprintf(buffer,Validity);
+ }
+ return buffer;
+}
+
+//--document in each child window
+
+class CMultiDoc : public CDocument
+{
+protected:
+ DECLARE_DYNCREATE(CMultiDoc)
+public:
+ CString FFolder;
+ CString FDB;
+ CString FID;
+ MYSQL *DB;
+ virtual BOOL OnNewDocument() {
+ DB = NULL;
+ unsigned int port = 0;
+
+ if (!CDocument::OnNewDocument()) return FALSE;
+
+ char * pport = strstr( server, ":" );
+ if (pport) {
+ *pport ++ = _T('\0');
+ port = atoi( pport );
+ }
+ DB = mysql_real_connect(&MainDB,server,user,password,NULL,port,NULL,0);
+ if (DB == NULL) {
+ MessageBox(MainHWND,mysql_error(&MainDB),"Connection error",0);
+ return FALSE;
+ }
+ return TRUE;
+ }
+};
+
+IMPLEMENT_DYNCREATE(CMultiDoc, CDocument)
+
+//--- left side of child windows
+
+class CSplitTreeView : public CTreeView
+{
+protected:
+ CSplitTreeView();
+ ~CSplitTreeView();
+ afx_msg void OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult);
+ DECLARE_DYNCREATE(CSplitTreeView)
+public:
+ virtual void OnInitialUpdate();
+ CMultiDoc* GetDocument() const;
+ DECLARE_MESSAGE_MAP()
+};
+
+IMPLEMENT_DYNCREATE(CSplitTreeView, CTreeView)
+
+BEGIN_MESSAGE_MAP(CSplitTreeView, CTreeView)
+ ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
+END_MESSAGE_MAP()
+
+inline CMultiDoc* CSplitTreeView::GetDocument() const
+{
+ return reinterpret_cast<CMultiDoc*>(m_pDocument);
+}
+
+CSplitTreeView::CSplitTreeView()
+{
+ this->m_dwDefaultStyle |= (TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);
+}
+
+
+CSplitTreeView::~CSplitTreeView()
+{
+ if (GetDocument()->DB!=NULL) mysql_close(GetDocument()->DB);
+}
+
+void CSplitTreeView::OnInitialUpdate()
+{
+ HTREEITEM hChapter;
+ char *buf="SELECT Version FROM `gammu` WHERE 1";
+ MYSQL_RES *Res0, *Res;
+ MYSQL_ROW Row0, Row;
+
+ CTreeView::OnInitialUpdate();
+ CTreeCtrl& tree = GetTreeCtrl();
+
+ if (!(Res0 = mysql_list_dbs(GetDocument()->DB,NULL))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Getting DB list error");
+ return;
+ }
+ while ((Row0 = mysql_fetch_row(Res0))) {
+ if (mysql_select_db(GetDocument()->DB, Row0[0])!=0) {
+ mysql_free_result(Res);
+ continue;
+ }
+ if (mysql_real_query(GetDocument()->DB,buf,strlen(buf))) {
+ continue;
+ }
+ if (!(Res = mysql_store_result(GetDocument()->DB))) {
+ continue;
+ }
+
+ if (!(Row = mysql_fetch_row(Res))) {
+ mysql_free_result(Res);
+ continue;
+ }
+ if (atoi(Row[0]) != 4) {
+ mysql_free_result(Res);
+ continue;
+ }
+ hChapter = tree.InsertItem(Row0[0]);
+ tree.InsertItem( "Phones", hChapter);
+ tree.InsertItem( "Inbox", hChapter);
+ tree.InsertItem( "Outbox", hChapter );
+ tree.InsertItem( "Sent items", hChapter );
+ }
+ mysql_free_result(Res);
+}
+
+void CSplitTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
+ CTreeCtrl &ctrl = GetTreeCtrl();
+ HTREEITEM hNew = ctrl.GetSelectedItem();
+
+ GetDocument()->FDB = "";
+ GetDocument()->FID = "";
+ if (hNew != NULL) {
+ CString pStr = ctrl.GetItemText(hNew);
+ GetDocument()->FFolder = pStr;
+ HTREEITEM hParent = ctrl.GetParentItem(hNew);
+ if (hParent != NULL) {
+ pStr = ctrl.GetItemText(hParent);
+ if (pStr != GetDocument()->FDB) {
+ if (mysql_select_db(GetDocument()->DB, pStr)!=0) {
+ MessageBox(mysql_error(GetDocument()->DB),"Selecting DB error");
+ }
+ }
+ GetDocument()->FDB = pStr;
+ }
+ } else {
+ GetDocument()->FFolder = "";
+ }
+ GetDocument()->UpdateAllViews(this);
+
+ *pResult = 0;
+}
+
+//--- right down side of child windows
+
+class CSplitEditView : public CRichEditView
+{
+protected:
+ CSplitEditView();
+ DECLARE_DYNCREATE(CSplitEditView)
+ void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
+public:
+ CMultiDoc* GetDocument() const;
+ virtual void OnInitialUpdate();
+};
+
+IMPLEMENT_DYNCREATE(CSplitEditView, CEditView)
+
+CSplitEditView::CSplitEditView()
+{
+}
+
+void CSplitEditView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
+{
+ CString txt;
+ CRichEditCtrl& theEdit = GetRichEditCtrl();
+ char *inbox="SELECT UpdatedInDB,ReceivingDateTime,Text,SenderNumber,Coding,UDH,SMSCNumber,Class,TextDecoded,ID,RecipientID FROM `inbox` WHERE ID=";
+ char *outbox="SELECT UpdatedInDB,InsertIntoDB,Text,DestinationNumber,Coding,UDH,Class,TextDecoded,ID,MultiPart,RelativeValidity,SendingDateTime,SenderID,SendingTimeOut FROM `outbox` WHERE ID=";
+ char *outbox_multi="SELECT Text,Coding,UDH,Class,TextDecoded,ID,SequencePosition FROM `outbox_multipart` WHERE ID=";
+ char *sent="SELECT UpdatedInDB,InsertIntoDB,SendingDateTime,DeliveryDateTime,Text,DestinationNumber,Coding,UDH,SMSCNumber,Class,TextDecoded,ID,SenderID,SequencePosition,Status,StatusError,TPMR,RelativeValidity FROM `sentitems` WHERE ID=";
+ char *phones="SELECT ID,InsertIntoDB,TimeOut,Send,Receive,IMEI,Client FROM `phones` WHERE TimeOut>NOW()";
+ char something[1000];
+ MYSQL_RES *Res;
+ MYSQL_ROW Row;
+ int i;
+
+ txt = "";
+ theEdit.SetWindowText(txt);
+ something[0] = 0;
+
+ if (GetDocument()->FID == "") return;
+
+ if (GetDocument()->FFolder=="Inbox") {
+ strcpy(something,inbox);
+ sprintf(something+strlen(something),"%s",GetDocument()->FID);
+ if (mysql_real_query(GetDocument()->DB,something,strlen(something))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Query error");
+ return;
+ }
+
+ if (!(Res = mysql_store_result(GetDocument()->DB))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Store error");
+ return;
+ }
+ Row = mysql_fetch_row(Res);
+
+ txt = "Last changed in DB: ";
+ txt = txt + DecodeDateTime(Row[0]);
+ txt = txt + "\r\nInsert into DB: " + DecodeDateTime(Row[1]);
+ txt = txt + "\r\n";
+
+ DispSMSInfo(&txt, Row[7], Row[5], Row[2], Row[8], Row[4]);
+
+ mysql_free_result(Res);
+ }
+ if (GetDocument()->FFolder=="Outbox") {
+ strcpy(something,outbox);
+ sprintf(something+strlen(something),"%s",GetDocument()->FID);
+ if (mysql_real_query(GetDocument()->DB,something,strlen(something))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Query error");
+ return;
+ }
+
+ if (!(Res = mysql_store_result(GetDocument()->DB))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Store error");
+ return;
+ }
+ Row = mysql_fetch_row(Res);
+
+ txt = "Last changed in DB: ";
+ txt = txt + DecodeDateTime(Row[0]);
+ txt = txt + "\r\nInsert into DB: " + DecodeDateTime(Row[1]);
+ txt = txt + "\r\n";
+
+ DispSMSInfo(&txt, Row[6], Row[5], Row[2], Row[7], Row[4]);
+
+ mysql_free_result(Res);
+
+ if (!strcmp(Row[9],"true")) {
+ strcpy(something,outbox_multi);
+ sprintf(something+strlen(something),"%s",GetDocument()->FID);
+ if (mysql_real_query(GetDocument()->DB,something,strlen(something))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Query error");
+ return;
+ }
+
+ if (!(Res = mysql_store_result(GetDocument()->DB))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Store error");
+ return;
+ }
+ Row = mysql_fetch_row(Res);
+
+ DispSMSInfo(&txt, Row[3], Row[2], Row[0], Row[4], Row[1]);
+
+ mysql_free_result(Res);
+ }
+ }
+ if (GetDocument()->FFolder=="Sent items") {
+ for (i=1;i<10;i++) {
+ strcpy(something,sent);
+ sprintf(something+strlen(something),"%s",GetDocument()->FID);
+ sprintf(something+strlen(something)," and SequencePosition=%i limit 1",i);
+ if (mysql_real_query(GetDocument()->DB,something,strlen(something))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Query error");
+ return;
+ }
+
+ if (!(Res = mysql_store_result(GetDocument()->DB))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Store error");
+ return;
+ }
+ Row = mysql_fetch_row(Res);
+ if (Row == NULL) {
+ mysql_free_result(Res);
+ break;
+ }
+
+ txt = "Validity: ";
+ txt = txt + DecodeValidity(Row[17]);
+ txt = txt + "\r\n";
+
+ DispSMSInfo(&txt, Row[9], Row[7], Row[4], Row[10], Row[6]);
+
+ mysql_free_result(Res);
+ }
+ strcpy(something,sent);
+ sprintf(something+strlen(something),"%s",GetDocument()->FID);
+ if (mysql_real_query(GetDocument()->DB,something,strlen(something))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Query error");
+ return;
+ }
+
+ if (!(Res = mysql_store_result(GetDocument()->DB))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Store error");
+ return;
+ }
+ txt = txt + "\r\n";
+ while ((Row = mysql_fetch_row(Res))) {
+ txt = txt + "\r\n";
+ txt = txt + "Part ";
+ txt = txt + Row[13];
+ txt = txt + "\r\n";
+ if (strcmp(Row[15],"-1")) {
+ txt = txt + "Error code ";
+ txt = txt + Row[15];
+ txt = txt + "\r\n";
+ }
+ txt = txt + "Status ";
+ txt = txt + Row[14];
+ txt = txt + "\r\n";
+ txt = txt + "Sending time ";
+ txt = txt + DecodeDateTime(Row[2]);
+ txt = txt + "\r\n";
+ if (strcmp(Row[3],"00000000000000")) {
+ txt = txt + "Delivery time ";
+ txt = txt + DecodeDateTime(Row[3]);
+ txt = txt + "\r\n";
+ }
+ }
+ mysql_free_result(Res);
+ }
+
+ theEdit.SetWindowText (txt);
+}
+
+void CSplitEditView::OnInitialUpdate()
+{
+ CRichEditCtrl& theEdit = GetRichEditCtrl();
+
+ theEdit.SetReadOnly(TRUE);
+}
+
+inline CMultiDoc* CSplitEditView::GetDocument() const
+{
+ return reinterpret_cast<CMultiDoc*>(m_pDocument);
+}
+
+//--- right up side of child windows
+
+class CSplitListView : public CListView
+{
+protected:
+ CSplitListView();
+ DECLARE_DYNCREATE(CSplitListView)
+ virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
+public:
+ CMultiDoc* GetDocument() const;
+ virtual void OnInitialUpdate();
+ void OnClick(NMHDR* pNMHDR, LRESULT* pResult);
+ DECLARE_MESSAGE_MAP()
+};
+
+IMPLEMENT_DYNCREATE(CSplitListView, CListView)
+
+BEGIN_MESSAGE_MAP(CSplitListView, CListView)
+ ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
+END_MESSAGE_MAP()
+
+void CSplitListView::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ CListCtrl& pmyListCtrl = GetListCtrl();
+ CString Item;
+ CString pStr = GetDocument()->FFolder;
+
+ GetDocument()->FID = "";
+
+ POSITION Pos = pmyListCtrl.GetFirstSelectedItemPosition();
+ if (Pos) {
+ int nItem = pmyListCtrl.GetNextSelectedItem(Pos);
+ if (pStr == "Inbox" || pStr == "Outbox" || pStr == "Sent items") {
+ GetDocument()->FID = pmyListCtrl.GetItemText(nItem,0);
+ }
+ }
+
+ GetDocument()->UpdateAllViews(this);
+}
+
+inline CMultiDoc* CSplitListView::GetDocument() const
+{
+ return reinterpret_cast<CMultiDoc*>(m_pDocument);
+}
+
+void CSplitListView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
+{
+ LV_COLUMN lvc;
+ CString pStr = GetDocument()->FFolder;
+ CListCtrl& pmyListCtrl = GetListCtrl();
+ MYSQL_RES *Res;
+ MYSQL_ROW Row;
+ int index, counter;
+ char *inbox="SELECT UpdatedInDB,ReceivingDateTime,Text,SenderNumber,Coding,UDH,SMSCNumber,Class,TextDecoded,ID,RecipientID FROM `inbox` WHERE 1";
+ char *outbox="SELECT UpdatedInDB,InsertIntoDB,Text,DestinationNumber,Coding,UDH,Class,TextDecoded,ID,MultiPart,RelativeValidity,SendingDateTime,SenderID,SendingTimeOut,DeliveryReport FROM `outbox` WHERE 1";
+ char *outbox_multi="SELECT Text,Coding,UDH,Class,TextDecoded,ID,SequencePosition FROM `outbox_multipart` WHERE ID=";
+ char *sent="SELECT UpdatedInDB,InsertIntoDB,SendingDateTime,DeliveryDateTime,Text,DestinationNumber,Coding,UDH,SMSCNumber,Class,TextDecoded,ID,SenderID,SequencePosition,Status,StatusError,TPMR,RelativeValidity FROM `sentitems` order by SendingDateTime";
+ char *phones="SELECT ID,InsertIntoDB,TimeOut,Send,Receive,IMEI,Client FROM `phones` WHERE TimeOut>NOW()";
+ char something[1000];
+
+ pmyListCtrl.SetExtendedStyle(0);
+
+ if (pmyListCtrl.GetItemCount() != 0) pmyListCtrl.DeleteAllItems();
+
+ int Col = pmyListCtrl.GetHeaderCtrl()->GetItemCount();
+ for (int i=0;i<Col;i++) pmyListCtrl.DeleteColumn(0);
+
+// LPTSTR lpsz = new TCHAR[pStr.GetLength()+1];
+// _tcscpy(lpsz, pStr);
+
+ lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH;
+
+ if (pStr=="Phones") {
+ pmyListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
+
+ lvc.iSubItem = 0;
+// lvc.pszText = lpsz;
+ lvc.pszText = _T("ID");
+ lvc.cx = 70;
+ pmyListCtrl.InsertColumn(0,&lvc);
+
+ lvc.iSubItem = 1;
+ lvc.pszText = _T("Sending SMS");
+ lvc.cx = 80;
+ pmyListCtrl.InsertColumn(1,&lvc);
+
+ lvc.iSubItem = 2;
+ lvc.pszText = _T("Receiving SMS");
+ lvc.cx = 80;
+ pmyListCtrl.InsertColumn(2,&lvc);
+
+ lvc.iSubItem = 3;
+ lvc.pszText = _T("IMEI");
+ lvc.cx = 105;
+ pmyListCtrl.InsertColumn(3,&lvc);
+
+ lvc.iSubItem = 4;
+ lvc.pszText = _T("Logged");
+ lvc.cx = 150;
+ pmyListCtrl.InsertColumn(4,&lvc);
+
+ lvc.iSubItem = 5;
+ lvc.pszText = _T("Client");
+ lvc.cx = 155;
+ pmyListCtrl.InsertColumn(5,&lvc);
+
+ if (mysql_real_query(GetDocument()->DB,phones,strlen(phones))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Query error");
+ return;
+ }
+ if (!(Res = mysql_store_result(GetDocument()->DB))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Store error");
+ return;
+ }
+ while ((Row = mysql_fetch_row(Res))) {
+ index = pmyListCtrl.InsertItem(0,Row[0]); //ID
+ pmyListCtrl.SetItemText(index,1,Row[3]); //Sending
+ pmyListCtrl.SetItemText(index,2,Row[4]); //Receiving
+ pmyListCtrl.SetItemText(index,3,Row[5]); //IMEI
+ pmyListCtrl.SetItemText(index,4,DecodeDateTime(Row[1])); //Logged
+ pmyListCtrl.SetItemText(index,5,Row[6]); //Client
+ }
+ mysql_free_result(Res);
+ }
+ if (pStr=="Inbox") {
+ pmyListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
+
+ lvc.iSubItem = 0;
+// lvc.pszText = lpsz;
+ lvc.pszText = _T("ID");
+ lvc.cx = 70;
+ pmyListCtrl.InsertColumn(0,&lvc);
+
+ lvc.iSubItem = 1;
+ lvc.pszText = _T("From");
+ lvc.cx = 125;
+ pmyListCtrl.InsertColumn(1,&lvc);
+
+ lvc.iSubItem = 2;
+ lvc.pszText = _T("SMSC");
+ lvc.cx = 125;
+ pmyListCtrl.InsertColumn(2,&lvc);
+
+ lvc.iSubItem = 3;
+ lvc.pszText = _T("Class");
+ lvc.cx = 50;
+ pmyListCtrl.InsertColumn(3,&lvc);
+
+ lvc.iSubItem = 4;
+ lvc.pszText = _T("Receive Time");
+ lvc.cx = 125;
+ pmyListCtrl.InsertColumn(4,&lvc);
+
+ lvc.iSubItem = 5;
+ lvc.pszText = _T("Phone");
+ lvc.cx = 125;
+ pmyListCtrl.InsertColumn(5,&lvc);
+
+ if (mysql_real_query(GetDocument()->DB,inbox,strlen(inbox))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Query error");
+ return;
+ }
+ if (!(Res = mysql_store_result(GetDocument()->DB))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Store error");
+ return;
+ }
+ while ((Row = mysql_fetch_row(Res))) {
+ index = pmyListCtrl.InsertItem(0,Row[9]); //ID
+ pmyListCtrl.SetItemText(index,1,Row[3]); //From
+ pmyListCtrl.SetItemText(index,2,Row[6]); //SMSC
+ pmyListCtrl.SetItemText(index,3,Row[7]); //class
+ pmyListCtrl.SetItemText(index,4,DecodeDateTime(Row[1])); //receive time
+ pmyListCtrl.SetItemText(index,5,Row[10]); //phone
+ }
+ mysql_free_result(Res);
+ }
+ if (pStr=="Outbox") {
+ pmyListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
+
+ lvc.iSubItem = 0;
+ lvc.pszText = _T("ID");
+ lvc.cx = 70;
+ pmyListCtrl.InsertColumn(0,&lvc);
+
+ lvc.iSubItem = 1;
+ lvc.pszText = _T("To");
+ lvc.cx = 110;
+ pmyListCtrl.InsertColumn(1,&lvc);
+
+ lvc.iSubItem = 2;
+ lvc.pszText = _T("Time 2be sent");
+ lvc.cx = 125;
+ pmyListCtrl.InsertColumn(2,&lvc);
+
+ lvc.iSubItem = 3;
+ lvc.pszText = _T("Parts");
+ lvc.cx = 40;
+ pmyListCtrl.InsertColumn(3,&lvc);
+
+ lvc.iSubItem = 4;
+ lvc.pszText = _T("Validity");
+ lvc.cx = 50;
+ pmyListCtrl.InsertColumn(4,&lvc);
+
+ lvc.iSubItem = 5;
+ lvc.pszText = _T("Sending");
+ lvc.cx = 110;
+ pmyListCtrl.InsertColumn(5,&lvc);
+
+ lvc.iSubItem = 6;
+ lvc.pszText = _T("Phone");
+ lvc.cx = 100;
+ pmyListCtrl.InsertColumn(6,&lvc);
+
+ lvc.iSubItem = 6;
+ lvc.pszText = _T("Report");
+ lvc.cx = 52;
+ pmyListCtrl.InsertColumn(7,&lvc);
+
+ if (mysql_real_query(GetDocument()->DB,outbox,strlen(outbox))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Query error");
+ return;
+ }
+ if (!(Res = mysql_store_result(GetDocument()->DB))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Store error");
+ return;
+ }
+ while ((Row = mysql_fetch_row(Res))) {
+ index = pmyListCtrl.InsertItem(0,Row[8]);//ID
+ pmyListCtrl.SetItemText(index,1,Row[3]); //To
+ pmyListCtrl.SetItemText(index,2,DecodeDateTime(Row[11]));//Time2sent
+ if (!strcmp(Row[9],"false")) {
+ pmyListCtrl.SetItemText(index,3,"1"); //parts
+ } else {
+ counter = 1;
+ strcpy(something,outbox_multi);
+ sprintf(something+strlen(something),"%s",Row[8]);
+ if (mysql_real_query(GetDocument()->DB,something,strlen(something))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Query error");
+ return;
+ }
+ if (!(Res = mysql_store_result(GetDocument()->DB))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Store error");
+ return;
+ }
+ while ((Row = mysql_fetch_row(Res))) counter++;
+ mysql_free_result(Res);
+ sprintf(something,"%s",counter);
+ pmyListCtrl.SetItemText(index,3,something);
+ }
+ pmyListCtrl.SetItemText(index,4,DecodeValidity(Row[10]));//validity
+ pmyListCtrl.SetItemText(index,5,"a"); //sending
+ pmyListCtrl.SetItemText(index,6,Row[12]);//phone
+ pmyListCtrl.SetItemText(index,7,Row[14]);//report
+ }
+ mysql_free_result(Res);
+ }
+ if (pStr=="Sent items") {
+ pmyListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
+
+ lvc.iSubItem = 0;
+ lvc.pszText = _T("ID");
+ lvc.cx = 70;
+ pmyListCtrl.InsertColumn(0,&lvc);
+
+ lvc.iSubItem = 1;
+ lvc.pszText = _T("To");
+ lvc.cx = 125;
+ pmyListCtrl.InsertColumn(1,&lvc);
+
+ lvc.iSubItem = 2;
+ lvc.pszText = _T("SMSC");
+ lvc.cx = 125;
+ pmyListCtrl.InsertColumn(2,&lvc);
+
+ lvc.iSubItem = 3;
+ lvc.pszText = _T("Updated");
+ lvc.cx = 125;
+ pmyListCtrl.InsertColumn(3,&lvc);
+
+ lvc.iSubItem = 4;
+ lvc.pszText = _T("Phone");
+ lvc.cx = 150;
+ pmyListCtrl.InsertColumn(4,&lvc);
+
+ if (mysql_real_query(GetDocument()->DB,sent,strlen(sent))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Query error");
+ return;
+ }
+ if (!(Res = mysql_store_result(GetDocument()->DB))) {
+ MessageBox(mysql_error(GetDocument()->DB),"Store error");
+ return;
+ }
+ while ((Row = mysql_fetch_row(Res))) {
+ index = pmyListCtrl.InsertItem(0,Row[11]);//ID
+ pmyListCtrl.SetItemText(index,1,Row[5]); //To
+ pmyListCtrl.SetItemText(index,2,Row[8]); //SMSC
+ pmyListCtrl.SetItemText(index,3,DecodeDateTime(Row[0])); //updated
+ pmyListCtrl.SetItemText(index,4,Row[12]); //phone
+ }
+ mysql_free_result(Res);
+ }
+}
+
+CSplitListView::CSplitListView()
+{
+ m_dwDefaultStyle |= (LVS_REPORT);
+}
+
+void CSplitListView::OnInitialUpdate()
+{
+ CListView::OnInitialUpdate();
+}
+
+//--- child windows inside main frame
+
+class CChildFrame : public CMDIChildWnd
+{
+ DECLARE_DYNCREATE(CChildFrame)
+public:
+ virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
+ void CChildFrame::ActivateFrame(int nCmdShow);
+protected:
+ CSplitterWnd m_wndSplitter;
+ CSplitterWnd m_wndSplitter2;
+};
+
+IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)
+
+BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
+{
+ if (!m_wndSplitter.CreateStatic(this, 1, 2)) return FALSE;
+ if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSplitTreeView), CSize(130, 50), pContext)) return FALSE;
+
+ if (!m_wndSplitter2.CreateStatic(&m_wndSplitter, 2, 1, WS_CHILD | WS_VISIBLE | WS_BORDER, m_wndSplitter.IdFromRowCol(0, 1))) return FALSE;
+
+ int cyText = max(lpcs->cy - 70, 20);
+
+ if (!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CSplitListView), CSize(0, cyText), pContext)) return FALSE;
+ if (!m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CSplitEditView), CSize(0, 0), pContext)) return FALSE;
+
+ return TRUE;
+}
+
+void CChildFrame::ActivateFrame(int nCmdShow)
+{
+ nCmdShow = SW_MAXIMIZE;
+ CMDIChildWnd::ActivateFrame(nCmdShow);
+}
+
+//---- main frame
+
+static UINT BASED_CODE indicators[] =
+{
+ ID_SEPARATOR,
+ ID_MODEM1,
+ ID_MODEM2,
+ ID_MODEM3,
+ ID_MODEM4,
+ ID_INDICATOR_CAPS,
+ ID_INDICATOR_NUM,
+ ID_INDICATOR_SCRL
+};
+class CMainFrame:public CMDIFrameWnd
+{
+ DECLARE_DYNAMIC(CMainFrame)
+public:
+ void OnClickAbout() {
+ CAboutDlg aboutDlg;
+ aboutDlg.DoModal();
+ }
+ DECLARE_MESSAGE_MAP()
+protected:
+ CStatusBar StatusBar1;
+ afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct) {
+ if (!CreateMutex(NULL, false, "GammuSMSDGatewayMutex") || GetLastError()!=0) {
+ MessageBox("Application already run");
+ return -1;
+ }
+
+ if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;
+
+ StatusBar1.Create(this);
+ StatusBar1.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));
+
+ ASSERT((IDM_ABOUT & 0xFFF0) == IDM_ABOUT);
+ ASSERT(IDM_ABOUT < 0xF000);
+
+ CMenu* pSysMenu = GetSystemMenu(FALSE);
+ if (pSysMenu != NULL) {
+ CString strAboutMenu;
+ strAboutMenu.LoadString(IDS_ABOUT);
+ if (!strAboutMenu.IsEmpty()) {
+ pSysMenu->AppendMenu(MF_SEPARATOR);
+ pSysMenu->AppendMenu(MF_STRING, IDM_ABOUT, strAboutMenu);
+ }
+ }
+
+ return 0;
+ }
+ afx_msg void OnShowWindow(BOOL bShow, UINT nStatus) {
+ CMDIFrameWnd::OnShowWindow(bShow, nStatus);
+
+ ShowWindow(SW_MAXIMIZE);
+ }
+ afx_msg void OnSysCommand(UINT nID, LPARAM lParam) {
+ if ((nID & 0xFFF0) == IDM_ABOUT) {
+ OnClickAbout();
+ } else {
+ CMDIFrameWnd::OnSysCommand(nID, lParam);
+ }
+ }
+};
+
+IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
+
+BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
+ ON_WM_CREATE()
+ ON_WM_SHOWWINDOW()
+ ON_WM_SYSCOMMAND()
+ ON_COMMAND(ID_HELP_ABOUT,OnClickAbout)
+END_MESSAGE_MAP()
+
+//-- application
+
+class CMyApp:public CWinApp
+{
+public:
+ BOOL InitInstance() {
+ CMultiDocTemplate* pDocTemplate;
+ CMDIFrameWnd* pMainFrame;
+
+ setlocale(LC_ALL, ".ACP");
+
+ InitCommonControls();
+
+ pDocTemplate = new CMultiDocTemplate(IDR_MAIN,
+ RUNTIME_CLASS(CMultiDoc),
+ RUNTIME_CLASS(CChildFrame),
+ RUNTIME_CLASS(CSplitTreeView));
+ if (!pDocTemplate) return FALSE;
+ AddDocTemplate(pDocTemplate);
+
+ pMainFrame = new CMainFrame;
+ if (pMainFrame==NULL) return FALSE;
+ if (!pMainFrame->LoadFrame(IDR_EMPTY)) return FALSE;
+ pMainFrame->ShowWindow(m_nCmdShow);
+ pMainFrame->UpdateWindow();
+ m_pMainWnd = pMainFrame;
+
+ MainHWND = m_pMainWnd->m_hWnd;
+
+ mysql_init(&MainDB);
+
+ return TRUE;
+ }
+ void OnClickExit() {
+ exit(0);
+ }
+ void OnClickNew() {
+ CLogUserDlg dlg;
+ if (dlg.DoModal()!=IDOK) return;
+
+ _tcscpy(server, dlg.IP);
+ _tcscpy(user, dlg.User);
+ _tcscpy(password, dlg.Pass);
+
+ CWinApp::OnFileNew();
+ }
+ void OnClickSendSMS() {
+ CSendSMSDlg dlg;
+ dlg.DoModal();
+ }
+ void OnClickConfig() {
+ CConfigDlg dlg;
+ dlg.DoModal();
+ }
+ void OnClickPbk() {
+ CEditPbkDlg dlg;
+ dlg.DoModal();
+ }
+ DECLARE_MESSAGE_MAP()
+};
+
+BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
+ ON_COMMAND(ID_FILE_EXIT,OnClickExit)
+ ON_COMMAND(ID_FILE_NEW,OnClickNew)
+ ON_COMMAND(ID_TOOLS_SENDSMS,OnClickSendSMS)
+ ON_COMMAND(ID_TOOLS_CONFIG,OnClickConfig)
+ ON_COMMAND(ID_TOOLS_PHONEBOOK,OnClickPbk)
+END_MESSAGE_MAP()
+
+CMyApp theApp;
diff --git a/contrib/win32/smsd_mfc/mgui.sln b/contrib/win32/smsd_mfc/mgui.sln
new file mode 100644
index 0000000..5295f68
--- /dev/null
+++ b/contrib/win32/smsd_mfc/mgui.sln
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mgui", "mgui.vcproj", "{91F28A42-21CE-4C00-B6BD-083D8FA109B0}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {91F28A42-21CE-4C00-B6BD-083D8FA109B0}.Debug.ActiveCfg = Debug|Win32
+ {91F28A42-21CE-4C00-B6BD-083D8FA109B0}.Debug.Build.0 = Debug|Win32
+ {91F28A42-21CE-4C00-B6BD-083D8FA109B0}.Release.ActiveCfg = Release|Win32
+ {91F28A42-21CE-4C00-B6BD-083D8FA109B0}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/contrib/win32/smsd_mfc/mgui.vcproj b/contrib/win32/smsd_mfc/mgui.vcproj
new file mode 100644
index 0000000..3ee207f
--- /dev/null
+++ b/contrib/win32/smsd_mfc/mgui.vcproj
@@ -0,0 +1,564 @@
+<?xml version="1.0" encoding="windows-1250"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="mgui"
+ ProjectGUID="{91F28A42-21CE-4C00-B6BD-083D8FA109B0}"
+ RootNamespace="mgui"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ UseOfMFC="1"
+ UseOfATL="0"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ AdditionalIncludeDirectories="..\..\..\include"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="TRUE"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/FORCE:MULTIPLE"
+ OutputFile="$(OutDir)/mgui.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/mgui.pdb"
+ SubSystem="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ UseOfMFC="1"
+ UseOfATL="0"
+ CharacterSet="2"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/FORCE:MULTIPLE
+"
+ ShowProgress="0"
+ OutputFile="$(OutDir)/mgui.exe"
+ LinkIncremental="1"
+ IgnoreAllDefaultLibraries="FALSE"
+ IgnoreDefaultLibraryNames=""
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\..\common\phone\nokia\dct4s40\6510\6510cal.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct4s40\6510\6510file.c">
+ </File>
+ <File
+ RelativePath=".\about.cpp">
+ </File>
+ <File
+ RelativePath="..\..\common\device\bluetooth\affix.c">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\alcatel\alcabus.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\alcatel\alcatel.c">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\at\at.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\at\atgen.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backics.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backldif.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backlmb.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backtext.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backvcf.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backvcs.c">
+ </File>
+ <File
+ RelativePath="..\..\common\device\bluetooth\blue_w32.c">
+ </File>
+ <File
+ RelativePath="..\..\common\device\bluetooth\bluetooth.c">
+ </File>
+ <File
+ RelativePath="..\..\common\device\bluetooth\bluez.c">
+ </File>
+ <File
+ RelativePath="..\..\common\misc\cfg.c">
+ </File>
+ <File
+ RelativePath="..\..\common\misc\coding\coding.c">
+ </File>
+ <File
+ RelativePath=".\config.cpp">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct3\dct3func.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct4s40\dct4func.c">
+ </File>
+ <File
+ RelativePath="..\..\common\device\devfunc.c">
+ </File>
+ <File
+ RelativePath=".\editpbk.cpp">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\nokia\fbus2.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\gsmback.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmcal.c">
+ </File>
+ <File
+ RelativePath="..\..\common\gsmcomon.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmdata.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\sms\gsmems.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmlogo.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmmisc.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\sms\gsmmulti.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmnet.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmpbk.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmring.c">
+ </File>
+ <File
+ RelativePath="..\..\common\service\sms\gsmsms.c">
+ </File>
+ <File
+ RelativePath="..\..\common\gsmstate.c">
+ </File>
+ <File
+ RelativePath="..\..\common\device\irda\irda.c">
+ </File>
+ <File
+ RelativePath=".\loguser.cpp">
+ </File>
+ <File
+ RelativePath=".\main.cpp">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\nokia\mbus2.c">
+ </File>
+ <File
+ RelativePath="..\..\common\misc\coding\md5.c">
+ </File>
+ <File
+ RelativePath="..\..\common\misc\misc.c">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\symbian\gnapbus.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\symbian\gnapgen.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct3\n0650.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct4s40\n3320.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\wd2\n3650.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct3\n6110.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct4s40\6510\n6510.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct3\n7110.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct3\n9210.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\nauto.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\nfunc.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\nfuncold.c">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\obex\obex.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\obex\obexgen.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\pfunc.c">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\nokia\phonet.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\at\samsung.c">
+ </File>
+ <File
+ RelativePath=".\sendsms.cpp">
+ </File>
+ <File
+ RelativePath="..\..\common\device\serial\ser_w32.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\at\siemens.c">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\sonyeric\sonyeric.c">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath="..\..\common\phone\nokia\dct4s40\6510\6510cal.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct4s40\6510\6510file.h">
+ </File>
+ <File
+ RelativePath=".\about.h">
+ </File>
+ <File
+ RelativePath="..\..\common\device\bluetooth\affix.h">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\alcatel\alcabus.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\alcatel\alcatel.h">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\at\at.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\at\atgen.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backics.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backldif.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backlmb.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backtext.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backvcf.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\backvcs.h">
+ </File>
+ <File
+ RelativePath="..\..\common\device\bluetooth\blue_w32.h">
+ </File>
+ <File
+ RelativePath="..\..\common\device\bluetooth\bluetooth.h">
+ </File>
+ <File
+ RelativePath="..\..\common\device\bluetooth\bluez.h">
+ </File>
+ <File
+ RelativePath="..\..\common\misc\cfg.h">
+ </File>
+ <File
+ RelativePath="..\..\common\misc\coding\coding.h">
+ </File>
+ <File
+ RelativePath="..\..\common\misc\coding\coding.h">
+ </File>
+ <File
+ RelativePath=".\common.h">
+ </File>
+ <File
+ RelativePath=".\config.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct3\dct3func.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct4s40\dct4func.h">
+ </File>
+ <File
+ RelativePath="..\..\common\device\devfunc.h">
+ </File>
+ <File
+ RelativePath=".\editpbk.h">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\nokia\fbus2.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\backup\gsmback.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmcal.h">
+ </File>
+ <File
+ RelativePath="..\..\common\gsmcomon.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmdata.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\sms\gsmems.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmlogo.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmmisc.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\sms\gsmmulti.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmnet.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmpbk.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmprof.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\gsmring.h">
+ </File>
+ <File
+ RelativePath="..\..\common\service\sms\gsmsms.h">
+ </File>
+ <File
+ RelativePath="..\..\common\gsmstate.h">
+ </File>
+ <File
+ RelativePath="..\..\common\device\irda\irda.h">
+ </File>
+ <File
+ RelativePath="..\..\common\device\irda\irda_w32.h">
+ </File>
+ <File
+ RelativePath=".\loguser.h">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\nokia\mbus2.h">
+ </File>
+ <File
+ RelativePath="..\..\common\misc\misc.h">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\symbian\gnapbus.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\symbian\gnapgen.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct3\n0650.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct4s40\n3320.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\wd2\n3650.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct3\n6110.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct4s40\6510\n6510.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct3\n7110.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\dct3\n9210.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\ncommon.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\nfunc.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\nokia\nfuncold.h">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\obex\obex.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\obex\obexgen.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\pcommon.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\pfunc.h">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\nokia\phonet.h">
+ </File>
+ <File
+ RelativePath="..\..\common\protocol\protocol.h">
+ </File>
+ <File
+ RelativePath=".\resource.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\at\samsung.h">
+ </File>
+ <File
+ RelativePath=".\sendsms.h">
+ </File>
+ <File
+ RelativePath="..\..\common\device\serial\ser_w32.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\at\siemens.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\sonyeric\sonyeric.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\sonyeric\sefunc.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\at\atfunc.h">
+ </File>
+ <File
+ RelativePath="..\..\common\phone\obex\obexfunc.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ <File
+ RelativePath=".\mgui.rc">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ <Global
+ Name="RESOURCE_FILE"
+ Value="mgui.rc"/>
+ </Globals>
+</VisualStudioProject>
diff --git a/contrib/win32/smsd_mfc/sendsms.cpp b/contrib/win32/smsd_mfc/sendsms.cpp
new file mode 100644
index 0000000..bbe94ac
--- /dev/null
+++ b/contrib/win32/smsd_mfc/sendsms.cpp
@@ -0,0 +1,91 @@
+
+#include "common.h"
+
+#include <afxwin.h>
+#include <afxext.h>
+#include <afxcview.h>
+
+#include "../../common/service/sms/gsmsms.h"
+#include "../../common/service/sms/gsmmulti.h"
+#include "../../common/misc/coding/coding.h"
+
+#include "resource.h"
+#include "sendsms.h"
+
+const CString Validity[] = {
+ "default (taken from sending phone)",
+ "5 minutes",
+ "10 minutes",
+ "max. time",
+ ""};
+
+const CString Report[] = {
+ "default (depends on sending daemon)",
+ "yes",
+ "no",
+ ""};
+
+CSendSMSDlg::CSendSMSDlg() : CDialog(CSendSMSDlg::IDD)
+{
+}
+
+void CSendSMSDlg::DoDataExchange(CDataExchange* pDX)
+{
+ CDialog::DoDataExchange(pDX);
+
+ DDX_Text(pDX, IDC_EDIT1, Text);
+ DDX_Control(pDX, IDC_COMBO1, ValidityBox);
+ DDX_Control(pDX, IDC_COMBO2, SendingPhoneBox);
+ DDX_Control(pDX, IDC_COMBO3, ReportBox);
+}
+
+void CSendSMSDlg::OnEnChangeEdit1()
+{
+ char *text[20000];
+ char *text2[41000];
+ int SMSNum, int CharsLeft;
+ char buf[1000];
+
+ UpdateData(TRUE);
+
+ _tcscpy((char *)text, Text);
+
+ EncodeUnicode((unsigned char *)text2,(unsigned char *)text,Text.GetLength());
+
+ GSM_SMSCounter(Text.GetLength(),(unsigned char *)text2,UDH_NoUDH,SMS_Coding_Default_No_Compression,&SMSNum,&CharsLeft);
+ if (SMSNum > 1) {
+ GSM_SMSCounter(Text.GetLength(),(unsigned char *)text2,UDH_ConcatenatedMessages,SMS_Coding_Default_No_Compression,&SMSNum,&CharsLeft);
+ }
+
+ sprintf(buf,"SMS text (%i chars left/%i SMS)",CharsLeft,SMSNum);
+ GetDlgItem(IDC_STATIC2)->SetWindowText(buf);
+}
+
+void CSendSMSDlg::OnShowWindow(BOOL bShow, UINT nStatus)
+{
+ CDialog::OnShowWindow(bShow, nStatus);
+
+ int i = 0;
+ while (Validity[i]!="") {
+ ValidityBox.AddString(Validity[i]);
+ i++;
+ }
+ ValidityBox.SetCurSel(0);
+
+ i = 0;
+ while (Report[i]!="") {
+ ReportBox.AddString(Report[i]);
+ i++;
+ }
+ ReportBox.SetCurSel(0);
+
+ SendingPhoneBox.AddString("any phone");
+ SendingPhoneBox.SetCurSel(0);
+
+ GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
+}
+
+BEGIN_MESSAGE_MAP(CSendSMSDlg, CDialog)
+ ON_WM_SHOWWINDOW()
+ ON_EN_CHANGE(IDC_EDIT1, OnEnChangeEdit1)
+END_MESSAGE_MAP()
diff --git a/contrib/win32/smsd_mfc/sendsms.h b/contrib/win32/smsd_mfc/sendsms.h
new file mode 100644
index 0000000..c51dbf0
--- /dev/null
+++ b/contrib/win32/smsd_mfc/sendsms.h
@@ -0,0 +1,21 @@
+#include <afxwin.h>
+#include <afxext.h>
+#include <afxcview.h>
+
+#include "resource.h"
+
+class CSendSMSDlg : public CDialog
+{
+public:
+ CString Text;
+ CComboBox ValidityBox;
+ CComboBox SendingPhoneBox;
+ CComboBox ReportBox;
+ enum {IDD = IDD_SENDSMS};
+ CSendSMSDlg();
+ afx_msg void OnEnChangeEdit1();
+ afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
+protected:
+ DECLARE_MESSAGE_MAP()
+ virtual void DoDataExchange(CDataExchange* pDX);
+};