summaryrefslogtreecommitdiff
path: root/protocols/IRCG/src/commandmonitor.cpp
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2017-12-22 22:07:15 +0300
committerGeorge Hazan <ghazan@miranda.im>2017-12-22 22:07:15 +0300
commit480f2c3624748ddbc551cb533c081786904712cb (patch)
treed431d2d49d98f56c3f1ee01a98cca0778a2feb8e /protocols/IRCG/src/commandmonitor.cpp
parent37996933cb4dd497c9a7cd7aa794eba62dee2142 (diff)
quick-n-dirty fix for #1069
Diffstat (limited to 'protocols/IRCG/src/commandmonitor.cpp')
-rw-r--r--protocols/IRCG/src/commandmonitor.cpp136
1 files changed, 87 insertions, 49 deletions
diff --git a/protocols/IRCG/src/commandmonitor.cpp b/protocols/IRCG/src/commandmonitor.cpp
index 6694c24698..840d96eeb3 100644
--- a/protocols/IRCG/src/commandmonitor.cpp
+++ b/protocols/IRCG/src/commandmonitor.cpp
@@ -258,7 +258,7 @@ void __cdecl CIrcProto::ResolveIPThread(void *di)
delete ipr;
}
-bool CIrcProto::OnIrc_PING(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_PING(const CIrcMessage *pmsg)
{
wchar_t szResponse[100];
if (pmsg->parameters.getCount() > 0)
@@ -269,7 +269,7 @@ bool CIrcProto::OnIrc_PING(const CIrcMessage* pmsg)
return false;
}
-bool CIrcProto::OnIrc_WELCOME(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WELCOME(const CIrcMessage *pmsg)
{
if (pmsg->parameters[0] != m_info.sNick)
m_info.sNick = pmsg->parameters[0];
@@ -294,7 +294,7 @@ bool CIrcProto::OnIrc_WELCOME(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_WHOTOOLONG(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHOTOOLONG(const CIrcMessage *pmsg)
{
CMStringW command = GetNextUserhostReason(2);
if (command[0] == 'U')
@@ -303,7 +303,7 @@ bool CIrcProto::OnIrc_WHOTOOLONG(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_BACKFROMAWAY(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_BACKFROMAWAY(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming) {
int Temp = m_iStatus;
@@ -318,7 +318,7 @@ bool CIrcProto::OnIrc_BACKFROMAWAY(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_SETAWAY(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_SETAWAY(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming) {
int Temp = m_iDesiredStatus;
@@ -357,7 +357,7 @@ bool CIrcProto::OnIrc_SETAWAY(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_JOIN(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_JOIN(const CIrcMessage *pmsg)
{
if (pmsg->parameters.getCount() > 0 && pmsg->m_bIncoming && pmsg->prefix.sNick != m_info.sNick) {
CMStringW host = pmsg->prefix.sUser + L"@" + pmsg->prefix.sHost;
@@ -369,7 +369,7 @@ bool CIrcProto::OnIrc_JOIN(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_QUIT(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_QUIT(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming) {
CMStringW host = pmsg->prefix.sUser + L"@" + pmsg->prefix.sHost;
@@ -384,7 +384,7 @@ bool CIrcProto::OnIrc_QUIT(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_PART(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_PART(const CIrcMessage *pmsg)
{
if (pmsg->parameters.getCount() > 0 && pmsg->m_bIncoming) {
CMStringW host = pmsg->prefix.sUser + L"@" + pmsg->prefix.sHost;
@@ -399,7 +399,7 @@ bool CIrcProto::OnIrc_PART(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_KICK(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_KICK(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 1)
DoEvent(GC_EVENT_KICK, pmsg->parameters[0], pmsg->parameters[1], pmsg->parameters.getCount() > 2 ? pmsg->parameters[2].c_str() : nullptr, pmsg->prefix.sNick, nullptr, NULL, true, false);
@@ -422,7 +422,7 @@ bool CIrcProto::OnIrc_KICK(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_MODEQUERY(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_MODEQUERY(const CIrcMessage *pmsg)
{
if (pmsg->parameters.getCount() > 2 && pmsg->m_bIncoming && IsChannel(pmsg->parameters[1])) {
CMStringW sPassword = L"";
@@ -456,7 +456,7 @@ bool CIrcProto::OnIrc_MODEQUERY(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_MODE(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_MODE(const CIrcMessage *pmsg)
{
bool flag = false;
bool bContainsValidModes = false;
@@ -567,7 +567,7 @@ bool CIrcProto::OnIrc_MODE(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_NICK(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_NICK(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 0) {
bool bIsMe = pmsg->prefix.sNick == m_info.sNick ? true : false;
@@ -596,7 +596,7 @@ bool CIrcProto::OnIrc_NICK(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_NOTICE(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_NOTICE(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 1) {
if (IsCTCP(pmsg))
@@ -639,7 +639,7 @@ bool CIrcProto::OnIrc_NOTICE(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_YOURHOST(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_YOURHOST(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming) {
static const wchar_t* lpszFmt = L"Your host is %99[^ \x5b,], running version %99s";
@@ -654,7 +654,7 @@ bool CIrcProto::OnIrc_YOURHOST(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_INVITE(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_INVITE(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && (m_ignore && IsIgnored(pmsg->prefix.sNick, pmsg->prefix.sUser, pmsg->prefix.sHost, 'i')))
return true;
@@ -666,7 +666,7 @@ bool CIrcProto::OnIrc_INVITE(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_PINGPONG(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_PINGPONG(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->sCommand == L"PING") {
wchar_t szResponse[100];
@@ -677,7 +677,7 @@ bool CIrcProto::OnIrc_PINGPONG(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_PRIVMSG(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_PRIVMSG(const CIrcMessage *pmsg)
{
if (pmsg->parameters.getCount() > 1) {
if (IsCTCP(pmsg))
@@ -727,7 +727,7 @@ bool CIrcProto::OnIrc_PRIVMSG(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::IsCTCP(const CIrcMessage* pmsg)
+bool CIrcProto::IsCTCP(const CIrcMessage *pmsg)
{
// is it a ctcp command, i e is the first and last characer of a PRIVMSG or NOTICE text ASCII 1
CMStringW mess = pmsg->parameters[1];
@@ -1232,7 +1232,7 @@ bool CIrcProto::IsCTCP(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_NAMES(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_NAMES(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 3)
sNamesList += pmsg->parameters[3] + L" ";
@@ -1240,7 +1240,7 @@ bool CIrcProto::OnIrc_NAMES(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_ENDNAMES(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_ENDNAMES(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 1) {
CMStringW name = L"a";
@@ -1411,7 +1411,7 @@ bool CIrcProto::OnIrc_ENDNAMES(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_INITIALTOPIC(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_INITIALTOPIC(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 2) {
AddWindowItemData(pmsg->parameters[1], nullptr, nullptr, nullptr, pmsg->parameters[2]);
@@ -1423,7 +1423,7 @@ bool CIrcProto::OnIrc_INITIALTOPIC(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_INITIALTOPICNAME(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_INITIALTOPICNAME(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 3) {
wchar_t tTimeBuf[128], *tStopStr;
@@ -1437,7 +1437,7 @@ bool CIrcProto::OnIrc_INITIALTOPICNAME(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_TOPIC(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_TOPIC(const CIrcMessage *pmsg)
{
if (pmsg->parameters.getCount() > 1 && pmsg->m_bIncoming) {
DoEvent(GC_EVENT_TOPIC, pmsg->parameters[0], pmsg->prefix.sNick, pmsg->parameters[1], nullptr, sTopicTime.IsEmpty() ? nullptr : sTopicTime.c_str(), NULL, true, false);
@@ -1457,7 +1457,7 @@ static void __stdcall sttShowDlgList(void* param)
SetEvent(ppro->m_evWndCreate);
}
-bool CIrcProto::OnIrc_LISTSTART(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_LISTSTART(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming) {
CallFunctionAsync(sttShowDlgList, this);
@@ -1469,7 +1469,7 @@ bool CIrcProto::OnIrc_LISTSTART(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_LIST(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_LIST(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming == 1 && m_listDlg && pmsg->parameters.getCount() > 2) {
m_channelNumber++;
@@ -1526,7 +1526,7 @@ bool CIrcProto::OnIrc_LIST(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_LISTEND(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_LISTEND(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && m_listDlg) {
EnableWindow(GetDlgItem(m_listDlg->GetHwnd(), IDC_JOIN), true);
@@ -1551,7 +1551,7 @@ bool CIrcProto::OnIrc_LISTEND(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_BANLIST(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_BANLIST(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 2) {
if (m_managerDlg->GetHwnd() && (
@@ -1580,7 +1580,7 @@ bool CIrcProto::OnIrc_BANLIST(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_BANLISTEND(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_BANLISTEND(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 1) {
if (m_managerDlg->GetHwnd() &&
@@ -1617,7 +1617,7 @@ static void __stdcall sttShowWhoisWnd(void* param)
delete pmsg;
}
-bool CIrcProto::OnIrc_WHOIS_NAME(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHOIS_NAME(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 5 && m_manualWhoisCount > 0) {
CallFunctionAsync(sttShowWhoisWnd, new CIrcMessage(*pmsg));
@@ -1627,7 +1627,7 @@ bool CIrcProto::OnIrc_WHOIS_NAME(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_WHOIS_CHANNELS(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHOIS_CHANNELS(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && m_whoisDlg && pmsg->parameters.getCount() > 2 && m_manualWhoisCount > 0)
m_whoisDlg->m_InfoChannels.SetText(pmsg->parameters[2]);
@@ -1635,7 +1635,7 @@ bool CIrcProto::OnIrc_WHOIS_CHANNELS(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_WHOIS_AWAY(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHOIS_AWAY(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && m_whoisDlg && pmsg->parameters.getCount() > 2 && m_manualWhoisCount > 0)
m_whoisDlg->m_InfoAway2.SetText(pmsg->parameters[2]);
@@ -1645,7 +1645,7 @@ bool CIrcProto::OnIrc_WHOIS_AWAY(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_WHOIS_OTHER(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHOIS_OTHER(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && m_whoisDlg && pmsg->parameters.getCount() > 2 && m_manualWhoisCount > 0) {
wchar_t temp[1024], temp2[1024];
@@ -1658,7 +1658,7 @@ bool CIrcProto::OnIrc_WHOIS_OTHER(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_WHOIS_END(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHOIS_END(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 1 && m_manualWhoisCount < 1) {
CONTACT user = { pmsg->parameters[1], nullptr, nullptr, false, false, true };
@@ -1674,7 +1674,7 @@ bool CIrcProto::OnIrc_WHOIS_END(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_WHOIS_IDLE(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHOIS_IDLE(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && m_whoisDlg && pmsg->parameters.getCount() > 2 && m_manualWhoisCount > 0) {
int S = _wtoi(pmsg->parameters[2]);
@@ -1708,7 +1708,7 @@ bool CIrcProto::OnIrc_WHOIS_IDLE(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_WHOIS_SERVER(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHOIS_SERVER(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && m_whoisDlg && pmsg->parameters.getCount() > 2 && m_manualWhoisCount > 0)
m_whoisDlg->m_InfoServer.SetText(pmsg->parameters[2]);
@@ -1716,7 +1716,7 @@ bool CIrcProto::OnIrc_WHOIS_SERVER(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_WHOIS_AUTH(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHOIS_AUTH(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && m_whoisDlg && pmsg->parameters.getCount() > 2 && m_manualWhoisCount > 0) {
if (pmsg->sCommand == L"330")
@@ -1730,7 +1730,7 @@ bool CIrcProto::OnIrc_WHOIS_AUTH(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_WHOIS_NO_USER(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHOIS_NO_USER(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 2 && !IsChannel(pmsg->parameters[1])) {
if (m_whoisDlg)
@@ -1782,7 +1782,7 @@ static void __stdcall sttShowNickWnd(void* param)
delete pmsg;
}
-bool CIrcProto::OnIrc_NICK_ERR(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_NICK_ERR(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming) {
if (nickflag && ((m_alternativeNick[0] != 0)) && (pmsg->parameters.getCount() > 2 && mir_wstrcmp(pmsg->parameters[1], m_alternativeNick))) {
@@ -1801,7 +1801,7 @@ bool CIrcProto::OnIrc_NICK_ERR(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_JOINERROR(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_JOINERROR(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming) {
DBVARIANT dbv;
@@ -1831,7 +1831,7 @@ bool CIrcProto::OnIrc_JOINERROR(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_UNKNOWN(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_UNKNOWN(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 0) {
if (pmsg->parameters[0] == L"WHO" && GetNextUserhostReason(2) != L"U")
@@ -1843,7 +1843,7 @@ bool CIrcProto::OnIrc_UNKNOWN(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_ENDMOTD(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_ENDMOTD(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && !bPerformDone)
DoOnConnect(pmsg);
@@ -1851,7 +1851,7 @@ bool CIrcProto::OnIrc_ENDMOTD(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_NOOFCHANNELS(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_NOOFCHANNELS(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 1)
m_noOfChannels = _wtoi(pmsg->parameters[1]);
@@ -1863,7 +1863,7 @@ bool CIrcProto::OnIrc_NOOFCHANNELS(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_ERROR(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_ERROR(const CIrcMessage *pmsg)
{
if (pmsg->m_bIncoming && !m_disableErrorPopups && m_iDesiredStatus != ID_STATUS_OFFLINE) {
CMStringW S;
@@ -1877,7 +1877,7 @@ bool CIrcProto::OnIrc_ERROR(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_WHO_END(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHO_END(const CIrcMessage *pmsg)
{
CMStringW command = GetNextUserhostReason(2);
if (command[0] == 'S') {
@@ -1974,7 +1974,7 @@ bool CIrcProto::OnIrc_WHO_END(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_WHO_REPLY(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_WHO_REPLY(const CIrcMessage *pmsg)
{
CMStringW command = PeekAtReasons(2);
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 6 && command[0] == 'S') {
@@ -1991,7 +1991,7 @@ bool CIrcProto::OnIrc_WHO_REPLY(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_TRYAGAIN(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_TRYAGAIN(const CIrcMessage *pmsg)
{
CMStringW command = L"";
if (pmsg->m_bIncoming && pmsg->parameters.getCount() > 1) {
@@ -2006,7 +2006,7 @@ bool CIrcProto::OnIrc_TRYAGAIN(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_USERHOST_REPLY(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_USERHOST_REPLY(const CIrcMessage *pmsg)
{
CMStringW command;
if (pmsg->m_bIncoming) {
@@ -2145,7 +2145,45 @@ bool CIrcProto::OnIrc_USERHOST_REPLY(const CIrcMessage* pmsg)
return true;
}
-bool CIrcProto::OnIrc_SUPPORT(const CIrcMessage* pmsg)
+bool CIrcProto::OnIrc_AUTH_OK(const CIrcMessage *pmsg)
+{
+ if (pmsg->m_bIncoming && !bPerformDone)
+ DoOnConnect(pmsg);
+
+ return true;
+}
+
+bool CIrcProto::OnIrc_AUTH_FAIL(const CIrcMessage*)
+{
+ int Temp = m_iDesiredStatus;
+ m_iStatus = m_iDesiredStatus = ID_STATUS_OFFLINE;
+ ProtoBroadcastAck(NULL, ACKTYPE_LOGIN, ACKRESULT_FAILED, nullptr, LOGINERR_WRONGPASSWORD);
+ ProtoBroadcastAck(NULL, ACKTYPE_STATUS, ACKRESULT_SUCCESS, (HANDLE)Temp, ID_STATUS_OFFLINE);
+ return false;
+}
+
+bool CIrcProto::OnIrc_AUTHENTICATE(const CIrcMessage *pmsg)
+{
+ if (m_bUseSASL && pmsg->parameters[0] == "+") {
+ CMStringA payload(FORMAT, "%S%c%S%c%s%c", m_name, 0, m_name, 0, m_password, 0);
+ NLSend("AUTHENTICATE %s\r\n", ptrA(mir_base64_encode(payload, payload.GetLength())).get());
+ }
+
+ return true;
+}
+
+bool CIrcProto::OnIrc_CAP(const CIrcMessage *pmsg)
+{
+ if (pmsg->parameters.getCount() < 3)
+ return true;
+
+ if (m_bUseSASL && pmsg->parameters[1] == "ACK" && pmsg->parameters[2].Trim() == "sasl") {
+ NLSend("AUTHENTICATE PLAIN\r\n");
+ }
+ return true;
+}
+
+bool CIrcProto::OnIrc_SUPPORT(const CIrcMessage *pmsg)
{
static const wchar_t *lpszFmt = L"Try server %99[^ ,], port %19s";
wchar_t szAltServer[100];
@@ -2224,7 +2262,7 @@ bool CIrcProto::OnIrc_SUPPORT(const CIrcMessage* pmsg)
return true;
}
-void CIrcProto::OnIrcDefault(const CIrcMessage* pmsg)
+void CIrcProto::OnIrcDefault(const CIrcMessage *pmsg)
{
ShowMessage(pmsg);
}