aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2014-12-28 22:56:07 +0000
committerGravatar Szymon Tomasz Stefanek2014-12-28 22:56:07 +0000
commit60e00ddd6e77a43e95a161168f1727ebcbe0f610 (patch)
tree0db9802a519380698d1d4941300843581e9cdf5b /src/modules
parentMerge patch by TheReign (diff)
downloadKVIrc-60e00ddd6e77a43e95a161168f1727ebcbe0f610.tar.gz
KVIrc-60e00ddd6e77a43e95a161168f1727ebcbe0f610.tar.bz2
KVIrc-60e00ddd6e77a43e95a161168f1727ebcbe0f610.zip
Merge patch by TheReign
* Fixes most of the bugs in DCC send support for files larger than 4GiB. I doubt I found them all, but it catches all of the ones I needed for myself. * NOTE: I confess I probably didn't choose the best solution for this, but it seems to do what is needed. * NOTE: The better solution may be to add 64-bit number support to sendFmtData() git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@6415 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/dcc/DccBroker.cpp13
-rw-r--r--src/modules/dcc/DccFileTransfer.cpp6
-rw-r--r--src/modules/dcc/libkvidcc.cpp5
-rw-r--r--src/modules/dcc/requests.cpp7
4 files changed, 19 insertions, 12 deletions
diff --git a/src/modules/dcc/DccBroker.cpp b/src/modules/dcc/DccBroker.cpp
index 3e6ccb1f5..acd1dfb8c 100644
--- a/src/modules/dcc/DccBroker.cpp
+++ b/src/modules/dcc/DccBroker.cpp
@@ -227,21 +227,22 @@ void DccBroker::rsendExecute(DccDescriptor * dcc)
szTag = t->m_szTag;
// DCC [ST]SEND <filename> <fakeipaddress> <zero-port> <filesize> <sessionid>
- dcc->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s 127.0.0.1 0 %u %s%c",
+ dcc->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s 127.0.0.1 0 %s %s%c",
dcc->console()->connection()->encodeText(dcc->szNick).data(),
0x01,
dcc->console()->connection()->encodeText(dcc->szType).data(),
dcc->console()->connection()->encodeText(fName).data(),
- fi.size(),
+ dcc->console()->connection()->encodeText(QString::number(fi.size())).data(),
dcc->console()->connection()->encodeText(szTag).data(),
0x01);
} else {
- dcc->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s %u%c",
+ dcc->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s %s%c",
dcc->console()->connection()->encodeText(dcc->szNick).data(),
0x01,
dcc->console()->connection()->encodeText(dcc->szType).data(),
dcc->console()->connection()->encodeText(fName).data(),
- fi.size(),0x01);
+ dcc->console()->connection()->encodeText(QString::number(fi.size())).data(),
+ 0x01);
szTag = dcc->szFileName;
}
@@ -970,12 +971,12 @@ bool DccBroker::handleResumeRequest(KviDccRequest * dcc,const char * filename,co
KviIrcServerParser::encodeCtcpParameter(filename,szBuffy);
dcc->ctcpMsg->msg->console()->connection()->sendFmtData(
- "PRIVMSG %s :%cDCC ACCEPT %s %s %u %s%c",
+ "PRIVMSG %s :%cDCC ACCEPT %s %s %s %s%c",
dcc->ctcpMsg->msg->console()->connection()->encodeText(dcc->ctcpMsg->pSource->nick()).data(),
0x01,
szBuffy.ptr(),
port,
- filePos,
+ dcc->ctcpMsg->msg->console()->connection()->encodeText(QString::number(filePos)).data(),
szZeroPortTag,
0x01
);
diff --git a/src/modules/dcc/DccFileTransfer.cpp b/src/modules/dcc/DccFileTransfer.cpp
index 0f62ad66b..5d70fae7b 100644
--- a/src/modules/dcc/DccFileTransfer.cpp
+++ b/src/modules/dcc/DccFileTransfer.cpp
@@ -2266,11 +2266,13 @@ bool DccFileTransfer::doResume(const char * filename,const char * port,quint64 f
KviCString szBuffy;
KviIrcServerParser::encodeCtcpParameter(filename,szBuffy);
- m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC ACCEPT %s %s %u%c",
+ m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC ACCEPT %s %s %s%c",
m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(),
0x01,
m_pDescriptor->console()->connection()->encodeText(szBuffy.ptr()).data(),
- port,filePos,0x01
+ port,
+ m_pDescriptor->console()->connection()->encodeText(QString::number(filePos)).data(),
+ 0x01
);
return true;
diff --git a/src/modules/dcc/libkvidcc.cpp b/src/modules/dcc/libkvidcc.cpp
index fe17027ef..74aded7c5 100644
--- a/src/modules/dcc/libkvidcc.cpp
+++ b/src/modules/dcc/libkvidcc.cpp
@@ -970,12 +970,13 @@ static bool dcc_kvs_cmd_get(KviKvsModuleCommandCall * c)
c->window()->console()->connection()->encodeText(szFileName).data(),
0x01);
} else {
- c->window()->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s %u%c",
+ c->window()->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s %s%c",
c->window()->console()->connection()->encodeText(szTarget).data(),
0x01,
c->window()->console()->connection()->encodeText(szDCC.ptr()).data(),
c->window()->console()->connection()->encodeText(szFileName).data(),
- uSize,0x01);
+ c->window()->console()->connection()->encodeText(QString::number(uSize)).data(),
+ 0x01);
}
return true;
diff --git a/src/modules/dcc/requests.cpp b/src/modules/dcc/requests.cpp
index c235596cb..e541b9c71 100644
--- a/src/modules/dcc/requests.cpp
+++ b/src/modules/dcc/requests.cpp
@@ -413,6 +413,7 @@ static void dccModuleParseDccSend(KviDccRequest *dcc)
KviDccZeroPortTag * t = g_pDccBroker->findZeroPortTag(dcc->szParam5.ptr());
if(t)
{
+ // FIXME: #warning "%u will not support 64-bit numbers and won't work as intended here"
dcc->szParam4.sprintf("%u",t->m_uResumePosition);
g_pDccBroker->removeZeroPortTag(dcc->szParam5.ptr());
} else {
@@ -901,10 +902,12 @@ static void dccModuleParseDccGet(KviDccRequest *dcc)
&(o->absFilePath()),szSubproto.ptr());
}
- dcc->pConsole->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s %u%c",
+ dcc->pConsole->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s %s%c",
dcc->pConsole->connection()->encodeText(dcc->ctcpMsg->pSource->nick()).data(),
0x01,szSubproto.ptr(),
- dcc->pConsole->connection()->encodeText(dcc->szParam1.ptr()).data(),o->fileSize(),0x01);
+ dcc->pConsole->connection()->encodeText(dcc->szParam1.ptr()).data(),
+ dcc->pConsole->connection()->encodeText(QString::number(o->fileSize())).data(),
+ 0x01);
return;
}