diff options
Diffstat (limited to 'src/modules/dcc/requests.cpp')
| -rw-r--r-- | src/modules/dcc/requests.cpp | 727 |
1 files changed, 377 insertions, 350 deletions
diff --git a/src/modules/dcc/requests.cpp b/src/modules/dcc/requests.cpp index b86e23528..d27ea9b65 100644 --- a/src/modules/dcc/requests.cpp +++ b/src/modules/dcc/requests.cpp @@ -28,7 +28,7 @@ #include "DccBroker.h" #ifndef COMPILE_DISABLE_DCC_VIDEO - #include "DccVideoWindow.h" +#include "DccVideoWindow.h" #endif #include "DccVoiceWindow.h" @@ -58,8 +58,8 @@ #include <QFileInfo> #ifdef COMPILE_ON_WINDOWS - // Ugly Windoze compiler... - #include "DccDialog.h" +// Ugly Windoze compiler... +#include "DccDialog.h" #endif //#warning "KviOption_boolIgnoreDccChat and other types too" @@ -67,27 +67,26 @@ extern KVIRC_API KviSharedFilesManager * g_pSharedFilesManager; extern DccBroker * g_pDccBroker; -static void dcc_module_reply_errmsg(KviDccRequest * dcc,const QString& errText) +static void dcc_module_reply_errmsg(KviDccRequest * dcc, const QString & errText) { dcc->ctcpMsg->msg->console()->connection()->sendFmtData( - "NOTICE %s :%cERRMSG %s%c", - dcc->ctcpMsg->msg->console()->connection()->encodeText(dcc->ctcpMsg->pSource->nick()).data(),0x01, - dcc->ctcpMsg->msg->console()->connection()->encodeText(errText).data() - ,0x01); + "NOTICE %s :%cERRMSG %s%c", + dcc->ctcpMsg->msg->console()->connection()->encodeText(dcc->ctcpMsg->pSource->nick()).data(), 0x01, + dcc->ctcpMsg->msg->console()->connection()->encodeText(errText).data(), 0x01); } -static void dcc_module_request_error(KviDccRequest * dcc,const QString& errText) +static void dcc_module_request_error(KviDccRequest * dcc, const QString & errText) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCERROR, - __tr2qs_ctx("Unable to process the above request: %Q, %Q","dcc"), - &errText, - KVI_OPTION_BOOL(KviOption_boolNotifyFailedDccHandshakes) ? &(__tr2qs_ctx("Ignoring and notifying failure","dcc")) : &(__tr2qs_ctx("Ignoring","dcc"))); + __tr2qs_ctx("Unable to process the above request: %Q, %Q", "dcc"), + &errText, + KVI_OPTION_BOOL(KviOption_boolNotifyFailedDccHandshakes) ? &(__tr2qs_ctx("Ignoring and notifying failure", "dcc")) : &(__tr2qs_ctx("Ignoring", "dcc"))); if(KVI_OPTION_BOOL(KviOption_boolNotifyFailedDccHandshakes)) { QString szError = QString("Sorry, your DCC %1 request can't be satisfied: %2").arg(dcc->szType.ptr(), errText); //since szError contains a user-suppplied string, we simplify it to avoid any kind of injection (bug #858) - dcc_module_reply_errmsg(dcc,szError.simplified()); + dcc_module_reply_errmsg(dcc, szError.simplified()); } } @@ -98,8 +97,8 @@ static bool dcc_module_check_concurrent_transfers_limit(KviDccRequest * dcc) unsigned int uTransfers = DccFileTransfer::runningTransfersCount(); if(uTransfers >= KVI_OPTION_UINT(KviOption_uintMaxDccSendTransfers)) { - QString szError = QString(__tr2qs_ctx("Concurrent transfer limit reached (%1 of %2 transfers running)","dcc")).arg(uTransfers).arg(KVI_OPTION_UINT(KviOption_uintMaxDccSendTransfers)); - dcc_module_request_error(dcc,szError); + QString szError = QString(__tr2qs_ctx("Concurrent transfer limit reached (%1 of %2 transfers running)", "dcc")).arg(uTransfers).arg(KVI_OPTION_UINT(KviOption_uintMaxDccSendTransfers)); + dcc_module_request_error(dcc, szError); return false; } } @@ -113,51 +112,55 @@ static bool dcc_module_check_limits(KviDccRequest * dcc) unsigned int uWindows = g_pDccBroker->dccWindowsCount(); if(uWindows >= KVI_OPTION_UINT(KviOption_uintMaxDccSlots)) { - QString szError = QString(__tr2qs_ctx("Slot limit reached (%1 slots of %2)","dcc")).arg(uWindows).arg(KVI_OPTION_UINT(KviOption_uintMaxDccSlots)); - dcc_module_request_error(dcc,szError); + QString szError = QString(__tr2qs_ctx("Slot limit reached (%1 slots of %2)", "dcc")).arg(uWindows).arg(KVI_OPTION_UINT(KviOption_uintMaxDccSlots)); + dcc_module_request_error(dcc, szError); return false; } } if(g_pDccBroker->dccBoxCount() >= 32) { // there are too many pending dcc requests: the user isn't watching.... - dcc_module_request_error(dcc,__tr2qs_ctx("Too many pending connections","dcc")); + dcc_module_request_error(dcc, __tr2qs_ctx("Too many pending connections", "dcc")); return false; } return true; } -static void dcc_fill_local_nick_user_host(DccDescriptor * d,KviDccRequest * dcc) +static void dcc_fill_local_nick_user_host(DccDescriptor * d, KviDccRequest * dcc) { if(dcc->pConsole->connection()) { - d->szLocalNick = dcc->pConsole->connection()->userInfo()->nickName(); - d->szLocalUser = dcc->pConsole->connection()->userInfo()->userName(); - d->szLocalHost = dcc->pConsole->connection()->userInfo()->hostName(); - } else { - d->szLocalNick = __tr_ctx("unknown","dcc"); - d->szLocalUser = __tr2qs_ctx("unknown","dcc"); - d->szLocalHost = __tr2qs_ctx("unknown","dcc"); + d->szLocalNick = dcc->pConsole->connection()->userInfo()->nickName(); + d->szLocalUser = dcc->pConsole->connection()->userInfo()->userName(); + d->szLocalHost = dcc->pConsole->connection()->userInfo()->hostName(); + } + else + { + d->szLocalNick = __tr_ctx("unknown", "dcc"); + d->szLocalUser = __tr2qs_ctx("unknown", "dcc"); + d->szLocalHost = __tr2qs_ctx("unknown", "dcc"); } } -static void dcc_module_set_dcc_type(DccDescriptor * d,const char * szBaseType) +static void dcc_module_set_dcc_type(DccDescriptor * d, const char * szBaseType) { d->szType = szBaseType; #ifdef COMPILE_SSL_SUPPORT - if(d->bIsSSL)d->szType.prepend('S'); + if(d->bIsSSL) + d->szType.prepend('S'); #endif - if(d->bIsTdcc)d->szType.prepend('T'); + if(d->bIsTdcc) + d->szType.prepend('T'); } -static bool dcc_module_normalize_target_data(KviDccRequest * dcc,KviCString &ipaddr,KviCString &port) +static bool dcc_module_normalize_target_data(KviDccRequest * dcc, KviCString & ipaddr, KviCString & port) { if(!port.isUnsignedNum()) { if(!dcc->ctcpMsg->msg->haltOutput()) { - QString szError = QString(__tr2qs_ctx("Invalid port number %1","dcc")).arg(port.ptr()); - dcc_module_request_error(dcc,szError); + QString szError = QString(__tr2qs_ctx("Invalid port number %1", "dcc")).arg(port.ptr()); + dcc_module_request_error(dcc, szError); } return false; } @@ -168,23 +171,25 @@ static bool dcc_module_normalize_target_data(KviDccRequest * dcc,KviCString &ipa { addr.s_addr = htonl((unsigned long)ipaddr.toULong()); QString tmp; - if(!KviNetUtils::binaryIpToStringIp(addr,tmp)) + if(!KviNetUtils::binaryIpToStringIp(addr, tmp)) { if(!dcc->ctcpMsg->msg->haltOutput()) { - QString szError = QString(__tr2qs_ctx("Invalid IP address in old format %1","dcc")).arg(ipaddr.ptr()); - dcc_module_request_error(dcc,szError); + QString szError = QString(__tr2qs_ctx("Invalid IP address in old format %1", "dcc")).arg(ipaddr.ptr()); + dcc_module_request_error(dcc, szError); } return false; } ipaddr = tmp; - } else { + } + else + { //FIXME: KviCString -> QString - if(!KviNetUtils::stringIpToBinaryIp(QString(ipaddr),&addr)) + if(!KviNetUtils::stringIpToBinaryIp(QString(ipaddr), &addr)) { #ifdef COMPILE_IPV6_SUPPORT struct in6_addr addr6; - if(KviNetUtils::stringIpToBinaryIp_V6(QString(ipaddr),&addr6)) + if(KviNetUtils::stringIpToBinaryIp_V6(QString(ipaddr), &addr6)) { dcc->bIPv6 = true; return true; // IPV6 address. @@ -192,8 +197,8 @@ static bool dcc_module_normalize_target_data(KviDccRequest * dcc,KviCString &ipa #endif if(!dcc->ctcpMsg->msg->haltOutput()) { - QString szError = QString(__tr2qs_ctx("Invalid IP address %1","dcc")).arg(ipaddr.ptr()); - dcc_module_request_error(dcc,szError); + QString szError = QString(__tr2qs_ctx("Invalid IP address %1", "dcc")).arg(ipaddr.ptr()); + dcc_module_request_error(dcc, szError); } return false; } @@ -201,12 +206,11 @@ static bool dcc_module_normalize_target_data(KviDccRequest * dcc,KviCString &ipa return true; } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CHAT //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static void dccModuleParseDccChat(KviDccRequest *dcc) +static void dccModuleParseDccChat(KviDccRequest * dcc) { // // We have received a DCC CHAT request in the following form: @@ -249,17 +253,19 @@ static void dccModuleParseDccChat(KviDccRequest *dcc) // // First of all we check the dcc slot limits - if(!dcc_module_check_limits(dcc))return; + if(!dcc_module_check_limits(dcc)) + return; // Then we check the target host data - if(!dcc_module_normalize_target_data(dcc,dcc->szParam2,dcc->szParam3))return; + if(!dcc_module_normalize_target_data(dcc, dcc->szParam2, dcc->szParam3)) + return; - if(!kvi_strEqualCI(dcc->szParam1.ptr(),"chat")) + if(!kvi_strEqualCI(dcc->szParam1.ptr(), "chat")) { if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("The above request is broken: the second parameter is '%s' and should be 'chat', trying to continue","dcc"),dcc->szParam1.ptr()); + __tr2qs_ctx("The above request is broken: the second parameter is '%s' and should be 'chat', trying to continue", "dcc"), dcc->szParam1.ptr()); } } @@ -267,26 +273,25 @@ static void dccModuleParseDccChat(KviDccRequest *dcc) szExtensions.cutRight(4); // cut off CHAT #ifdef COMPILE_SSL_SUPPORT - bool bSSLExtension = szExtensions.contains('S',false); -#else //!COMPILE_SSL_SUPPORT - if(szExtensions.contains('S',false)) + bool bSSLExtension = szExtensions.contains('S', false); +#else //!COMPILE_SSL_SUPPORT + if(szExtensions.contains('S', false)) { - dcc_module_request_error(dcc,__tr2qs_ctx("This executable has been compiled without SSL support, the SSL extension to DCC CHAT is not available","dcc")); + dcc_module_request_error(dcc, __tr2qs_ctx("This executable has been compiled without SSL support, the SSL extension to DCC CHAT is not available", "dcc")); return; } #endif //!COMPILE_SSL_SUPPORT DccDescriptor * d = new DccDescriptor(dcc->pConsole); - d->szNick = dcc->ctcpMsg->pSource->nick(); - d->szUser = dcc->ctcpMsg->pSource->user(); - d->szHost = dcc->ctcpMsg->pSource->host(); - - dcc_fill_local_nick_user_host(d,dcc); + d->szNick = dcc->ctcpMsg->pSource->nick(); + d->szUser = dcc->ctcpMsg->pSource->user(); + d->szHost = dcc->ctcpMsg->pSource->host(); - d->szIp = dcc->szParam2.ptr(); - d->szPort = dcc->szParam3.ptr(); + dcc_fill_local_nick_user_host(d, dcc); + d->szIp = dcc->szParam2.ptr(); + d->szPort = dcc->szParam3.ptr(); if(dcc->szParam4.hasData()) { @@ -297,16 +302,21 @@ static void dccModuleParseDccChat(KviDccRequest *dcc) if(KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault)) { d->szFakeIp = KVI_OPTION_STRING(KviOption_stringDefaultDccFakeAddress); - if(d->szFakeIp.isEmpty())KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault) = false; + if(d->szFakeIp.isEmpty()) + KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault) = false; } d->setZeroPortRequestTag(dcc->szParam4.ptr()); QString tmp; - if(!dcc_kvs_get_listen_ip_address(0,d->console(),tmp))d->szListenIp = "0.0.0.0"; - else d->szListenIp=tmp; + if(!dcc_kvs_get_listen_ip_address(0, d->console(), tmp)) + d->szListenIp = "0.0.0.0"; + else + d->szListenIp = tmp; d->szListenPort = "0"; // any port is OK - d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccChat); - d->bActive = false; // we must listen then... - } else { + d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccChat); + d->bActive = false; // we must listen then... + } + else + { // zero port acknowledge // check if this is a tag that we have sent out QString szTag = QString(dcc->szParam4.ptr()); @@ -322,43 +332,45 @@ static void dccModuleParseDccChat(KviDccRequest *dcc) // request, but since we don't encourage bugs, we don't do it :D // Mail me at pragma at kvirc dot net if you really think it's necessary. dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("The above request is broken: it looks like a zero port tag acknowledge but I have either never seen this tag or it was sent more than 120 seconds ago","dcc")); - dcc_module_request_error(dcc,__tr2qs_ctx("It seems that I haven't requested this DCC chat","dcc")); + __tr2qs_ctx("The above request is broken: it looks like a zero port tag acknowledge but I have either never seen this tag or it was sent more than 120 seconds ago", "dcc")); + dcc_module_request_error(dcc, __tr2qs_ctx("It seems that I haven't requested this DCC chat", "dcc")); delete d; return; - } else { + } + else + { g_pDccBroker->removeZeroPortTag(szTag); } - d->bAutoAccept = true; // auto-accept it (we have sent it out) - d->bActive = true; + d->bAutoAccept = true; // auto-accept it (we have sent it out) + d->bActive = true; } - } else { - d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccChat); - d->bActive = true; // we have to connect (standard active chat) + } + else + { + d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccChat); + d->bActive = true; // we have to connect (standard active chat) } #ifdef COMPILE_SSL_SUPPORT - d->bIsSSL = bSSLExtension; + d->bIsSSL = bSSLExtension; #endif - dcc_module_set_dcc_type(d,"CHAT"); + dcc_module_set_dcc_type(d, "CHAT"); d->triggerCreationEvent(); g_pDccBroker->handleChatRequest(d); } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SEND //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static void dccModuleParseDccRecv(KviDccRequest * dcc); -static void dccModuleParseDccSend(KviDccRequest *dcc) +static void dccModuleParseDccSend(KviDccRequest * dcc) { -//#warning "Ignore files depending on file type ? (MediaType ?)" + //#warning "Ignore files depending on file type ? (MediaType ?)" // // We have received a DCC SEND request in the following form // @@ -402,7 +414,7 @@ static void dccModuleParseDccSend(KviDccRequest *dcc) // we have sent out a zero port request and the remote party acked it // - if((!kvi_strEqualCS(dcc->szParam3.ptr(),"0")) && dcc->szParam5.hasData()) + if((!kvi_strEqualCS(dcc->szParam3.ptr(), "0")) && dcc->szParam5.hasData()) { // DCC SEND <filename> <remoteip> <remoteport> <filesize> <tag> // zero port acknowledge: treat as a RECV that should look like @@ -414,9 +426,11 @@ static void dccModuleParseDccSend(KviDccRequest *dcc) 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); + dcc->szParam4.sprintf("%u", t->m_uResumePosition); g_pDccBroker->removeZeroPortTag(dcc->szParam5.ptr()); - } else { + } + else + { // this should never happen since we always add // a zero port tag for out outgoing requests // but well... maybe the user did something behind our back... @@ -432,21 +446,24 @@ static void dccModuleParseDccSend(KviDccRequest *dcc) } // First of all we check the transfer limits - dcc->szParam1=dcc->pConsole->decodeText(dcc->szParam1); - if(!dcc_module_check_limits(dcc))return; - if(!dcc_module_check_concurrent_transfers_limit(dcc))return; + dcc->szParam1 = dcc->pConsole->decodeText(dcc->szParam1); + if(!dcc_module_check_limits(dcc)) + return; + if(!dcc_module_check_concurrent_transfers_limit(dcc)) + return; // Then we ensure that the data that the remote end has sent are valid - if(!dcc_module_normalize_target_data(dcc,dcc->szParam2,dcc->szParam3))return; + if(!dcc_module_normalize_target_data(dcc, dcc->szParam2, dcc->szParam3)) + return; if(!(dcc->szParam4.isUnsignedNum())) { if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("The above request is broken: the fourth parameter should be the file size but doesn't appear to be an unsigned number; trying to continue","dcc"),dcc->szParam4.ptr()); + __tr2qs_ctx("The above request is broken: the fourth parameter should be the file size but doesn't appear to be an unsigned number; trying to continue", "dcc"), dcc->szParam4.ptr()); } - dcc->szParam4 = __tr2qs_ctx("<unknown size>","dcc"); + dcc->szParam4 = __tr2qs_ctx("<unknown size>", "dcc"); } if(dcc->szParam1.contains('/')) @@ -454,7 +471,7 @@ static void dccModuleParseDccSend(KviDccRequest *dcc) if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("The above request is broken: the filename contains path components, stripping the leading path and trying to continue","dcc"),dcc->szParam1.ptr()); + __tr2qs_ctx("The above request is broken: the filename contains path components, stripping the leading path and trying to continue", "dcc"), dcc->szParam1.ptr()); } dcc->szParam1.cutToLast('/'); } @@ -464,7 +481,7 @@ static void dccModuleParseDccSend(KviDccRequest *dcc) if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("The above request is broken: the filename contains path components, stripping the leading path and trying to continue","dcc"),dcc->szParam1.ptr()); + __tr2qs_ctx("The above request is broken: the filename contains path components, stripping the leading path and trying to continue", "dcc"), dcc->szParam1.ptr()); } dcc->szParam1.cutToLast("%2F"); } @@ -472,81 +489,85 @@ static void dccModuleParseDccSend(KviDccRequest *dcc) KviCString szExtensions = dcc->szType; szExtensions.cutRight(4); // cut off SEND - bool bTurboExtension = szExtensions.contains('T',false); + bool bTurboExtension = szExtensions.contains('T', false); #ifdef COMPILE_SSL_SUPPORT - bool bSSLExtension = szExtensions.contains('S',false); -#else //!COMPILE_SSL_SUPPORT - if(szExtensions.contains('S',false)) + bool bSSLExtension = szExtensions.contains('S', false); +#else //!COMPILE_SSL_SUPPORT + if(szExtensions.contains('S', false)) { - dcc_module_request_error(dcc,__tr2qs_ctx("This executable has been compiled without SSL support, the SSL extension to DCC SEND is not available","dcc")); + dcc_module_request_error(dcc, __tr2qs_ctx("This executable has been compiled without SSL support, the SSL extension to DCC SEND is not available", "dcc")); return; } #endif //!COMPILE_SSL_SUPPORT DccDescriptor * d = new DccDescriptor(dcc->pConsole); - d->szNick = dcc->ctcpMsg->pSource->nick(); - d->szUser = dcc->ctcpMsg->pSource->user(); - d->szHost = dcc->ctcpMsg->pSource->host(); - dcc_fill_local_nick_user_host(d,dcc); + d->szNick = dcc->ctcpMsg->pSource->nick(); + d->szUser = dcc->ctcpMsg->pSource->user(); + d->szHost = dcc->ctcpMsg->pSource->host(); + dcc_fill_local_nick_user_host(d, dcc); - d->szIp = dcc->szParam2.ptr(); - d->szPort = dcc->szParam3.ptr(); - d->szFileName = dcc->szParam1.ptr(); - d->szFileSize = dcc->szParam4.ptr(); + d->szIp = dcc->szParam2.ptr(); + d->szPort = dcc->szParam3.ptr(); + d->szFileName = dcc->szParam1.ptr(); + d->szFileSize = dcc->szParam4.ptr(); - if(d->szPort=="0" && dcc->szParam5.hasData()) + if(d->szPort == "0" && dcc->szParam5.hasData()) { if(KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault)) { d->szFakeIp = KVI_OPTION_STRING(KviOption_stringDefaultDccFakeAddress); - if(d->szFakeIp.isEmpty())KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault) = false; + if(d->szFakeIp.isEmpty()) + KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault) = false; } d->setZeroPortRequestTag(dcc->szParam5.ptr()); QString tmp; - if(!dcc_kvs_get_listen_ip_address(0,d->console(),tmp))d->szListenIp = "0.0.0.0"; - else d->szListenIp=QString(tmp); + if(!dcc_kvs_get_listen_ip_address(0, d->console(), tmp)) + d->szListenIp = "0.0.0.0"; + else + d->szListenIp = QString(tmp); d->szListenPort = "0"; // any port is OK d->bSendRequest = true; d->szLocalFileSize = d->szFileSize; } - d->bActive = !d->isZeroPortRequest(); // we have to connect unless it is a zero port request + d->bActive = !d->isZeroPortRequest(); // we have to connect unless it is a zero port request - d->bResume = false; - d->bRecvFile = true; - d->bIsTdcc = bTurboExtension; - d->bNoAcks = d->bIsTdcc; + d->bResume = false; + d->bRecvFile = true; + d->bIsTdcc = bTurboExtension; + d->bNoAcks = d->bIsTdcc; #ifdef COMPILE_SSL_SUPPORT - d->bIsSSL = bSSLExtension; + d->bIsSSL = bSSLExtension; #endif d->bOverrideMinimize = false; - d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccSend); + d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccSend); - d->bIsIncomingAvatar = g_pApp->findPendingAvatarChange(dcc->pConsole,d->szNick,d->szFileName); - dcc_module_set_dcc_type(d,"RECV"); - if(KVI_OPTION_BOOL(KviOption_boolAutoAcceptIncomingAvatars))d->bAutoAccept = d->bAutoAccept || d->bIsIncomingAvatar; + d->bIsIncomingAvatar = g_pApp->findPendingAvatarChange(dcc->pConsole, d->szNick, d->szFileName); + dcc_module_set_dcc_type(d, "RECV"); + if(KVI_OPTION_BOOL(KviOption_boolAutoAcceptIncomingAvatars)) + d->bAutoAccept = d->bAutoAccept || d->bIsIncomingAvatar; d->triggerCreationEvent(); g_pDccBroker->recvFileManage(d); } -static void dccModuleParseDccAccept(KviDccRequest *dcc) +static void dccModuleParseDccAccept(KviDccRequest * dcc) { // this is usually DCC ACCEPT <filename> <port> <resumesize> // but may be also // DCC ACCEPT <filename> 0 <resumesize> <tag> - if(!g_pDccBroker->handleResumeAccepted(dcc->szParam1.ptr(),dcc->szParam2.ptr(),dcc->szParam4.ptr())) + if(!g_pDccBroker->handleResumeAccepted(dcc->szParam1.ptr(), dcc->szParam2.ptr(), dcc->szParam4.ptr())) { //#warning "IF KviOption_boolReplyCtcpErrmsgOnInvalidAccept..." if(!dcc->ctcpMsg->msg->haltOutput()) { - QString szError = QString(__tr2qs_ctx("Can't proceed with DCC RECV: transfer not initiated for file %1 on port %2","dcc")).arg(dcc->szParam1.ptr()).arg(dcc->szParam2.ptr()); - dcc_module_request_error(dcc,szError); + QString szError = QString(__tr2qs_ctx("Can't proceed with DCC RECV: transfer not initiated for file %1 on port %2", "dcc")).arg(dcc->szParam1.ptr()).arg(dcc->szParam2.ptr()); + dcc_module_request_error(dcc, szError); } } } -static void dccModuleParseDccResume(KviDccRequest *dcc) +static void dccModuleParseDccResume(KviDccRequest * dcc) { // This is usually RESUME <filename> <port> <resumesize> @@ -565,24 +586,23 @@ static void dccModuleParseDccResume(KviDccRequest *dcc) { if(!dcc->ctcpMsg->msg->haltOutput()) { - QString szError = QString(__tr2qs_ctx("Invalid resume position argument '%1'","dcc")).arg(dcc->szParam3.ptr()); - dcc_module_request_error(dcc,szError); + QString szError = QString(__tr2qs_ctx("Invalid resume position argument '%1'", "dcc")).arg(dcc->szParam3.ptr()); + dcc_module_request_error(dcc, szError); } return; } - if(!g_pDccBroker->handleResumeRequest(dcc,dcc->szParam1.ptr(),dcc->szParam2.ptr(),filePos,dcc->szParam4.ptr())) + if(!g_pDccBroker->handleResumeRequest(dcc, dcc->szParam1.ptr(), dcc->szParam2.ptr(), filePos, dcc->szParam4.ptr())) { //#warning "IF KviOption_boolReplyCtcpErrmsgOnInvalidResume..." if(!dcc->ctcpMsg->msg->haltOutput()) { - QString szError = QString(__tr2qs_ctx("Can't proceed with DCC SEND: transfer not initiated for file %1 on port %2, or invalid resume size","dcc")).arg(dcc->szParam1.ptr()).arg(dcc->szParam2.ptr()); - dcc_module_request_error(dcc,szError); + QString szError = QString(__tr2qs_ctx("Can't proceed with DCC SEND: transfer not initiated for file %1 on port %2, or invalid resume size", "dcc")).arg(dcc->szParam1.ptr()).arg(dcc->szParam2.ptr()); + dcc_module_request_error(dcc, szError); } } } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // RECV //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -590,17 +610,20 @@ static void dccModuleParseDccResume(KviDccRequest *dcc) static void dccModuleParseDccRecv(KviDccRequest * dcc) { // DCC [TS]RECV <filename> <ipaddr> <port> <resume-filesize> - if(!dcc_module_check_limits(dcc))return; - if(!dcc_module_check_concurrent_transfers_limit(dcc))return; + if(!dcc_module_check_limits(dcc)) + return; + if(!dcc_module_check_concurrent_transfers_limit(dcc)) + return; - if(!dcc_module_normalize_target_data(dcc,dcc->szParam2,dcc->szParam3))return; + if(!dcc_module_normalize_target_data(dcc, dcc->szParam2, dcc->szParam3)) + return; if(!(dcc->szParam4.isUnsignedNum())) { if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->outputNoFmt(KVI_OUT_DCCMSG, - __tr2qs_ctx("The above request has resume file size missing, assuming a resume file size of 0","dcc")); + __tr2qs_ctx("The above request has resume file size missing, assuming a resume file size of 0", "dcc")); } dcc->szParam4 = "0"; } @@ -610,7 +633,7 @@ static void dccModuleParseDccRecv(KviDccRequest * dcc) if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("The above request is broken: the filename contains path components, stripping the leading path and trying to continue","dcc"),dcc->szParam1.ptr()); + __tr2qs_ctx("The above request is broken: the filename contains path components, stripping the leading path and trying to continue", "dcc"), dcc->szParam1.ptr()); } dcc->szParam1.cutToLast('/'); } @@ -618,19 +641,19 @@ static void dccModuleParseDccRecv(KviDccRequest * dcc) KviCString szExtensions = dcc->szType; szExtensions.cutRight(4); // cut off RECV - bool bTurboExtension = szExtensions.contains('T',false); + bool bTurboExtension = szExtensions.contains('T', false); #ifdef COMPILE_SSL_SUPPORT - bool bSSLExtension = szExtensions.contains('S',false); -#else //!COMPILE_SSL_SUPPORT - if(szExtensions.contains('S',false)) + bool bSSLExtension = szExtensions.contains('S', false); +#else //!COMPILE_SSL_SUPPORT + if(szExtensions.contains('S', false)) { - dcc_module_request_error(dcc,__tr2qs_ctx("This executable has been compiled without SSL support, the SSL extension to DCC RECV is not available","dcc")); + dcc_module_request_error(dcc, __tr2qs_ctx("This executable has been compiled without SSL support, the SSL extension to DCC RECV is not available", "dcc")); return; } #endif //!COMPILE_SSL_SUPPORT // If we have a file offer for this...do it automatically - KviSharedFile * o = g_pSharedFilesManager->lookupSharedFile(dcc->szParam1.ptr(),dcc->ctcpMsg->pSource,0); + KviSharedFile * o = g_pSharedFilesManager->lookupSharedFile(dcc->szParam1.ptr(), dcc->ctcpMsg->pSource, 0); if(o) { @@ -638,80 +661,81 @@ static void dccModuleParseDccRecv(KviDccRequest * dcc) if(uResumeSize >= o->fileSize()) { // senseless request - QString szError = QString(__tr2qs_ctx("Invalid RECV request: position %1 is larger than file size","dcc")).arg(uResumeSize); - dcc_module_request_error(dcc,szError); + QString szError = QString(__tr2qs_ctx("Invalid RECV request: position %1 is larger than file size", "dcc")).arg(uResumeSize); + dcc_module_request_error(dcc, szError); return; } // ok...we have requested this send -// #warning "Maybe remove this file offer now ?" + // #warning "Maybe remove this file offer now ?" DccDescriptor * d = new DccDescriptor(dcc->pConsole); - d->szNick = dcc->ctcpMsg->pSource->nick(); - d->szUser = dcc->ctcpMsg->pSource->user(); - d->szHost = dcc->ctcpMsg->pSource->host(); + d->szNick = dcc->ctcpMsg->pSource->nick(); + d->szUser = dcc->ctcpMsg->pSource->user(); + d->szHost = dcc->ctcpMsg->pSource->host(); - d->szFileName = dcc->szParam1.ptr(); - d->szFileSize = dcc->szParam4.ptr(); + d->szFileName = dcc->szParam1.ptr(); + d->szFileSize = dcc->szParam4.ptr(); //d->bResume = false; // This is actually useless - d->szLocalFileName = o->absFilePath(); + d->szLocalFileName = o->absFilePath(); d->szLocalFileSize.setNum(o->fileSize()); // Should we look it up again ? + d->bRecvFile = false; + d->bNoAcks = bTurboExtension; - d->bRecvFile = false; - d->bNoAcks = bTurboExtension; - - d->bAutoAccept = true; + d->bAutoAccept = true; d->bIsIncomingAvatar = false; - d->bIsTdcc = bTurboExtension; + d->bIsTdcc = bTurboExtension; #ifdef COMPILE_SSL_SUPPORT - d->bIsSSL = bSSLExtension; + d->bIsSSL = bSSLExtension; #endif d->bOverrideMinimize = false; // We know everything - dcc_fill_local_nick_user_host(d,dcc); + dcc_fill_local_nick_user_host(d, dcc); + d->bDoTimeout = true; - d->bDoTimeout = true; + d->szIp = dcc->szParam2.ptr(); + d->szPort = dcc->szParam3.ptr(); - d->szIp = dcc->szParam2.ptr(); - d->szPort = dcc->szParam3.ptr(); - - d->bActive = true; - dcc_module_set_dcc_type(d,"SEND"); + d->bActive = true; + dcc_module_set_dcc_type(d, "SEND"); d->triggerCreationEvent(); - g_pDccBroker->sendFileExecute(0,d); + g_pDccBroker->sendFileExecute(0, d); return; - - } else { + } + else + { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("%Q [%Q@%Q] is ready to receive the file \"%s\"","dcc"), - &(dcc->ctcpMsg->pSource->nick()), - &(dcc->ctcpMsg->pSource->user()), - &(dcc->ctcpMsg->pSource->host()), - dcc->szParam1.ptr()); + __tr2qs_ctx("%Q [%Q@%Q] is ready to receive the file \"%s\"", "dcc"), + &(dcc->ctcpMsg->pSource->nick()), + &(dcc->ctcpMsg->pSource->user()), + &(dcc->ctcpMsg->pSource->host()), + dcc->szParam1.ptr()); dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("The remote client is listening on interface %s and port %s","dcc"),dcc->szParam2.ptr(),dcc->szParam3.ptr()); + __tr2qs_ctx("The remote client is listening on interface %s and port %s", "dcc"), dcc->szParam2.ptr(), dcc->szParam3.ptr()); KviCString szSwitches = "-c"; - if(bTurboExtension)szSwitches.prepend("-t "); + if(bTurboExtension) + szSwitches.prepend("-t "); #ifdef COMPILE_SSL_SUPPORT - if(bSSLExtension)szSwitches.prepend("-s "); + if(bSSLExtension) + szSwitches.prepend("-s "); #endif dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("Use %c\r![!dbl]dcc.send %s -i=%s -p=%s %Q\r/dcc.send %s -i=%s -p=%s %Q\r%c to send the file (or double-click on the socket)","dcc"), - KviControlCodes::Bold, - szSwitches.ptr(), - dcc->szParam2.ptr(),dcc->szParam3.ptr(),&(dcc->ctcpMsg->pSource->nick()), - szSwitches.ptr(), - dcc->szParam2.ptr(),dcc->szParam3.ptr(),&(dcc->ctcpMsg->pSource->nick()), - KviControlCodes::Bold); + __tr2qs_ctx("Use %c\r![!dbl]dcc.send %s -i=%s -p=%s %Q\r/dcc.send %s -i=%s -p=%s %Q\r%c to send the file (or double-click on the socket)", "dcc"), + KviControlCodes::Bold, + szSwitches.ptr(), + dcc->szParam2.ptr(), dcc->szParam3.ptr(), &(dcc->ctcpMsg->pSource->nick()), + szSwitches.ptr(), + dcc->szParam2.ptr(), dcc->szParam3.ptr(), &(dcc->ctcpMsg->pSource->nick()), + KviControlCodes::Bold); } } @@ -719,27 +743,29 @@ static void dccModuleParseDccRecv(KviDccRequest * dcc) // RSEND //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static void dccModuleParseDccRSend(KviDccRequest *dcc) +static void dccModuleParseDccRSend(KviDccRequest * dcc) { // DCC RSEND <filename> <filesize> -//#warning "Ignore files depending on file type ? (MediaType ?)" + //#warning "Ignore files depending on file type ? (MediaType ?)" // // We have received a DCC RSEND request in the following form // // DCC [ST]RSEND <filename> <filesize> // dcc->szParam1 = dcc->pConsole->decodeText(dcc->szParam1); - if(!dcc_module_check_limits(dcc))return; - if(!dcc_module_check_concurrent_transfers_limit(dcc))return; + if(!dcc_module_check_limits(dcc)) + return; + if(!dcc_module_check_concurrent_transfers_limit(dcc)) + return; if(!(dcc->szParam2.isUnsignedNum())) { if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("The above request is broken: the fourth parameter should be the file size but doesn't appear to be an unsigned number; trying to continue","dcc"),dcc->szParam2.ptr()); + __tr2qs_ctx("The above request is broken: the fourth parameter should be the file size but doesn't appear to be an unsigned number; trying to continue", "dcc"), dcc->szParam2.ptr()); } - dcc->szParam2 = __tr_ctx("<unknown size>","dcc"); + dcc->szParam2 = __tr_ctx("<unknown size>", "dcc"); } if(dcc->szParam1.contains('/')) @@ -747,7 +773,7 @@ static void dccModuleParseDccRSend(KviDccRequest *dcc) if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("The above request is broken: the filename contains path components, stripping the leading path and trying to continue","dcc"),dcc->szParam1.ptr()); + __tr2qs_ctx("The above request is broken: the filename contains path components, stripping the leading path and trying to continue", "dcc"), dcc->szParam1.ptr()); } dcc->szParam1.cutToLast('/'); } @@ -755,13 +781,13 @@ static void dccModuleParseDccRSend(KviDccRequest *dcc) KviCString szExtensions = dcc->szType; szExtensions.cutRight(4); // cut off SEND - bool bTurboExtension = szExtensions.contains('T',false); + bool bTurboExtension = szExtensions.contains('T', false); #ifdef COMPILE_SSL_SUPPORT - bool bSSLExtension = szExtensions.contains('S',false); -#else //!COMPILE_SSL_SUPPORT - if(szExtensions.contains('S',false)) + bool bSSLExtension = szExtensions.contains('S', false); +#else //!COMPILE_SSL_SUPPORT + if(szExtensions.contains('S', false)) { - dcc_module_request_error(dcc,__tr2qs_ctx("This executable has been compiled without SSL support, the SSL extension to DCC RSEND is not available","dcc")); + dcc_module_request_error(dcc, __tr2qs_ctx("This executable has been compiled without SSL support, the SSL extension to DCC RSEND is not available", "dcc")); return; } #endif //!COMPILE_SSL_SUPPORT @@ -769,93 +795,96 @@ static void dccModuleParseDccRSend(KviDccRequest *dcc) //#warning "When behind a firewall, we should reply an error message and avoid setting up the listening connection" DccDescriptor * d = new DccDescriptor(dcc->pConsole); - d->szNick = dcc->ctcpMsg->pSource->nick(); - d->szUser = dcc->ctcpMsg->pSource->user(); - d->szHost = dcc->ctcpMsg->pSource->host(); - d->szIp = __tr2qs_ctx("(unknown)","dcc"); - d->szPort = d->szIp; + d->szNick = dcc->ctcpMsg->pSource->nick(); + d->szUser = dcc->ctcpMsg->pSource->user(); + d->szHost = dcc->ctcpMsg->pSource->host(); + d->szIp = __tr2qs_ctx("(unknown)", "dcc"); + d->szPort = d->szIp; QString tmp; - if(!dcc_kvs_get_listen_ip_address(0,d->console(),tmp)) + if(!dcc_kvs_get_listen_ip_address(0, d->console(), tmp)) { d->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("No suitable interface to listen on, trying to continue anyway...","dcc")); + __tr2qs_ctx("No suitable interface to listen on, trying to continue anyway...", "dcc")); d->szListenIp = "0.0.0.0"; - } else - d->szListenIp=QString(tmp); - - d->szListenPort = "0"; - dcc_fill_local_nick_user_host(d,dcc); + } + else + d->szListenIp = QString(tmp); + d->szListenPort = "0"; + dcc_fill_local_nick_user_host(d, dcc); - d->szFileName = dcc->szParam1.ptr(); - d->szFileSize = dcc->szParam2.ptr(); - d->bActive = false; // we have to listen! - d->bResume = false; - d->bRecvFile = true; // we have to receive the file! + d->szFileName = dcc->szParam1.ptr(); + d->szFileSize = dcc->szParam2.ptr(); + d->bActive = false; // we have to listen! + d->bResume = false; + d->bRecvFile = true; // we have to receive the file! #ifdef COMPILE_SSL_SUPPORT - d->bIsSSL = bSSLExtension; + d->bIsSSL = bSSLExtension; #endif - d->bIsTdcc = bTurboExtension; - d->bSendRequest = true; // we have to send the [ST]RECV request back - d->bNoAcks = d->bIsTdcc; + d->bIsTdcc = bTurboExtension; + d->bSendRequest = true; // we have to send the [ST]RECV request back + d->bNoAcks = d->bIsTdcc; d->bOverrideMinimize = false; - d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccSend); - d->bIsIncomingAvatar = g_pApp->findPendingAvatarChange(dcc->pConsole,d->szNick.toUtf8().data(),d->szFileName.toUtf8().data()); + d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccSend); + d->bIsIncomingAvatar = g_pApp->findPendingAvatarChange(dcc->pConsole, d->szNick.toUtf8().data(), d->szFileName.toUtf8().data()); if(KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault)) { d->szFakeIp = KVI_OPTION_STRING(KviOption_stringDefaultDccFakeAddress); - if(d->szFakeIp.isEmpty())KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault) = false; + if(d->szFakeIp.isEmpty()) + KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault) = false; } - if(KVI_OPTION_BOOL(KviOption_boolAutoAcceptIncomingAvatars))d->bAutoAccept = d->bAutoAccept || d->bIsIncomingAvatar; + if(KVI_OPTION_BOOL(KviOption_boolAutoAcceptIncomingAvatars)) + d->bAutoAccept = d->bAutoAccept || d->bIsIncomingAvatar; - dcc_module_set_dcc_type(d,"RECV"); + dcc_module_set_dcc_type(d, "RECV"); d->triggerCreationEvent(); g_pDccBroker->recvFileManage(d); } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // GET //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static void dccModuleParseDccGet(KviDccRequest *dcc) +static void dccModuleParseDccGet(KviDccRequest * dcc) { // DCC [TS]GET <filename> [filesize] // -> DCC [TS]SEND <filename> <ipaddr> <port> <filesize> // ... - dcc->szParam1=dcc->pConsole->decodeText(dcc->szParam1); + dcc->szParam1 = dcc->pConsole->decodeText(dcc->szParam1); bool bOk; unsigned int uSize = dcc->szParam2.toUInt(&bOk); - if(!bOk)uSize = 0; + if(!bOk) + uSize = 0; - if(!dcc_module_check_limits(dcc))return; - if(!dcc_module_check_concurrent_transfers_limit(dcc))return; + if(!dcc_module_check_limits(dcc)) + return; + if(!dcc_module_check_concurrent_transfers_limit(dcc)) + return; KviCString szExtensions = dcc->szType; szExtensions.cutRight(3); // cut off GET - bool bTurboExtension = szExtensions.contains('T',false); + bool bTurboExtension = szExtensions.contains('T', false); #ifdef COMPILE_SSL_SUPPORT - bool bSSLExtension = szExtensions.contains('S',false); -#else //!COMPILE_SSL_SUPPORT - if(szExtensions.contains('S',false)) + bool bSSLExtension = szExtensions.contains('S', false); +#else //!COMPILE_SSL_SUPPORT + if(szExtensions.contains('S', false)) { - dcc_module_request_error(dcc,__tr2qs_ctx("This executable has been compiled without SSL support, the SSL extension to DCC GET is not available","dcc")); + dcc_module_request_error(dcc, __tr2qs_ctx("This executable has been compiled without SSL support, the SSL extension to DCC GET is not available", "dcc")); return; } #endif //!COMPILE_SSL_SUPPORT - KviSharedFile * o = g_pSharedFilesManager->lookupSharedFile(dcc->szParam1.ptr(),dcc->ctcpMsg->pSource,uSize); + KviSharedFile * o = g_pSharedFilesManager->lookupSharedFile(dcc->szParam1.ptr(), dcc->ctcpMsg->pSource, uSize); if(!o) { if(!dcc->ctcpMsg->msg->haltOutput()) { - QString szError = QString(__tr2qs_ctx("No file offer named '%1' (with size %2) available for %3 [%4@%5]","dcc")).arg(dcc->szParam1.ptr()).arg(uSize > 0 ? dcc->szParam2.ptr() : __tr_ctx("\"any\"","dcc")).arg(dcc->ctcpMsg->pSource->nick(),dcc->ctcpMsg->pSource->user(),dcc->ctcpMsg->pSource->host()); - dcc_module_request_error(dcc,szError); + QString szError = QString(__tr2qs_ctx("No file offer named '%1' (with size %2) available for %3 [%4@%5]", "dcc")).arg(dcc->szParam1.ptr()).arg(uSize > 0 ? dcc->szParam2.ptr() : __tr_ctx("\"any\"", "dcc")).arg(dcc->ctcpMsg->pSource->nick(), dcc->ctcpMsg->pSource->user(), dcc->ctcpMsg->pSource->host()); + dcc_module_request_error(dcc, szError); } return; } @@ -872,7 +901,6 @@ static void dccModuleParseDccGet(KviDccRequest *dcc) KviCString szSubproto("RSEND"); szSubproto.prepend(szExtensions); - QString szFileName = QFileInfo(o->absFilePath()).fileName(); if(o->name() != szFileName) { @@ -885,91 +913,93 @@ static void dccModuleParseDccGet(KviDccRequest *dcc) // now add a file offer, so he we will accept it automatically // 120 secs is a reasonable timeout QString szMask; - dcc->ctcpMsg->pSource->mask(szMask,KviIrcMask::NickUserHost); + dcc->ctcpMsg->pSource->mask(szMask, KviIrcMask::NickUserHost); KviSharedFile * pOld = o; - o = g_pSharedFilesManager->addSharedFile(szFileName,o->absFilePath(),szMask,120); - if(!o)o = pOld; // give up (FIXME: should we notify that ?) + o = g_pSharedFilesManager->addSharedFile(szFileName, o->absFilePath(), szMask, 120); + if(!o) + o = pOld; // give up (FIXME: should we notify that ?) } if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("Accepting file request from %Q [%Q@%Q] for '%s' (real file: %Q), offering DCC %s since we can't accept incoming connections (user option)","dcc"), - &(dcc->ctcpMsg->pSource->nick()), - &(dcc->ctcpMsg->pSource->user()), - &(dcc->ctcpMsg->pSource->host()),dcc->szParam1.ptr(), - &(o->absFilePath()),szSubproto.ptr()); + __tr2qs_ctx("Accepting file request from %Q [%Q@%Q] for '%s' (real file: %Q), offering DCC %s since we can't accept incoming connections (user option)", "dcc"), + &(dcc->ctcpMsg->pSource->nick()), + &(dcc->ctcpMsg->pSource->user()), + &(dcc->ctcpMsg->pSource->host()), dcc->szParam1.ptr(), + &(o->absFilePath()), szSubproto.ptr()); } 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(), - dcc->pConsole->connection()->encodeText(QString::number(o->fileSize())).data(), - 0x01); + dcc->pConsole->connection()->encodeText(dcc->ctcpMsg->pSource->nick()).data(), + 0x01, szSubproto.ptr(), + dcc->pConsole->connection()->encodeText(dcc->szParam1.ptr()).data(), + dcc->pConsole->connection()->encodeText(QString::number(o->fileSize())).data(), + 0x01); return; } - DccDescriptor * d = new DccDescriptor(dcc->pConsole); - d->szNick = dcc->ctcpMsg->pSource->nick(); - d->szLocalFileName = o->absFilePath(); - d->szUser = dcc->ctcpMsg->pSource->user(); - d->szHost = dcc->ctcpMsg->pSource->host(); - d->bRecvFile = false; - dcc_fill_local_nick_user_host(d,dcc); + d->szNick = dcc->ctcpMsg->pSource->nick(); + d->szLocalFileName = o->absFilePath(); + d->szUser = dcc->ctcpMsg->pSource->user(); + d->szHost = dcc->ctcpMsg->pSource->host(); + d->bRecvFile = false; + dcc_fill_local_nick_user_host(d, dcc); QString tmp; - if(!dcc_kvs_get_listen_ip_address(0,d->console(),tmp)) + if(!dcc_kvs_get_listen_ip_address(0, d->console(), tmp)) { d->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("No suitable interface to listen on, trying to continue anyway...","dcc")); + __tr2qs_ctx("No suitable interface to listen on, trying to continue anyway...", "dcc")); d->szListenIp = "0.0.0.0"; - } else - d->szListenIp=QString(tmp); + } + else + d->szListenIp = QString(tmp); //#warning "DO STH WITH THIS PORT (HOW TO SPECIFY IT ?)" - d->szListenPort = "0"; // any port is ok + d->szListenPort = "0"; // any port is ok if(KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault)) { d->szFakeIp = KVI_OPTION_STRING(KviOption_stringDefaultDccFakeAddress); - if(d->szFakeIp.isEmpty())KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault) = false; + if(d->szFakeIp.isEmpty()) + KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault) = false; } - d->bDoTimeout = true; - d->szIp = __tr2qs_ctx("(unknown)","dcc"); - d->szPort = d->szIp; - d->bActive = false; - d->bSendRequest = true; - d->bIsTdcc = bTurboExtension; + d->bDoTimeout = true; + d->szIp = __tr2qs_ctx("(unknown)", "dcc"); + d->szPort = d->szIp; + d->bActive = false; + d->bSendRequest = true; + d->bIsTdcc = bTurboExtension; #ifdef COMPILE_SSL_SUPPORT - d->bIsSSL = bSSLExtension; + d->bIsSSL = bSSLExtension; #endif - d->bNoAcks = d->bIsTdcc; + d->bNoAcks = d->bIsTdcc; d->bOverrideMinimize = false; - dcc_module_set_dcc_type(d,"SEND"); + dcc_module_set_dcc_type(d, "SEND"); if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("Accepting file request from %Q [%Q@%Q] for '%s' (real file: %Q), offering DCC %Q","dcc"), - &(dcc->ctcpMsg->pSource->nick()), - &(dcc->ctcpMsg->pSource->user()), - &(dcc->ctcpMsg->pSource->host()), - dcc->szParam1.ptr(), - &(o->absFilePath()),&(d->szType)); + __tr2qs_ctx("Accepting file request from %Q [%Q@%Q] for '%s' (real file: %Q), offering DCC %Q", "dcc"), + &(dcc->ctcpMsg->pSource->nick()), + &(dcc->ctcpMsg->pSource->user()), + &(dcc->ctcpMsg->pSource->host()), + dcc->szParam1.ptr(), + &(o->absFilePath()), &(d->szType)); } d->triggerCreationEvent(); - g_pDccBroker->sendFileExecute(0,d); + g_pDccBroker->sendFileExecute(0, d); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // VOICE //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static void dccModuleParseDccVoice(KviDccRequest *dcc) +static void dccModuleParseDccVoice(KviDccRequest * dcc) { // // We have received a DCC VOICE request in the following form: @@ -980,15 +1010,17 @@ static void dccModuleParseDccVoice(KviDccRequest *dcc) // ... Easy task :) // - if(!dcc_module_check_limits(dcc))return; + if(!dcc_module_check_limits(dcc)) + return; - if(!dcc_module_normalize_target_data(dcc,dcc->szParam2,dcc->szParam3))return; + if(!dcc_module_normalize_target_data(dcc, dcc->szParam2, dcc->szParam3)) + return; #ifdef COMPILE_DISABLE_DCC_VOICE if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCERROR, - __tr2qs_ctx("The above request can't be accepted: DCC VOICE support not enabled at compilation time ","dcc")); + __tr2qs_ctx("The above request can't be accepted: DCC VOICE support not enabled at compilation time ", "dcc")); return; } #endif @@ -998,7 +1030,7 @@ static void dccModuleParseDccVoice(KviDccRequest *dcc) if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCERROR, - __tr2qs_ctx("The above request can't be accepted: unsupported codec '%s'","dcc"),dcc->szParam1.ptr()); + __tr2qs_ctx("The above request can't be accepted: unsupported codec '%s'", "dcc"), dcc->szParam1.ptr()); return; } } @@ -1011,39 +1043,36 @@ static void dccModuleParseDccVoice(KviDccRequest *dcc) if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, - __tr2qs_ctx("The above request appears to be broken: invalid sample-rate '%s', defaulting to 8000","dcc"),dcc->szParam4.ptr()); + __tr2qs_ctx("The above request appears to be broken: invalid sample-rate '%s', defaulting to 8000", "dcc"), dcc->szParam4.ptr()); } iSampleRate = 8000; } - DccDescriptor * d = new DccDescriptor(dcc->pConsole); - d->szNick = dcc->ctcpMsg->pSource->nick(); - d->szUser = dcc->ctcpMsg->pSource->user(); - d->szHost = dcc->ctcpMsg->pSource->host(); - dcc_fill_local_nick_user_host(d,dcc); + d->szNick = dcc->ctcpMsg->pSource->nick(); + d->szUser = dcc->ctcpMsg->pSource->user(); + d->szHost = dcc->ctcpMsg->pSource->host(); + dcc_fill_local_nick_user_host(d, dcc); - - d->szIp = dcc->szParam2.ptr(); - d->szPort = dcc->szParam3.ptr(); - d->bActive = true; // we have to connect - d->bIsTdcc = false; - d->bNoAcks = false; // this has no meaning in voice - d->szCodec = dcc->szParam1; - d->iSampleRate = iSampleRate; + d->szIp = dcc->szParam2.ptr(); + d->szPort = dcc->szParam3.ptr(); + d->bActive = true; // we have to connect + d->bIsTdcc = false; + d->bNoAcks = false; // this has no meaning in voice + d->szCodec = dcc->szParam1; + d->iSampleRate = iSampleRate; d->bOverrideMinimize = false; - d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccVoice); - dcc_module_set_dcc_type(d,"VOICE"); + d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccVoice); + dcc_module_set_dcc_type(d, "VOICE"); d->triggerCreationEvent(); g_pDccBroker->activeVoiceManage(d); } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // VIDEO //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static void dccModuleParseDccVideo(KviDccRequest *dcc) +static void dccModuleParseDccVideo(KviDccRequest * dcc) { // // We have received a DCC VIDEO request in the following form: @@ -1054,15 +1083,17 @@ static void dccModuleParseDccVideo(KviDccRequest *dcc) // ... Easy task :) // - if(!dcc_module_check_limits(dcc))return; + if(!dcc_module_check_limits(dcc)) + return; - if(!dcc_module_normalize_target_data(dcc,dcc->szParam2,dcc->szParam3))return; + if(!dcc_module_normalize_target_data(dcc, dcc->szParam2, dcc->szParam3)) + return; #ifdef COMPILE_DISABLE_DCC_VIDEO if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCERROR, - __tr2qs_ctx("The above request can't be accepted: DCC VIDEO support not enabled at compilation time ","dcc")); + __tr2qs_ctx("The above request can't be accepted: DCC VIDEO support not enabled at compilation time ", "dcc")); return; } #else @@ -1072,42 +1103,40 @@ static void dccModuleParseDccVideo(KviDccRequest *dcc) if(!dcc->ctcpMsg->msg->haltOutput()) { dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCERROR, - __tr2qs_ctx("The above request can't be accepted: unsupported codec '%s'","dcc"),dcc->szParam1.ptr()); + __tr2qs_ctx("The above request can't be accepted: unsupported codec '%s'", "dcc"), dcc->szParam1.ptr()); return; } } -// bool bOk; - -// int iSampleRate = dcc->szParam4.toInt(&bOk); -// if(!bOk) -// { -// if(!dcc->ctcpMsg->msg->haltOutput()) -// { -// dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, -// __tr2qs_ctx("The above request appears to be broken: Invalid sample-rate '%s', defaulting to 8000","dcc"),dcc->szParam4.ptr()); -// } -// iSampleRate = 8000; -// } + // bool bOk; + // int iSampleRate = dcc->szParam4.toInt(&bOk); + // if(!bOk) + // { + // if(!dcc->ctcpMsg->msg->haltOutput()) + // { + // dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG, + // __tr2qs_ctx("The above request appears to be broken: Invalid sample-rate '%s', defaulting to 8000","dcc"),dcc->szParam4.ptr()); + // } + // iSampleRate = 8000; + // } DccDescriptor * d = new DccDescriptor(dcc->pConsole); - d->szNick = dcc->ctcpMsg->pSource->nick(); - d->szUser = dcc->ctcpMsg->pSource->user(); - d->szHost = dcc->ctcpMsg->pSource->host(); - dcc_fill_local_nick_user_host(d,dcc); + d->szNick = dcc->ctcpMsg->pSource->nick(); + d->szUser = dcc->ctcpMsg->pSource->user(); + d->szHost = dcc->ctcpMsg->pSource->host(); + dcc_fill_local_nick_user_host(d, dcc); - - d->szIp = dcc->szParam2.ptr(); - d->szPort = dcc->szParam3.ptr(); - d->bActive = true; // we have to connect - d->bIsTdcc = false; - d->bNoAcks = false; // this has no meaning in voice - d->szCodec = dcc->szParam1; -// d->iSampleRate = iSampleRate; + d->szIp = dcc->szParam2.ptr(); + d->szPort = dcc->szParam3.ptr(); + d->bActive = true; // we have to connect + d->bIsTdcc = false; + d->bNoAcks = false; // this has no meaning in voice + d->szCodec = dcc->szParam1; + // d->iSampleRate = iSampleRate; d->bOverrideMinimize = false; - d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccVideo); - dcc_module_set_dcc_type(d,"VIDEO"); + d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccVideo); + dcc_module_set_dcc_type(d, "VIDEO"); d->triggerCreationEvent(); g_pDccBroker->activeVideoManage(d); #endif @@ -1117,7 +1146,7 @@ static void dccModuleParseDccVideo(KviDccRequest *dcc) // CANVAS //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static void dccModuleParseDccCanvas(KviDccRequest *dcc) +static void dccModuleParseDccCanvas(KviDccRequest * dcc) { // // We have received a DCC CANVAS request in the following form: @@ -1127,9 +1156,11 @@ static void dccModuleParseDccCanvas(KviDccRequest *dcc) // This means that we're requested to setup an ACTIVE canvas connection // ... Easy task :) // - if(!dcc_module_check_limits(dcc))return; + if(!dcc_module_check_limits(dcc)) + return; - if(!dcc_module_normalize_target_data(dcc,dcc->szParam2,dcc->szParam3))return; + if(!dcc_module_normalize_target_data(dcc, dcc->szParam2, dcc->szParam3)) + return; // Actually unused parameter // if(!(kvi_strEqualCI("canvas",dcc->szParam1.ptr()))) @@ -1142,20 +1173,19 @@ static void dccModuleParseDccCanvas(KviDccRequest *dcc) // } #ifdef COMPILE_DCC_CANVAS DccDescriptor * d = new DccDescriptor(dcc->pConsole); - d->szNick = dcc->ctcpMsg->pSource->nick(); - d->szUser = dcc->ctcpMsg->pSource->username(); - d->szHost = dcc->ctcpMsg->pSource->host(); - dcc_fill_local_nick_user_host(d,dcc); - + d->szNick = dcc->ctcpMsg->pSource->nick(); + d->szUser = dcc->ctcpMsg->pSource->username(); + d->szHost = dcc->ctcpMsg->pSource->host(); + dcc_fill_local_nick_user_host(d, dcc); - d->szIp = dcc->szParam2.ptr(); - d->szPort = dcc->szParam3.ptr(); - d->bActive = true; // we have to connect - d->bIsTdcc = false; - d->bNoAcks = false; // this has no meaning in canvas + d->szIp = dcc->szParam2.ptr(); + d->szPort = dcc->szParam3.ptr(); + d->bActive = true; // we have to connect + d->bIsTdcc = false; + d->bNoAcks = false; // this has no meaning in canvas d->bOverrideMinimize = false; - d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccCanvas); - dcc_module_set_dcc_type(d,"CANVAS"); + d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccCanvas); + dcc_module_set_dcc_type(d, "CANVAS"); d->triggerCreationEvent(); g_pDccBroker->activeCanvasManage(d); #endif @@ -1176,8 +1206,7 @@ typedef struct _dccParseProcEntry #define KVI_NUM_KNOWN_DCC_TYPES 28 -static dccParseProcEntry dccParseProcTable[KVI_NUM_KNOWN_DCC_TYPES]= -{ +static dccParseProcEntry dccParseProcTable[KVI_NUM_KNOWN_DCC_TYPES] = { // clang-format off { "CHAT" , dccModuleParseDccChat }, { "SCHAT" , dccModuleParseDccChat }, @@ -1210,18 +1239,16 @@ static dccParseProcEntry dccParseProcTable[KVI_NUM_KNOWN_DCC_TYPES]= // clang-format on }; - - // We want C linkage on this one: we want to be able to dlsym() it with a simple name // FIXME: Is this portable enough ? Or is better to have a table entry ? -KVIMODULEEXPORTFUNC void dccModuleCtcpDccParseRoutine(KviDccRequest *dcc) +KVIMODULEEXPORTFUNC void dccModuleCtcpDccParseRoutine(KviDccRequest * dcc) { dcc->szType.toUpper(); - for(int i=0;i<KVI_NUM_KNOWN_DCC_TYPES;i++) + for(int i = 0; i < KVI_NUM_KNOWN_DCC_TYPES; i++) { - if(kvi_strEqualCS(dccParseProcTable[i].type,dcc->szType.ptr())) + if(kvi_strEqualCS(dccParseProcTable[i].type, dcc->szType.ptr())) { (dccParseProcTable[i].proc)(dcc); return; @@ -1230,7 +1257,7 @@ KVIMODULEEXPORTFUNC void dccModuleCtcpDccParseRoutine(KviDccRequest *dcc) // ops...we don't know this dcc type if(!dcc->ctcpMsg->msg->haltOutput()) { - QString szError = QString(__tr2qs_ctx("Unknown DCC type '%1'","dcc")).arg(dcc->szType.ptr()); - dcc_module_request_error(dcc,szError); + QString szError = QString(__tr2qs_ctx("Unknown DCC type '%1'", "dcc")).arg(dcc->szType.ptr()); + dcc_module_request_error(dcc, szError); } } |
