static void process_private(gpointer *params) { session *sess = params[0]; gchar *from = params[1]; gchar *message = params[2]; const char *network = server_get_network(sess->server, FALSE); if (!network) network = sess->server->connected ? sess->server->servername : NULL; if (FromNick(from, prefs.irc_no_hilight)) return; if (prefs.input_tray_priv) { tray_set_flash(ICON_HILIGHT); tray_priv_count++; if (tray_priv_count == 1) tray_set_tipf(_("GChat: Private message from: %s (%s)"), from, network); else tray_set_tipf(_("GChat: %u private messages, latest from: %s (%s)"), tray_priv_count, from, network); } if (prefs.input_balloon_priv) tray_set_balloonf(message, _("GChat: Private message from: %s (%s)"), from, network); }
static void process_invited(gpointer *params) { gchar **word = params[1]; gchar *from = params[2]; server *serv = params[3]; gchar *channel = word[4][0] == ':' ? word[4] + 1 : word[4]; const char *network = server_get_network(serv, FALSE); if (!network) network = serv->connected ? serv->servername : NULL; if (FromNick(from, prefs.irc_no_hilight)) return; if (prefs.input_tray_priv) { tray_set_flash(ICON_HILIGHT); tray_invite_count++; if (tray_invite_count == 1) tray_set_tipf(_("GChat: Invite from: %s (%s) to %s"), from, network, channel); else tray_set_tipf(_("GChat: %u private messages, latest from: %s (%s) to %s"), tray_priv_count, from, network, channel); } if (prefs.input_balloon_priv) tray_set_balloonf("", _("GChat: Invite from: %s (%s) to %s"), from, network, channel); }
virtual EModRet OnPrivCTCP(CNick& Nick, CString& sMessage) { if (sMessage.Equals("DCC ", false, 4) && m_pUser->IsUserAttached()) { // DCC CHAT chat 2453612361 44592 CString sType = sMessage.Token(1); CString sFile = sMessage.Token(2); unsigned long uLongIP = sMessage.Token(3).ToULong(); unsigned short uPort = sMessage.Token(4).ToUShort(); unsigned long uFileSize = sMessage.Token(5).ToULong(); if (sType.Equals("CHAT")) { CNick FromNick(Nick.GetNickMask()); unsigned short uBNCPort = CDCCBounce::DCCRequest(FromNick.GetNick(), uLongIP, uPort, "", true, this, CUtils::GetIP(uLongIP)); if (uBNCPort) { CString sIP = GetLocalDCCIP(); m_pUser->PutUser(":" + Nick.GetNickMask() + " PRIVMSG " + m_pUser->GetNick() + " :\001DCC CHAT chat " + CString(CUtils::GetLongIP(sIP)) + " " + CString(uBNCPort) + "\001"); } } else if (sType.Equals("SEND")) { // DCC SEND readme.txt 403120438 5550 1104 unsigned short uBNCPort = CDCCBounce::DCCRequest(Nick.GetNick(), uLongIP, uPort, sFile, false, this, CUtils::GetIP(uLongIP)); if (uBNCPort) { CString sIP = GetLocalDCCIP(); m_pUser->PutUser(":" + Nick.GetNickMask() + " PRIVMSG " + m_pUser->GetNick() + " :\001DCC SEND " + sFile + " " + CString(CUtils::GetLongIP(sIP)) + " " + CString(uBNCPort) + " " + CString(uFileSize) + "\001"); } } else if (sType.Equals("RESUME")) { // Need to lookup the connection by port, filter the port, and forward to the user unsigned short uResumePort = sMessage.Token(3).ToUShort(); set<CSocket*>::const_iterator it; for (it = BeginSockets(); it != EndSockets(); ++it) { CDCCBounce* pSock = (CDCCBounce*) *it; if (pSock->GetLocalPort() == uResumePort) { m_pUser->PutUser(":" + Nick.GetNickMask() + " PRIVMSG " + m_pClient->GetNick() + " :\001DCC " + sType + " " + sFile + " " + CString(pSock->GetUserPort()) + " " + sMessage.Token(4) + "\001"); } } } else if (sType.Equals("ACCEPT")) { // Need to lookup the connection by port, filter the port, and forward to the user set<CSocket*>::const_iterator it; for (it = BeginSockets(); it != EndSockets(); ++it) { CDCCBounce* pSock = (CDCCBounce*) *it; if (pSock->GetUserPort() == sMessage.Token(3).ToUShort()) { m_pUser->PutUser(":" + Nick.GetNickMask() + " PRIVMSG " + m_pClient->GetNick() + " :\001DCC " + sType + " " + sFile + " " + CString(pSock->GetLocalPort()) + " " + sMessage.Token(4) + "\001"); } } } return HALTCORE; } return CONTINUE; }