summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2016-06-15 22:33:40 +0200
committerMarkus Mittendrein <git@maxmitti.tk>2016-06-15 22:33:40 +0200
commit211fff816d06cb5b387e897648580aa637f8c9c5 (patch)
tree0bcf3c7935574fa60fa4f47a1f6bbc197a45d6e1
parent5792d7d0b1dd99af07fb72f94772923517ebd858 (diff)
downloadmanager-211fff816d06cb5b387e897648580aa637f8c9c5.tar.gz
manager-211fff816d06cb5b387e897648580aa637f8c9c5.zip
Implement passive DCC chat
-rw-r--r--src/crsm.cpp32
-rw-r--r--src/crsm.hpp1
2 files changed, 24 insertions, 9 deletions
diff --git a/src/crsm.cpp b/src/crsm.cpp
index 06e1cd9..8ea859c 100644
--- a/src/crsm.cpp
+++ b/src/crsm.cpp
@@ -413,8 +413,15 @@ void CRSM::ircMessageReceived(IrcMessage *message)
{
if(privMessage->content().startsWith("DCC CHAT CHAT ", Qt::CaseInsensitive))
{
- const ClientInfo& client = ClientInfo::ircClient(message->nick());
- dccConnect("dcc connect", "", client, clientUserType(client));
+ const QStringList& parts = privMessage->content().split(' ', QString::SkipEmptyParts);
+ if(parts.size() == 5)
+ {
+ dccChatRequest(ClientInfo::ircClient(message->nick()));
+ }
+ else if(parts.size() == 6 && parts.at(3) == "199" && parts.at(4) == "0")
+ {
+ dccChatRequest(ClientInfo::ircClient(message->nick()), parts.at(5));
+ }
}
}
}
@@ -602,6 +609,19 @@ void CRSM::managementConnectionDisconnected()
}
}
+void CRSM::dccChatRequest(const ClientInfo &client, QString extraArgs)
+{
+ if(dccNickConnections.contains(client.nick))
+ {
+ respond(client, "Diesem Nick ist bereits eine DCC-Verbindung zugewiesen.\n");
+ }
+ else
+ {
+ QHostInfo info = QHostInfo::fromName(Config.DCC.Address);
+ connection->sendCommand(IrcCommand::createCtcpRequest(client.nick, "DCC CHAT chat " + QString::number(info.addresses().first().toIPv4Address()) + " " + QString::number(Config.DCC.ListenPort) + (!extraArgs.isEmpty() ? " " + extraArgs: extraArgs)));
+ }
+}
+
// modified version of http://stackoverflow.com/a/18866593
QString GetRandomString(int length = 5)
{
@@ -3231,13 +3251,7 @@ CMD_FUNCTION_IMPL(packsScenariosList)
}
CMD_FUNCTION_IMPL(dccConnect)
- if(dccNickConnections.contains(client.nick))
- {
- respond(client, "Diesem Nick ist bereits eine DCC-Verbindung zugewiesen.\n");
- return Success;
- }
- QHostInfo info = QHostInfo::fromName(Config.DCC.Address);
- connection->sendCommand(IrcCommand::createCtcpRequest(client.nick, "DCC CHAT chat " + QString::number(info.addresses().first().toIPv4Address()) + " " + QString::number(Config.DCC.ListenPort)));
+ dccChatRequest(client);
return Success;
}
diff --git a/src/crsm.hpp b/src/crsm.hpp
index 3d482a7..6cc03ff 100644
--- a/src/crsm.hpp
+++ b/src/crsm.hpp
@@ -136,6 +136,7 @@ private slots:
void newManagementData();
void managementConnectionDisconnected();
+ void dccChatRequest(const ClientInfo &client, QString extraArgs = "");
void newDCCConnection();
void newDCCData();
void disconnectedDCCConnection();