summaryrefslogtreecommitdiff
path: root/protocols/FacebookRM/src/captcha.cpp
diff options
context:
space:
mode:
authorRobert Pösel <robyer@seznam.cz>2014-08-24 15:46:24 +0000
committerRobert Pösel <robyer@seznam.cz>2014-08-24 15:46:24 +0000
commit9afd590f4fd860d3d023203137129c8870bb8579 (patch)
treea8cb541e41f5b72bfde3309e0a9f46794151a104 /protocols/FacebookRM/src/captcha.cpp
parentaa28fe4f758a20680b63d0bda40207548ab93fdb (diff)
Facebook: Support for showing captcha codes; Raise version bump from previous commit
git-svn-id: http://svn.miranda-ng.org/main/trunk@10319 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/FacebookRM/src/captcha.cpp')
-rw-r--r--protocols/FacebookRM/src/captcha.cpp144
1 files changed, 144 insertions, 0 deletions
diff --git a/protocols/FacebookRM/src/captcha.cpp b/protocols/FacebookRM/src/captcha.cpp
new file mode 100644
index 0000000000..3abec878f7
--- /dev/null
+++ b/protocols/FacebookRM/src/captcha.cpp
@@ -0,0 +1,144 @@
+/*
+
+Facebook plugin for Miranda Instant Messenger
+_____________________________________________
+
+Copyright © 2014 Robert Pösel
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "common.h"
+#include "resource.h"
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// Captcha form
+
+struct CAPTCHA_FORM_PARAMS
+{
+ HBITMAP bmp;
+ int w,h;
+ char Result[100];
+};
+
+static INT_PTR CALLBACK CaptchaFormDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ CAPTCHA_FORM_PARAMS *params = (CAPTCHA_FORM_PARAMS*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+ switch (msg) {
+ case WM_INITDIALOG: {
+ TranslateDialogDefault(hwndDlg);
+ SendMessage(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)Skin_GetIconByHandle( GetIconHandle("key"), TRUE));
+ SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM)Skin_GetIconByHandle( GetIconHandle("key")));
+ params = (CAPTCHA_FORM_PARAMS*)lParam;
+
+ SetDlgItemText(hwndDlg, IDC_INSTRUCTION, TranslateT("Enter the text you see"));
+ SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)params);
+
+ return TRUE;
+ }
+ case WM_CTLCOLORSTATIC:
+ switch(GetWindowLongPtr((HWND)lParam, GWL_ID)) {
+ case IDC_WHITERECT:
+ case IDC_INSTRUCTION:
+ case IDC_TITLE:
+ return (BOOL)GetStockObject(WHITE_BRUSH);
+ }
+ return NULL;
+
+ case WM_PAINT:
+ if (params) {
+ PAINTSTRUCT ps;
+ HDC hdc, hdcMem;
+ RECT rc;
+
+ GetClientRect(hwndDlg, &rc);
+ hdc = BeginPaint(hwndDlg, &ps);
+ hdcMem = CreateCompatibleDC(hdc);
+ HGDIOBJ hOld = SelectObject(hdcMem, params->bmp);
+
+ int y = (rc.bottom + rc.top - params->h) / 2;
+ int x = (rc.right + rc.left - params->w) / 2;
+ BitBlt(hdc, x, y, params->w, params->h, hdcMem, 0,0, SRCCOPY);
+ SelectObject(hdcMem, hOld);
+ DeleteDC(hdcMem);
+
+ EndPaint(hwndDlg, &ps);
+ }
+ break;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam)) {
+ case IDCANCEL:
+ EndDialog(hwndDlg, 0);
+ return TRUE;
+
+ case IDOK:
+ GetDlgItemTextA(hwndDlg, IDC_VALUE, params->Result, SIZEOF(params->Result));
+ EndDialog(hwndDlg, 1);
+ return TRUE;
+ }
+ break;
+
+ case WM_CLOSE:
+ EndDialog(hwndDlg, 0);
+ break;
+
+ case WM_DESTROY:
+ Skin_ReleaseIcon((HICON)SendMessage(hwndDlg, WM_SETICON, ICON_BIG, 0));
+ Skin_ReleaseIcon((HICON)SendMessage(hwndDlg, WM_SETICON, ICON_SMALL, 0));
+ break;
+ }
+ return FALSE;
+}
+
+bool FacebookProto::RunCaptchaForm(std::string captchaUrl, std::string &result)
+{
+ debugLogA("RunCaptchaForm: reading picture from %s", captchaUrl.c_str());
+ result = "";
+
+ NETLIBHTTPREQUEST req = { sizeof(req) };
+ req.requestType = REQUEST_GET;
+ req.szUrl = (char*)captchaUrl.c_str();
+ req.flags = NLHRF_NODUMPHEADERS;
+
+ NETLIBHTTPREQUEST *reply = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)m_hNetlibUser, (LPARAM)&req);
+ if (reply == NULL)
+ return false;
+
+ if (reply->resultCode != HTTP_CODE_OK) {
+ debugLogA("RunCaptchaForm: failed with code %d", reply->resultCode);
+ return false;
+ }
+
+ CAPTCHA_FORM_PARAMS param = { 0 };
+
+ IMGSRVC_MEMIO memio = { 0 };
+ memio.iLen = reply->dataLength;
+ memio.pBuf = reply->pData;
+ memio.fif = FIF_UNKNOWN; /* detect */
+ param.bmp = (HBITMAP)CallService(MS_IMG_LOADFROMMEM, (WPARAM)&memio, 0);
+
+ BITMAP bmp = {0};
+ GetObject(param.bmp, sizeof(bmp), &bmp);
+ param.w = bmp.bmWidth;
+ param.h = bmp.bmHeight;
+ int res = DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_CAPTCHAFORM), NULL, CaptchaFormDlgProc, (LPARAM)&param);
+ if (res == 0)
+ return false;
+
+ debugLogA("RunCaptchaForm: user entered text %s", param.Result);
+ result = param.Result;
+ return true;
+}