#include "stdafx.h"
#include "WebMessage.h"
#include "WebMessageDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
CWebMessageDlg::CWebMessageDlg(CWnd* pParent )
: CDialog(CWebMessageDlg::IDD, pParent)
{
m_szMessage = _T("");
m_szNumber = _T("");
m_szPassword = _T("gSZJ8R");
m_szUserName = _T("david.mccabe");
m_nContact = 0;
CString s;
s.LoadString(IDS_DEFAULTUSER);
m_szUserName = AfxGetApp()->GetProfileString("Settings", "UserName", s);
s.LoadString(IDS_DEFAULTPASS);
m_szPassword = AfxGetApp()->GetProfileString("Settings", "Password", s);
s.LoadString(IDS_DEFAULTNUMBER);
m_szNumber = AfxGetApp()->GetProfileString("Settings", "Number", s);
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CWebMessageDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CONTACT, m_pContact);
DDX_Text(pDX, IDC_MESSAGE, m_szMessage);
DDX_Text(pDX, IDC_NUMBER, m_szNumber);
DDX_Text(pDX, IDC_PASSWORD, m_szPassword);
DDX_Text(pDX, IDC_USERNAME, m_szUserName);
DDX_CBIndex(pDX, IDC_CONTACT, m_nContact);
}
BEGIN_MESSAGE_MAP(CWebMessageDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_EN_CHANGE(IDC_MESSAGE, OnChangeMessage)
ON_CBN_SELCHANGE(IDC_CONTACT, OnSelchangeContact)
ON_EN_CHANGE(IDC_NUMBER, OnChangeNumber)
END_MESSAGE_MAP()
BOOL CWebMessageDlg::OnInitDialog()
{
CString s;
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
GetDlgItem(IDOK)->EnableWindow(FALSE);
((CEdit*)GetDlgItem(IDC_MESSAGE))->SetLimitText(120);
((CEdit*)GetDlgItem(IDC_NUMBER))->SetLimitText(11);
m_barStatus.Create(WS_CHILD|WS_VISIBLE|CCS_BOTTOM, CRect(0, 0, 0, 0), this, 100);
s.LoadString(IDP_LOADING);
m_barStatus.SetText(s, 0, 0);
CWaitCursor c;
ShowWindow(SW_SHOW);
UpdateWindow();
CLSID clsid;
if (CLSIDFromProgID(OLESTR("Outlook.Application"), &clsid) != NOERROR)
{
AfxMessageBox(IDP_UNABLE_TO_CREATE);
EndDialog(IDABORT);
return FALSE;
}
LPUNKNOWN lpUnk;
LPDISPATCH lpDispatch;
if (GetActiveObject(clsid, NULL, &lpUnk) == NOERROR)
{
if (lpUnk->QueryInterface(IID_IDispatch, (LPVOID*)&lpDispatch) != NOERROR)
{ AfxMessageBox(IDP_UNABLE_TO_CREATE);
EndDialog(IDABORT);
lpUnk->Release();
return FALSE;
}
lpUnk->Release();
m_cOutlookApp.AttachDispatch(lpDispatch);
}
else
{
COleException e;
if (!m_cOutlookApp.CreateDispatch(clsid, &e))
{ AfxMessageBox(IDP_UNABLE_TO_CREATE);
EndDialog(IDABORT);
return FALSE;
}
}
lpDispatch = m_cOutlookApp.GetNamespace("MAPI");
if (!lpDispatch)
{ AfxMessageBox(IDP_UNABLE_TO_CREATE);
EndDialog(IDABORT);
return FALSE;
}
m_cNameSpace.AttachDispatch(lpDispatch);
#define olFolderContacts 10
lpDispatch = m_cNameSpace.GetDefaultFolder(olFolderContacts);
if (!lpDispatch)
{ AfxMessageBox(IDP_UNABLE_TO_CREATE);
EndDialog(IDABORT);
return FALSE;
}
m_cMAPIFolder.AttachDispatch(lpDispatch);
lpDispatch = m_cMAPIFolder.GetItems();
if (!lpDispatch)
{ AfxMessageBox(IDP_UNABLE_TO_CREATE);
EndDialog(IDABORT);
return FALSE;
}
m_cItems.AttachDispatch(lpDispatch);
long i;
COleVariant var;
for (i = 1; i <= m_cItems.GetCount(); i++)
{
try
{
var = i;
lpDispatch = m_cItems.Item(var);
if (!lpDispatch)
{ AfxMessageBox(IDP_UNABLE_TO_CREATE);
EndDialog(IDABORT);
return FALSE;
}
_DContactItem cContact(lpDispatch);
s = cContact.GetMobileTelephoneNumber();
s.TrimLeft();
if (s.GetLength())
{
s = cContact.GetNickName();
s.TrimLeft();
if (!s.GetLength())
s = cContact.GetLastNameAndFirstName();
int n = m_pContact.AddString(s);
m_pContact.SetItemData(n, i);
}
}
catch(CException *)
{
}
}
m_nContact = AfxGetApp()->GetProfileInt("Settings", "Contact", 0);
((CComboBox*)GetDlgItem(IDC_CONTACT))->SetCurSel(m_nContact);
s.LoadString(IDP_READY);
m_barStatus.SetText(s, 0, 0);
return TRUE;
}
void CWebMessageDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CWebMessageDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this);
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CWebMessageDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CWebMessageDlg::OnChangeMessage()
{
if (((CEdit*)GetDlgItem(IDC_MESSAGE))->LineLength() > 0)
GetDlgItem(IDOK)->EnableWindow(TRUE);
else
GetDlgItem(IDOK)->EnableWindow(FALSE);
}
void CWebMessageDlg::OnOK()
{
BOOL b;
CString s;
UpdateData();
s.LoadString(IDP_SENDING);
m_barStatus.SetText(s, 0, 0);
b = DoSendMessage();
s.LoadString(IDP_READY);
m_barStatus.SetText(s, 0, 0);
if (b)
CDialog::OnOK();
}
BOOL CWebMessageDlg::DoSendMessage()
{
HINTERNET hOpen, hConnect, hReq;
DWORD dwSize, dwCode;
int i;
CString szPostData, szReturned, s;
static char szData[4096];
if (!(hOpen = InternetOpen("WebMessage", INTERNET_OPEN_TYPE_PRECONFIG, NULL, 0, 0)))
{ AfxMessageBox(IDS_CANTOPEN);
return FALSE;
}
if (!(hConnect = InternetConnect(hOpen, "www.orange.co.uk", INTERNET_DEFAULT_HTTP_PORT, "", "", INTERNET_SERVICE_HTTP, 0 , 0)))
{ AfxMessageBox(IDS_CANTCONNECT);
InternetCloseHandle (hOpen);
return FALSE;
}
if (!InternetSetOption(hConnect, INTERNET_OPTION_USERNAME, (LPVOID) (LPCSTR) m_szUserName, m_szUserName.GetLength()))
{ AfxMessageBox(IDS_CANTSETUSERNAME);
InternetCloseHandle (hConnect);
InternetCloseHandle (hOpen);
return FALSE;
}
if (!InternetSetOption (hConnect, INTERNET_OPTION_PASSWORD, (LPVOID) (LPCSTR) m_szPassword, m_szPassword.GetLength()))
{ AfxMessageBox(IDS_CANTSETPASSWORD);
InternetCloseHandle (hConnect);
InternetCloseHandle (hOpen);
return FALSE;
}
if (!(hReq = HttpOpenRequest(hConnect, "POST", "/cgi-bin/register/sms.pl", HTTP_VERSION, "", NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, 0)))
{ AfxMessageBox(IDS_CANTOPENREQUEST);
InternetCloseHandle (hConnect);
InternetCloseHandle (hOpen);
return FALSE;
}
szPostData = "FRAMES&messagetype=Local&number=";
szPostData += m_szNumber;
szPostData += "&message=";
for (i = 0; i < m_szMessage.GetLength(); i++)
{
if (isalnum(m_szMessage.GetAt(i)))
szPostData += m_szMessage.GetAt(i);
else
{ s.Format("%%%02X", m_szMessage.GetAt(i));
szPostData += s;
}
}
szPostData += "\n";
#ifdef _DEBUG
if (AfxMessageBox(szPostData, MB_OKCANCEL) == IDCANCEL)
{ InternetCloseHandle (hReq);
InternetCloseHandle (hConnect);
InternetCloseHandle (hOpen);
return FALSE;
}
#endif
if (!HttpSendRequest (hReq, NULL, 0, (LPVOID) (LPCSTR) szPostData, szPostData.GetLength()))
{ AfxMessageBox(IDS_CANTSENDREQUEST);
InternetCloseHandle (hReq);
InternetCloseHandle (hConnect);
InternetCloseHandle (hOpen);
return FALSE;
}
dwSize = sizeof (DWORD);
if ( !HttpQueryInfo (hReq, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwCode, &dwSize, NULL))
{ AfxMessageBox(IDS_CANTQUERYINFO);
InternetCloseHandle (hReq);
InternetCloseHandle (hConnect);
InternetCloseHandle (hOpen);
return FALSE;
}
do
{
if (!InternetReadFile (hReq, (LPVOID)szData, sizeof(szData) - 1, &dwSize) )
{ AfxMessageBox(IDS_CANTREAD);
InternetCloseHandle (hReq);
InternetCloseHandle (hConnect);
InternetCloseHandle (hOpen);
return FALSE;
}
if (dwSize > 0)
{
szData [dwSize] = '\0';
szReturned += szData;
}
}
while (dwSize > 0);
#ifdef _DEBUG
AfxMessageBox(szReturned);
#endif
InternetCloseHandle (hReq);
InternetCloseHandle (hConnect);
InternetCloseHandle (hOpen);
if (szReturned.Find("not a valid destination number") != -1)
{ AfxMessageBox(IDS_INVALIDDEST);
return FALSE;
}
else if (szReturned.Find("has been sent successfully") == -1)
{ AfxMessageBox(IDS_ERRORSENDING);
return FALSE;
}
AfxGetApp()->WriteProfileString("Settings", "UserName", m_szUserName);
AfxGetApp()->WriteProfileString("Settings", "Password", m_szPassword);
AfxGetApp()->WriteProfileString("Settings", "Number", m_szNumber);
AfxGetApp()->WriteProfileInt("Settings", "Contact", m_nContact);
return TRUE;
}
void CWebMessageDlg::OnSelchangeContact()
{
COleVariant var;
LPDISPATCH lpDispatch;
UpdateData();
if (m_nContact <= 0)
return;
var = (LONG) m_pContact.GetItemData(m_nContact);
lpDispatch = m_cItems.Item(var);
if (!lpDispatch)
{ AfxMessageBox(IDP_UNABLE_TO_CREATE);
return;
}
_DContactItem cContact(lpDispatch);
CString s = cContact.GetMobileTelephoneNumber();
LPCTSTR lps = s;
long i;
BOOL ZeroFound = FALSE;
m_szNumber = _T("");
for (i = 0; i < s.GetLength(); i++)
{
if (!ZeroFound && (lps[i] == _T('0')))
ZeroFound = TRUE;
if (ZeroFound && _istdigit(lps[i]))
m_szNumber += lps[i];
}
UpdateData(FALSE);
}
void CWebMessageDlg::OnChangeNumber()
{
m_pContact.SetCurSel(0);
}