summaryrefslogtreecommitdiff
path: root/protocols/JabberG
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/JabberG')
-rw-r--r--protocols/JabberG/src/jabber_agent.cpp58
-rwxr-xr-xprotocols/JabberG/src/jabber_iqid.cpp24
-rwxr-xr-xprotocols/JabberG/src/jabber_opt.cpp35
-rwxr-xr-xprotocols/JabberG/src/jabber_proto.cpp2
-rwxr-xr-xprotocols/JabberG/src/jabber_proto.h13
-rwxr-xr-xprotocols/JabberG/src/jabber_thread.cpp23
-rwxr-xr-xprotocols/JabberG/src/stdafx.h4
7 files changed, 82 insertions, 77 deletions
diff --git a/protocols/JabberG/src/jabber_agent.cpp b/protocols/JabberG/src/jabber_agent.cpp
index de17dc3bab..7d7badaeec 100644
--- a/protocols/JabberG/src/jabber_agent.cpp
+++ b/protocols/JabberG/src/jabber_agent.cpp
@@ -43,7 +43,7 @@ public:
bool OnInitDialog() override
{
- m_proto->m_hwndRegProgress = m_hwnd;
+ m_proto->m_pDlgReg = this;
SetWindowText(m_hwnd, TranslateT("Jabber Agent Registration"));
TranslateDialogDefault(m_hwnd);
return true;
@@ -51,27 +51,49 @@ public:
void OnDestroy() override
{
- m_proto->m_hwndRegProgress = nullptr;
+ m_proto->m_pDlgReg = nullptr;
}
- INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override
+ void Update(int progress, const wchar_t *pwszText)
{
- if (msg == WM_JABBER_REGDLG_UPDATE) {
- if ((wchar_t*)lParam == nullptr)
- SetDlgItemText(m_hwnd, IDC_REG_STATUS, TranslateT("No message"));
- else
- SetDlgItemText(m_hwnd, IDC_REG_STATUS, (wchar_t*)lParam);
-
- SendDlgItemMessage(m_hwnd, IDC_PROGRESS_REG, PBM_SETPOS, wParam, 0);
+ if (this == nullptr)
+ return;
- if (wParam >= 100)
- m_ok.SetText(TranslateT("OK"));
- }
+ SetDlgItemText(m_hwnd, IDC_REG_STATUS, pwszText);
+ SendDlgItemMessage(m_hwnd, IDC_PROGRESS_REG, PBM_SETPOS, progress, 0);
- return CJabberDlgBase::DlgProc(msg, wParam, lParam);
+ if (progress >= 100)
+ m_ok.SetText(TranslateT("OK"));
}
};
+void CJabberProto::AgentShutdown()
+{
+ UI_SAFE_CLOSE(m_pDlgReg);
+}
+
+void CJabberProto::OnIqAgentRegister(const TiXmlElement *iqNode, CJabberIqInfo *)
+{
+ // RECVED: result of registration process
+ // ACTION: notify of successful agent registration
+ debugLogA("<iq/> iqIdSetRegister");
+
+ const char *type, *from;
+ if ((type = XmlGetAttr(iqNode, "type")) == nullptr) return;
+ if ((from = XmlGetAttr(iqNode, "from")) == nullptr) return;
+
+ if (!mir_strcmp(type, "result")) {
+ MCONTACT hContact = HContactFromJID(from);
+ if (hContact != 0)
+ setByte(hContact, "IsTransport", true);
+
+ m_pDlgReg->Update(100, TranslateT("Registration successful"));
+ }
+ else if (!mir_strcmp(type, "error")) {
+ m_pDlgReg->Update(100, JabberErrorMsg(iqNode).c_str());
+ }
+}
+
/////////////////////////////////////////////////////////////////////////////////////////
// Transport registration form
@@ -127,10 +149,9 @@ public:
return true;
HWND hwndFrame = GetDlgItem(m_hwnd, IDC_FRAME);
- wchar_t *str2 = (wchar_t *)alloca(sizeof(wchar_t) * 128);
int id = 0;
- XmlNodeIq iq(m_proto->AddIQ(&CJabberProto::OnIqResultSetRegister, JABBER_IQ_TYPE_SET, from));
+ XmlNodeIq iq(m_proto->AddIQ(&CJabberProto::OnIqAgentRegister, JABBER_IQ_TYPE_SET, from));
TiXmlElement *query = iq << XQUERY(JABBER_FEAT_REGISTER);
if (auto *xNode = XmlFirstChild(queryNode, "x")) {
@@ -153,8 +174,9 @@ public:
// do nothing, we will skip these
}
else {
- GetDlgItemText(hwndFrame, id, str2, 128);
- XmlAddChildA(query, pszName, T2Utf(str2).get());
+ wchar_t str[128];
+ GetDlgItemText(hwndFrame, id, str, _countof(str));
+ XmlAddChildA(query, pszName, T2Utf(str).get());
id++;
}
}
diff --git a/protocols/JabberG/src/jabber_iqid.cpp b/protocols/JabberG/src/jabber_iqid.cpp
index c6e0432206..39c695f69d 100755
--- a/protocols/JabberG/src/jabber_iqid.cpp
+++ b/protocols/JabberG/src/jabber_iqid.cpp
@@ -490,30 +490,6 @@ void CJabberProto::OnIqResultGetRegister(const TiXmlElement *iqNode, CJabberIqIn
}
}
-void CJabberProto::OnIqResultSetRegister(const TiXmlElement *iqNode, CJabberIqInfo*)
-{
- // RECVED: result of registration process
- // ACTION: notify of successful agent registration
- debugLogA("<iq/> iqIdSetRegister");
-
- const char *type, *from;
- if ((type = XmlGetAttr(iqNode, "type")) == nullptr) return;
- if ((from = XmlGetAttr(iqNode, "from")) == nullptr) return;
-
- if (!mir_strcmp(type, "result")) {
- MCONTACT hContact = HContactFromJID(from);
- if (hContact != 0)
- setByte(hContact, "IsTransport", true);
-
- if (m_hwndRegProgress)
- SendMessage(m_hwndRegProgress, WM_JABBER_REGDLG_UPDATE, 100, (LPARAM)TranslateT("Registration successful"));
- }
- else if (!mir_strcmp(type, "error")) {
- if (m_hwndRegProgress)
- SendMessage(m_hwndRegProgress, WM_JABBER_REGDLG_UPDATE, 100, (LPARAM)JabberErrorMsg(iqNode).c_str());
- }
-}
-
/////////////////////////////////////////////////////////////////////////////////////////
// JabberIqResultGetVcard - processes the server-side v-card
diff --git a/protocols/JabberG/src/jabber_opt.cpp b/protocols/JabberG/src/jabber_opt.cpp
index 4a273b5168..15cba2df5b 100755
--- a/protocols/JabberG/src/jabber_opt.cpp
+++ b/protocols/JabberG/src/jabber_opt.cpp
@@ -257,7 +257,7 @@ public:
ShowWindow(GetDlgItem(m_hwnd, IDC_PROGRESS_REG), SW_SHOW);
- m_regInfo->reg_hwndDlg = m_hwnd;
+ m_regInfo->pDlg = this;
m_proto->ForkThread((CJabberProto::MyThreadFunc) & CJabberProto::ServerThread, m_regInfo);
m_btnOk.SetText(TranslateT("Cancel"));
@@ -265,28 +265,29 @@ public:
return false;
}
- INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override
+ void OnDestroy() override
{
- switch (msg) {
- case WM_JABBER_REGDLG_UPDATE: // wParam=progress (0-100), lparam=status string
- if ((wchar_t*)lParam == nullptr)
- SetDlgItemTextW(m_hwnd, IDC_REG_STATUS, TranslateT("No message"));
- else
- SetDlgItemTextW(m_hwnd, IDC_REG_STATUS, (wchar_t*)lParam);
-
- SendDlgItemMessage(m_hwnd, IDC_PROGRESS_REG, PBM_SETPOS, wParam, 0);
- if (wParam >= 100)
- m_btnOk.SetText(TranslateT("Close"));
- else
- SetFocus(GetDlgItem(m_hwnd, IDC_PROGRESS_REG));
+ m_regInfo->pDlg = nullptr;
+ }
- return TRUE;
- }
+ void Update(int progress, const wchar_t *pwszText)
+ {
+ SetDlgItemTextW(m_hwnd, IDC_REG_STATUS, pwszText);
+ SendDlgItemMessageW(m_hwnd, IDC_PROGRESS_REG, PBM_SETPOS, progress, 0);
- return CSuper::DlgProc(msg, wParam, lParam);
+ if (progress >= 100)
+ m_btnOk.SetText(TranslateT("Close"));
+ else
+ SetFocus(GetDlgItem(m_hwnd, IDC_PROGRESS_REG));
}
};
+void JABBER_CONN_DATA::SetProgress(int progress, const wchar_t *pwszText)
+{
+ if (pDlg)
+ pDlg->Update(progress, pwszText);
+}
+
/////////////////////////////////////////////////////////////////////////////////////////
// JabberOptDlgProc - main options dialog procedure
diff --git a/protocols/JabberG/src/jabber_proto.cpp b/protocols/JabberG/src/jabber_proto.cpp
index ad3626164f..b249df7ed9 100755
--- a/protocols/JabberG/src/jabber_proto.cpp
+++ b/protocols/JabberG/src/jabber_proto.cpp
@@ -332,7 +332,6 @@ void CJabberProto::OnShutdown()
m_bShutdown = true;
UI_SAFE_CLOSE_HWND(m_hwndAgentRegInput);
- UI_SAFE_CLOSE_HWND(m_hwndRegProgress);
UI_SAFE_CLOSE_HWND(m_hwndJabberChangePassword);
UI_SAFE_CLOSE_HWND(m_hwndJabberAddBookmark);
UI_SAFE_CLOSE_HWND(m_hwndPrivacyRule);
@@ -343,6 +342,7 @@ void CJabberProto::OnShutdown()
UI_SAFE_CLOSE(m_pDlgJabberJoinGroupchat);
UI_SAFE_CLOSE(m_pDlgNotes);
+ AgentShutdown();
MucShutdown();
m_iqManager.ExpireAll();
diff --git a/protocols/JabberG/src/jabber_proto.h b/protocols/JabberG/src/jabber_proto.h
index 8539ec23f6..bd0c06d54e 100755
--- a/protocols/JabberG/src/jabber_proto.h
+++ b/protocols/JabberG/src/jabber_proto.h
@@ -252,7 +252,6 @@ struct CJabberProto : public PROTO<CJabberProto>, public IJabberInterface
bool m_bMamPrefsAvailable;
HWND m_hwndAgentRegInput;
- HWND m_hwndRegProgress;
HWND m_hwndJabberChangePassword;
HWND m_hwndPrivacyRule;
HWND m_hwndJabberAddBookmark;
@@ -360,13 +359,20 @@ struct CJabberProto : public PROTO<CJabberProto>, public IJabberInterface
void ContactMenuAdhocCommands(struct CJabberAdhocStartupParams *param);
+ //---- jabber_agent.c ----------------------------------------------------------------
+
+ class CAgentRegProgressDlg *m_pDlgReg;
+
+ void AgentShutdown();
+ void OnIqAgentRegister(const TiXmlElement *iqNode, CJabberIqInfo *pInfo);
+
//---- jabber_archive.c --------------------------------------------------------------
void EnableArchive(bool bEnable);
void RetrieveMessageArchive(MCONTACT hContact, JABBER_LIST_ITEM *pItem);
- void OnIqResultGetCollection(const TiXmlElement *iqNode, CJabberIqInfo*);
- void OnIqResultGetCollectionList(const TiXmlElement *iqNode, CJabberIqInfo*);
+ void OnIqResultGetCollection(const TiXmlElement *iqNode, CJabberIqInfo *pInfo);
+ void OnIqResultGetCollectionList(const TiXmlElement *iqNode, CJabberIqInfo *pInfo);
//---- jabber_bookmarks.c ------------------------------------------------------------
@@ -550,7 +556,6 @@ struct CJabberProto : public PROTO<CJabberProto>, public IJabberInterface
void OnIqResultSetAuth(const TiXmlElement *iqNode, CJabberIqInfo *pInfo);
void OnIqResultSetBookmarks(const TiXmlElement *iqNode, CJabberIqInfo *pInfo);
void OnIqResultSetPassword(const TiXmlElement *iqNode, CJabberIqInfo *pInfo);
- void OnIqResultSetRegister(const TiXmlElement *iqNode, CJabberIqInfo *pInfo);
void OnIqResultSetSearch(const TiXmlElement *iqNode, CJabberIqInfo *pInfo);
void OnIqResultSetVcard(const TiXmlElement *iqNode, CJabberIqInfo *pInfo);
void OnProcessLoginRq(ThreadData *info, DWORD rq);
diff --git a/protocols/JabberG/src/jabber_thread.cpp b/protocols/JabberG/src/jabber_thread.cpp
index da88826cee..586e670548 100755
--- a/protocols/JabberG/src/jabber_thread.cpp
+++ b/protocols/JabberG/src/jabber_thread.cpp
@@ -328,7 +328,7 @@ LBL_FatalError:
// Multiple thread allowed, although not possible :)
// thinking again.. multiple thread should not be allowed
info.reg_done = false;
- SendMessage(info.conn.reg_hwndDlg, WM_JABBER_REGDLG_UPDATE, 25, (LPARAM)TranslateT("Connecting..."));
+ info.conn.SetProgress(25, TranslateT("Connecting..."));
iqIdRegGetReg = -1;
iqIdRegSetReg = -1;
}
@@ -337,7 +337,7 @@ LBL_FatalError:
if ((info.buffer = (char*)mir_alloc(jabberNetworkBufferSize + 1)) == nullptr) { // +1 is for '\0' when debug logging this buffer
debugLogA("Cannot allocate network buffer, thread ended");
if (info.bIsReg)
- SendMessage(info.conn.reg_hwndDlg, WM_JABBER_REGDLG_UPDATE, 100, (LPARAM)TranslateT("Error: Not enough memory"));
+ info.conn.SetProgress(100, TranslateT("Error: Not enough memory"));
else
ProtoBroadcastAck(0, ACKTYPE_LOGIN, ACKRESULT_FAILED, nullptr, LOGINERR_NONETWORK);
@@ -361,7 +361,7 @@ LBL_FatalError:
if (m_ThreadInfo == &info)
ProtoBroadcastAck(0, ACKTYPE_LOGIN, ACKRESULT_FAILED, nullptr, LOGINERR_NONETWORK);
}
- else SendMessage(info.conn.reg_hwndDlg, WM_JABBER_REGDLG_UPDATE, 100, (LPARAM)TranslateT("Error: Cannot connect to the server"));
+ else info.conn.SetProgress(100, TranslateT("Error: Cannot connect to the server"));
debugLogA("Thread ended, connection failed");
goto LBL_FatalError;
@@ -375,7 +375,7 @@ LBL_FatalError:
if (!info.bIsReg)
ProtoBroadcastAck(0, ACKTYPE_LOGIN, ACKRESULT_FAILED, nullptr, LOGINERR_NONETWORK);
else
- SendMessage(info.conn.reg_hwndDlg, WM_JABBER_REGDLG_UPDATE, 100, (LPARAM)TranslateT("Error: Cannot connect to the server"));
+ info.conn.SetProgress(100, TranslateT("Error: Cannot connect to the server"));
info.close();
debugLogA("Thread ended, SSL connection failed");
@@ -533,7 +533,7 @@ recvRest:
}
else {
if (!info.reg_done)
- SendMessage(info.conn.reg_hwndDlg, WM_JABBER_REGDLG_UPDATE, 100, (LPARAM)TranslateT("Error: Connection lost"));
+ info.conn.SetProgress(100, TranslateT("Error: Connection lost"));
g_pRegInfo = nullptr;
}
}
@@ -554,7 +554,7 @@ void CJabberProto::PerformRegistration(ThreadData *info)
iqIdRegGetReg = SerialNext();
info->send(XmlNodeIq("get", iqIdRegGetReg, nullptr) << XQUERY(JABBER_FEAT_REGISTER));
- SendMessage(info->conn.reg_hwndDlg, WM_JABBER_REGDLG_UPDATE, 50, (LPARAM)TranslateT("Requesting registration instruction..."));
+ info->conn.SetProgress(50, TranslateT("Requesting registration instruction..."));
}
void CJabberProto::PerformIqAuth(ThreadData *info)
@@ -1878,7 +1878,7 @@ void CJabberProto::OnProcessIq(const TiXmlElement *node)
void CJabberProto::CancelRegConfig(CJabberFormDlg*, void*)
{
if (g_pRegInfo)
- SendMessage(g_pRegInfo->conn.reg_hwndDlg, WM_JABBER_REGDLG_UPDATE, 100, (LPARAM)TranslateT("Registration canceled"));
+ g_pRegInfo->conn.SetProgress(100, TranslateT("Registration canceled"));
}
void CJabberProto::SetRegConfig(CJabberFormDlg *pDlg, void *from)
@@ -1916,7 +1916,8 @@ void CJabberProto::OnProcessRegIq(const TiXmlElement *node, ThreadData *info)
g_pRegInfo = info;
auto *pDlg = new CJabberFormDlg(this, xNode, "Jabber register new user", &CJabberProto::SetRegConfig, mir_strdup(XmlGetAttr(node, "from")));
- pDlg->SetParent(info->conn.reg_hwndDlg);
+ if (info->conn.pDlg)
+ pDlg->SetParent(((CDlgBase*)info->conn.pDlg)->GetHwnd());
pDlg->SetCancel(&CJabberProto::CancelRegConfig);
pDlg->Display();
return;
@@ -1936,18 +1937,18 @@ void CJabberProto::OnProcessRegIq(const TiXmlElement *node, ThreadData *info)
query << XCHILD("username", info->conn.username);
info->send(iq);
- SendMessage(info->conn.reg_hwndDlg, WM_JABBER_REGDLG_UPDATE, 75, (LPARAM)TranslateT("Sending registration information..."));
+ info->conn.SetProgress(75, TranslateT("Sending registration information..."));
}
// RECVED: result of the registration process
// ACTION: account registration successful
else if (id == iqIdRegSetReg) {
info->send("</stream:stream>");
- SendMessage(info->conn.reg_hwndDlg, WM_JABBER_REGDLG_UPDATE, 100, (LPARAM)TranslateT("Registration successful"));
+ info->conn.SetProgress(100, TranslateT("Registration successful"));
info->reg_done = true;
}
}
else if (!mir_strcmp(type, "error")) {
- SendMessage(info->conn.reg_hwndDlg, WM_JABBER_REGDLG_UPDATE, 100, (LPARAM)JabberErrorMsg(node).c_str());
+ info->conn.SetProgress(100, JabberErrorMsg(node));
info->reg_done = true;
info->send("</stream:stream>");
}
diff --git a/protocols/JabberG/src/stdafx.h b/protocols/JabberG/src/stdafx.h
index 37c1d863c4..f5f73f96ae 100755
--- a/protocols/JabberG/src/stdafx.h
+++ b/protocols/JabberG/src/stdafx.h
@@ -179,7 +179,6 @@ protected:
#define JABBER_DB_EVENT_PRESENCE_ERROR 5
// User-defined message
-#define WM_JABBER_REGDLG_UPDATE (WM_PROTO_LAST + 100)
#define WM_JABBER_AGENT_REFRESH (WM_PROTO_LAST + 101)
#define WM_JABBER_TRANSPORT_REFRESH (WM_PROTO_LAST + 102)
#define WM_JABBER_REGINPUT_ACTIVATE (WM_PROTO_LAST + 103)
@@ -342,7 +341,8 @@ struct JABBER_CONN_DATA : public MZeroedObject
int port;
BOOL useSSL;
- HWND reg_hwndDlg;
+ class CJabberDlgRegister *pDlg;
+ void SetProgress(int progress, const wchar_t *pwszText);
};
struct ThreadData