diff options
| author | 2016-04-29 23:57:30 +0100 | |
|---|---|---|
| committer | 2016-04-29 23:57:48 +0100 | |
| commit | 690dd7a33ddc90678367d73adf313533536e10f2 (patch) | |
| tree | 2276fe7c384ebbc222b40a19c536d5c3c5606ce8 /src/modules/dcc | |
| parent | Add config for clang-format. (diff) | |
| download | KVIrc-690dd7a33ddc90678367d73adf313533536e10f2.tar.gz KVIrc-690dd7a33ddc90678367d73adf313533536e10f2.tar.bz2 KVIrc-690dd7a33ddc90678367d73adf313533536e10f2.zip | |
Apply clang-format
Diffstat (limited to 'src/modules/dcc')
34 files changed, 5140 insertions, 4527 deletions
diff --git a/src/modules/dcc/DccBroker.cpp b/src/modules/dcc/DccBroker.cpp index 53df4ffeb..08e9373d8 100644 --- a/src/modules/dcc/DccBroker.cpp +++ b/src/modules/dcc/DccBroker.cpp @@ -31,11 +31,11 @@ #include "DccVoiceWindow.h" #ifndef COMPILE_DISABLE_DCC_VIDEO - #include "DccVideoWindow.h" +#include "DccVideoWindow.h" #endif #ifdef COMPILE_DCC_CANVAS - #include "DccCanvasWindow.h" +#include "DccCanvasWindow.h" #endif #include "KviApplication.h" @@ -60,7 +60,7 @@ extern KVIRC_API KviSharedFilesManager * g_pSharedFilesManager; //#warning "The broker might lookup the remote host name" DccBroker::DccBroker() -: QObject(0) + : QObject(0) { setObjectName("dcc_broker"); DccFileTransfer::init(); @@ -71,22 +71,23 @@ DccBroker::DccBroker() m_pDccWindowList = new KviPointerList<KviWindow>; m_pDccWindowList->setAutoDelete(false); - m_pZeroPortTags = new KviPointerHashTable<QString,KviDccZeroPortTag>(17); + m_pZeroPortTags = new KviPointerHashTable<QString, KviDccZeroPortTag>(17); m_pZeroPortTags->setAutoDelete(true); } DccBroker::~DccBroker() { delete m_pZeroPortTags; - while(m_pBoxList->first())delete m_pBoxList->first(); + while(m_pBoxList->first()) + delete m_pBoxList->first(); delete m_pBoxList; m_pBoxList = 0; - while(m_pDccWindowList->first())delete m_pDccWindowList->first(); + while(m_pDccWindowList->first()) + delete m_pDccWindowList->first(); delete m_pDccWindowList; DccFileTransfer::done(); } - KviDccZeroPortTag * DccBroker::addZeroPortTag() { static unsigned int g_uNextZeroPortTag = 0; @@ -97,14 +98,15 @@ KviDccZeroPortTag * DccBroker::addZeroPortTag() //t->m_szTag.prepend("mIrc-zero-port-"); t->m_uResumePosition = 0; // FIXME: we should clear this dict if it grows too high.... - m_pZeroPortTags->insert(t->m_szTag,t); + m_pZeroPortTags->insert(t->m_szTag, t); return t; } -KviDccZeroPortTag * DccBroker::findZeroPortTag(const QString &szTag) +KviDccZeroPortTag * DccBroker::findZeroPortTag(const QString & szTag) { KviDccZeroPortTag * t = m_pZeroPortTags->find(szTag); - if(!t)return 0; + if(!t) + return 0; if(t->m_tTimestamp.secsTo(QDateTime::currentDateTime()) > 180) { // too late man... @@ -114,7 +116,7 @@ KviDccZeroPortTag * DccBroker::findZeroPortTag(const QString &szTag) return t; } -void DccBroker::removeZeroPortTag(const QString &szTag) +void DccBroker::removeZeroPortTag(const QString & szTag) { m_pZeroPortTags->remove(szTag); } @@ -124,7 +126,7 @@ unsigned int DccBroker::dccBoxCount() return m_pBoxList->count(); } -void DccBroker::unregisterDccWindow(KviWindow *wnd) +void DccBroker::unregisterDccWindow(KviWindow * wnd) { m_pDccWindowList->removeRef(wnd); } @@ -141,9 +143,10 @@ void DccBroker::cancelDcc(DccDescriptor * dcc) dcc = 0; } -void DccBroker::cancelDcc(DccDialog *box,DccDescriptor * dcc) +void DccBroker::cancelDcc(DccDialog * box, DccDescriptor * dcc) { - if(box)box->forgetDescriptor(); + if(box) + box->forgetDescriptor(); delete dcc; dcc = 0; } @@ -156,42 +159,45 @@ void DccBroker::rsendManage(DccDescriptor * dcc) { // We need the filename... QFileInfo fi(dcc->szLocalFileName); - if(fi.exists())rsendExecute(0,dcc); - else rsendAskForFileName(dcc); + if(fi.exists()) + rsendExecute(0, dcc); + else + rsendAskForFileName(dcc); } void DccBroker::rsendAskForFileName(DccDescriptor * dcc) { QStringList filenames; if( - KviFileDialog::askForOpenFileNames( - filenames, - __tr2qs_ctx("Choose Files to Send - KVIrc","dcc"), - QString(), - QString(), - false, - true, - g_pMainWindow - ) - ) { - if(filenames.count() > 0) + KviFileDialog::askForOpenFileNames( + filenames, + __tr2qs_ctx("Choose Files to Send - KVIrc", "dcc"), + QString(), + QString(), + false, + true, + g_pMainWindow)) + { + if(filenames.count() > 0) + { + DccDescriptor * d; + QStringList::Iterator it = filenames.begin(); + while(it != filenames.end()) { - DccDescriptor * d; - QStringList::Iterator it=filenames.begin(); - while(it != filenames.end()) - { - d = new DccDescriptor(*dcc); - d->szLocalFileName = *(it); - d->szLocalFileName = d->szLocalFileName.trimmed(); - ++it; - if(d->szLocalFileName.isEmpty()) - cancelDcc(d); - else - rsendExecute(d); - } - delete dcc; + d = new DccDescriptor(*dcc); + d->szLocalFileName = *(it); + d->szLocalFileName = d->szLocalFileName.trimmed(); + ++it; + if(d->szLocalFileName.isEmpty()) + cancelDcc(d); + else + rsendExecute(d); } - } else { + delete dcc; + } + } + else + { cancelDcc(dcc); } } @@ -202,8 +208,8 @@ void DccBroker::rsendExecute(DccDescriptor * dcc) { // No way...we NEED the right IRC context... g_pApp->activeConsole()->output(KVI_OUT_DCCERROR, - __tr2qs_ctx("Can't send DCC %Q request to %Q: IRC connection has been terminated","dcc"), - &(dcc->szType),&(dcc->szNick)); + __tr2qs_ctx("Can't send DCC %Q request to %Q: IRC connection has been terminated", "dcc"), + &(dcc->szType), &(dcc->szNick)); delete dcc; return; } @@ -212,8 +218,8 @@ void DccBroker::rsendExecute(DccDescriptor * dcc) QFileInfo fi(dcc->szLocalFileName); if(!(fi.exists() && fi.isReadable() && (fi.isFile()) && (fi.size() > 0))) { - dcc->console()->output(KVI_OUT_DCCERROR,__tr2qs_ctx("Can't open file %Q for reading","dcc"), - &(dcc->szLocalFileName)); + dcc->console()->output(KVI_OUT_DCCERROR, __tr2qs_ctx("Can't open file %Q for reading", "dcc"), + &(dcc->szLocalFileName)); delete dcc; return; } @@ -222,7 +228,7 @@ void DccBroker::rsendExecute(DccDescriptor * dcc) dcc->szFileName = QFileInfo(dcc->szFileName).fileName(); QString fName = dcc->szFileName; - fName.replace(' ',"\\040"); // be cool :) + fName.replace(' ', "\\040"); // be cool :) QString szTag; if(dcc->isZeroPortRequest()) @@ -236,21 +242,23 @@ void DccBroker::rsendExecute(DccDescriptor * dcc) // DCC [ST]SEND <filename> <fakeipaddress> <zero-port> <filesize> <sessionid> 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(), - dcc->console()->connection()->encodeText(QString::number(fi.size())).data(), - dcc->console()->connection()->encodeText(szTag).data(), - 0x01); - } else { + dcc->console()->connection()->encodeText(dcc->szNick).data(), + 0x01, + dcc->console()->connection()->encodeText(dcc->szType).data(), + dcc->console()->connection()->encodeText(fName).data(), + 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 %s%c", - dcc->console()->connection()->encodeText(dcc->szNick).data(), - 0x01, - dcc->console()->connection()->encodeText(dcc->szType).data(), - dcc->console()->connection()->encodeText(fName).data(), - dcc->console()->connection()->encodeText(QString::number(fi.size())).data(), - 0x01); + dcc->console()->connection()->encodeText(dcc->szNick).data(), + 0x01, + dcc->console()->connection()->encodeText(dcc->szType).data(), + dcc->console()->connection()->encodeText(fName).data(), + dcc->console()->connection()->encodeText(QString::number(fi.size())).data(), + 0x01); szTag = dcc->szFileName; } @@ -259,18 +267,18 @@ void DccBroker::rsendExecute(DccDescriptor * dcc) QString szMask = dcc->szNick; szMask += "!*@*"; - g_pSharedFilesManager->addSharedFile(szTag,dcc->szLocalFileName,szMask,120); + g_pSharedFilesManager->addSharedFile(szTag, dcc->szLocalFileName, szMask, 120); delete dcc; } -void DccBroker::rsendExecute(DccDialog * box,DccDescriptor * dcc) +void DccBroker::rsendExecute(DccDialog * box, DccDescriptor * dcc) { - if(box)box->forgetDescriptor(); + if(box) + box->forgetDescriptor(); rsendExecute(dcc); } - /////////////////////////////////////////////////////////////////////////////// // DCC CHAT /////////////////////////////////////////////////////////////////////////////// @@ -281,46 +289,51 @@ void DccBroker::handleChatRequest(DccDescriptor * dcc) { // FIXME: better message ? Secure Direct Client Connection...eventually // need confirmation - QString tmp = __tr2qs_ctx( \ - "<b>%1 [%2@%3]</b> requests a " \ - "<b>Direct Client Connection</b> in <b>%4</b> mode.<br>", \ - "dcc").arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szType); + QString tmp = __tr2qs_ctx( + "<b>%1 [%2@%3]</b> requests a " + "<b>Direct Client Connection</b> in <b>%4</b> mode.<br>", + "dcc") + .arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szType); #ifdef COMPILE_SSL_SUPPORT - if(dcc->bIsSSL)tmp += __tr2qs_ctx("The connection will be secured using SSL.<br>","dcc"); + if(dcc->bIsSSL) + tmp += __tr2qs_ctx("The connection will be secured using SSL.<br>", "dcc"); #endif if(dcc->isZeroPortRequest()) { - tmp += __tr2qs_ctx( \ - "You will be the passive side of the connection.<br>" \ - ,"dcc"); - } else { - tmp += __tr2qs_ctx( \ - "The connection target will be host <b>%1</b> on port <b>%2</b><br>" \ - ,"dcc").arg(dcc->szIp, dcc->szPort); + tmp += __tr2qs_ctx( + "You will be the passive side of the connection.<br>", "dcc"); + } + else + { + tmp += __tr2qs_ctx( + "The connection target will be host <b>%1</b> on port <b>%2</b><br>", "dcc") + .arg(dcc->szIp, dcc->szPort); } + QString caption = __tr2qs_ctx("DCC %1 Request - KVIrc", "dcc").arg(dcc->szType); - QString caption = __tr2qs_ctx("DCC %1 Request - KVIrc","dcc").arg(dcc->szType); - - DccAcceptDialog * box = new DccAcceptDialog(this,dcc,tmp,caption); + DccAcceptDialog * box = new DccAcceptDialog(this, dcc, tmp, caption); m_pBoxList->append(box); - connect(box,SIGNAL(accepted(DccDialog *,DccDescriptor *)), - this,SLOT(executeChat(DccDialog *,DccDescriptor *))); - connect(box,SIGNAL(rejected(DccDialog *,DccDescriptor *)), - this,SLOT(cancelDcc(DccDialog *,DccDescriptor *))); + connect(box, SIGNAL(accepted(DccDialog *, DccDescriptor *)), + this, SLOT(executeChat(DccDialog *, DccDescriptor *))); + connect(box, SIGNAL(rejected(DccDialog *, DccDescriptor *)), + this, SLOT(cancelDcc(DccDialog *, DccDescriptor *))); box->show(); - } else { + } + else + { // auto accept - executeChat(0,dcc); + executeChat(0, dcc); } } -void DccBroker::executeChat(DccDialog *box,DccDescriptor * dcc) +void DccBroker::executeChat(DccDialog * box, DccDescriptor * dcc) { - if(box)box->forgetDescriptor(); + if(box) + box->forgetDescriptor(); if(!g_pApp->windowExists(dcc->console())) { @@ -332,13 +345,11 @@ void DccBroker::executeChat(DccDialog *box,DccDescriptor * dcc) szSubProto.toLower(); QString tmp = QString("dcc: %1 %2@%3:%4").arg(szSubProto.ptr(), dcc->szNick, dcc->szIp, dcc->szPort); - DccChatWindow * chat = new DccChatWindow(dcc,tmp.toUtf8().data()); + DccChatWindow * chat = new DccChatWindow(dcc, tmp.toUtf8().data()); - bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : \ - (KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChat) || \ - (dcc->bAutoAccept && KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChatWhenAutoAccepted))); + bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : (KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChat) || (dcc->bAutoAccept && KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChatWhenAutoAccepted))); - g_pMainWindow->addWindow(chat,!bMinimized); + g_pMainWindow->addWindow(chat, !bMinimized); m_pDccWindowList->append(chat); } @@ -352,28 +363,31 @@ void DccBroker::activeVoiceManage(DccDescriptor * dcc) { // need confirmation QString tmp = __tr2qs_ctx( - "<b>%1 [%2@%3]</b> requests a<br>" \ - "<b>Direct Client Connection</b> in <b>VOICE</b> mode.<br>" \ - "The connection target will be host <b>%4</b> on port <b>%5</b><br>" \ - ,"dcc" \ - ).arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szIp, dcc->szPort); + "<b>%1 [%2@%3]</b> requests a<br>" + "<b>Direct Client Connection</b> in <b>VOICE</b> mode.<br>" + "The connection target will be host <b>%4</b> on port <b>%5</b><br>", + "dcc") + .arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szIp, dcc->szPort); - DccAcceptDialog * box = new DccAcceptDialog(this,dcc,tmp,__tr2qs_ctx("DCC VOICE request","dcc")); + DccAcceptDialog * box = new DccAcceptDialog(this, dcc, tmp, __tr2qs_ctx("DCC VOICE request", "dcc")); m_pBoxList->append(box); - connect(box,SIGNAL(accepted(DccDialog *,DccDescriptor *)), - this,SLOT(activeVoiceExecute(DccDialog *,DccDescriptor *))); - connect(box,SIGNAL(rejected(DccDialog *,DccDescriptor *)), - this,SLOT(cancelDcc(DccDialog *,DccDescriptor *))); + connect(box, SIGNAL(accepted(DccDialog *, DccDescriptor *)), + this, SLOT(activeVoiceExecute(DccDialog *, DccDescriptor *))); + connect(box, SIGNAL(rejected(DccDialog *, DccDescriptor *)), + this, SLOT(cancelDcc(DccDialog *, DccDescriptor *))); box->show(); - } else { + } + else + { // auto accept - activeVoiceExecute(0,dcc); + activeVoiceExecute(0, dcc); } } -void DccBroker::activeVoiceExecute(DccDialog *box,DccDescriptor * dcc) +void DccBroker::activeVoiceExecute(DccDialog * box, DccDescriptor * dcc) { - if(box)box->forgetDescriptor(); + if(box) + box->forgetDescriptor(); if(!g_pApp->windowExists(dcc->console())) { @@ -381,34 +395,30 @@ void DccBroker::activeVoiceExecute(DccDialog *box,DccDescriptor * dcc) dcc->setConsole(g_pApp->activeConsole()); } - KviCString tmp(KviCString::Format,"dcc: voice %s@%s:%s",dcc->szNick.toUtf8().data(),dcc->szIp.toUtf8().data(),dcc->szPort.toUtf8().data()); - DccVoiceWindow * v = new DccVoiceWindow(dcc,tmp.ptr()); + KviCString tmp(KviCString::Format, "dcc: voice %s@%s:%s", dcc->szNick.toUtf8().data(), dcc->szIp.toUtf8().data(), dcc->szPort.toUtf8().data()); + DccVoiceWindow * v = new DccVoiceWindow(dcc, tmp.ptr()); - bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : \ - (KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccVoice) || \ - (dcc->bAutoAccept && KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccVoiceWhenAutoAccepted))); + bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : (KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccVoice) || (dcc->bAutoAccept && KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccVoiceWhenAutoAccepted))); - g_pMainWindow->addWindow(v,!bMinimized); + g_pMainWindow->addWindow(v, !bMinimized); m_pDccWindowList->append(v); } - /////////////////////////////////////////////////////////////////////////////// // PASSIVE VOICE /////////////////////////////////////////////////////////////////////////////// void DccBroker::passiveVoiceExecute(DccDescriptor * dcc) { - KviCString tmp(KviCString::Format,"dcc: voice %s@%s:%s",dcc->szNick.toUtf8().data(),dcc->szIp.toUtf8().data(),dcc->szPort.toUtf8().data()); - DccVoiceWindow * v = new DccVoiceWindow(dcc,tmp.ptr()); + KviCString tmp(KviCString::Format, "dcc: voice %s@%s:%s", dcc->szNick.toUtf8().data(), dcc->szIp.toUtf8().data(), dcc->szPort.toUtf8().data()); + DccVoiceWindow * v = new DccVoiceWindow(dcc, tmp.ptr()); //#warning "Create minimized dcc voice ?... or maybe it's too much ? :)" bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChat); - g_pMainWindow->addWindow(v,!bMinimized); + g_pMainWindow->addWindow(v, !bMinimized); m_pDccWindowList->append(v); } - /////////////////////////////////////////////////////////////////////////////// // ACTIVE VIDEO /////////////////////////////////////////////////////////////////////////////// @@ -420,28 +430,31 @@ void DccBroker::activeVideoManage(DccDescriptor * dcc) { // need confirmation QString tmp = __tr2qs_ctx( - "<b>%1 [%2@%3]</b> requests a<br>" \ - "<b>Direct Client Connection</b> in <b>VIDEO</b> mode.<br>" \ - "The connection target will be host <b>%4</b> on port <b>%5</b><br>" \ - ,"dcc" \ - ).arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szIp, dcc->szPort); + "<b>%1 [%2@%3]</b> requests a<br>" + "<b>Direct Client Connection</b> in <b>VIDEO</b> mode.<br>" + "The connection target will be host <b>%4</b> on port <b>%5</b><br>", + "dcc") + .arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szIp, dcc->szPort); - DccAcceptDialog * box = new DccAcceptDialog(this,dcc,tmp,__tr2qs_ctx("DCC VIDEO request","dcc")); + DccAcceptDialog * box = new DccAcceptDialog(this, dcc, tmp, __tr2qs_ctx("DCC VIDEO request", "dcc")); m_pBoxList->append(box); - connect(box,SIGNAL(accepted(DccDialog *,DccDescriptor *)), - this,SLOT(activeVideoExecute(DccDialog *,DccDescriptor *))); - connect(box,SIGNAL(rejected(DccDialog *,DccDescriptor *)), - this,SLOT(cancelDcc(DccDialog *,DccDescriptor *))); + connect(box, SIGNAL(accepted(DccDialog *, DccDescriptor *)), + this, SLOT(activeVideoExecute(DccDialog *, DccDescriptor *))); + connect(box, SIGNAL(rejected(DccDialog *, DccDescriptor *)), + this, SLOT(cancelDcc(DccDialog *, DccDescriptor *))); box->show(); - } else { + } + else + { // auto accept - activeVideoExecute(0,dcc); + activeVideoExecute(0, dcc); } } -void DccBroker::activeVideoExecute(DccDialog *box,DccDescriptor * dcc) +void DccBroker::activeVideoExecute(DccDialog * box, DccDescriptor * dcc) { - if(box)box->forgetDescriptor(); + if(box) + box->forgetDescriptor(); if(!g_pApp->windowExists(dcc->console())) { @@ -449,23 +462,20 @@ void DccBroker::activeVideoExecute(DccDialog *box,DccDescriptor * dcc) dcc->setConsole(g_pApp->activeConsole()); } - KviCString tmp(KviCString::Format,"dcc: video %s@%s:%s",dcc->szNick.toUtf8().data(),dcc->szIp.toUtf8().data(),dcc->szPort.toUtf8().data()); - DccVideoWindow * v = new DccVideoWindow(dcc,tmp.ptr()); + KviCString tmp(KviCString::Format, "dcc: video %s@%s:%s", dcc->szNick.toUtf8().data(), dcc->szIp.toUtf8().data(), dcc->szPort.toUtf8().data()); + DccVideoWindow * v = new DccVideoWindow(dcc, tmp.ptr()); - bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : \ - (KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccVideo) || \ - (dcc->bAutoAccept && KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccVideoWhenAutoAccepted))); + bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : (KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccVideo) || (dcc->bAutoAccept && KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccVideoWhenAutoAccepted))); - g_pMainWindow->addWindow(v,!bMinimized); + g_pMainWindow->addWindow(v, !bMinimized); m_pDccWindowList->append(v); #else -void DccBroker::activeVideoExecute(DccDialog *,DccDescriptor *) +void DccBroker::activeVideoExecute(DccDialog *, DccDescriptor *) { #endif } - /////////////////////////////////////////////////////////////////////////////// // PASSIVE VIDEO /////////////////////////////////////////////////////////////////////////////// @@ -473,11 +483,11 @@ void DccBroker::activeVideoExecute(DccDialog *,DccDescriptor *) #ifndef COMPILE_DISABLE_DCC_VIDEO void DccBroker::passiveVideoExecute(DccDescriptor * dcc) { - KviCString tmp(KviCString::Format,"dcc: video %s@%s:%s",dcc->szNick.toUtf8().data(),dcc->szIp.toUtf8().data(),dcc->szPort.toUtf8().data()); - DccVideoWindow * v = new DccVideoWindow(dcc,tmp.ptr()); + KviCString tmp(KviCString::Format, "dcc: video %s@%s:%s", dcc->szNick.toUtf8().data(), dcc->szIp.toUtf8().data(), dcc->szPort.toUtf8().data()); + DccVideoWindow * v = new DccVideoWindow(dcc, tmp.ptr()); //#warning "Create minimized dcc video ?... or maybe it's too much ? :)" bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChat); - g_pMainWindow->addWindow(v,!bMinimized); + g_pMainWindow->addWindow(v, !bMinimized); m_pDccWindowList->append(v); #else void DccBroker::passiveVideoExecute(DccDescriptor *) @@ -485,7 +495,6 @@ void DccBroker::passiveVideoExecute(DccDescriptor *) #endif } - /////////////////////////////////////////////////////////////////////////////// // ACTIVE CANVAS /////////////////////////////////////////////////////////////////////////////// @@ -496,31 +505,34 @@ void DccBroker::activeCanvasManage(DccDescriptor * dcc) if(!dcc->bAutoAccept) { // need confirmation - QString tmp = __tr2qs_ctx( \ - "<b>%1 [%2@%3]</b> requests a<br>" \ - "<b>Direct Client Connection</b> in <b>CANVAS</b> mode.<br>" \ - "The connection target will be host <b>%4</b> on port <b>%5</b><br>" \ - ,"dcc" \ - ).arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szIp, dcc->szPort); + QString tmp = __tr2qs_ctx( + "<b>%1 [%2@%3]</b> requests a<br>" + "<b>Direct Client Connection</b> in <b>CANVAS</b> mode.<br>" + "The connection target will be host <b>%4</b> on port <b>%5</b><br>", + "dcc") + .arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szIp, dcc->szPort); - DccAcceptDialog * box = new DccAcceptDialog(this,dcc,tmp,__tr2qs_ctx("DCC CANVAS request","dcc")); + DccAcceptDialog * box = new DccAcceptDialog(this, dcc, tmp, __tr2qs_ctx("DCC CANVAS request", "dcc")); m_pBoxList->append(box); - connect(box,SIGNAL(accepted(DccDialog *,DccDescriptor *)), - this,SLOT(activeCanvasExecute(DccDialog *,DccDescriptor *))); - connect(box,SIGNAL(rejected(DccDialog *,DccDescriptor *)), - this,SLOT(cancelDcc(DccDialog *,DccDescriptor *))); + connect(box, SIGNAL(accepted(DccDialog *, DccDescriptor *)), + this, SLOT(activeCanvasExecute(DccDialog *, DccDescriptor *))); + connect(box, SIGNAL(rejected(DccDialog *, DccDescriptor *)), + this, SLOT(cancelDcc(DccDialog *, DccDescriptor *))); box->show(); - } else { + } + else + { // auto accept - activeCanvasExecute(0,dcc); + activeCanvasExecute(0, dcc); } } #endif #ifdef COMPILE_DCC_CANVAS -void DccBroker::activeCanvasExecute(DccDialog *box,DccDescriptor * dcc) +void DccBroker::activeCanvasExecute(DccDialog * box, DccDescriptor * dcc) { - if(box)box->forgetDescriptor(); + if(box) + box->forgetDescriptor(); if(!g_pApp->windowExists(dcc->console())) { @@ -528,19 +540,17 @@ void DccBroker::activeCanvasExecute(DccDialog *box,DccDescriptor * dcc) dcc->setConsole(g_pApp->activeConsole()); } - KviCString tmp(KviCString::Format,"dcc: canvas %s@%s:%s",dcc->szNick.toUtf8().data(),dcc->szIp.toUtf8().data(),dcc->szPort.toUtf8().data()); - DccCanvasWindow * cnv = new DccCanvasWindow(dcc,tmp.ptr()); + KviCString tmp(KviCString::Format, "dcc: canvas %s@%s:%s", dcc->szNick.toUtf8().data(), dcc->szIp.toUtf8().data(), dcc->szPort.toUtf8().data()); + DccCanvasWindow * cnv = new DccCanvasWindow(dcc, tmp.ptr()); //#warning "This option should be dedicated to Dcc Canvas!....for now we are using the DccChat options" - bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : \ - (KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChat) || \ - (dcc->bAutoAccept && KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChatWhenAutoAccepted))); + bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : (KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChat) || (dcc->bAutoAccept && KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChatWhenAutoAccepted))); - g_pMainWindow->addWindow(cnv,!bMinimized); + g_pMainWindow->addWindow(cnv, !bMinimized); m_pDccWindowList->append(cnv); #else -void DccBroker::activeCanvasExecute(DccDialog *,DccDescriptor *) +void DccBroker::activeCanvasExecute(DccDialog *, DccDescriptor *) { #endif } @@ -551,11 +561,11 @@ void DccBroker::activeCanvasExecute(DccDialog *,DccDescriptor *) #ifdef COMPILE_DCC_CANVAS void DccBroker::passiveCanvasExecute(DccDescriptor * dcc) { - KviCString tmp(KviCString::Format,"dcc: canvas %s@%s:%s",dcc->szNick.toUtf8().data(),dcc->szIp.toUtf8().data(),dcc->szPort.toUtf8().data()); - DccCanvasWindow * cnv = new DccCanvasWindow(dcc,tmp.ptr()); + KviCString tmp(KviCString::Format, "dcc: canvas %s@%s:%s", dcc->szNick.toUtf8().data(), dcc->szIp.toUtf8().data(), dcc->szPort.toUtf8().data()); + DccCanvasWindow * cnv = new DccCanvasWindow(dcc, tmp.ptr()); //#warning "This option should be dedicated to Dcc Canvas!....for now we are using the DccChat options" bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChat); - g_pMainWindow->addWindow(cnv,!bMinimized); + g_pMainWindow->addWindow(cnv, !bMinimized); m_pDccWindowList->append(cnv); } #endif @@ -570,9 +580,11 @@ void DccBroker::recvFileManage(DccDescriptor * dcc) { bool bOk; quint64 size = dcc->szFileSize.toULongLong(&bOk); - if(bOk) { - if(size>=KVI_OPTION_UINT(KviOption_uintMaximumRequestedAvatarSize)) { - cancelDcc(0,dcc); + if(bOk) + { + if(size >= KVI_OPTION_UINT(KviOption_uintMaximumRequestedAvatarSize)) + { + cancelDcc(0, dcc); return; } } @@ -586,94 +598,102 @@ void DccBroker::recvFileManage(DccDescriptor * dcc) if(dcc->bActive) { // Normal active send: we will be connecting - tmp = __tr2qs_ctx( \ - "<b>%1 [%2@%3]</b> " \ - "wants to send you the file " \ - "'<b>%4</b>', " \ - "<b>%5</b> large.<br>" \ - "The connection target will be host <b>%6</b> on port <b>%7</b><br>" \ - ,"dcc" \ - ).arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szFileName) - .arg(KviQString::makeSizeReadable(dcc->szFileSize.toULongLong())) - .arg(dcc->szIp, dcc->szPort); - - } else { + tmp = __tr2qs_ctx( + "<b>%1 [%2@%3]</b> " + "wants to send you the file " + "'<b>%4</b>', " + "<b>%5</b> large.<br>" + "The connection target will be host <b>%6</b> on port <b>%7</b><br>", + "dcc") + .arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szFileName) + .arg(KviQString::makeSizeReadable(dcc->szFileSize.toULongLong())) + .arg(dcc->szIp, dcc->szPort); + } + else + { // passive: we will be listening! - tmp = __tr2qs_ctx( \ - "<b>%1 [%2@%3]</b> " - "wants to send you the file " \ - "'<b>%4</b>', " \ - "<b>%5</b> large.<br>" \ - "You will be the passive side of the connection.<br>" \ - ,"dcc" \ - ).arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szFileName) - .arg(KviQString::makeSizeReadable(dcc->szFileSize.toULongLong())); + tmp = __tr2qs_ctx( + "<b>%1 [%2@%3]</b> " + "wants to send you the file " + "'<b>%4</b>', " + "<b>%5</b> large.<br>" + "You will be the passive side of the connection.<br>", + "dcc") + .arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szFileName) + .arg(KviQString::makeSizeReadable(dcc->szFileSize.toULongLong())); } if(dcc->bIsIncomingAvatar) { - tmp += __tr2qs_ctx( \ - "<b>Note:</b>" \ - "The file appears to be an avatar that you have requested. " \ - "You should not change its filename. " \ - "Save it in a location where KVIrc can find it, such as " \ - "the 'avatars', 'incoming', or 'pics' directories, " \ - "your home directory, or the save directory for the incoming file type. " \ - "The default save path will probably work. " \ - "You can instruct KVIrc to accept incoming avatars automatically " \ - "by setting the option <tt>boolAutoAcceptIncomingAvatars</tt> to true.<br>" \ - ,"dcc" \ - ); + tmp += __tr2qs_ctx( + "<b>Note:</b>" + "The file appears to be an avatar that you have requested. " + "You should not change its filename. " + "Save it in a location where KVIrc can find it, such as " + "the 'avatars', 'incoming', or 'pics' directories, " + "your home directory, or the save directory for the incoming file type. " + "The default save path will probably work. " + "You can instruct KVIrc to accept incoming avatars automatically " + "by setting the option <tt>boolAutoAcceptIncomingAvatars</tt> to true.<br>", + "dcc"); } //#warning "Maybe remove the pending avatar if rejected ?" - QString title = __tr2qs_ctx("DCC %1 Request - KVIrc","dcc").arg(dcc->szType); + QString title = __tr2qs_ctx("DCC %1 Request - KVIrc", "dcc").arg(dcc->szType); - DccAcceptDialog * box = new DccAcceptDialog(this,dcc,tmp,title); + DccAcceptDialog * box = new DccAcceptDialog(this, dcc, tmp, title); m_pBoxList->append(box); - connect(box,SIGNAL(accepted(DccDialog *,DccDescriptor *)), - this,SLOT(chooseSaveFileName(DccDialog *,DccDescriptor *))); - connect(box,SIGNAL(rejected(DccDialog *,DccDescriptor *)), - this,SLOT(cancelDcc(DccDialog *,DccDescriptor *))); + connect(box, SIGNAL(accepted(DccDialog *, DccDescriptor *)), + this, SLOT(chooseSaveFileName(DccDialog *, DccDescriptor *))); + connect(box, SIGNAL(rejected(DccDialog *, DccDescriptor *)), + this, SLOT(cancelDcc(DccDialog *, DccDescriptor *))); box->show(); - } else { + } + else + { // auto accept if(_OUTPUT_VERBOSE) { - dcc->console()->output(KVI_OUT_DCCMSG,__tr2qs_ctx("Auto-accepting DCC %Q request from %Q!%Q@%Q for file %Q","dcc"), - &(dcc->szType),&(dcc->szNick),&(dcc->szUser), - &(dcc->szHost),&(dcc->szFileName)); + dcc->console()->output(KVI_OUT_DCCMSG, __tr2qs_ctx("Auto-accepting DCC %Q request from %Q!%Q@%Q for file %Q", "dcc"), + &(dcc->szType), &(dcc->szNick), &(dcc->szUser), + &(dcc->szHost), &(dcc->szFileName)); } - chooseSaveFileName(0,dcc); + chooseSaveFileName(0, dcc); } } -void DccBroker::chooseSaveFileName(DccDialog *box,DccDescriptor *dcc) +void DccBroker::chooseSaveFileName(DccDialog * box, DccDescriptor * dcc) { - if(box)box->forgetDescriptor(); + if(box) + box->forgetDescriptor(); // Lookup the suggested save directory dcc->szLocalFileName = ""; - if(dcc->bIsIncomingAvatar)g_pApp->getLocalKvircDirectory(dcc->szLocalFileName,KviApplication::Avatars); - else { + if(dcc->bIsIncomingAvatar) + g_pApp->getLocalKvircDirectory(dcc->szLocalFileName, KviApplication::Avatars); + else + { if(KVI_OPTION_BOOL(KviOption_boolUseIncomingDccMediaTypeSavePath)) { g_pMediaManager->lock(); - if(KviMediaType * mt = g_pMediaManager->findMediaType(dcc->szFileName.toUtf8().data(),false)) + if(KviMediaType * mt = g_pMediaManager->findMediaType(dcc->szFileName.toUtf8().data(), false)) { if(mt->szSavePath.hasData()) { - if(KviFileUtils::directoryExists(mt->szSavePath.ptr()))dcc->szLocalFileName = mt->szSavePath; - else { - if(KviFileUtils::makeDir(mt->szSavePath.ptr()))dcc->szLocalFileName = mt->szSavePath; + if(KviFileUtils::directoryExists(mt->szSavePath.ptr())) + dcc->szLocalFileName = mt->szSavePath; + else + { + if(KviFileUtils::makeDir(mt->szSavePath.ptr())) + dcc->szLocalFileName = mt->szSavePath; } if(KVI_OPTION_BOOL(KviOption_boolSortReceivedByDccFilesByNicks)) { - KviQString::ensureLastCharIs(dcc->szLocalFileName,KVI_PATH_SEPARATOR_CHAR); + KviQString::ensureLastCharIs(dcc->szLocalFileName, KVI_PATH_SEPARATOR_CHAR); QString cleanNick = dcc->szNick; KviFileUtils::cleanFileName(cleanNick); dcc->szLocalFileName.append(cleanNick); @@ -687,10 +707,10 @@ void DccBroker::chooseSaveFileName(DccDialog *box,DccDescriptor *dcc) if(dcc->szLocalFileName.isEmpty()) { - g_pApp->getLocalKvircDirectory(dcc->szLocalFileName,KviApplication::Incoming); + g_pApp->getLocalKvircDirectory(dcc->szLocalFileName, KviApplication::Incoming); if(KVI_OPTION_BOOL(KviOption_boolSortReceivedByDccFilesByNicks)) { - KviQString::ensureLastCharIs(dcc->szLocalFileName,KVI_PATH_SEPARATOR_CHAR); + KviQString::ensureLastCharIs(dcc->szLocalFileName, KVI_PATH_SEPARATOR_CHAR); QString cleanNick = dcc->szNick; KviFileUtils::cleanFileName(cleanNick); dcc->szLocalFileName.append(cleanNick); @@ -700,7 +720,7 @@ void DccBroker::chooseSaveFileName(DccDialog *box,DccDescriptor *dcc) } } KviFileUtils::adjustFilePath(dcc->szLocalFileName); - KviQString::ensureLastCharIs(dcc->szLocalFileName,KVI_PATH_SEPARATOR_CHAR); + KviQString::ensureLastCharIs(dcc->szLocalFileName, KVI_PATH_SEPARATOR_CHAR); if(!(dcc->bAutoAccept)) { @@ -708,21 +728,24 @@ void DccBroker::chooseSaveFileName(DccDialog *box,DccDescriptor *dcc) KviFileUtils::cleanFileName(cleanFilename); dcc->szLocalFileName.append(cleanFilename); if(KviFileDialog::askForSaveFileName( - dcc->szLocalFileName, - __tr2qs_ctx("Choose Files to Save - KVIrc","dcc"), - dcc->szLocalFileName, - QString(), - false, - false, - true, - g_pMainWindow - )) + dcc->szLocalFileName, + __tr2qs_ctx("Choose Files to Save - KVIrc", "dcc"), + dcc->szLocalFileName, + QString(), + false, + false, + true, + g_pMainWindow)) + { + renameOverwriteResume(0, dcc); + } + else { - renameOverwriteResume(0,dcc); - } else { cancelDcc(dcc); } - } else { + } + else + { // auto accept // WE choose the filename QString cleanFilename = dcc->szFileName; @@ -731,17 +754,18 @@ void DccBroker::chooseSaveFileName(DccDialog *box,DccDescriptor *dcc) if(_OUTPUT_VERBOSE) { - dcc->console()->output(KVI_OUT_DCCMSG,__tr2qs_ctx("Auto-saving DCC %Q file %Q as \r![!dbl]play $0\r%Q\r","dcc"), - &(dcc->szType),&(dcc->szFileName),&(dcc->szLocalFileName)); + dcc->console()->output(KVI_OUT_DCCMSG, __tr2qs_ctx("Auto-saving DCC %Q file %Q as \r![!dbl]play $0\r%Q\r", "dcc"), + &(dcc->szType), &(dcc->szFileName), &(dcc->szLocalFileName)); } - renameOverwriteResume(0,dcc); + renameOverwriteResume(0, dcc); } } -void DccBroker::renameOverwriteResume(DccDialog *box,DccDescriptor * dcc) +void DccBroker::renameOverwriteResume(DccDialog * box, DccDescriptor * dcc) { - if(box)box->forgetDescriptor(); + if(box) + box->forgetDescriptor(); // Check if file exists QFileInfo fi(dcc->szLocalFileName); @@ -760,62 +784,67 @@ void DccBroker::renameOverwriteResume(DccDialog *box,DccDescriptor * dcc) bool bDisableResume = false; if( - (!bOk) || // remote size is unknown - (iRemoteSize > (quint64)fi.size()) // or it is larger than the actual size on disk - ) + (!bOk) || // remote size is unknown + (iRemoteSize > (quint64)fi.size()) // or it is larger than the actual size on disk + ) + { + tmp = __tr2qs_ctx( + "The file '<b>%1</b>' already exists " + "and is <b>%2</b> large.<br>" + "Do you wish to<br>" + "<b>auto-rename</b> the new file,<br>" + "<b>overwrite</b> the existing file, or<br> " + "<b>resume</b> an incomplete download?", + "dcc") + .arg(dcc->szLocalFileName) + .arg(KviQString::makeSizeReadable(fi.size())); + } + else { - tmp = __tr2qs_ctx( \ - "The file '<b>%1</b>' already exists " \ - "and is <b>%2</b> large.<br>" \ - "Do you wish to<br>" \ - "<b>auto-rename</b> the new file,<br>" \ - "<b>overwrite</b> the existing file, or<br> " \ - "<b>resume</b> an incomplete download?" \ - ,"dcc" \ - ).arg(dcc->szLocalFileName).arg(KviQString::makeSizeReadable(fi.size())); - } else { bDisableResume = true; // the file on disk is larger or equal to the remote one - tmp = __tr2qs_ctx( \ - "The file '<b>%1</b>' already exists " \ - "and is larger than the offered one.<br>" \ - "Do you wish to<br>" \ - "<b>auto-rename</b> the new file, or<br>" \ - "<b>overwrite</b> the existing file?" \ - ,"dcc" \ - ).arg(dcc->szLocalFileName); + tmp = __tr2qs_ctx( + "The file '<b>%1</b>' already exists " + "and is larger than the offered one.<br>" + "Do you wish to<br>" + "<b>auto-rename</b> the new file, or<br>" + "<b>overwrite</b> the existing file?", + "dcc") + .arg(dcc->szLocalFileName); } - DccRenameDialog * box = new DccRenameDialog(this,dcc,tmp,bDisableResume); + DccRenameDialog * box = new DccRenameDialog(this, dcc, tmp, bDisableResume); m_pBoxList->append(box); - connect(box,SIGNAL(renameSelected(DccDialog *,DccDescriptor *)), - this,SLOT(renameDccSendFile(DccDialog *,DccDescriptor *))); - connect(box,SIGNAL(overwriteSelected(DccDialog *,DccDescriptor *)), - this,SLOT(recvFileExecute(DccDialog *,DccDescriptor *))); - connect(box,SIGNAL(cancelSelected(DccDialog *,DccDescriptor *)), - this,SLOT(cancelDcc(DccDialog *,DccDescriptor *))); + connect(box, SIGNAL(renameSelected(DccDialog *, DccDescriptor *)), + this, SLOT(renameDccSendFile(DccDialog *, DccDescriptor *))); + connect(box, SIGNAL(overwriteSelected(DccDialog *, DccDescriptor *)), + this, SLOT(recvFileExecute(DccDialog *, DccDescriptor *))); + connect(box, SIGNAL(cancelSelected(DccDialog *, DccDescriptor *)), + this, SLOT(cancelDcc(DccDialog *, DccDescriptor *))); box->show(); return; } // auto resume ? if( - KVI_OPTION_BOOL(KviOption_boolAutoResumeDccSendWhenAutoAccepted) && - (bOk) && // only if the remote size is really known - (iRemoteSize > (quint64)fi.size()) && // only if the remote size is larger than the local size - (!DccFileTransfer::nonFailedTransferWithLocalFileName(dcc->szLocalFileName)) // only if there is no transfer with this local file name yet - ) + KVI_OPTION_BOOL(KviOption_boolAutoResumeDccSendWhenAutoAccepted) && (bOk) && // only if the remote size is really known + (iRemoteSize > (quint64)fi.size()) && // only if the remote size is larger than the local size + (!DccFileTransfer::nonFailedTransferWithLocalFileName(dcc->szLocalFileName)) // only if there is no transfer with this local file name yet + ) { // yep, auto resume... dcc->bResume = true; - recvFileExecute(0,dcc); - } else if(iRemoteSize == (quint64)fi.size()) + recvFileExecute(0, dcc); + } + else if(iRemoteSize == (quint64)fi.size()) + { + dcc->console()->output(KVI_OUT_DCCMSG, "Transfer aborted: file %Q already completed", &(dcc->szLocalFileName)); + cancelDcc(0, dcc); + } + else { - dcc->console()->output(KVI_OUT_DCCMSG,"Transfer aborted: file %Q already completed",&(dcc->szLocalFileName)); - cancelDcc(0,dcc); - } else { // otherwise auto rename - renameDccSendFile(0,dcc); + renameDccSendFile(0, dcc); } return; } @@ -823,19 +852,20 @@ void DccBroker::renameOverwriteResume(DccDialog *box,DccDescriptor * dcc) dcc->szLocalFileSize = "0"; // everything OK - recvFileExecute(0,dcc); + recvFileExecute(0, dcc); } -void DccBroker::renameDccSendFile(DccDialog *box,DccDescriptor * dcc) +void DccBroker::renameDccSendFile(DccDialog * box, DccDescriptor * dcc) { - if(box)box->forgetDescriptor(); - + if(box) + box->forgetDescriptor(); if(QFileInfo(dcc->szLocalFileName).exists()) { KviCString szOrig = dcc->szLocalFileName; int i = 1; - do { + do + { KviCString szNum; szNum.setNum(i); int idx = szOrig.findLastIdx('.'); @@ -845,7 +875,9 @@ void DccBroker::renameDccSendFile(DccDialog *box,DccDescriptor * dcc) dcc->szLocalFileName += "."; dcc->szLocalFileName += szNum; dcc->szLocalFileName += szOrig.right(szOrig.len() - idx); - } else { + } + else + { dcc->szLocalFileName = szOrig; dcc->szLocalFileName += "."; dcc->szLocalFileName += szNum; @@ -855,19 +887,20 @@ void DccBroker::renameDccSendFile(DccDialog *box,DccDescriptor * dcc) if(_OUTPUT_VERBOSE) { - dcc->console()->output(KVI_OUT_DCCMSG,__tr2qs_ctx("File %s exists, auto-renaming to %Q","dcc"), - szOrig.ptr(),&(dcc->szLocalFileName)); + dcc->console()->output(KVI_OUT_DCCMSG, __tr2qs_ctx("File %s exists, auto-renaming to %Q", "dcc"), + szOrig.ptr(), &(dcc->szLocalFileName)); } } dcc->szLocalFileSize = "0"; // 0 for sure - recvFileExecute(0,dcc); + recvFileExecute(0, dcc); } -void DccBroker::recvFileExecute(DccDialog *box,DccDescriptor * dcc) +void DccBroker::recvFileExecute(DccDialog * box, DccDescriptor * dcc) { - if(box)box->forgetDescriptor(); + if(box) + box->forgetDescriptor(); if(!g_pApp->windowExists(dcc->console())) { @@ -877,31 +910,27 @@ void DccBroker::recvFileExecute(DccDialog *box,DccDescriptor * dcc) DccFileTransfer * send = new DccFileTransfer(dcc); - bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : \ - (KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccSend) || \ - (dcc->bAutoAccept && KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccSendWhenAutoAccepted))); + bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : (KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccSend) || (dcc->bAutoAccept && KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccSendWhenAutoAccepted))); - send->invokeTransferWindow(bMinimized,bMinimized); + send->invokeTransferWindow(bMinimized, bMinimized); } - void DccBroker::sendFileManage(DccDescriptor * dcc) { QStringList filenames; if(KviFileDialog::askForOpenFileNames( - filenames, - __tr2qs_ctx("Choose Files to Send - KVIrc","dcc"), - QString(), - QString(), - false, - true, - g_pMainWindow - )) + filenames, + __tr2qs_ctx("Choose Files to Send - KVIrc", "dcc"), + QString(), + QString(), + false, + true, + g_pMainWindow)) { if(filenames.count() > 0) { DccDescriptor * d; - QStringList::Iterator it=filenames.begin(); + QStringList::Iterator it = filenames.begin(); while(it != filenames.end()) { d = new DccDescriptor(*dcc); @@ -911,18 +940,21 @@ void DccBroker::sendFileManage(DccDescriptor * dcc) if(d->szLocalFileName.isEmpty()) cancelDcc(d); else - sendFileExecute(0,d); + sendFileExecute(0, d); } delete dcc; } - } else { + } + else + { cancelDcc(dcc); } } -void DccBroker::sendFileExecute(DccDialog * box,DccDescriptor *dcc) +void DccBroker::sendFileExecute(DccDialog * box, DccDescriptor * dcc) { - if(box)box->forgetDescriptor(); + if(box) + box->forgetDescriptor(); if(!g_pApp->windowExists(dcc->console())) { @@ -933,8 +965,8 @@ void DccBroker::sendFileExecute(DccDialog * box,DccDescriptor *dcc) QFileInfo fi(dcc->szLocalFileName); if(!(fi.exists() && fi.isReadable() && (fi.isFile()) && (fi.size() > 0))) { - dcc->console()->output(KVI_OUT_DCCERROR,__tr2qs_ctx("Can't open file %Q for reading","dcc"), - &(dcc->szLocalFileName)); + dcc->console()->output(KVI_OUT_DCCERROR, __tr2qs_ctx("Can't open file %Q for reading", "dcc"), + &(dcc->szLocalFileName)); delete dcc; return; } @@ -948,30 +980,29 @@ void DccBroker::sendFileExecute(DccDialog * box,DccDescriptor *dcc) bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccSend); - send->invokeTransferWindow(bMinimized,bMinimized); + send->invokeTransferWindow(bMinimized, bMinimized); } bool DccBroker::canUnload() { if(m_pBoxList) { - if((m_pBoxList->count() != 0) || - (m_pDccWindowList->count() != 0) || - (DccFileTransfer::transferCount() != 0))return false; + if((m_pBoxList->count() != 0) || (m_pDccWindowList->count() != 0) || (DccFileTransfer::transferCount() != 0)) + return false; } // else in the destructor anyway (going to die) return true; } -bool DccBroker::handleResumeAccepted(const char * filename,const char * port,const char * szZeroPortTag) +bool DccBroker::handleResumeAccepted(const char * filename, const char * port, const char * szZeroPortTag) { - return DccFileTransfer::handleResumeAccepted(filename,port,szZeroPortTag); + return DccFileTransfer::handleResumeAccepted(filename, port, szZeroPortTag); } -bool DccBroker::handleResumeRequest(KviDccRequest * dcc,const char * filename,const char * port,unsigned long filePos,const char * szZeroPortTag) +bool DccBroker::handleResumeRequest(KviDccRequest * dcc, const char * filename, const char * port, unsigned long filePos, const char * szZeroPortTag) { //qDebug("HANDLE %s %s %u %s",filename,port,filePos,szZeroPortTag); // the zeroPOrtTag is nonempty here only if port == 0 - if(kvi_strEqualCI("0",port) && szZeroPortTag) + if(kvi_strEqualCI("0", port) && szZeroPortTag) { // zero port resume request (we have sent out a DCC SEND <filename> <fakeip> 0 <tag> KviDccZeroPortTag * t = findZeroPortTag(QString(szZeroPortTag)); @@ -985,23 +1016,22 @@ bool DccBroker::handleResumeRequest(KviDccRequest * dcc,const char * filename,co t->m_uResumePosition = filePos; KviCString szBuffy; - KviIrcServerParser::encodeCtcpParameter(filename,szBuffy); + KviIrcServerParser::encodeCtcpParameter(filename, szBuffy); dcc->ctcpMsg->msg->console()->connection()->sendFmtData( - "PRIVMSG %s :%cDCC ACCEPT %s %s %s %s%c", - dcc->ctcpMsg->msg->console()->connection()->encodeText(dcc->ctcpMsg->pSource->nick()).data(), - 0x01, - szBuffy.ptr(), - port, - dcc->ctcpMsg->msg->console()->connection()->encodeText(QString::number(filePos)).data(), - szZeroPortTag, - 0x01 - ); + "PRIVMSG %s :%cDCC ACCEPT %s %s %s %s%c", + dcc->ctcpMsg->msg->console()->connection()->encodeText(dcc->ctcpMsg->pSource->nick()).data(), + 0x01, + szBuffy.ptr(), + port, + dcc->ctcpMsg->msg->console()->connection()->encodeText(QString::number(filePos)).data(), + szZeroPortTag, + 0x01); return true; } } //qDebug("NOT A ZeRO PORT"); - return DccFileTransfer::handleResumeRequest(filename,port,filePos); + return DccFileTransfer::handleResumeRequest(filename, port, filePos); } diff --git a/src/modules/dcc/DccBroker.h b/src/modules/dcc/DccBroker.h index 92421d428..651f3d8c4 100644 --- a/src/modules/dcc/DccBroker.h +++ b/src/modules/dcc/DccBroker.h @@ -42,14 +42,13 @@ class DccDialog; // #define COMPILE_DCC_CANVAS - class KviDccZeroPortTag { public: - QDateTime m_tTimestamp; - QString m_szTag; - unsigned long m_uFileSize; // outgoing file size, valid only for file transfers obviously - unsigned long m_uResumePosition; // if 0 = no resume, valid only for file transfers obviously + QDateTime m_tTimestamp; + QString m_szTag; + unsigned long m_uFileSize; // outgoing file size, valid only for file transfers obviously + unsigned long m_uResumePosition; // if 0 = no resume, valid only for file transfers obviously }; class DccBroker : public QObject @@ -58,20 +57,22 @@ class DccBroker : public QObject public: DccBroker(); ~DccBroker(); + protected: - KviPointerList<DccDialog> * m_pBoxList; - KviPointerList<KviWindow> * m_pDccWindowList; - KviPointerHashTable<QString,KviDccZeroPortTag> * m_pZeroPortTags; + KviPointerList<DccDialog> * m_pBoxList; + KviPointerList<KviWindow> * m_pDccWindowList; + KviPointerHashTable<QString, KviDccZeroPortTag> * m_pZeroPortTags; + public: KviDccZeroPortTag * addZeroPortTag(); - KviDccZeroPortTag * findZeroPortTag(const QString &szTag); - void removeZeroPortTag(const QString &szTag); + KviDccZeroPortTag * findZeroPortTag(const QString & szTag); + void removeZeroPortTag(const QString & szTag); - unsigned int dccWindowsCount(){ return m_pDccWindowList->count(); }; + unsigned int dccWindowsCount() { return m_pDccWindowList->count(); }; unsigned int dccBoxCount(); void unregisterDccBox(DccDialog * box); - void unregisterDccWindow(KviWindow *dcc); + void unregisterDccWindow(KviWindow * dcc); void rsendManage(DccDescriptor * dcc); void rsendAskForFileName(DccDescriptor * dcc); @@ -92,28 +93,28 @@ public: void recvFileManage(DccDescriptor * dcc); void sendFileManage(DccDescriptor * dcc); - bool handleResumeAccepted(const char * filename,const char * port,const char * szZeroPortTag); - bool handleResumeRequest(KviDccRequest * dcc,const char * filename,const char * port,unsigned long filePos,const char * szZeroPortTag); + bool handleResumeAccepted(const char * filename, const char * port, const char * szZeroPortTag); + bool handleResumeRequest(KviDccRequest * dcc, const char * filename, const char * port, unsigned long filePos, const char * szZeroPortTag); public slots: - void rsendExecute(DccDialog * box,DccDescriptor * dcc); + void rsendExecute(DccDialog * box, DccDescriptor * dcc); void rsendExecute(DccDescriptor * dcc); -// void activeChatExecute(DccDialog * box,DccDescriptor * dcc); - void executeChat(DccDialog * box,DccDescriptor * dcc); + // void activeChatExecute(DccDialog * box,DccDescriptor * dcc); + void executeChat(DccDialog * box, DccDescriptor * dcc); - void activeCanvasExecute(DccDialog * box,DccDescriptor * dcc); - void activeVoiceExecute(DccDialog * box,DccDescriptor * dcc); - void activeVideoExecute(DccDialog * box,DccDescriptor * dcc); + void activeCanvasExecute(DccDialog * box, DccDescriptor * dcc); + void activeVoiceExecute(DccDialog * box, DccDescriptor * dcc); + void activeVideoExecute(DccDialog * box, DccDescriptor * dcc); - void sendFileExecute(DccDialog * box,DccDescriptor * dcc); - void recvFileExecute(DccDialog * box,DccDescriptor * dcc); + void sendFileExecute(DccDialog * box, DccDescriptor * dcc); + void recvFileExecute(DccDialog * box, DccDescriptor * dcc); - void chooseSaveFileName(DccDialog *box,DccDescriptor * dcc); - void renameOverwriteResume(DccDialog *box,DccDescriptor * dcc); - void renameDccSendFile(DccDialog *box,DccDescriptor * dcc); + void chooseSaveFileName(DccDialog * box, DccDescriptor * dcc); + void renameOverwriteResume(DccDialog * box, DccDescriptor * dcc); + void renameDccSendFile(DccDialog * box, DccDescriptor * dcc); - void cancelDcc(DccDialog *box,DccDescriptor * dcc); + void cancelDcc(DccDialog * box, DccDescriptor * dcc); void cancelDcc(DccDescriptor * dcc); public: diff --git a/src/modules/dcc/DccCanvasWindow.cpp b/src/modules/dcc/DccCanvasWindow.cpp index 4f1129303..7701c0ce1 100644 --- a/src/modules/dcc/DccCanvasWindow.cpp +++ b/src/modules/dcc/DccCanvasWindow.cpp @@ -28,153 +28,160 @@ #ifdef COMPILE_DCC_CANVAS - #include "DccDialog.h" - #include "DccMarshal.h" - #include "canvaswidget.h" +#include "DccDialog.h" +#include "DccMarshal.h" +#include "canvaswidget.h" - #define _KVI_DEBUG_CHECK_RANGE_ - #include "kvi_debug.h" - #include "KviOptions.h" - #include "KviInput.h" - #include "KviIrcView.h" - #include "KviIconManager.h" - #include "KviLocale.h" - #include "KviError.h" - #include "kvi_out.h" - #include "KviNetUtils.h" - #include "KviConsoleWindow.h" - #include "KviMainWindow.h" - #include "KviMemory.h" - #include "KviThread.h" - #include "KviIrcSocket.h" - #include "kvi_settings.h" - #include "KviIrcConnection.h" +#define _KVI_DEBUG_CHECK_RANGE_ +#include "kvi_debug.h" +#include "KviOptions.h" +#include "KviInput.h" +#include "KviIrcView.h" +#include "KviIconManager.h" +#include "KviLocale.h" +#include "KviError.h" +#include "kvi_out.h" +#include "KviNetUtils.h" +#include "KviConsoleWindow.h" +#include "KviMainWindow.h" +#include "KviMemory.h" +#include "KviThread.h" +#include "KviIrcSocket.h" +#include "kvi_settings.h" +#include "KviIrcConnection.h" - #include <QSplitter> +#include <QSplitter> - extern DccBroker * g_pDccBroker; +extern DccBroker * g_pDccBroker; +DccCanvasWindow::DccCanvasWindow(DccDescriptor * dcc, const char * name) + : DccWindow(KVI_WINDOW_TYPE_DCCCANVAS, name, dcc) +{ + m_pSplitter = new QSplitter(QSplitter::Vertical, this, "splitter"); - DccCanvasWindow::DccCanvasWindow(DccDescriptor * dcc,const char * name) - : DccWindow(KVI_WINDOW_TYPE_DCCCANVAS,name,dcc) - { - m_pSplitter = new QSplitter(QSplitter::Vertical,this,"splitter"); - - m_pCanvas = new DccCanvasWidget(m_pSplitter); + m_pCanvas = new DccCanvasWidget(m_pSplitter); - m_pIrcView = new KviIrcView(m_pSplitter,this); - m_pInput = new KviInput(this); + m_pIrcView = new KviIrcView(m_pSplitter, this); + m_pInput = new KviInput(this); // setFocusHandler(m_pInput,this); - m_pMarshal = new DccMarshal(this); - connect(m_pMarshal,SIGNAL(error(int)),this,SLOT(handleMarshalError(int))); - connect(m_pMarshal,SIGNAL(connected()),this,SLOT(connected())); - + m_pMarshal = new DccMarshal(this); + connect(m_pMarshal, SIGNAL(error(int)), this, SLOT(handleMarshalError(int))); + connect(m_pMarshal, SIGNAL(connected()), this, SLOT(connected())); - if(!(m_pDescriptor->bActive)) + if(!(m_pDescriptor->bActive)) + { + // PASSIVE CONNECTION + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting a passive DCC CANVAS connection", "dcc")); + int ret = m_pMarshal->dccListen(dcc->szListenIp, dcc->szListenPort, m_pDescriptor->bDoTimeout); + if(ret != KviError_success) + handleMarshalError(ret); + else { - // PASSIVE CONNECTION - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting a passive DCC CANVAS connection","dcc")); - int ret = m_pMarshal->dccListen(dcc->szListenIp,dcc->szListenPort,m_pDescriptor->bDoTimeout); - if(ret != KviError_success)handleMarshalError(ret); - else { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Listening on interface %Q port %Q","dcc"), - &(m_pMarshal->localIp()),&(m_pMarshal->localPort())); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Listening on interface %Q port %Q", "dcc"), + &(m_pMarshal->localIp()), &(m_pMarshal->localPort())); - if(dcc->bSendRequest) - { - QString ip = !dcc->szFakeIp.isEmpty() ? dcc->szFakeIp : dcc->szListenIp; - QString port = !dcc->szFakePort.isEmpty() ? dcc->szFakePort.toUtf8().data() : m_pMarshal->localPort(); - //#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned number)" - struct in_addr a; - if(kvi_stringIpToBinaryIp(ip.toUtf8().data(),&a))ip.setNum(htonl(a.s_addr)); - dcc->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC CANVAS chat %Q %Q%c", - dcc->console()->connection()->encodeText( dcc->szNick.toUtf8().data() ).data(), - 0x01,&ip, - &port, - 0x01); - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Sent DCC CANVAS request to %Q, waiting for the remote client to connect...","dcc"), - &(dcc->szNick)); - } else outputNoFmt(KVI_OUT_DCCMSG,__tr2qs_ctx("DCC CANVAS request not sent: awaiting manual connections","dcc")); + if(dcc->bSendRequest) + { + QString ip = !dcc->szFakeIp.isEmpty() ? dcc->szFakeIp : dcc->szListenIp; + QString port = !dcc->szFakePort.isEmpty() ? dcc->szFakePort.toUtf8().data() : m_pMarshal->localPort(); + //#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned number)" + struct in_addr a; + if(kvi_stringIpToBinaryIp(ip.toUtf8().data(), &a)) + ip.setNum(htonl(a.s_addr)); + dcc->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC CANVAS chat %Q %Q%c", + dcc->console()->connection()->encodeText(dcc->szNick.toUtf8().data()).data(), + 0x01, &ip, + &port, + 0x01); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Sent DCC CANVAS request to %Q, waiting for the remote client to connect...", "dcc"), + &(dcc->szNick)); } - } else { - // ACTIVE CONNECTION - outputNoFmt(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting an active DCC CANVAS connection","dcc")); - int ret = m_pMarshal->dccConnect(dcc->szIp.toUtf8().data(),dcc->szPort.toUtf8().data(),m_pDescriptor->bDoTimeout); - if(ret != KviError_success)handleMarshalError(ret); - else output(KVI_OUT_DCCMSG,__tr2qs_ctx("Contacting host %Q on port %Q","dcc"),&(dcc->szIp),&(dcc->szPort)); + else + outputNoFmt(KVI_OUT_DCCMSG, __tr2qs_ctx("DCC CANVAS request not sent: awaiting manual connections", "dcc")); } + } + else + { + // ACTIVE CONNECTION + outputNoFmt(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting an active DCC CANVAS connection", "dcc")); + int ret = m_pMarshal->dccConnect(dcc->szIp.toUtf8().data(), dcc->szPort.toUtf8().data(), m_pDescriptor->bDoTimeout); + if(ret != KviError_success) + handleMarshalError(ret); + else + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Contacting host %Q on port %Q", "dcc"), &(dcc->szIp), &(dcc->szPort)); + } // m_pSlaveThread = 0; - } +} - DccCanvasWindow::~DccCanvasWindow() - { - g_pDccBroker->unregisterDccWindow(this); +DccCanvasWindow::~DccCanvasWindow() +{ + g_pDccBroker->unregisterDccWindow(this); // if(m_pSlaveThread) // { // m_pSlaveThread->terminate(); // delete m_pSlaveThread; // m_pSlaveThread = 0; // } - KviThreadManager::killPendingEvents(this); + KviThreadManager::killPendingEvents(this); // delete m_pDescriptor; // delete m_pMarshal; - } +} - const QString & DccCanvasWindow::target() - { - // This may change on the fly... - m_szTarget.sprintf("%s@%s:%s", - m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data()); - return m_szTarget; - } +const QString & DccCanvasWindow::target() +{ + // This may change on the fly... + m_szTarget.sprintf("%s@%s:%s", + m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data()); + return m_szTarget; +} - void DccCanvasWindow::fillCaptionBuffers() - { - KviCString tmp(KviCString::Format,"DCC Canvas %s@%s:%s", - m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data()); +void DccCanvasWindow::fillCaptionBuffers() +{ + KviCString tmp(KviCString::Format, "DCC Canvas %s@%s:%s", + m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data()); - m_szPlainTextCaption = tmp; + m_szPlainTextCaption = tmp; - m_szHtmlActiveCaption.sprintf("<nobr><font color=\"%s\"><b>%s</b></font></nobr>", - KVI_OPTION_COLOR(KviOption_colorCaptionTextActive).name().ascii(),tmp.ptr()); - m_szHtmlInactiveCaption.sprintf("<nobr><font color=\"%s\"><b>%s</b></font></nobr>", - KVI_OPTION_COLOR(KviOption_colorCaptionTextInactive).name().ascii(),tmp.ptr()); - } + m_szHtmlActiveCaption.sprintf("<nobr><font color=\"%s\"><b>%s</b></font></nobr>", + KVI_OPTION_COLOR(KviOption_colorCaptionTextActive).name().ascii(), tmp.ptr()); + m_szHtmlInactiveCaption.sprintf("<nobr><font color=\"%s\"><b>%s</b></font></nobr>", + KVI_OPTION_COLOR(KviOption_colorCaptionTextInactive).name().ascii(), tmp.ptr()); +} - QPixmap * DccCanvasWindow::myIconPtr() - { - return g_pIconManager->getSmallIcon(KVI_SMALLICON_CANVAS); - } +QPixmap * DccCanvasWindow::myIconPtr() +{ + return g_pIconManager->getSmallIcon(KVI_SMALLICON_CANVAS); +} - void DccCanvasWindow::getBaseLogFileName(KviCString &buffer) - { - buffer.sprintf("%s_%s_%s",m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data()); - } +void DccCanvasWindow::getBaseLogFileName(KviCString & buffer) +{ + buffer.sprintf("%s_%s_%s", m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data()); +} - void DccCanvasWindow::ownMessage(const char * text, bool bUserFeedback) - { - KviCString buf(KviCString::Format,"%s\r\n",text); +void DccCanvasWindow::ownMessage(const char * text, bool bUserFeedback) +{ + KviCString buf(KviCString::Format, "%s\r\n", text); // m_pSlaveThread->sendRawData(buf.ptr(),buf.len()); - if(bUserFeedback) - m_pFrm->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG, - m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(), - m_pDescriptor->szLocalHost.toUtf8().data(),text); - } + if(bUserFeedback) + m_pFrm->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, + m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), + m_pDescriptor->szLocalHost.toUtf8().data(), text); +} - void DccCanvasWindow::ownAction(const char * text) - { - KviCString buf(KviCString::Format,"%cACTION %s%c\r\n",text); +void DccCanvasWindow::ownAction(const char * text) +{ + KviCString buf(KviCString::Format, "%cACTION %s%c\r\n", text); // m_pSlaveThread->sendRawData(buf.ptr(),buf.len()); - output(KVI_OUT_ACTION,"%Q %s",&(m_pDescriptor->szLocalNick),text); - } + output(KVI_OUT_ACTION, "%Q %s", &(m_pDescriptor->szLocalNick), text); +} - bool DccCanvasWindow::event(QEvent *e) - { +bool DccCanvasWindow::event(QEvent * e) +{ // if(e->type() == KVI_THREAD_EVENT) // { // switch(((KviThreadEvent *)e)->id()) @@ -253,47 +260,47 @@ // break; // } // } - return KviWindow::event(e); - } + return KviWindow::event(e); +} - void DccCanvasWindow::resizeEvent(QResizeEvent *e) - { - int hght = m_pInput->heightHint(); +void DccCanvasWindow::resizeEvent(QResizeEvent * e) +{ + int hght = m_pInput->heightHint(); // int hght2 = m_pTopSplitter->sizeHint().height(); // m_pTopSplitter->setGeometry(0,0,width(),hght2); - m_pSplitter->setGeometry(0,0,width(),height() - hght); - m_pInput->setGeometry(0,height() - hght,width(),hght); - } + m_pSplitter->setGeometry(0, 0, width(), height() - hght); + m_pInput->setGeometry(0, height() - hght, width(), hght); +} - QSize DccCanvasWindow::sizeHint() const - { - QSize ret(m_pIrcView->sizeHint().width(), - m_pIrcView->sizeHint().height() + m_pInput->heightHint()); - return ret; - } +QSize DccCanvasWindow::sizeHint() const +{ + QSize ret(m_pIrcView->sizeHint().width(), + m_pIrcView->sizeHint().height() + m_pInput->heightHint()); + return ret; +} - void DccCanvasWindow::handleMarshalError(int err) - { - QString sss = KviError::getDescription(err); - output(KVI_OUT_DCCERROR,__tr2qs_ctx("DCC failed: %Q","dcc"),&sss); - } +void DccCanvasWindow::handleMarshalError(int err) +{ + QString sss = KviError::getDescription(err); + output(KVI_OUT_DCCERROR, __tr2qs_ctx("DCC failed: %Q", "dcc"), &sss); +} - void DccCanvasWindow::connected() +void DccCanvasWindow::connected() +{ + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Connected to %Q:%Q", "dcc"), + &(m_pMarshal->remoteIp()), &(m_pMarshal->remotePort())); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Local end is %Q:%Q", "dcc"), + &(m_pMarshal->localIp()), &(m_pMarshal->localPort())); + if(!(m_pDescriptor->bActive)) { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Connected to %Q:%Q","dcc"), - &(m_pMarshal->remoteIp()),&(m_pMarshal->remotePort())); - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Local end is %Q:%Q","dcc"), - &(m_pMarshal->localIp()),&(m_pMarshal->localPort())); - if(!(m_pDescriptor->bActive)) - { - // PASSIVE CONNECTION...Find out the remote end - m_pDescriptor->szIp = m_pMarshal->remoteIp(); - m_pDescriptor->szPort = m_pMarshal->remotePort(); - m_pDescriptor->szHost = m_pMarshal->remoteIp(); - } - updateCaption(); + // PASSIVE CONNECTION...Find out the remote end + m_pDescriptor->szIp = m_pMarshal->remoteIp(); + m_pDescriptor->szPort = m_pMarshal->remotePort(); + m_pDescriptor->szHost = m_pMarshal->remoteIp(); + } + updateCaption(); // m_pSlaveThread = new KviDccCanvasThread(this,m_pMarshal->releaseSocket()); // m_pSlaveThread->start(); - } +} #endif diff --git a/src/modules/dcc/DccCanvasWindow.h b/src/modules/dcc/DccCanvasWindow.h index f34a5717f..6b89bc735 100644 --- a/src/modules/dcc/DccCanvasWindow.h +++ b/src/modules/dcc/DccCanvasWindow.h @@ -27,43 +27,45 @@ #include "DccBroker.h" #ifdef COMPILE_DCC_CANVAS - #include "DccDescriptor.h" - #include "DccWindow.h" - #include "DccThread.h" +#include "DccDescriptor.h" +#include "DccWindow.h" +#include "DccThread.h" - #include "KviWindow.h" - #include "KviCString.h" - #include "KviPointerList.h" +#include "KviWindow.h" +#include "KviCString.h" +#include "KviPointerList.h" - class DccMarshal; - class DccCanvasWidget; - class QSplitter; +class DccMarshal; +class DccCanvasWidget; +class QSplitter; - class DccCanvasWindow : public DccWindow - { - Q_OBJECT - public: - DccCanvasWindow(DccDescriptor * dcc,const char * name); - ~DccCanvasWindow(); - protected: +class DccCanvasWindow : public DccWindow +{ + Q_OBJECT +public: + DccCanvasWindow(DccDescriptor * dcc, const char * name); + ~DccCanvasWindow(); + +protected: // KviDccCanvasThread * m_pSlaveThread; - DccCanvasWidget * m_pCanvas; + DccCanvasWidget * m_pCanvas; // QSplitter * m_pTopSplitter; - QString m_szTarget; - protected: - virtual const QString &target(); - virtual void fillCaptionBuffers(); - virtual void getBaseLogFileName(KviCString &buffer); - virtual QPixmap * myIconPtr(); - virtual void resizeEvent(QResizeEvent *e); - virtual QSize sizeHint() const; - virtual bool event(QEvent *e); - virtual void ownMessage(const char *text, bool bUserFeedback = true); - virtual void ownAction(const char *text); - protected slots: - void handleMarshalError(int err); - void connected(); - }; + QString m_szTarget; + +protected: + virtual const QString & target(); + virtual void fillCaptionBuffers(); + virtual void getBaseLogFileName(KviCString & buffer); + virtual QPixmap * myIconPtr(); + virtual void resizeEvent(QResizeEvent * e); + virtual QSize sizeHint() const; + virtual bool event(QEvent * e); + virtual void ownMessage(const char * text, bool bUserFeedback = true); + virtual void ownAction(const char * text); +protected slots: + void handleMarshalError(int err); + void connected(); +}; #endif #endif // _CANVAS_H_ diff --git a/src/modules/dcc/DccChatWindow.cpp b/src/modules/dcc/DccChatWindow.cpp index 9a65e9994..4e9a3c50e 100644 --- a/src/modules/dcc/DccChatWindow.cpp +++ b/src/modules/dcc/DccChatWindow.cpp @@ -27,8 +27,8 @@ #include "DccBroker.h" #ifdef COMPILE_ON_WINDOWS - // Ugly Windoze compiler... - #include "DccDialog.h" +// Ugly Windoze compiler... +#include "DccDialog.h" #endif #include "kvi_debug.h" @@ -59,12 +59,12 @@ #include <QByteArray> #ifdef COMPILE_CRYPT_SUPPORT - #include "KviCryptEngine.h" - #include "KviCryptController.h" +#include "KviCryptEngine.h" +#include "KviCryptController.h" #endif #ifdef COMPILE_SSL_SUPPORT - #include "KviSSLMaster.h" +#include "KviSSLMaster.h" #endif extern DccBroker * g_pDccBroker; @@ -79,43 +79,44 @@ extern DccBroker * g_pDccBroker; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -DccChatWindow::DccChatWindow(DccDescriptor * dcc,const char * name) -: DccWindow(KviWindow::DccChat,name,dcc) +DccChatWindow::DccChatWindow(DccDescriptor * dcc, const char * name) + : DccWindow(KviWindow::DccChat, name, dcc) { m_pButtonBox = new KviTalHBox(this); m_pLabel = new KviThemedLabel(m_pButtonBox, this, "dcc_chat_label"); m_pLabel->setText(name); - m_pButtonBox->setStretchFactor(m_pLabel,1); + m_pButtonBox->setStretchFactor(m_pLabel, 1); - m_pButtonContainer= new KviTalHBox(m_pButtonBox); + m_pButtonContainer = new KviTalHBox(m_pButtonBox); createTextEncodingButton(m_pButtonContainer); #ifdef COMPILE_CRYPT_SUPPORT createCryptControllerButton(m_pButtonContainer); #endif - m_pSplitter = new KviTalSplitter(Qt::Horizontal,this); + m_pSplitter = new KviTalSplitter(Qt::Horizontal, this); m_pSplitter->setObjectName("dcc_chat_splitter"); m_pSplitter->setChildrenCollapsible(false); - m_pIrcView = new KviIrcView(m_pSplitter,this); - connect(m_pIrcView,SIGNAL(rightClicked()),this,SLOT(textViewRightClicked())); - m_pInput = new KviInput(this); + m_pIrcView = new KviIrcView(m_pSplitter, this); + connect(m_pIrcView, SIGNAL(rightClicked()), this, SLOT(textViewRightClicked())); + m_pInput = new KviInput(this); //setFocusHandler(m_pInput,this); m_pSlaveThread = 0; - if(KVI_OPTION_BOOL(KviOption_boolAutoLogDccChat))m_pIrcView->startLogging(); + if(KVI_OPTION_BOOL(KviOption_boolAutoLogDccChat)) + m_pIrcView->startLogging(); m_pMarshal = new DccMarshal(this); - connect(m_pMarshal,SIGNAL(error(KviError::Code)),this,SLOT(handleMarshalError(KviError::Code))); - connect(m_pMarshal,SIGNAL(connected()),this,SLOT(connected())); - connect(m_pMarshal,SIGNAL(inProgress()),this,SLOT(connectionInProgress())); + connect(m_pMarshal, SIGNAL(error(KviError::Code)), this, SLOT(handleMarshalError(KviError::Code))); + connect(m_pMarshal, SIGNAL(connected()), this, SLOT(connected())); + connect(m_pMarshal, SIGNAL(inProgress()), this, SLOT(connectionInProgress())); #ifdef COMPILE_SSL_SUPPORT - connect(m_pMarshal,SIGNAL(startingSSLHandshake()),this,SLOT(startingSSLHandshake())); - connect(m_pMarshal,SIGNAL(sslError(const char *)),this,SLOT(sslError(const char *))); + connect(m_pMarshal, SIGNAL(startingSSLHandshake()), this, SLOT(startingSSLHandshake())); + connect(m_pMarshal, SIGNAL(sslError(const char *)), this, SLOT(sslError(const char *))); #endif m_pSlaveThread = 0; @@ -137,17 +138,17 @@ DccChatWindow::~DccChatWindow() void DccChatWindow::textViewRightClicked() { - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatPopupRequest,this,m_pDescriptor->idString()); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatPopupRequest, this, m_pDescriptor->idString()); } void DccChatWindow::triggerCreationEvents() { - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowCreated,this,m_pDescriptor->idString()); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowCreated, this, m_pDescriptor->idString()); } void DccChatWindow::triggerDestructionEvents() { - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowClosing,this,m_pDescriptor->idString()); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowClosing, this, m_pDescriptor->idString()); } void DccChatWindow::startConnection() @@ -155,21 +156,23 @@ void DccChatWindow::startConnection() if(!(m_pDescriptor->bActive)) { // PASSIVE CONNECTION - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting a passive DCC %s connection","dcc"),m_pDescriptor->szType.toUtf8().data()); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting a passive DCC %s connection", "dcc"), m_pDescriptor->szType.toUtf8().data()); #ifdef COMPILE_SSL_SUPPORT - KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp,m_pDescriptor->szListenPort,m_pDescriptor->bDoTimeout,m_pDescriptor->bIsSSL); + KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp, m_pDescriptor->szListenPort, m_pDescriptor->bDoTimeout, m_pDescriptor->bIsSSL); #else - KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp,m_pDescriptor->szListenPort,m_pDescriptor->bDoTimeout); + KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp, m_pDescriptor->szListenPort, m_pDescriptor->bDoTimeout); #endif if(eError != KviError::Success) handleMarshalError(eError); - } else { + } + else + { // ACTIVE CONNECTION - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting an active DCC %s connection","dcc"),m_pDescriptor->szType.toUtf8().data()); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting an active DCC %s connection", "dcc"), m_pDescriptor->szType.toUtf8().data()); #ifdef COMPILE_SSL_SUPPORT - KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(),m_pDescriptor->bDoTimeout,m_pDescriptor->bIsSSL); + KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(), m_pDescriptor->bDoTimeout, m_pDescriptor->bIsSSL); #else - KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(),m_pDescriptor->bDoTimeout); + KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(), m_pDescriptor->bDoTimeout); #endif if(eError != KviError::Success) handleMarshalError(eError); @@ -180,9 +183,11 @@ void DccChatWindow::connectionInProgress() { if(m_pDescriptor->bActive) { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Contacting host %Q on port %Q","dcc"),&(m_pDescriptor->szIp),&(m_pDescriptor->szPort)); - } else { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Listening on interface %Q port %Q","dcc"),&(m_pMarshal->localIp()),&(m_pMarshal->localPort())); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Contacting host %Q on port %Q", "dcc"), &(m_pDescriptor->szIp), &(m_pDescriptor->szPort)); + } + else + { + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Listening on interface %Q port %Q", "dcc"), &(m_pMarshal->localIp()), &(m_pMarshal->localPort())); if(m_pDescriptor->bSendRequest) { @@ -190,7 +195,9 @@ void DccChatWindow::connectionInProgress() if(!m_pDescriptor->szFakeIp.isEmpty()) { ip = m_pDescriptor->szFakeIp; - } else { + } + else + { ip = m_pDescriptor->szListenIp; if(KVI_OPTION_BOOL(KviOption_boolDccGuessIpFromServerWhenLocalIsUnroutable)) @@ -204,54 +211,61 @@ void DccChatWindow::connectionInProgress() if(tmp.hasData()) { ip = tmp; - output(KVI_OUT_DCCMSG,__tr2qs_ctx("The local IP address is private, determining from IRC server: %s","dcc"),ip.ptr()); - } else { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("The local IP address is private, but unable to determine it from the IRC server","dcc")); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("The local IP address is private, determining from IRC server: %s", "dcc"), ip.ptr()); + } + else + { + output(KVI_OUT_DCCMSG, __tr2qs_ctx("The local IP address is private, but unable to determine it from the IRC server", "dcc")); } - } else { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("The local IP address is private, but have no IRC server to determine it from","dcc")); + } + else + { + output(KVI_OUT_DCCMSG, __tr2qs_ctx("The local IP address is private, but have no IRC server to determine it from", "dcc")); } } } } - QString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : QString(m_pMarshal->localPort()); + QString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : QString(m_pMarshal->localPort()); //FIXME: #warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned number)" struct in_addr a; - if(KviNetUtils::stringIpToBinaryIp(ip.ptr(),&a))ip.setNum(htonl(a.s_addr)); + if(KviNetUtils::stringIpToBinaryIp(ip.ptr(), &a)) + ip.setNum(htonl(a.s_addr)); QString szReq = QString("PRIVMSG %1 :%2DCC %3 chat %4 %5").arg(m_pDescriptor->szNick, QChar(0x01), m_pDescriptor->szType, ip.ptr(), port); if(m_pDescriptor->isZeroPortRequest()) { szReq.append(" "); - szReq+=m_pDescriptor->zeroPortRequestTag(); + szReq += m_pDescriptor->zeroPortRequestTag(); } szReq.append((char)(0x01)); m_pDescriptor->console()->connection()->sendData(m_pDescriptor->console()->connection()->encodeText(szReq).data()); - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Sent DCC %Q request to %Q, waiting for the remote client to connect...","dcc"), - &(m_pDescriptor->szType),&(m_pDescriptor->szNick)); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Sent DCC %Q request to %Q, waiting for the remote client to connect...", "dcc"), + &(m_pDescriptor->szType), &(m_pDescriptor->szNick)); //qDebug(m_pDescriptor->szNick); - } else output(KVI_OUT_DCCMSG,__tr2qs_ctx("DCC %Q request not sent, awaiting manual connection","dcc"),&(m_pDescriptor->szType)); + } + else + output(KVI_OUT_DCCMSG, __tr2qs_ctx("DCC %Q request not sent, awaiting manual connection", "dcc"), &(m_pDescriptor->szType)); } - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatConnectionInProgress,this,m_pDescriptor->idString()); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatConnectionInProgress, this, m_pDescriptor->idString()); } void DccChatWindow::startingSSLHandshake() { #ifdef COMPILE_SSL_SUPPORT - outputNoFmt(KVI_OUT_SSL,__tr2qs_ctx("Low-level transport connection established","dcc")); - outputNoFmt(KVI_OUT_SSL,__tr2qs_ctx("Starting Secure Socket Layer handshake","dcc")); + outputNoFmt(KVI_OUT_SSL, __tr2qs_ctx("Low-level transport connection established", "dcc")); + outputNoFmt(KVI_OUT_SSL, __tr2qs_ctx("Starting Secure Socket Layer handshake", "dcc")); #endif } void DccChatWindow::sslError(const char * msg) { #ifdef COMPILE_SSL_SUPPORT - if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatError,this,QString(msg),m_pDescriptor->idString())) - output(KVI_OUT_DCCERROR,__tr2qs_ctx("[SSL ERROR]: %s","dcc"),msg); + if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatError, this, QString(msg), m_pDescriptor->idString())) + output(KVI_OUT_DCCERROR, __tr2qs_ctx("[SSL ERROR]: %s", "dcc"), msg); #endif } @@ -270,11 +284,11 @@ void DccChatWindow::fillCaptionBuffers() { QString tmp = QString("DCC %1 %2@%3:%4").arg( #ifdef COMPILE_SSL_SUPPORT - m_pDescriptor->bIsSSL ? "SChat" : "Chat", + m_pDescriptor->bIsSSL ? "SChat" : "Chat", #else - "Chat", + "Chat", #endif - m_pDescriptor->szNick, m_pDescriptor->szIp, m_pDescriptor->szPort); + m_pDescriptor->szNick, m_pDescriptor->szIp, m_pDescriptor->szPort); m_szPlainTextCaption = tmp; } @@ -284,22 +298,23 @@ QPixmap * DccChatWindow::myIconPtr() return g_pIconManager->getSmallIcon(KviIconManager::DccMsg); } -void DccChatWindow::getBaseLogFileName(QString &buffer) +void DccChatWindow::getBaseLogFileName(QString & buffer) { - buffer.sprintf("%s_%s_%s",m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data()); + buffer.sprintf("%s_%s_%s", m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data()); } -void DccChatWindow::ownMessage(const QString &text, bool bUserFeedback) +void DccChatWindow::ownMessage(const QString & text, bool bUserFeedback) { if(!m_pSlaveThread) { - output(KVI_OUT_SYSTEMWARNING,__tr2qs_ctx("Can't send data: no active connection","dcc")); + output(KVI_OUT_SYSTEMWARNING, __tr2qs_ctx("Can't send data: no active connection", "dcc")); return; } QByteArray szData = encodeText(text); const char * d = szData.data(); - if(!d)return; + if(!d) + return; #ifdef COMPILE_CRYPT_SUPPORT if(cryptSessionInfo()) @@ -310,28 +325,28 @@ void DccChatWindow::ownMessage(const QString &text, bool bUserFeedback) { KviCString encrypted; cryptSessionInfo()->m_pEngine->setMaxEncryptLen(-1); - switch(cryptSessionInfo()->m_pEngine->encrypt(d,encrypted)) + switch(cryptSessionInfo()->m_pEngine->encrypt(d, encrypted)) { case KviCryptEngine::Encrypted: { - KviCString buf(KviCString::Format,"%s\r\n",encrypted.ptr()); - m_pSlaveThread->sendRawData(buf.ptr(),buf.len()); + KviCString buf(KviCString::Format, "%s\r\n", encrypted.ptr()); + m_pSlaveThread->sendRawData(buf.ptr(), buf.len()); if(bUserFeedback) - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSGCRYPTED, - m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(), - m_pDescriptor->szLocalHost.toUtf8().data(),text,KviConsoleWindow::NoNotifications); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSGCRYPTED, + m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), + m_pDescriptor->szLocalHost.toUtf8().data(), text, KviConsoleWindow::NoNotifications); } break; case KviCryptEngine::Encoded: { - KviCString buf(KviCString::Format,"%s\r\n",encrypted.ptr()); - m_pSlaveThread->sendRawData(buf.ptr(),buf.len()); + KviCString buf(KviCString::Format, "%s\r\n", encrypted.ptr()); + m_pSlaveThread->sendRawData(buf.ptr(), buf.len()); if(bUserFeedback) { QString encr = decodeText(encrypted.ptr()); - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG, - m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(), - m_pDescriptor->szLocalHost.toUtf8().data(),encr,KviConsoleWindow::NoNotifications); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, + m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), + m_pDescriptor->szLocalHost.toUtf8().data(), encr, KviConsoleWindow::NoNotifications); } } break; @@ -339,34 +354,36 @@ void DccChatWindow::ownMessage(const QString &text, bool bUserFeedback) { QString szErr = cryptSessionInfo()->m_pEngine->lastError(); output(KVI_OUT_SYSTEMERROR, - __tr2qs_ctx("The encryption engine was not able to encrypt the current message (%Q): %Q, no data was sent to the remote end","dcc"), - &text,&szErr); + __tr2qs_ctx("The encryption engine was not able to encrypt the current message (%Q): %Q, no data was sent to the remote end", "dcc"), + &text, &szErr); } break; } return; - } else { + } + else + { d++; //eat the escape code - KviCString buf(KviCString::Format,"%s\r\n",d); + KviCString buf(KviCString::Format, "%s\r\n", d); QString tmp = text.right(text.length() - 1); - m_pSlaveThread->sendRawData(buf.ptr(),buf.len()); + m_pSlaveThread->sendRawData(buf.ptr(), buf.len()); if(bUserFeedback) - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG, - m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(), - m_pDescriptor->szLocalHost.toUtf8().data(),tmp,KviConsoleWindow::NoNotifications); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, + m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), + m_pDescriptor->szLocalHost.toUtf8().data(), tmp, KviConsoleWindow::NoNotifications); return; } } } #endif - KviCString buf(KviCString::Format,"%s\r\n",d); - m_pSlaveThread->sendRawData(buf.ptr(),buf.len()); + KviCString buf(KviCString::Format, "%s\r\n", d); + m_pSlaveThread->sendRawData(buf.ptr(), buf.len()); if(bUserFeedback) - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG, - m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(), - m_pDescriptor->szLocalHost.toUtf8().data(),text,KviConsoleWindow::NoNotifications); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, + m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), + m_pDescriptor->szLocalHost.toUtf8().data(), text, KviConsoleWindow::NoNotifications); } const QString & DccChatWindow::localNick() @@ -376,7 +393,7 @@ const QString & DccChatWindow::localNick() return m_szLocalNick; } -void DccChatWindow::ownAction(const QString &text) +void DccChatWindow::ownAction(const QString & text) { if(m_pSlaveThread) { @@ -385,7 +402,9 @@ void DccChatWindow::ownAction(const QString &text) if(KVI_OPTION_BOOL(KviOption_boolStripMircColorsInUserMessages)) { szTmpBuffer = KviControlCodes::stripControlBytes(text); - } else { + } + else + { szTmpBuffer = text; } @@ -393,15 +412,17 @@ void DccChatWindow::ownAction(const QString &text) const char * d = szData.data(); if(!d) return; - KviCString buf(KviCString::Format,"%cACTION %s%c\r\n",0x01,d,0x01); - m_pSlaveThread->sendRawData(buf.ptr(),buf.len()); - output(KVI_OUT_ACTION,"%Q %Q",&(m_pDescriptor->szLocalNick),&szTmpBuffer); - } else { - output(KVI_OUT_SYSTEMWARNING,__tr2qs_ctx("Can't send data: no active connection","dcc")); + KviCString buf(KviCString::Format, "%cACTION %s%c\r\n", 0x01, d, 0x01); + m_pSlaveThread->sendRawData(buf.ptr(), buf.len()); + output(KVI_OUT_ACTION, "%Q %Q", &(m_pDescriptor->szLocalNick), &szTmpBuffer); + } + else + { + output(KVI_OUT_SYSTEMWARNING, __tr2qs_ctx("Can't send data: no active connection", "dcc")); } } -bool DccChatWindow::event(QEvent *e) +bool DccChatWindow::event(QEvent * e) { if(e->type() == KVI_THREAD_EVENT) { @@ -411,9 +432,9 @@ bool DccChatWindow::event(QEvent *e) { KviError::Code * pError = ((KviThreadDataEvent<KviError::Code> *)e)->getData(); QString szErr = KviError::getDescription(*pError); - if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatError,this,szErr,m_pDescriptor->idString())) - output(KVI_OUT_DCCERROR,__tr2qs_ctx("ERROR: %Q","dcc"),&szErr); - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatDisconnected,this,m_pDescriptor->idString()); + if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatError, this, szErr, m_pDescriptor->idString())) + output(KVI_OUT_DCCERROR, __tr2qs_ctx("ERROR: %Q", "dcc"), &szErr); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatDisconnected, this, m_pDescriptor->idString()); delete pError; return true; } @@ -421,14 +442,16 @@ bool DccChatWindow::event(QEvent *e) case KVI_DCC_THREAD_EVENT_DATA: { KviCString * encoded = ((KviThreadDataEvent<KviCString> *)e)->getData(); - KviCString d=KviCString(decodeText(encoded->ptr())); + KviCString d = KviCString(decodeText(encoded->ptr())); if(d.firstCharIs(0x01)) { d.cutLeft(1); - if(d.lastCharIs(0x01))d.cutRight(1); - if(kvi_strEqualCIN("ACTION",d.ptr(),6))d.cutLeft(6); + if(d.lastCharIs(0x01)) + d.cutRight(1); + if(kvi_strEqualCIN("ACTION", d.ptr(), 6)) + d.cutLeft(6); d.stripLeftWhiteSpace(); - output(KVI_OUT_ACTION,"%Q %s",&(m_pDescriptor->szNick),d.ptr()); + output(KVI_OUT_ACTION, "%Q %s", &(m_pDescriptor->szNick), d.ptr()); if(!hasAttention(KviWindow::MainWindowIsVisible)) { if(KVI_OPTION_BOOL(KviOption_boolFlashDccChatWindowOnNewMessages)) @@ -442,10 +465,12 @@ bool DccChatWindow::event(QEvent *e) szMsg += "</b> "; szMsg += KviQString::toHtmlEscaped(QString(d.ptr())); //qDebug("KviIrcServerParser_ctcp.cpp:975 debug: %s",szMsg.data()); - g_pApp->notifierMessage(this,KVI_OPTION_MSGTYPE(KVI_OUT_ACTION).pixId(),szMsg,KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime)); + g_pApp->notifierMessage(this, KVI_OPTION_MSGTYPE(KVI_OUT_ACTION).pixId(), szMsg, KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime)); } } - } else { + } + else + { #ifdef COMPILE_CRYPT_SUPPORT if(KviCryptSessionInfo * cinf = cryptSessionInfo()) @@ -453,39 +478,41 @@ bool DccChatWindow::event(QEvent *e) if(cinf->m_bDoDecrypt) { KviCString decryptedStuff; - switch(cinf->m_pEngine->decrypt(d.ptr(),decryptedStuff)) + switch(cinf->m_pEngine->decrypt(d.ptr(), decryptedStuff)) { case KviCryptEngine::DecryptOkWasEncrypted: case KviCryptEngine::DecryptOkWasEncoded: case KviCryptEngine::DecryptOkWasPlainText: - if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage,this,QString(decryptedStuff.ptr()),m_pDescriptor->idString())) + if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage, this, QString(decryptedStuff.ptr()), m_pDescriptor->idString())) { - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG, - m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szUser.toUtf8().data(), - m_pDescriptor->szHost.toUtf8().data(),decryptedStuff.ptr()); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_DCCCHATMSG, + m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szUser.toUtf8().data(), + m_pDescriptor->szHost.toUtf8().data(), decryptedStuff.ptr()); } delete encoded; return true; - break; + break; default: // also case KviCryptEngine::DecryptError { QString szErr = cinf->m_pEngine->lastError(); output(KVI_OUT_SYSTEMERROR, - __tr2qs_ctx("The following message appears to be encrypted, but the encryption engine failed to decode it: %Q","dcc"), - &szErr); + __tr2qs_ctx("The following message appears to be encrypted, but the encryption engine failed to decode it: %Q", "dcc"), + &szErr); } break; } } - } else { + } + else + { #endif // FIXME! - if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage,this,QString(d.ptr()),m_pDescriptor->idString())) + if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage, this, QString(d.ptr()), m_pDescriptor->idString())) { - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG, - m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szUser.toUtf8().data(), - m_pDescriptor->szHost.toUtf8().data(),d.ptr()); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_DCCCHATMSG, + m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szUser.toUtf8().data(), + m_pDescriptor->szHost.toUtf8().data(), d.ptr()); if(!hasAttention(KviWindow::MainWindowIsVisible)) { if(KVI_OPTION_BOOL(KviOption_boolFlashDccChatWindowOnNewMessages)) @@ -495,7 +522,7 @@ bool DccChatWindow::event(QEvent *e) if(KVI_OPTION_BOOL(KviOption_boolPopupNotifierOnNewDccChatMessages)) { QString szMsg = KviQString::toHtmlEscaped(QString(d.ptr())); - g_pApp->notifierMessage(this,KviIconManager::DccChatMsg,szMsg,KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime)); + g_pApp->notifierMessage(this, KviIconManager::DccChatMsg, szMsg, KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime)); } } } @@ -516,23 +543,23 @@ void DccChatWindow::resizeEvent(QResizeEvent *) { int hght = m_pInput->heightHint(); int hght2 = m_pButtonBox->sizeHint().height(); - m_pButtonBox->setGeometry(0,0,width(),hght2); - m_pSplitter->setGeometry(0,hght2,width(),height() - (hght + hght2)); - m_pInput->setGeometry(0,height() - hght,width(),hght); + m_pButtonBox->setGeometry(0, 0, width(), hght2); + m_pSplitter->setGeometry(0, hght2, width(), height() - (hght + hght2)); + m_pInput->setGeometry(0, height() - hght, width(), hght); } QSize DccChatWindow::sizeHint() const { QSize ret(m_pIrcView->sizeHint().width(), - m_pIrcView->sizeHint().height() + m_pInput->heightHint()); + m_pIrcView->sizeHint().height() + m_pInput->heightHint()); return ret; } void DccChatWindow::handleMarshalError(KviError::Code eError) { QString szErr = KviError::getDescription(eError); - if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatError,this,szErr,m_pDescriptor->idString())) - output(KVI_OUT_DCCERROR,__tr2qs_ctx("DCC %Q failed: %Q","dcc"),&(m_pDescriptor->szType),&szErr); + if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatError, this, szErr, m_pDescriptor->idString())) + output(KVI_OUT_DCCERROR, __tr2qs_ctx("DCC %Q failed: %Q", "dcc"), &(m_pDescriptor->szType), &szErr); } void DccChatWindow::connected() @@ -540,31 +567,31 @@ void DccChatWindow::connected() if(!(m_pDescriptor->bActive)) { // PASSIVE CONNECTION...Find out the remote end - m_pDescriptor->szIp = m_pMarshal->remoteIp(); + m_pDescriptor->szIp = m_pMarshal->remoteIp(); m_pDescriptor->szPort = m_pMarshal->remotePort(); m_pDescriptor->szHost = m_pMarshal->remoteIp(); } updateCaption(); - m_pSlaveThread = new DccChatThread(this,m_pMarshal->releaseSocket()); + m_pSlaveThread = new DccChatThread(this, m_pMarshal->releaseSocket()); #ifdef COMPILE_SSL_SUPPORT KviSSL * s = m_pMarshal->releaseSSL(); if(s) { - KviSSLMaster::printSSLConnectionInfo(this,s); + KviSSLMaster::printSSLConnectionInfo(this, s); m_pSlaveThread->setSSL(s); } #endif m_pSlaveThread->start(); - if(!KVS_TRIGGER_EVENT_1_HALTED(KviEvent_OnDCCChatConnected,this,m_pDescriptor->idString())) + if(!KVS_TRIGGER_EVENT_1_HALTED(KviEvent_OnDCCChatConnected, this, m_pDescriptor->idString())) { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Connected to %Q:%Q","dcc"), - &(m_pMarshal->remoteIp()),&(m_pMarshal->remotePort())); - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Local end is %Q:%Q","dcc"), - &(m_pMarshal->localIp()),&(m_pMarshal->localPort())); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Connected to %Q:%Q", "dcc"), + &(m_pMarshal->remoteIp()), &(m_pMarshal->remotePort())); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Local end is %Q:%Q", "dcc"), + &(m_pMarshal->localIp()), &(m_pMarshal->localPort())); #ifdef COMPILE_SSL_SUPPORT QString tmp = QString("dcc: %1 %2@%3:%4").arg(m_pDescriptor->bIsSSL ? "SChat" : "Chat", m_pDescriptor->szNick, m_pDescriptor->szIp, m_pDescriptor->szPort); #else @@ -584,9 +611,8 @@ void DccChatWindow::connected() //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -DccChatThread::DccChatThread(KviWindow *wnd,kvi_socket_t fd) -: DccThread(wnd,fd) +DccChatThread::DccChatThread(KviWindow * wnd, kvi_socket_t fd) + : DccThread(wnd, fd) { m_pOutBuffers = new KviPointerList<KviDataBuffer>; m_pOutBuffers->setAutoDelete(true); @@ -594,13 +620,14 @@ DccChatThread::DccChatThread(KviWindow *wnd,kvi_socket_t fd) DccChatThread::~DccChatThread() { - if(m_pOutBuffers)delete m_pOutBuffers; + if(m_pOutBuffers) + delete m_pOutBuffers; } void DccChatThread::run() { KviDccThreadIncomingData data; - data.iLen = 0; + data.iLen = 0; data.buffer = 0; for(;;) @@ -612,7 +639,9 @@ void DccChatThread::run() { delete e; goto out_of_the_loop; - } else { + } + else + { // Other events are senseless to us delete e; } @@ -620,32 +649,38 @@ void DccChatThread::run() bool bCanRead; bool bCanWrite; - if(kvi_select(m_fd,&bCanRead,&bCanWrite)) + if(kvi_select(m_fd, &bCanRead, &bCanWrite)) { if(bCanWrite) { - if(!tryFlushOutBuffers())goto out_of_the_loop; + if(!tryFlushOutBuffers()) + goto out_of_the_loop; } if(bCanRead) { - data.buffer = (char *) KviMemory::reallocate(data.buffer,(data.iLen + 512) * sizeof(char)); + data.buffer = (char *)KviMemory::reallocate(data.buffer, (data.iLen + 512) * sizeof(char)); int readLen; #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) { - readLen = m_pSSL->read(data.buffer + data.iLen,512); - } else { + readLen = m_pSSL->read(data.buffer + data.iLen, 512); + } + else + { #endif - readLen = kvi_socket_recv(m_fd,data.buffer + data.iLen,512); + readLen = kvi_socket_recv(m_fd, data.buffer + data.iLen, 512); #ifdef COMPILE_SSL_SUPPORT } #endif if(readLen > 0) { data.iLen += readLen; - data.buffer = (char *)KviMemory::reallocate(data.buffer,data.iLen * sizeof(char)); - if(!handleIncomingData(&data,false))break; // non critical... - } else { + data.buffer = (char *)KviMemory::reallocate(data.buffer, data.iLen * sizeof(char)); + if(!handleIncomingData(&data, false)) + break; // non critical... + } + else + { #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) @@ -655,11 +690,11 @@ void DccChatThread::run() { case KviSSL::ZeroReturn: readLen = 0; - break; + break; case KviSSL::WantRead: case KviSSL::WantWrite: // hmmm... - break; + break; case KviSSL::SyscallError: { int iE = m_pSSL->getLastError(true); @@ -682,21 +717,24 @@ void DccChatThread::run() // Raise unknown SSL ERROR postErrorEvent(KviError::SSLError); goto out_of_the_loop; - break; + break; } } #endif if(data.iLen > 0) { - data.buffer = (char *)KviMemory::reallocate(data.buffer,data.iLen * sizeof(char)); - } else { + data.buffer = (char *)KviMemory::reallocate(data.buffer, data.iLen * sizeof(char)); + } + else + { KviMemory::free(data.buffer); data.buffer = 0; } if(!handleInvalidSocketRead(readLen)) { - if(data.iLen)handleIncomingData(&data,true); // critical + if(data.iLen) + handleIncomingData(&data, true); // critical KVI_ASSERT(!data.iLen); break; // error } @@ -708,8 +746,8 @@ void DccChatThread::run() out_of_the_loop: - - if(data.iLen)KviMemory::free(data.buffer); + if(data.iLen) + KviMemory::free(data.buffer); #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) @@ -719,11 +757,12 @@ out_of_the_loop: } #endif - if(m_fd != KVI_INVALID_SOCKET)::kvi_socket_close(m_fd); + if(m_fd != KVI_INVALID_SOCKET) + ::kvi_socket_close(m_fd); m_fd = KVI_INVALID_SOCKET; } -bool DccChatThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCritical) +bool DccChatThread::handleIncomingData(KviDccThreadIncomingData * data, bool bCritical) { KVI_ASSERT(data->iLen); KVI_ASSERT(data->buffer); @@ -736,34 +775,39 @@ bool DccChatThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCri KviThreadDataEvent<KviCString> * e = new KviThreadDataEvent<KviCString>(KVI_DCC_THREAD_EVENT_DATA); // The left part is len chars long int len = aux - data->buffer; -// qDebug("LEN = %d, iLen = %d",len,data->iLen); -//#warning "DO IT BETTER (the \r cutting)" - KviCString * s = new KviCString(data->buffer,len); - if(s->lastCharIs('\r'))s->cutRight(1); + // qDebug("LEN = %d, iLen = %d",len,data->iLen); + //#warning "DO IT BETTER (the \r cutting)" + KviCString * s = new KviCString(data->buffer, len); + if(s->lastCharIs('\r')) + s->cutRight(1); e->setData(s); // but we cut also \n (or \0) ++aux; // so len += 1; --> new data->iLen -= len; data->iLen -= (len + 1); -// qDebug("iLen now = %d",data->iLen); + // qDebug("iLen now = %d",data->iLen); KVI_ASSERT(data->iLen >= 0); if(data->iLen > 0) { // memmove the remaining part to the beginning // aux points after \n or \0 - KviMemory::move(data->buffer,aux,data->iLen); - data->buffer = (char *)KviMemory::reallocate(data->buffer,data->iLen); + KviMemory::move(data->buffer, aux, data->iLen); + data->buffer = (char *)KviMemory::reallocate(data->buffer, data->iLen); end = data->buffer + data->iLen; aux = data->buffer; - } else { + } + else + { // no more data in the buffer KVI_ASSERT(data->iLen == 0); KviMemory::free(data->buffer); data->buffer = end = aux = 0; } - postEvent(parent(),e); - } else aux++; -// qDebug("PASSING CHAR %c",*aux); + postEvent(parent(), e); + } + else + aux++; + // qDebug("PASSING CHAR %c",*aux); } // now aux == end if(bCritical) @@ -773,22 +817,23 @@ bool DccChatThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCri { // in the last part there are no NULL and \n chars KviThreadDataEvent<KviCString> * e = new KviThreadDataEvent<KviCString>(KVI_DCC_THREAD_EVENT_DATA); - KviCString * s = new KviCString(data->buffer,data->iLen); - if(s->lastCharIs('\r'))s->cutRight(1); + KviCString * s = new KviCString(data->buffer, data->iLen); + if(s->lastCharIs('\r')) + s->cutRight(1); e->setData(s); data->iLen = 0; KviMemory::free(data->buffer); data->buffer = 0; - postEvent(parent(),e); + postEvent(parent(), e); } } return true; } -void DccChatThread::sendRawData(const void * buffer,int len) +void DccChatThread::sendRawData(const void * buffer, int len) { m_pMutex->lock(); - m_pOutBuffers->append(new KviDataBuffer((unsigned int)len,(const unsigned char *)buffer)); + m_pOutBuffers->append(new KviDataBuffer((unsigned int)len, (const unsigned char *)buffer)); m_pMutex->unlock(); } @@ -802,22 +847,28 @@ bool DccChatThread::tryFlushOutBuffers() #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) { - sentLen = m_pSSL->write((const char *)b->data(),b->size()); - } else { + sentLen = m_pSSL->write((const char *)b->data(), b->size()); + } + else + { #endif - sentLen = kvi_socket_send(m_fd,b->data(),b->size()); + sentLen = kvi_socket_send(m_fd, b->data(), b->size()); #ifdef COMPILE_SSL_SUPPORT } #endif if(sentLen > 0) { - if(sentLen == b->size())m_pOutBuffers->removeFirst(); - else { + if(sentLen == b->size()) + m_pOutBuffers->removeFirst(); + else + { // just a part b->remove((unsigned int)sentLen); break; } - } else { + } + else + { #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) { @@ -828,7 +879,7 @@ bool DccChatThread::tryFlushOutBuffers() case KviSSL::WantRead: // Async continue... goto handle_system_error; - break; + break; case KviSSL::SyscallError: if(sentLen == 0) { @@ -836,7 +887,9 @@ bool DccChatThread::tryFlushOutBuffers() postErrorEvent(KviError::RemoteEndClosedConnection); bRet = false; goto out_of_the_loop; - } else { + } + else + { int iSSLErr = m_pSSL->getLastError(true); if(iSSLErr != 0) { @@ -844,33 +897,35 @@ bool DccChatThread::tryFlushOutBuffers() postErrorEvent(KviError::SSLError); bRet = false; goto out_of_the_loop; - } else { + } + else + { goto handle_system_error; } } - break; + break; case KviSSL::SSLError: raiseSSLError(); postErrorEvent(KviError::SSLError); bRet = false; goto out_of_the_loop; - break; + break; default: postErrorEvent(KviError::SSLError); bRet = false; goto out_of_the_loop; - break; + break; } } #endif -handle_system_error: + handle_system_error: if(sentLen < 0) { int err = kvi_socket_error(); #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) if((err != EAGAIN) || (err != EINTR) || (err != WSAEWOULDBLOCK)) #else - if((err != EAGAIN)||(err != EINTR)) + if((err != EAGAIN) || (err != EINTR)) #endif { postErrorEvent(KviError::translateSystemError(err)); diff --git a/src/modules/dcc/DccChatWindow.h b/src/modules/dcc/DccChatWindow.h index bb03c0840..54fb6556a 100644 --- a/src/modules/dcc/DccChatWindow.h +++ b/src/modules/dcc/DccChatWindow.h @@ -36,7 +36,7 @@ #include "KviError.h" #ifdef COMPILE_SSL_SUPPORT - class KviSSL; +class KviSSL; #endif class DccMarshal; @@ -45,10 +45,12 @@ class QSplitter; class DccChatThread : public DccThread { public: - DccChatThread(KviWindow * wnd,kvi_socket_t fd); + DccChatThread(KviWindow * wnd, kvi_socket_t fd); ~DccChatThread(); + protected: - KviPointerList<KviDataBuffer> * m_pOutBuffers; + KviPointerList<KviDataBuffer> * m_pOutBuffers; + protected: virtual void run(); bool tryFlushOutBuffers(); @@ -59,37 +61,38 @@ protected: // since the thread is going to die // It should return true if the handing was succesfull // or false if the thread should be stopped - virtual bool handleIncomingData(KviDccThreadIncomingData *data,bool bCritical); + virtual bool handleIncomingData(KviDccThreadIncomingData * data, bool bCritical); + public: - virtual void sendRawData(const void * buffer,int len); // mutex (m_pOutBuffers usage) + virtual void sendRawData(const void * buffer, int len); // mutex (m_pOutBuffers usage) }; - class DccChatWindow : public DccWindow { Q_OBJECT public: - DccChatWindow(DccDescriptor * dcc,const char * name); + DccChatWindow(DccDescriptor * dcc, const char * name); ~DccChatWindow(); - QFrame * buttonContainer() { return (QFrame*)m_pButtonContainer; }; + QFrame * buttonContainer() { return (QFrame *)m_pButtonContainer; }; protected: - DccChatThread * m_pSlaveThread; - QString m_szTarget; - QString m_szLocalNick; - KviThemedLabel * m_pLabel; - KviTalHBox * m_pButtonBox; - KviTalHBox * m_pButtonContainer; + DccChatThread * m_pSlaveThread; + QString m_szTarget; + QString m_szLocalNick; + KviThemedLabel * m_pLabel; + KviTalHBox * m_pButtonBox; + KviTalHBox * m_pButtonContainer; + protected: virtual const QString & target(); virtual void fillCaptionBuffers(); - virtual void getBaseLogFileName(QString &buffer); + virtual void getBaseLogFileName(QString & buffer); virtual QPixmap * myIconPtr(); - virtual void resizeEvent(QResizeEvent *e); + virtual void resizeEvent(QResizeEvent * e); virtual QSize sizeHint() const; virtual const QString & localNick(); - virtual bool event(QEvent *e); - virtual void ownMessage(const QString &text, bool bUserFeedback = true); - virtual void ownAction(const QString &text); + virtual bool event(QEvent * e); + virtual void ownMessage(const QString & text, bool bUserFeedback = true); + virtual void ownAction(const QString & text); virtual void triggerCreationEvents(); virtual void triggerDestructionEvents(); void startConnection(); diff --git a/src/modules/dcc/DccDescriptor.cpp b/src/modules/dcc/DccDescriptor.cpp index 036b032e2..a1db30716 100644 --- a/src/modules/dcc/DccDescriptor.cpp +++ b/src/modules/dcc/DccDescriptor.cpp @@ -32,9 +32,9 @@ #include "KviApplication.h" static unsigned int g_uNextDescriptorId = 1; // we use 0 as an invalid descriptor id -static KviPointerHashTable<int,DccDescriptor> * g_pDescriptorDict = 0; +static KviPointerHashTable<int, DccDescriptor> * g_pDescriptorDict = 0; -KviPointerHashTable<int,DccDescriptor> * DccDescriptor::descriptorDict() +KviPointerHashTable<int, DccDescriptor> * DccDescriptor::descriptorDict() { return g_pDescriptorDict; } @@ -46,7 +46,7 @@ DccDescriptor::DccDescriptor(const DccDescriptor & src) DccDescriptor::DccDescriptor(KviConsoleWindow * pConsole) { - m_pConsole = pConsole; + m_pConsole = pConsole; m_pDccWindow = 0; m_pDccTransfer = 0; @@ -57,38 +57,37 @@ DccDescriptor::DccDescriptor(KviConsoleWindow * pConsole) if(!g_pDescriptorDict) { - g_pDescriptorDict = new KviPointerHashTable<int,DccDescriptor>; + g_pDescriptorDict = new KviPointerHashTable<int, DccDescriptor>; g_pDescriptorDict->setAutoDelete(false); } - g_pDescriptorDict->replace((long)m_uId,this); + g_pDescriptorDict->replace((long)m_uId, this); - szNick = __tr_ctx("unknown","dcc"); - szUser = szNick; - szHost = szNick; + szNick = __tr_ctx("unknown", "dcc"); + szUser = szNick; + szHost = szNick; - szLocalNick = szNick; - szLocalUser = szNick; - szLocalHost = szNick; + szLocalNick = szNick; + szLocalUser = szNick; + szLocalHost = szNick; - szIp = szNick; - szPort = szNick; + szIp = szNick; + szPort = szNick; - - bSendRequest = true; - bDoTimeout = true; - bIsTdcc = false; + bSendRequest = true; + bDoTimeout = true; + bIsTdcc = false; bOverrideMinimize = false; - bShowMinimized = false; - bAutoAccept = false; + bShowMinimized = false; + bAutoAccept = false; #ifdef COMPILE_SSL_SUPPORT - bIsSSL = false; + bIsSSL = false; #endif - bRecvFile = false; - bResume = false; - bNoAcks = false; + bRecvFile = false; + bResume = false; + bNoAcks = false; bIsIncomingAvatar = false; - iSampleRate = 0; + iSampleRate = 0; m_bCreationEventTriggered = false; } @@ -103,7 +102,7 @@ DccDescriptor::~DccDescriptor() if(pEventWindow && g_pApp->windowExists(pEventWindow)) { - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCSessionDestroyed,pEventWindow,m_szId); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCSessionDestroyed, pEventWindow, m_szId); } } @@ -116,7 +115,6 @@ DccDescriptor::~DccDescriptor() g_pDescriptorDict = 0; } } - } void DccDescriptor::triggerCreationEvent() @@ -134,17 +132,18 @@ void DccDescriptor::triggerCreationEvent() if(pEventWindow && g_pApp->windowExists(pEventWindow)) { - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCSessionCreated,pEventWindow,m_szId); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCSessionCreated, pEventWindow, m_szId); } } DccDescriptor * DccDescriptor::find(unsigned int uId) { - if(!g_pDescriptorDict)return 0; + if(!g_pDescriptorDict) + return 0; return g_pDescriptorDict->find((long)uId); } -void DccDescriptor::copyFrom(const DccDescriptor &src) +void DccDescriptor::copyFrom(const DccDescriptor & src) { m_uId = g_uNextDescriptorId; g_uNextDescriptorId++; @@ -152,77 +151,85 @@ void DccDescriptor::copyFrom(const DccDescriptor &src) if(!g_pDescriptorDict) { - g_pDescriptorDict = new KviPointerHashTable<int,DccDescriptor>; + g_pDescriptorDict = new KviPointerHashTable<int, DccDescriptor>; g_pDescriptorDict->setAutoDelete(false); } - g_pDescriptorDict->replace((long)m_uId,this); - m_bCreationEventTriggered=false; + g_pDescriptorDict->replace((long)m_uId, this); + m_bCreationEventTriggered = false; - m_pDccWindow = src.m_pDccWindow; - m_pDccTransfer = src.m_pDccTransfer; - szType = src.szType; - szNick = src.szNick; - szUser = src.szUser; - szHost = src.szHost; - szLocalNick = src.szLocalNick; - szLocalUser = src.szLocalUser; - szLocalHost = src.szLocalHost; - szIp = src.szIp; - szPort = src.szPort; - m_pConsole = src.console(); - m_szZeroPortRequestTag= src.zeroPortRequestTag(); - bActive = src.bActive; - szListenIp = src.szListenIp; - szListenPort = src.szListenPort; - szFakeIp = src.szFakeIp; - szFakePort = src.szFakePort; - bSendRequest = src.bSendRequest; - bDoTimeout = src.bDoTimeout; - szFileName = src.szFileName; - szFileSize = src.szFileSize; - bResume = src.bResume; - bRecvFile = src.bRecvFile; - bNoAcks = src.bNoAcks; - bIsTdcc = src.bIsTdcc; - bOverrideMinimize = src.bOverrideMinimize; - bShowMinimized = src.bShowMinimized; - bAutoAccept = src.bAutoAccept; - bIsIncomingAvatar = src.bIsIncomingAvatar; - szLocalFileName = src.szLocalFileName; - szLocalFileSize = src.szLocalFileSize; + m_pDccWindow = src.m_pDccWindow; + m_pDccTransfer = src.m_pDccTransfer; + szType = src.szType; + szNick = src.szNick; + szUser = src.szUser; + szHost = src.szHost; + szLocalNick = src.szLocalNick; + szLocalUser = src.szLocalUser; + szLocalHost = src.szLocalHost; + szIp = src.szIp; + szPort = src.szPort; + m_pConsole = src.console(); + m_szZeroPortRequestTag = src.zeroPortRequestTag(); + bActive = src.bActive; + szListenIp = src.szListenIp; + szListenPort = src.szListenPort; + szFakeIp = src.szFakeIp; + szFakePort = src.szFakePort; + bSendRequest = src.bSendRequest; + bDoTimeout = src.bDoTimeout; + szFileName = src.szFileName; + szFileSize = src.szFileSize; + bResume = src.bResume; + bRecvFile = src.bRecvFile; + bNoAcks = src.bNoAcks; + bIsTdcc = src.bIsTdcc; + bOverrideMinimize = src.bOverrideMinimize; + bShowMinimized = src.bShowMinimized; + bAutoAccept = src.bAutoAccept; + bIsIncomingAvatar = src.bIsIncomingAvatar; + szLocalFileName = src.szLocalFileName; + szLocalFileSize = src.szLocalFileSize; #ifdef COMPILE_SSL_SUPPORT - bIsSSL = src.bIsSSL; + bIsSSL = src.bIsSSL; #endif // dcc voice only - szCodec = src.szCodec; - iSampleRate = src.iSampleRate; + szCodec = src.szCodec; + iSampleRate = src.iSampleRate; } bool DccDescriptor::isFileUpload() { - if(szType.toUpper()=="SEND")return true; - if(szType.toUpper()=="TSEND")return true; + if(szType.toUpper() == "SEND") + return true; + if(szType.toUpper() == "TSEND") + return true; #ifdef COMPILE_SSL_SUPPORT - if(szType.toUpper()=="SSEND")return true; + if(szType.toUpper() == "SSEND") + return true; #endif return false; } bool DccDescriptor::isFileDownload() { - if(szType.toUpper()=="RECV")return true; - if(szType.toUpper()=="TRECV")return true; + if(szType.toUpper() == "RECV") + return true; + if(szType.toUpper() == "TRECV") + return true; #ifdef COMPILE_SSL_SUPPORT - if(szType.toUpper()=="SRECV")return true; + if(szType.toUpper() == "SRECV") + return true; #endif return false; } bool DccDescriptor::isDccChat() { - if(szType.toUpper()=="CHAT")return true; + if(szType.toUpper() == "CHAT") + return true; #ifdef COMPILE_SSL_SUPPORT - if(szType.toUpper()=="SCHAT")return true; + if(szType.toUpper() == "SCHAT") + return true; #endif return false; } diff --git a/src/modules/dcc/DccDescriptor.h b/src/modules/dcc/DccDescriptor.h index 58d9d94e5..67718ccea 100644 --- a/src/modules/dcc/DccDescriptor.h +++ b/src/modules/dcc/DccDescriptor.h @@ -37,98 +37,101 @@ public: DccDescriptor(const DccDescriptor & src); ~DccDescriptor(); + protected: - KviConsoleWindow * m_pConsole; + KviConsoleWindow * m_pConsole; // mIrc zero port reverse send/chat extension - KviCString m_szZeroPortRequestTag; + KviCString m_szZeroPortRequestTag; - unsigned int m_uId; // this dcc session ID - QString m_szId; + unsigned int m_uId; // this dcc session ID + QString m_szId; - DccWindow * m_pDccWindow; // 0 if it has no window + DccWindow * m_pDccWindow; // 0 if it has no window DccFileTransfer * m_pDccTransfer; // 0 if it is not a transfer - bool m_bCreationEventTriggered; + bool m_bCreationEventTriggered; + public: // A console that this DCC is bound to (might be replaced while we wait for user acknowledge in dialogs) KviConsoleWindow * console() const { return m_pConsole; }; - void setConsole(KviConsoleWindow * c){ m_pConsole = c; }; + void setConsole(KviConsoleWindow * c) { m_pConsole = c; }; DccWindow * window() const { return m_pDccWindow; }; - void setWindow(DccWindow * w){ m_pDccWindow = w; }; + void setWindow(DccWindow * w) { m_pDccWindow = w; }; DccFileTransfer * transfer() const { return m_pDccTransfer; }; - void setTransfer(DccFileTransfer * t){ m_pDccTransfer = t; }; + void setTransfer(DccFileTransfer * t) { m_pDccTransfer = t; }; // mIrc zero port reverse send/chat extension bool isZeroPortRequest() const { return m_szZeroPortRequestTag.hasData(); }; const char * zeroPortRequestTag() const { return m_szZeroPortRequestTag.ptr(); }; - void setZeroPortRequestTag(const KviCString &szTag){ m_szZeroPortRequestTag = szTag; }; + void setZeroPortRequestTag(const KviCString & szTag) { m_szZeroPortRequestTag = szTag; }; unsigned int id() const { return m_uId; }; const QString & idString() const { return m_szId; }; static DccDescriptor * find(unsigned int uId); - static KviPointerHashTable<int,DccDescriptor> * descriptorDict(); + static KviPointerHashTable<int, DccDescriptor> * descriptorDict(); void triggerCreationEvent(); // this MUST be called by the creator of the descriptor! private: - void copyFrom(const DccDescriptor &src); + void copyFrom(const DccDescriptor & src); + public: // Generic parameters - QString szType; // DCC protocol : CHAT, SCHAT, SEND, TSSEND.... + QString szType; // DCC protocol : CHAT, SCHAT, SEND, TSSEND.... - bool bActive; // active or passive connection ? + bool bActive; // active or passive connection ? - QString szNick; // remote user nickname - QString szUser; // remote user name (unknown for passive dcc) - QString szHost; // remote user host (unknown for passive dcc) + QString szNick; // remote user nickname + QString szUser; // remote user name (unknown for passive dcc) + QString szHost; // remote user host (unknown for passive dcc) - QString szLocalNick; // local user nickname (always from irc) - QString szLocalUser; // local user username (always from irc) - QString szLocalHost; // local user hostname (always from irc) + QString szLocalNick; // local user nickname (always from irc) + QString szLocalUser; // local user username (always from irc) + QString szLocalHost; // local user hostname (always from irc) - QString szIp; // remote user ip (active dcc only) - QString szPort; // remote user port (active dcc only) + QString szIp; // remote user ip (active dcc only) + QString szPort; // remote user port (active dcc only) - QString szListenIp; // passive only : ip to listen on - QString szListenPort; // passive only : port to listen on + QString szListenIp; // passive only : ip to listen on + QString szListenPort; // passive only : port to listen on - bool bSendRequest; // passive only : true if we have to send the CTCP request + bool bSendRequest; // passive only : true if we have to send the CTCP request - QString szFakeIp; // passive only : fake ip to send in the CTCP - QString szFakePort; // passive only : fake port to send in the CTCP + QString szFakeIp; // passive only : fake ip to send in the CTCP + QString szFakePort; // passive only : fake port to send in the CTCP - bool bDoTimeout; // the marshall has to setup a timeout ? + bool bDoTimeout; // the marshall has to setup a timeout ? - bool bIsTdcc; // is this a TDCC ? + bool bIsTdcc; // is this a TDCC ? - bool bOverrideMinimize; // Override the default minimize option ? - bool bShowMinimized; // Show minimized ? (valid if bOverrideMinimize is true) + bool bOverrideMinimize; // Override the default minimize option ? + bool bShowMinimized; // Show minimized ? (valid if bOverrideMinimize is true) - bool bAutoAccept; // Auto accepted dcc send/chat ? + bool bAutoAccept; // Auto accepted dcc send/chat ? #ifdef COMPILE_SSL_SUPPORT - bool bIsSSL; // do we have to use SSL ? + bool bIsSSL; // do we have to use SSL ? #endif // Specific parameters // DCC SEND/RECV - QString szFileName; // RECVFILE: incoming file name, SENDFILE: filename sent to the remote end - QString szFileSize; // RECVFILE: incoming file size, SENDFILE: remote resume size + QString szFileName; // RECVFILE: incoming file name, SENDFILE: filename sent to the remote end + QString szFileSize; // RECVFILE: incoming file size, SENDFILE: remote resume size - QString szLocalFileName; // RECVFILE: save file name selected, SENDFILE: file to send - QString szLocalFileSize; // RECVFILE: local file size (to resume), SENDFILE: file to send size + QString szLocalFileName; // RECVFILE: save file name selected, SENDFILE: file to send + QString szLocalFileSize; // RECVFILE: local file size (to resume), SENDFILE: file to send size - bool bRecvFile; // do we have to RECEIVE the file or SEND it ? - bool bResume; // do we want to resume ? - bool bNoAcks; // blind dcc send ? (do not receive nor send acknowledges) + bool bRecvFile; // do we have to RECEIVE the file or SEND it ? + bool bResume; // do we want to resume ? + bool bNoAcks; // blind dcc send ? (do not receive nor send acknowledges) - bool bIsIncomingAvatar; // It is an Incoming Avatar DCC SEND ? + bool bIsIncomingAvatar; // It is an Incoming Avatar DCC SEND ? // DCC VOICE - KviCString szCodec; // codec name - int iSampleRate; // Sample rate + KviCString szCodec; // codec name + int iSampleRate; // Sample rate public: QString protocol() const { return szType; }; bool isActive() const { return bActive; }; @@ -149,9 +152,12 @@ public: bool isFileUpload(); bool isFileDownload(); bool isDccChat(); - bool isFileTransfer(){ return (isFileUpload() || isFileDownload()); }; + bool isFileTransfer() { return (isFileUpload() || isFileDownload()); }; #ifdef COMPILE_SSL_SUPPORT - bool isSSL() const { return bIsSSL; }; + bool isSSL() const + { + return bIsSSL; + }; #endif }; diff --git a/src/modules/dcc/DccDialog.cpp b/src/modules/dcc/DccDialog.cpp index 01704e529..151422d87 100644 --- a/src/modules/dcc/DccDialog.cpp +++ b/src/modules/dcc/DccDialog.cpp @@ -38,7 +38,7 @@ #include <QShowEvent> #include <QIcon> -DccDialog::DccDialog(DccBroker * br,DccDescriptor * dcc) +DccDialog::DccDialog(DccBroker * br, DccDescriptor * dcc) { m_pDescriptor = dcc; m_pBroker = br; @@ -46,7 +46,8 @@ DccDialog::DccDialog(DccBroker * br,DccDescriptor * dcc) DccDialog::~DccDialog() { - if(m_pDescriptor)delete m_pDescriptor; + if(m_pDescriptor) + delete m_pDescriptor; m_pDescriptor = 0; m_pBroker->unregisterDccBox(this); } @@ -56,29 +57,29 @@ void DccDialog::forgetDescriptor() m_pDescriptor = 0; } -DccAcceptDialog::DccAcceptDialog(DccBroker * br,DccDescriptor * dcc,const QString &text,const QString &capt) -: QWidget(0), DccDialog(br,dcc) +DccAcceptDialog::DccAcceptDialog(DccBroker * br, DccDescriptor * dcc, const QString & text, const QString & capt) + : QWidget(0), DccDialog(br, dcc) { setObjectName("dcc_accept_box"); //QVBoxLayout * vb = new QVBoxLayout(this,4,4); QVBoxLayout * vb = new QVBoxLayout(this); vb->setMargin(4); vb->setSpacing(4); - QLabel * l = new QLabel(text,this); + QLabel * l = new QLabel(text, this); l->setWordWrap(true); vb->addWidget(l); //QHBoxLayout *hb = new QHBoxLayout(4); - QHBoxLayout *hb = new QHBoxLayout(); + QHBoxLayout * hb = new QHBoxLayout(); hb->setSpacing(4); - vb->addLayout(hb,Qt::AlignCenter); - QPushButton * btn = new QPushButton(__tr2qs_ctx("&Accept","dcc"),this); + vb->addLayout(hb, Qt::AlignCenter); + QPushButton * btn = new QPushButton(__tr2qs_ctx("&Accept", "dcc"), this); btn->setDefault(true); //btn->setFocus(); hb->addWidget(btn); - connect(btn,SIGNAL(clicked()),this,SLOT(acceptClicked())); - btn = new QPushButton(__tr2qs_ctx("&Reject","dcc"),this); - connect(btn,SIGNAL(clicked()),this,SLOT(rejectClicked())); + connect(btn, SIGNAL(clicked()), this, SLOT(acceptClicked())); + btn = new QPushButton(__tr2qs_ctx("&Reject", "dcc"), this); + connect(btn, SIGNAL(clicked()), this, SLOT(rejectClicked())); hb->addWidget(btn); setWindowIcon(QIcon(*(g_pIconManager->getSmallIcon(KviIconManager::DccMsg)))); @@ -95,7 +96,7 @@ DccAcceptDialog::~DccAcceptDialog() void DccAcceptDialog::acceptClicked() { hide(); - emit accepted(this,m_pDescriptor); + emit accepted(this, m_pDescriptor); this->deleteLater(); //g_pApp->collectGarbage(this); } @@ -103,95 +104,95 @@ void DccAcceptDialog::acceptClicked() void DccAcceptDialog::rejectClicked() { hide(); - emit rejected(this,m_pDescriptor); + emit rejected(this, m_pDescriptor); this->deleteLater(); //g_pApp->collectGarbage(this); } -void DccAcceptDialog::closeEvent(QCloseEvent *e) +void DccAcceptDialog::closeEvent(QCloseEvent * e) { hide(); e->ignore(); - emit rejected(this,m_pDescriptor); + emit rejected(this, m_pDescriptor); this->deleteLater(); //g_pApp->collectGarbage(this); } -void DccAcceptDialog::showEvent(QShowEvent *e) +void DccAcceptDialog::showEvent(QShowEvent * e) { QRect rect = g_pApp->desktop()->screenGeometry(g_pApp->desktop()->primaryScreen()); - move((rect.width() - width())/2,(rect.height() - height())/2); + move((rect.width() - width()) / 2, (rect.height() - height()) / 2); QWidget::showEvent(e); } - -DccRenameDialog::DccRenameDialog(DccBroker * br,DccDescriptor * dcc,const QString &text,bool bDisableResume) -: QWidget(0), DccDialog(br,dcc) +DccRenameDialog::DccRenameDialog(DccBroker * br, DccDescriptor * dcc, const QString & text, bool bDisableResume) + : QWidget(0), DccDialog(br, dcc) { setObjectName("dcc_rename_box"); //QVBoxLayout * vb = new QVBoxLayout(this,4,4); QVBoxLayout * vb = new QVBoxLayout(this); vb->setMargin(4); vb->setSpacing(4); - QLabel * l = new QLabel(text,this); + QLabel * l = new QLabel(text, this); l->setWordWrap(true); vb->addWidget(l); //QHBoxLayout *hb = new QHBoxLayout(4); - QHBoxLayout *hb = new QHBoxLayout(); + QHBoxLayout * hb = new QHBoxLayout(); hb->setSpacing(4); - vb->addLayout(hb,Qt::AlignCenter); + vb->addLayout(hb, Qt::AlignCenter); - QPushButton * btn = new QPushButton(__tr2qs_ctx("&Rename","dcc"),this); + QPushButton * btn = new QPushButton(__tr2qs_ctx("&Rename", "dcc"), this); hb->addWidget(btn); - connect(btn,SIGNAL(clicked()),this,SLOT(renameClicked())); + connect(btn, SIGNAL(clicked()), this, SLOT(renameClicked())); - btn = new QPushButton(__tr2qs_ctx("Over&write","dcc"),this); + btn = new QPushButton(__tr2qs_ctx("Over&write", "dcc"), this); hb->addWidget(btn); - connect(btn,SIGNAL(clicked()),this,SLOT(overwriteClicked())); + connect(btn, SIGNAL(clicked()), this, SLOT(overwriteClicked())); - btn = new QPushButton(__tr2qs_ctx("Re&sume","dcc"),this); + btn = new QPushButton(__tr2qs_ctx("Re&sume", "dcc"), this); hb->addWidget(btn); - connect(btn,SIGNAL(clicked()),this,SLOT(resumeClicked())); - if(bDisableResume)btn->setEnabled(false); + connect(btn, SIGNAL(clicked()), this, SLOT(resumeClicked())); + if(bDisableResume) + btn->setEnabled(false); - btn = new QPushButton(__tr2qs_ctx("Cancel","dcc"),this); + btn = new QPushButton(__tr2qs_ctx("Cancel", "dcc"), this); hb->addWidget(btn); - connect(btn,SIGNAL(clicked()),this,SLOT(cancelClicked())); + connect(btn, SIGNAL(clicked()), this, SLOT(cancelClicked())); btn->setDefault(true); //btn->setFocus(); setWindowIcon(QIcon(*(g_pIconManager->getSmallIcon(KviIconManager::DccMsg)))); - setWindowTitle(__tr2qs_ctx("File Already Exists - KVIrc","dcc")); + setWindowTitle(__tr2qs_ctx("File Already Exists - KVIrc", "dcc")); } DccRenameDialog::~DccRenameDialog() { } -void DccRenameDialog::closeEvent(QCloseEvent *e) +void DccRenameDialog::closeEvent(QCloseEvent * e) { hide(); e->ignore(); if(m_pDescriptor) { - emit cancelSelected(this,m_pDescriptor); + emit cancelSelected(this, m_pDescriptor); //g_pApp->collectGarbage(this); this->deleteLater(); } } -void DccRenameDialog::showEvent(QShowEvent *e) +void DccRenameDialog::showEvent(QShowEvent * e) { QRect rect = g_pApp->desktop()->screenGeometry(g_pApp->desktop()->primaryScreen()); - move((rect.width() - width())/2,(rect.height() - height())/2); + move((rect.width() - width()) / 2, (rect.height() - height()) / 2); QWidget::showEvent(e); } void DccRenameDialog::renameClicked() { hide(); - emit renameSelected(this,m_pDescriptor); + emit renameSelected(this, m_pDescriptor); //g_pApp->collectGarbage(this); this->deleteLater(); } @@ -199,7 +200,7 @@ void DccRenameDialog::renameClicked() void DccRenameDialog::overwriteClicked() { hide(); - emit overwriteSelected(this,m_pDescriptor); + emit overwriteSelected(this, m_pDescriptor); //g_pApp->collectGarbage(this); this->deleteLater(); } @@ -208,7 +209,7 @@ void DccRenameDialog::resumeClicked() { hide(); m_pDescriptor->bResume = true; - emit overwriteSelected(this,m_pDescriptor); + emit overwriteSelected(this, m_pDescriptor); this->deleteLater(); //g_pApp->collectGarbage(this); } @@ -216,7 +217,7 @@ void DccRenameDialog::resumeClicked() void DccRenameDialog::cancelClicked() { hide(); - emit cancelSelected(this,m_pDescriptor); + emit cancelSelected(this, m_pDescriptor); this->deleteLater(); //g_pApp->collectGarbage(this); } diff --git a/src/modules/dcc/DccDialog.h b/src/modules/dcc/DccDialog.h index 3c57e2d22..ded6dc942 100644 --- a/src/modules/dcc/DccDialog.h +++ b/src/modules/dcc/DccDialog.h @@ -32,50 +32,53 @@ class DccDialog { protected: DccDescriptor * m_pDescriptor; - DccBroker * m_pBroker; + DccBroker * m_pBroker; + public: - DccDialog(DccBroker * br,DccDescriptor * dcc); + DccDialog(DccBroker * br, DccDescriptor * dcc); virtual ~DccDialog(); + public: virtual void forgetDescriptor(); }; - class DccAcceptDialog : public QWidget, public DccDialog { Q_OBJECT public: - DccAcceptDialog(DccBroker * br,DccDescriptor * dcc,const QString &text,const QString &capt); + DccAcceptDialog(DccBroker * br, DccDescriptor * dcc, const QString & text, const QString & capt); ~DccAcceptDialog(); + protected: - virtual void closeEvent(QCloseEvent *e); - virtual void showEvent(QShowEvent *e); + virtual void closeEvent(QCloseEvent * e); + virtual void showEvent(QShowEvent * e); private slots: void acceptClicked(); void rejectClicked(); signals: - void accepted(DccDialog *,DccDescriptor *); - void rejected(DccDialog *,DccDescriptor *); + void accepted(DccDialog *, DccDescriptor *); + void rejected(DccDialog *, DccDescriptor *); }; class DccRenameDialog : public QWidget, public DccDialog { Q_OBJECT public: - DccRenameDialog(DccBroker * br,DccDescriptor * dcc,const QString &text,bool bDisableResume); + DccRenameDialog(DccBroker * br, DccDescriptor * dcc, const QString & text, bool bDisableResume); ~DccRenameDialog(); + protected: - virtual void closeEvent(QCloseEvent *e); - virtual void showEvent(QShowEvent *e); + virtual void closeEvent(QCloseEvent * e); + virtual void showEvent(QShowEvent * e); private slots: void renameClicked(); void overwriteClicked(); void resumeClicked(); void cancelClicked(); signals: - void overwriteSelected(DccDialog *,DccDescriptor *); - void renameSelected(DccDialog *,DccDescriptor *); - void cancelSelected(DccDialog *,DccDescriptor *); + void overwriteSelected(DccDialog *, DccDescriptor *); + void renameSelected(DccDialog *, DccDescriptor *); + void cancelSelected(DccDialog *, DccDescriptor *); }; #endif diff --git a/src/modules/dcc/DccFileTransfer.cpp b/src/modules/dcc/DccFileTransfer.cpp index d74b1cef0..e1dca6012 100644 --- a/src/modules/dcc/DccFileTransfer.cpp +++ b/src/modules/dcc/DccFileTransfer.cpp @@ -54,8 +54,8 @@ #include "KviKvsScript.h" #ifdef COMPILE_ON_WINDOWS - // Ugly Windoze compiler... - #include "DccDialog.h" +// Ugly Windoze compiler... +#include "DccDialog.h" #endif #include <QFile> @@ -83,33 +83,34 @@ extern DccBroker * g_pDccBroker; extern KVIRC_API KviMediaManager * g_pMediaManager; // KviApplication.cpp - static KviPointerList<DccFileTransfer> * g_pDccFileTransfers = 0; static QPixmap * g_pDccFileTransferIcon = 0; //#warning "The events that have a KviCString data pointer should become real classes, that take care of deleting the data pointer!" //#warning "Otherwise, when left undispatched we will be leaking memory (event class destroyed but not the data ptr)" -DccRecvThread::DccRecvThread(QObject * par,kvi_socket_t fd,KviDccRecvThreadOptions * opt) -: DccThread(par,fd) +DccRecvThread::DccRecvThread(QObject * par, kvi_socket_t fd, KviDccRecvThreadOptions * opt) + : DccThread(par, fd) { - m_pOpt = opt; - m_uAverageSpeed = 0; - m_uInstantSpeed = 0; - m_uFilePosition = 0; + m_pOpt = opt; + m_uAverageSpeed = 0; + m_uInstantSpeed = 0; + m_uFilePosition = 0; - m_uTotalReceivedBytes = 0; + m_uTotalReceivedBytes = 0; m_uInstantReceivedBytes = 0; - m_pFile = 0; - m_pTimeInterval = new KviMSecTimeInterval(); - m_uStartTime = 0; + m_pFile = 0; + m_pTimeInterval = new KviMSecTimeInterval(); + m_uStartTime = 0; m_uInstantSpeedInterval = 0; } DccRecvThread::~DccRecvThread() { - if(m_pOpt)delete m_pOpt; - if(m_pFile)delete m_pFile; + if(m_pOpt) + delete m_pOpt; + if(m_pFile) + delete m_pFile; delete m_pTimeInterval; } @@ -118,22 +119,22 @@ bool DccRecvThread::sendAck(qint64 filePos, bool bUse64BitAck) quint32 ack32 = htonl(filePos & 0xffffffff); quint64 ack64 = qToBigEndian(filePos); - char * ack = (char*) &ack32; + char * ack = (char *)&ack32; int ackSize = 4; if(bUse64BitAck) { ackSize = 8; - ack = (char*) &ack64; + ack = (char *)&ack64; } - int iRet=0; + int iRet = 0; #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) - iRet = m_pSSL->write(ack,ackSize); + iRet = m_pSSL->write(ack, ackSize); else #endif //COMPILE_SSL_SUPPORT - iRet = kvi_socket_send(m_fd,(void *)(ack),ackSize); + iRet = kvi_socket_send(m_fd, (void *)(ack), ackSize); if(iRet == ackSize) return true; // everything sent @@ -155,7 +156,7 @@ bool DccRecvThread::sendAck(qint64 filePos, bool bUse64BitAck) if(iRet < 0) { - // Reported error. If it's EAGAIN or EINTR then no data has been sent. +// Reported error. If it's EAGAIN or EINTR then no data has been sent. #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) { @@ -163,7 +164,7 @@ bool DccRecvThread::sendAck(qint64 filePos, bool bUse64BitAck) switch(m_pSSL->getProtocolError(iRet)) { case KviSSL::ZeroReturn: - //return false; check eagain + //return false; check eagain case KviSSL::Success: case KviSSL::WantRead: case KviSSL::WantWrite: @@ -183,7 +184,7 @@ bool DccRecvThread::sendAck(qint64 filePos, bool bUse64BitAck) int err = kvi_socket_error(); #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) if((err != EAGAIN) && (err != EINTR) && (err != WSAEWOULDBLOCK)) -#else //!(defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)) +#else //!(defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)) if((err != EAGAIN) && (err != EINTR)) #endif //!(defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)) { @@ -205,10 +206,10 @@ bool DccRecvThread::sendAck(qint64 filePos, bool bUse64BitAck) #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) - iRet = m_pSSL->write(ack + iRet,iMissingPart); + iRet = m_pSSL->write(ack + iRet, iMissingPart); else #endif //COMPILE_SSL_SUPPORT - iRet = kvi_socket_send(m_fd,(void *)(ack + iRet),iMissingPart); + iRet = kvi_socket_send(m_fd, (void *)(ack + iRet), iMissingPart); if(iRet != iMissingPart) { @@ -226,7 +227,8 @@ void DccRecvThread::updateStats() m_pMutex->lock(); unsigned long uElapsedTime = uCurTime - m_uStartTime; - if(uElapsedTime < 1)uElapsedTime = 1; + if(uElapsedTime < 1) + uElapsedTime = 1; m_uFilePosition = m_pFile->pos(); m_uAverageSpeed = m_uTotalReceivedBytes / uElapsedTime; @@ -239,7 +241,9 @@ void DccRecvThread::updateStats() m_uInstantSpeed = (m_uInstantReceivedBytes * 1000) / m_uInstantSpeedInterval; m_uInstantReceivedBytes = 0; m_uInstantSpeedInterval = uMSecsOfTheNextInterval; - } else { + } + else + { if(uElapsedTime <= INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_SECS) m_uInstantSpeed = m_uAverageSpeed; } @@ -250,7 +254,7 @@ void DccRecvThread::postMessageEvent(const char * m) { KviThreadDataEvent<KviCString> * e = new KviThreadDataEvent<KviCString>(KVI_DCC_THREAD_EVENT_MESSAGE); e->setData(new KviCString(m)); - postEvent(parent(),e); + postEvent(parent(), e); } // FIXME: This stuff should be somewhat related to the 1448 bytes TCP basic packet size @@ -259,7 +263,6 @@ void DccRecvThread::postMessageEvent(const char * m) #define KVI_DCC_RECV_BLOCK_SIZE 16384 #define KVI_DCC_RECV_75PERCENTOF_BLOCK_SIZE 12280 - void DccRecvThread::run() { // take care of sleeping a bit if we can't read stuff @@ -297,7 +300,9 @@ void DccRecvThread::run() postErrorEvent(KviError::CantOpenFileForAppending); goto exit_dcc; } // else pFile is already at end - } else { + } + else + { if(!m_pFile->open(QIODevice::WriteOnly)) { postErrorEvent(KviError::CantOpenFileForWriting); @@ -307,7 +312,7 @@ void DccRecvThread::run() if(m_pOpt->bSendZeroAck && (!m_pOpt->bNoAcks)) { - if(!sendAck(m_pFile->pos(),bSend64BitAck)) + if(!sendAck(m_pFile->pos(), bSend64BitAck)) goto exit_dcc; } @@ -320,7 +325,9 @@ void DccRecvThread::run() { delete e; goto exit_dcc; - } else { + } + else + { // Other events are senseless to us delete e; } @@ -329,7 +336,7 @@ void DccRecvThread::run() bool bCanRead; bool bDummy; - if(kvi_select(m_fd,&bCanRead,&bDummy,15000)) + if(kvi_select(m_fd, &bCanRead, &bDummy, 15000)) { // reset sleep time @@ -344,7 +351,8 @@ void DccRecvThread::run() unsigned int uMaxPossible = (m_pOpt->uMaxBandwidth < MAX_DCC_BANDWIDTH_LIMIT) ? m_pOpt->uMaxBandwidth * INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_SECS : MAX_DCC_BANDWIDTH_LIMIT * INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_SECS; m_pMutex->unlock(); unsigned int uToRead = uMaxPossible > m_uInstantReceivedBytes ? uMaxPossible - m_uInstantReceivedBytes : 0; - if(uToRead > KVI_DCC_RECV_BLOCK_SIZE)uToRead = KVI_DCC_RECV_BLOCK_SIZE; + if(uToRead > KVI_DCC_RECV_BLOCK_SIZE) + uToRead = KVI_DCC_RECV_BLOCK_SIZE; if(uToRead > 0) { @@ -352,10 +360,12 @@ void DccRecvThread::run() #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) { - readLen = m_pSSL->read(buffer,uToRead); - } else { + readLen = m_pSSL->read(buffer, uToRead); + } + else + { #endif - readLen = kvi_socket_recv(m_fd,buffer,uToRead); + readLen = kvi_socket_recv(m_fd, buffer, uToRead); #ifdef COMPILE_SSL_SUPPORT } #endif @@ -365,19 +375,20 @@ void DccRecvThread::run() // Readed something useful...write back if(((uint)(readLen + m_pFile->pos())) > m_pOpt->uTotalFileSize) { - postMessageEvent(__tr_no_lookup_ctx("WARNING: the peer is sending garbage data past the end of the file","dcc")); - postMessageEvent(__tr_no_lookup_ctx("WARNING: ignoring data past the declared end of file and closing the connection","dcc")); + postMessageEvent(__tr_no_lookup_ctx("WARNING: the peer is sending garbage data past the end of the file", "dcc")); + postMessageEvent(__tr_no_lookup_ctx("WARNING: ignoring data past the declared end of file and closing the connection", "dcc")); readLen = m_pOpt->uTotalFileSize - m_pFile->pos(); if(readLen > 0) { - if(m_pFile->write(buffer,readLen) != readLen) + if(m_pFile->write(buffer, readLen) != readLen) postErrorEvent(KviError::FileIOError); } break; - - } else { - if(m_pFile->write(buffer,readLen) != readLen) + } + else + { + if(m_pFile->write(buffer, readLen) != readLen) { postErrorEvent(KviError::FileIOError); break; @@ -400,14 +411,16 @@ void DccRecvThread::run() { // Received the whole file...die KviThreadEvent * e = new KviThreadEvent(KVI_DCC_THREAD_EVENT_SUCCESS); - postEvent(parent(),e); + postEvent(parent(), e); break; } } - } else { + } + else + { // Must send the ack... the peer must close the connection - if(!sendAck(m_pFile->pos(),bSend64BitAck)) + if(!sendAck(m_pFile->pos(), bSend64BitAck)) break; } @@ -420,15 +433,18 @@ void DccRecvThread::run() if(iShortReadQuantifier > 500) iShortReadQuantifier = 500; msleep(iShortReadQuantifier); - } else { + } + else + { // don't allow it to go too low if(iShortReadQuantifier < -500) iShortReadQuantifier = -500; } - - } else { + } + else + { updateStats(); - // Read problem... +// Read problem... #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) @@ -469,7 +485,7 @@ void DccRecvThread::run() // Raise unknown SSL ERROR postErrorEvent(KviError::SSLError); goto exit_dcc; - break; + break; } } #endif @@ -481,19 +497,21 @@ void DccRecvThread::run() { // success if we got the whole file or if we don't know the file size (we trust the peer) KviThreadEvent * e = new KviThreadEvent(KVI_DCC_THREAD_EVENT_SUCCESS); - postEvent(parent(),e); + postEvent(parent(), e); break; } } #ifdef COMPILE_SSL_SUPPORT - if (!m_pSSL && !handleInvalidSocketRead(readLen)) + if(!m_pSSL && !handleInvalidSocketRead(readLen)) break; #else - if (!handleInvalidSocketRead(readLen)) + if(!handleInvalidSocketRead(readLen)) break; #endif } - } else { + } + else + { updateStats(); // reached the bandwidth limit: slow down a bit @@ -502,12 +520,15 @@ void DccRecvThread::run() else if(m_uInstantSpeedInterval < (INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_MSECS - 20)) msleep(20); } - } else { + } + else + { // Can't read stuff (can just write) updateStats(); // sleep up to 300 msecs (if data arrives...we want low exit latency here) - if(iFailedSelects < 100)iFailedSelects++; + if(iFailedSelects < 100) + iFailedSelects++; updateStats(); if(iFailedSelects > 3) msleep(3 * iFailedSelects); @@ -519,16 +540,18 @@ void DccRecvThread::run() { iProbableTerminationTime = (int)kvi_unixTime(); m_pFile->flush(); - postMessageEvent(__tr_no_lookup_ctx("Data transfer terminated, waiting 30 seconds for the peer to close the connection...","dcc")); + postMessageEvent(__tr_no_lookup_ctx("Data transfer terminated, waiting 30 seconds for the peer to close the connection...", "dcc")); // FIXME: Close the file ? - } else { + } + else + { int iDiff = (((int)kvi_unixTime()) - iProbableTerminationTime); if(iDiff > 30) { // success if we got the whole file or if we don't know the file size (we trust the peer) - postMessageEvent(__tr_no_lookup_ctx("Data transfer was terminated 30 seconds ago, closing the connection","dcc")); + postMessageEvent(__tr_no_lookup_ctx("Data transfer was terminated 30 seconds ago, closing the connection", "dcc")); KviThreadEvent * e = new KviThreadEvent(KVI_DCC_THREAD_EVENT_SUCCESS); - postEvent(parent(),e); + postEvent(parent(), e); break; } } @@ -537,9 +560,12 @@ void DccRecvThread::run() // include the artificial delay if needed if(m_pOpt->iIdleStepLengthInMSec > 0) msleep(m_pOpt->iIdleStepLengthInMSec); - } else { + } + else + { // sleep up to 200 msecs (if data arrives...we want low exit latency here) - if(iFailedSelects < 100)iFailedSelects++; + if(iFailedSelects < 100) + iFailedSelects++; updateStats(); if(iFailedSelects > 3) msleep(2 * iFailedSelects); @@ -576,23 +602,24 @@ void DccRecvThread::doneGetInfo() m_pMutex->unlock(); } -DccSendThread::DccSendThread(QObject * par,kvi_socket_t fd,KviDccSendThreadOptions * opt) -: DccThread(par,fd) +DccSendThread::DccSendThread(QObject * par, kvi_socket_t fd, KviDccSendThreadOptions * opt) + : DccThread(par, fd) { m_pOpt = opt; // stats - m_uAverageSpeed = 0; - m_uInstantSpeed = 0; - m_uFilePosition = 0; + m_uAverageSpeed = 0; + m_uInstantSpeed = 0; + m_uFilePosition = 0; m_uTotalSentBytes = 0; - m_pTimeInterval = new KviMSecTimeInterval(); - m_uStartTime = 0; + m_pTimeInterval = new KviMSecTimeInterval(); + m_uStartTime = 0; m_uInstantSpeedInterval = 0; } DccSendThread::~DccSendThread() { - if(m_pOpt)delete m_pOpt; + if(m_pOpt) + delete m_pOpt; delete m_pTimeInterval; } @@ -602,13 +629,16 @@ void DccSendThread::updateStats() m_pMutex->lock(); unsigned long uElapsedTime = m_pTimeInterval->secondsCounter() - m_uStartTime; - if(uElapsedTime < 1)uElapsedTime = 1; + if(uElapsedTime < 1) + uElapsedTime = 1; if(m_pOpt->bNoAcks) { // There are no acks : the avg bandwidth is based on the sent bytes m_uAverageSpeed = m_uTotalSentBytes / uElapsedTime; - } else { + } + else + { // acknowledges : we compute the avg bandwidth based on the acks we receive m_uAverageSpeed = (m_uAckedBytes - m_pOpt->uStartPosition) / uElapsedTime; } @@ -633,14 +663,17 @@ void DccSendThread::updateStats() m_uInstantSpeed = (m_uInstantSentBytes * 1000) / m_uInstantSpeedInterval; m_uInstantSpeedInterval = uMSecsOfNextPeriodUsed; m_uInstantSentBytes = 0; - } else { + } + else + { if(uElapsedTime <= INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_SECS) m_uInstantSpeed = m_uAverageSpeed; } m_pMutex->unlock(); } -union _ack_buffer { +union _ack_buffer +{ char cAckBuffer[4]; quint32 i32AckBuffer; }; @@ -652,17 +685,18 @@ void DccSendThread::run() m_uStartTime = m_pTimeInterval->secondsCounter(); m_pMutex->unlock(); - m_uTotalSentBytes = 0; - m_uInstantSentBytes = 0; - int iFailedSelects = 0; + m_uTotalSentBytes = 0; + m_uInstantSentBytes = 0; + int iFailedSelects = 0; _ack_buffer ackbuffer; - int iBytesInAckBuffer = 0; - quint32 uLastAck = 0; - quint64 uTotLastAck = 0; - bool bAckHack = false; - quint64 iAckHackRounds = 0; + int iBytesInAckBuffer = 0; + quint32 uLastAck = 0; + quint64 uTotLastAck = 0; + bool bAckHack = false; + quint64 iAckHackRounds = 0; - if(m_pOpt->iPacketSize < 32)m_pOpt->iPacketSize = 32; + if(m_pOpt->iPacketSize < 32) + m_pOpt->iPacketSize = 32; char * buffer = (char *)KviMemory::allocate(m_pOpt->iPacketSize * sizeof(char)); QFile * pFile = new QFile(QString::fromUtf8(m_pOpt->szFileName.ptr())); @@ -682,7 +716,7 @@ void DccSendThread::run() if(pFile->size() >= 0xffffffff) { //dcc acks support only files up to 4GiB - bAckHack=true; + bAckHack = true; } if(m_pOpt->uStartPosition > 0) @@ -706,7 +740,9 @@ void DccSendThread::run() { delete e; goto exit_dcc; - } else { + } + else + { // Other events are senseless to us delete e; } @@ -715,7 +751,7 @@ void DccSendThread::run() bool bCanRead; bool bCanWrite; - if(kvi_select(m_fd,&bCanRead,&bCanWrite,15000)) + if(kvi_select(m_fd, &bCanRead, &bCanWrite, 15000)) { // reset the sleep time iFailedSelects = 0; @@ -729,10 +765,12 @@ void DccSendThread::run() #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) { - readLen = m_pSSL->read((ackbuffer.cAckBuffer + iBytesInAckBuffer),iAckBytesToRead); - } else { + readLen = m_pSSL->read((ackbuffer.cAckBuffer + iBytesInAckBuffer), iAckBytesToRead); + } + else + { #endif - readLen = kvi_socket_recv(m_fd,(ackbuffer.cAckBuffer + iBytesInAckBuffer),iAckBytesToRead); + readLen = kvi_socket_recv(m_fd, (ackbuffer.cAckBuffer + iBytesInAckBuffer), iAckBytesToRead); #ifdef COMPILE_SSL_SUPPORT } #endif @@ -755,7 +793,9 @@ void DccSendThread::run() { //we reached the 4gb ack limit iAckHackRounds++; - } else { + } + else + { // the peer is drunk or is trying to fool us postErrorEvent(KviError::AcknowledgeError); break; @@ -765,13 +805,17 @@ void DccSendThread::run() if(bAckHack) { uTotLastAck = (iAckHackRounds << 32) + iNewAck; - } else { + } + else + { uTotLastAck = iNewAck; } iBytesInAckBuffer = 0; } - } else { + } + else + { #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) { @@ -783,12 +827,12 @@ void DccSendThread::run() //if (!handleInvalidSocketRead(readLen) // break; readLen = 0; - break; + break; case KviSSL::Success: case KviSSL::WantRead: case KviSSL::WantWrite: // hmmm... - break; + break; case KviSSL::SyscallError: { int iE = m_pSSL->getLastError(true); @@ -811,18 +855,16 @@ void DccSendThread::run() // Raise unknown SSL ERROR postErrorEvent(KviError::SSLError); goto exit_dcc; - break; + break; } } - if (!m_pSSL && !handleInvalidSocketRead(readLen)) + if(!m_pSSL && !handleInvalidSocketRead(readLen)) break; #else - if (!handleInvalidSocketRead(readLen)) + if(!handleInvalidSocketRead(readLen)) break; #endif - - } // update stats @@ -833,10 +875,12 @@ void DccSendThread::run() if(uLastAck >= (quint64)pFile->size()) { KviThreadEvent * e = new KviThreadEvent(KVI_DCC_THREAD_EVENT_SUCCESS); - postEvent(parent(),e); + postEvent(parent(), e); break; } - } else { + } + else + { // No acknowledges if(m_pOpt->bIsTdcc) { @@ -848,10 +892,12 @@ void DccSendThread::run() #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) { - readLen = m_pSSL->read((char*)&iAck,4); - } else { + readLen = m_pSSL->read((char *)&iAck, 4); + } + else + { #endif - readLen = kvi_socket_recv(m_fd,(char*)&iAck,4); + readLen = kvi_socket_recv(m_fd, (char *)&iAck, 4); #ifdef COMPILE_SSL_SUPPORT } #endif @@ -860,9 +906,11 @@ void DccSendThread::run() // done...success updateStats(); KviThreadEvent * e = new KviThreadEvent(KVI_DCC_THREAD_EVENT_SUCCESS); - postEvent(parent(),e); + postEvent(parent(), e); break; - } else { + } + else + { if(readLen < 0) { #ifdef COMPILE_SSL_SUPPORT @@ -874,12 +922,12 @@ void DccSendThread::run() case KviSSL::ZeroReturn: readLen = 0; - break; + break; case KviSSL::Success: case KviSSL::WantRead: case KviSSL::WantWrite: // hmmm... - break; + break; case KviSSL::SyscallError: { int iE = m_pSSL->getLastError(true); @@ -902,21 +950,22 @@ void DccSendThread::run() // Raise unknown SSL ERROR postErrorEvent(KviError::SSLError); goto exit_dcc; - break; + break; } } - if (!m_pSSL && !handleInvalidSocketRead(readLen)) + if(!m_pSSL && !handleInvalidSocketRead(readLen)) break; #else - if (!handleInvalidSocketRead(readLen)) + if(!handleInvalidSocketRead(readLen)) break; #endif - - } else { + } + else + { KviThreadDataEvent<KviCString> * e = new KviThreadDataEvent<KviCString>(KVI_DCC_THREAD_EVENT_MESSAGE); - e->setData(new KviCString(__tr2qs_ctx("WARNING: received data in a DCC TSEND, there should be no acknowledges","dcc"))); - postEvent(parent(),e); + e->setData(new KviCString(__tr2qs_ctx("WARNING: received data in a DCC TSEND, there should be no acknowledges", "dcc"))); + postEvent(parent(), e); } } } @@ -935,33 +984,39 @@ void DccSendThread::run() m_pMutex->lock(); // FIXME: how to remove this lock ? uint uMaxPossible = m_pOpt->uMaxBandwidth < MAX_DCC_BANDWIDTH_LIMIT ? m_pOpt->uMaxBandwidth * INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_SECS : MAX_DCC_BANDWIDTH_LIMIT * INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_SECS; m_pMutex->unlock(); - if(uMaxPossible < m_uInstantSentBytes)toRead = 0; // already sent too much! - else { + if(uMaxPossible < m_uInstantSentBytes) + toRead = 0; // already sent too much! + else + { uMaxPossible -= m_uInstantSentBytes; - if(toRead > uMaxPossible)toRead = uMaxPossible; + if(toRead > uMaxPossible) + toRead = uMaxPossible; } // limit to packet size - if(toRead > m_pOpt->iPacketSize)toRead = m_pOpt->iPacketSize; + if(toRead > m_pOpt->iPacketSize) + toRead = m_pOpt->iPacketSize; int written = 0; if(toRead > 0) { // read data - int readed = pFile->read(buffer,toRead); + int readed = pFile->read(buffer, toRead); if(readed < toRead) { postErrorEvent(KviError::FileIOError); break; } - // send it out +// send it out #ifdef COMPILE_SSL_SUPPORT if(m_pSSL) { - written = m_pSSL->write(buffer,toRead); - } else { + written = m_pSSL->write(buffer, toRead); + } + else + { #endif - written = kvi_socket_send(m_fd,buffer,toRead); + written = kvi_socket_send(m_fd, buffer, toRead); #ifdef COMPILE_SSL_SUPPORT } #endif @@ -981,47 +1036,50 @@ void DccSendThread::run() case KviSSL::WantRead: // Async continue... goto handle_system_error; - break; + break; case KviSSL::SyscallError: if(written == 0) { raiseSSLError(); postErrorEvent(KviError::RemoteEndClosedConnection); goto exit_dcc; - } else { + } + else + { int iSSLErr = m_pSSL->getLastError(true); if(iSSLErr != 0) { raiseSSLError(); postErrorEvent(KviError::SSLError); goto exit_dcc; - } else { + } + else + { goto handle_system_error; } } - break; + break; case KviSSL::SSLError: raiseSSLError(); postErrorEvent(KviError::SSLError); goto exit_dcc; - break; + break; default: postErrorEvent(KviError::SSLError); goto exit_dcc; - break; + break; } } - if (!m_pSSL && !handleInvalidSocketRead(written)) + if(!m_pSSL && !handleInvalidSocketRead(written)) break; #else - if (!handleInvalidSocketRead(written)) + if(!handleInvalidSocketRead(written)) break; #endif - -handle_system_error: + handle_system_error: int err = kvi_socket_error(); #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) if((err != EAGAIN) && (err != EINTR) && (err != WSAEWOULDBLOCK)) @@ -1032,19 +1090,23 @@ handle_system_error: postErrorEvent(KviError::translateSystemError(err)); goto exit_dcc; } - - } else { + } + else + { // seek back to the right position pFile->seek(pFile->pos() - (toRead - written)); } } - } else { + } + else + { // just nothing to send out in this interval // sleep a while if(m_uInstantSpeedInterval < (INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_MSECS - 100)) { msleep(100); - } else if(m_uInstantSpeedInterval < (INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_MSECS - 20)) + } + else if(m_uInstantSpeedInterval < (INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_MSECS - 20)) { msleep(20); } @@ -1055,30 +1117,39 @@ handle_system_error: m_uFilePosition = pFile->pos(); updateStats(); } - } else { + } + else + { if(m_pOpt->bNoAcks && !m_pOpt->bIsTdcc) { // at end of the file in a blind dcc send... // not in a tdcc: we can close the file... updateStats(); KviThreadEvent * e = new KviThreadEvent(KVI_DCC_THREAD_EVENT_SUCCESS); - postEvent(parent(),e); + postEvent(parent(), e); break; - } else { + } + else + { // upload finished but we're waiting for the last ack // sleep a bit: don't lag the kernie too much while waiting msleep(100); } } } - } else { + } + else + { // after 2 failed selects start to sleep if(iFailedSelects > 3) { // sleep up to 200 msecs - if(iFailedSelects < 100)iFailedSelects++; + if(iFailedSelects < 100) + iFailedSelects++; msleep(3 * iFailedSelects); - } else { + } + else + { iFailedSelects++; } } @@ -1117,9 +1188,8 @@ void DccSendThread::doneGetInfo() m_pMutex->unlock(); } - DccFileTransfer::DccFileTransfer(DccDescriptor * dcc) -: KviFileTransfer() + : KviFileTransfer() { init(); // ensure we're initialized g_pDccFileTransfers->append(this); @@ -1127,25 +1197,27 @@ DccFileTransfer::DccFileTransfer(DccDescriptor * dcc) m_pResumeTimer = 0; m_pBandwidthDialog = 0; - m_szTransferIdString = QString(__tr2qs_ctx("TRANSFER %1","dcc")).arg(id()); + m_szTransferIdString = QString(__tr2qs_ctx("TRANSFER %1", "dcc")).arg(id()); m_pDescriptor = dcc; m_pDescriptor->setTransfer(this); m_pMarshal = new DccMarshal(this); - connect(m_pMarshal,SIGNAL(error(KviError::Code)),this,SLOT(handleMarshalError(KviError::Code))); - connect(m_pMarshal,SIGNAL(connected()),this,SLOT(connected())); - connect(m_pMarshal,SIGNAL(inProgress()),this,SLOT(connectionInProgress())); + connect(m_pMarshal, SIGNAL(error(KviError::Code)), this, SLOT(handleMarshalError(KviError::Code))); + connect(m_pMarshal, SIGNAL(connected()), this, SLOT(connected())); + connect(m_pMarshal, SIGNAL(inProgress()), this, SLOT(connectionInProgress())); #ifdef COMPILE_SSL_SUPPORT - connect(m_pMarshal,SIGNAL(startingSSLHandshake()),this,SLOT(startingSSLHandshake())); - connect(m_pMarshal,SIGNAL(sslError(const char *)),this,SLOT(sslError(const char *))); + connect(m_pMarshal, SIGNAL(startingSSLHandshake()), this, SLOT(startingSSLHandshake())); + connect(m_pMarshal, SIGNAL(sslError(const char *)), this, SLOT(sslError(const char *))); #endif m_szDccType = dcc->bRecvFile ? "RECV" : "SEND"; - if(dcc->bIsTdcc) m_szDccType.prepend("T"); + if(dcc->bIsTdcc) + m_szDccType.prepend("T"); #ifdef COMPILE_SSL_SUPPORT - if(dcc->bIsSSL) m_szDccType.prepend("S"); + if(dcc->bIsSSL) + m_szDccType.prepend("S"); #endif m_pSlaveRecvThread = 0; m_pSlaveSendThread = 0; @@ -1153,17 +1225,18 @@ DccFileTransfer::DccFileTransfer(DccDescriptor * dcc) m_tTransferStartTime = 0; m_tTransferEndTime = 0; - m_szStatusString = __tr2qs_ctx("Setting up the connection","dcc"); + m_szStatusString = __tr2qs_ctx("Setting up the connection", "dcc"); m_eGeneralStatus = Connecting; bool bOk; - m_uTotalFileSize = dcc->bRecvFile ? dcc->szFileSize.toULongLong(&bOk) : dcc->szLocalFileSize.toULongLong(&bOk); - if(!bOk)m_uTotalFileSize = 0; + m_uTotalFileSize = dcc->bRecvFile ? dcc->szFileSize.toULongLong(&bOk) : dcc->szLocalFileSize.toULongLong(&bOk); + if(!bOk) + m_uTotalFileSize = 0; if(m_pDescriptor->bRecvFile) - m_uMaxBandwidth = KVI_OPTION_BOOL(KviOption_boolLimitDccRecvSpeed) ? KVI_OPTION_UINT(KviOption_uintMaxDccRecvSpeed) : MAX_DCC_BANDWIDTH_LIMIT; + m_uMaxBandwidth = KVI_OPTION_BOOL(KviOption_boolLimitDccRecvSpeed) ? KVI_OPTION_UINT(KviOption_uintMaxDccRecvSpeed) : MAX_DCC_BANDWIDTH_LIMIT; else - m_uMaxBandwidth = KVI_OPTION_BOOL(KviOption_boolLimitDccSendSpeed) ? KVI_OPTION_UINT(KviOption_uintMaxDccSendSpeed) : MAX_DCC_BANDWIDTH_LIMIT; + m_uMaxBandwidth = KVI_OPTION_BOOL(KviOption_boolLimitDccSendSpeed) ? KVI_OPTION_UINT(KviOption_uintMaxDccSendSpeed) : MAX_DCC_BANDWIDTH_LIMIT; startConnection(); } @@ -1172,8 +1245,10 @@ DccFileTransfer::~DccFileTransfer() { g_pDccFileTransfers->removeRef(this); - if(m_pResumeTimer)delete m_pResumeTimer; - if(m_pBandwidthDialog)delete m_pBandwidthDialog; + if(m_pResumeTimer) + delete m_pResumeTimer; + if(m_pBandwidthDialog) + delete m_pBandwidthDialog; if(m_pSlaveRecvThread) { @@ -1202,8 +1277,9 @@ void DccFileTransfer::bandwidthDialogDestroyed() KviWindow * DccFileTransfer::eventWindow() { - KviWindow *w = transferWindow(); - if(w)return w; + KviWindow * w = transferWindow(); + if(w) + return w; return m_pDescriptor->console(); } @@ -1212,37 +1288,40 @@ void DccFileTransfer::startConnection() if(!(m_pDescriptor->bActive)) { // PASSIVE CONNECTION - m_szStatusString = __tr2qs_ctx("Attempting a passive DCC %1 connection","dcc").arg(m_szDccType.ptr()); + m_szStatusString = __tr2qs_ctx("Attempting a passive DCC %1 connection", "dcc").arg(m_szDccType.ptr()); outputAndLog(m_szStatusString); - } else { + } + else + { // ACTIVE CONNECTION - m_szStatusString = __tr2qs_ctx("Attempting an active DCC %1 connection","dcc").arg(m_szDccType.ptr()); + m_szStatusString = __tr2qs_ctx("Attempting an active DCC %1 connection", "dcc").arg(m_szDccType.ptr()); outputAndLog(m_szStatusString); } - if(m_pDescriptor->bResume && m_pDescriptor->bRecvFile) { QString fName; - KviIrcServerParser::encodeCtcpParameter(m_pDescriptor->szFileName.toUtf8().data(),fName); + KviIrcServerParser::encodeCtcpParameter(m_pDescriptor->szFileName.toUtf8().data(), fName); if(m_pDescriptor->isZeroPortRequest()) { - m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC RESUME %s %s %s %s%c", - m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), - 0x01, - m_pDescriptor->console()->connection()->encodeText(fName).data(), - m_pDescriptor->szPort.toUtf8().data(), - m_pDescriptor->szLocalFileSize.toUtf8().data(), - m_pDescriptor->zeroPortRequestTag(),0x01); - } else { + m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC RESUME %s %s %s %s%c", + m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), + 0x01, + m_pDescriptor->console()->connection()->encodeText(fName).data(), + m_pDescriptor->szPort.toUtf8().data(), + m_pDescriptor->szLocalFileSize.toUtf8().data(), + m_pDescriptor->zeroPortRequestTag(), 0x01); + } + else + { m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC RESUME %s %s %s%c", - m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), - 0x01, - m_pDescriptor->console()->connection()->encodeText(fName).data(), - m_pDescriptor->szPort.toUtf8().data(), - m_pDescriptor->szLocalFileSize.toUtf8().data(),0x01); + m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), + 0x01, + m_pDescriptor->console()->connection()->encodeText(fName).data(), + m_pDescriptor->szPort.toUtf8().data(), + m_pDescriptor->szLocalFileSize.toUtf8().data(), 0x01); } - m_szStatusString = __tr2qs_ctx("Sent DCC RESUME request to %1, waiting for ACCEPT","dcc").arg(m_pDescriptor->szNick); + m_szStatusString = __tr2qs_ctx("Sent DCC RESUME request to %1, waiting for ACCEPT", "dcc").arg(m_pDescriptor->szNick); outputAndLog(m_szStatusString); // setup the resume timer: we don't want to wait forever @@ -1250,13 +1329,16 @@ void DccFileTransfer::startConnection() if(KVI_OPTION_UINT(KviOption_uintDccSocketTimeout) < 5) KVI_OPTION_UINT(KviOption_uintDccSocketTimeout) = 5; - if(m_pResumeTimer)delete m_pResumeTimer; + if(m_pResumeTimer) + delete m_pResumeTimer; m_pResumeTimer = new QTimer(this); - connect(m_pResumeTimer,SIGNAL(timeout()),this,SLOT(resumeTimedOut())); + connect(m_pResumeTimer, SIGNAL(timeout()), this, SLOT(resumeTimedOut())); m_pResumeTimer->setInterval(KVI_OPTION_UINT(KviOption_uintDccSocketTimeout) * 1000); m_pResumeTimer->setSingleShot(true); m_pResumeTimer->start(); - } else { + } + else + { listenOrConnect(); } @@ -1268,17 +1350,19 @@ void DccFileTransfer::listenOrConnect() if(!(m_pDescriptor->bActive)) { #ifdef COMPILE_SSL_SUPPORT - KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp,m_pDescriptor->szListenPort,m_pDescriptor->bDoTimeout,m_pDescriptor->bIsSSL); + KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp, m_pDescriptor->szListenPort, m_pDescriptor->bDoTimeout, m_pDescriptor->bIsSSL); #else - KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp,m_pDescriptor->szListenPort,m_pDescriptor->bDoTimeout); + KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp, m_pDescriptor->szListenPort, m_pDescriptor->bDoTimeout); #endif if(eError != KviError::Success) handleMarshalError(eError); - } else { + } + else + { #ifdef COMPILE_SSL_SUPPORT - KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(),m_pDescriptor->bDoTimeout,m_pDescriptor->bIsSSL); + KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(), m_pDescriptor->bDoTimeout, m_pDescriptor->bIsSSL); #else - KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(),m_pDescriptor->bDoTimeout); + KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(), m_pDescriptor->bDoTimeout); #endif if(eError != KviError::Success) handleMarshalError(eError); @@ -1314,47 +1398,54 @@ QString DccFileTransfer::localFileName() void DccFileTransfer::abort() { - if(m_pSlaveRecvThread)m_pSlaveRecvThread->terminate(); - if(m_pSlaveSendThread)m_pSlaveSendThread->terminate(); - if(m_pMarshal)m_pMarshal->abort(); + if(m_pSlaveRecvThread) + m_pSlaveRecvThread->terminate(); + if(m_pSlaveSendThread) + m_pSlaveSendThread->terminate(); + if(m_pMarshal) + m_pMarshal->abort(); if(m_pDescriptor->bRecvFile) - g_pApp->fileDownloadTerminated(false,m_pDescriptor->szFileName.toUtf8().data(),m_pDescriptor->szLocalFileName.toUtf8().data(),m_pDescriptor->szNick.toUtf8().data(),__tr_ctx("Aborted","dcc")); + g_pApp->fileDownloadTerminated(false, m_pDescriptor->szFileName.toUtf8().data(), m_pDescriptor->szLocalFileName.toUtf8().data(), m_pDescriptor->szNick.toUtf8().data(), __tr_ctx("Aborted", "dcc")); QString tmp; - if(m_pSlaveRecvThread)tmp.setNum(m_pSlaveRecvThread->receivedBytes()); - else if(m_pSlaveSendThread)tmp.setNum(m_pSlaveSendThread->sentBytes()); - else tmp = '0'; + if(m_pSlaveRecvThread) + tmp.setNum(m_pSlaveRecvThread->receivedBytes()); + else if(m_pSlaveSendThread) + tmp.setNum(m_pSlaveSendThread->sentBytes()); + else + tmp = '0'; m_eGeneralStatus = Failure; m_tTransferEndTime = kvi_unixTime(); - m_szStatusString = __tr2qs_ctx("Transfer failed: ","dcc"); - m_szStatusString += __tr2qs_ctx("Aborted","dcc"); + m_szStatusString = __tr2qs_ctx("Transfer failed: ", "dcc"); + m_szStatusString += __tr2qs_ctx("Aborted", "dcc"); - KVS_TRIGGER_EVENT_3(KviEvent_OnDCCFileTransferFailed,eventWindow(),QString("Aborted by user"),tmp,m_pDescriptor->idString()); + KVS_TRIGGER_EVENT_3(KviEvent_OnDCCFileTransferFailed, eventWindow(), QString("Aborted by user"), tmp, m_pDescriptor->idString()); - outputAndLog(KVI_OUT_DCCERROR,m_szStatusString); + outputAndLog(KVI_OUT_DCCERROR, m_szStatusString); displayUpdate(); } void DccFileTransfer::fillContextPopup(QMenu * m) { - m->addAction(__tr2qs_ctx("Configure Bandwidth...","dcc"),this,SLOT(configureBandwidth())); - m->addSeparator(); - m->addAction(__tr2qs_ctx("Resend DCC","dcc"),this,SLOT(retryDCC())); - m->addAction(__tr2qs_ctx("Resend TDCC","dcc"),this,SLOT(retryTDCC())); - m->addAction(__tr2qs_ctx("Resend RevDCC","dcc"),this,SLOT(retryRevDCC())); - QAction *pAction = m->addAction(__tr2qs_ctx("Abort","dcc"),this,SLOT(abort())); - if(!active()) - pAction->setEnabled(false); + m->addAction(__tr2qs_ctx("Configure Bandwidth...", "dcc"), this, SLOT(configureBandwidth())); + m->addSeparator(); + m->addAction(__tr2qs_ctx("Resend DCC", "dcc"), this, SLOT(retryDCC())); + m->addAction(__tr2qs_ctx("Resend TDCC", "dcc"), this, SLOT(retryTDCC())); + m->addAction(__tr2qs_ctx("Resend RevDCC", "dcc"), this, SLOT(retryRevDCC())); + QAction * pAction = m->addAction(__tr2qs_ctx("Abort", "dcc"), this, SLOT(abort())); + if(!active()) + pAction->setEnabled(false); } void DccFileTransfer::configureBandwidth() { - if(m_pBandwidthDialog)return; - m_pBandwidthDialog = new DccFileTransferBandwidthDialog(g_pMainWindow,this); - connect(m_pBandwidthDialog,SIGNAL(destroyed()),this,SLOT(bandwidthDialogDestroyed())); + if(m_pBandwidthDialog) + return; + m_pBandwidthDialog = new DccFileTransferBandwidthDialog(g_pMainWindow, this); + connect(m_pBandwidthDialog, SIGNAL(destroyed()), this, SLOT(bandwidthDialogDestroyed())); m_pBandwidthDialog->setModal(true); m_pBandwidthDialog->show(); } @@ -1369,7 +1460,7 @@ void DccFileTransfer::retryDCC() KviQString::escapeKvs(&szFileName, KviQString::EscapeSpace); QString szCommand = "dcc.send -r=$console($dcc.irccontext(" + szId + ")) " + szRemoteNick + " " + szFileName; - KviKvsScript::run(szCommand,g_pActiveWindow); + KviKvsScript::run(szCommand, g_pActiveWindow); } void DccFileTransfer::retryTDCC() @@ -1382,7 +1473,7 @@ void DccFileTransfer::retryTDCC() KviQString::escapeKvs(&szFileName, KviQString::EscapeSpace); QString szCommand = "dcc.send -r=$console($dcc.irccontext(" + szId + ")) -t " + szRemoteNick + " " + szFileName; - KviKvsScript::run(szCommand,g_pActiveWindow); + KviKvsScript::run(szCommand, g_pActiveWindow); } void DccFileTransfer::retryRevDCC() @@ -1395,10 +1486,10 @@ void DccFileTransfer::retryRevDCC() KviQString::escapeKvs(&szFileName, KviQString::EscapeSpace); QString szCommand = "dcc.rsend -z -r=$console($dcc.irccontext(" + szId + ")) " + szRemoteNick + " " + szFileName; - KviKvsScript::run(szCommand,g_pActiveWindow); + KviKvsScript::run(szCommand, g_pActiveWindow); } -void DccFileTransfer::fillStatusString(QString &szBuffer) +void DccFileTransfer::fillStatusString(QString & szBuffer) { switch(m_eGeneralStatus) { @@ -1435,15 +1526,19 @@ int DccFileTransfer::bandwidthLimit() m_pSlaveRecvThread->initGetInfo(); iLimit = (int)m_pSlaveRecvThread->bandwidthLimit(); m_pSlaveRecvThread->doneGetInfo(); - if(iLimit < 0)iLimit = MAX_DCC_BANDWIDTH_LIMIT; + if(iLimit < 0) + iLimit = MAX_DCC_BANDWIDTH_LIMIT; } - } else { + } + else + { if(m_pSlaveSendThread) { m_pSlaveSendThread->initGetInfo(); iLimit = (int)m_pSlaveSendThread->bandwidthLimit(); m_pSlaveSendThread->doneGetInfo(); - if(iLimit < 0)iLimit = MAX_DCC_BANDWIDTH_LIMIT; + if(iLimit < 0) + iLimit = MAX_DCC_BANDWIDTH_LIMIT; } } return iLimit; @@ -1451,8 +1546,10 @@ int DccFileTransfer::bandwidthLimit() void DccFileTransfer::setBandwidthLimit(int iVal) { - if(iVal < 0)iVal = MAX_DCC_BANDWIDTH_LIMIT; - if(iVal > MAX_DCC_BANDWIDTH_LIMIT)iVal = MAX_DCC_BANDWIDTH_LIMIT; + if(iVal < 0) + iVal = MAX_DCC_BANDWIDTH_LIMIT; + if(iVal > MAX_DCC_BANDWIDTH_LIMIT) + iVal = MAX_DCC_BANDWIDTH_LIMIT; m_uMaxBandwidth = iVal; if(m_pDescriptor->bRecvFile) { @@ -1462,7 +1559,9 @@ void DccFileTransfer::setBandwidthLimit(int iVal) m_pSlaveRecvThread->setBandwidthLimit(iVal); m_pSlaveRecvThread->doneGetInfo(); } - } else { + } + else + { if(m_pSlaveSendThread) { m_pSlaveSendThread->initGetInfo(); @@ -1483,7 +1582,9 @@ unsigned int DccFileTransfer::averageSpeed() uAvgBandwidth = m_pSlaveRecvThread->averageSpeed(); m_pSlaveRecvThread->doneGetInfo(); } - } else { + } + else + { if(m_pSlaveSendThread) { m_pSlaveSendThread->initGetInfo(); @@ -1505,7 +1606,9 @@ unsigned int DccFileTransfer::instantSpeed() uInstBandwidth = m_pSlaveRecvThread->instantSpeed(); m_pSlaveRecvThread->doneGetInfo(); } - } else { + } + else + { if(m_pSlaveSendThread) { m_pSlaveSendThread->initGetInfo(); @@ -1527,7 +1630,9 @@ unsigned int DccFileTransfer::transferredBytes() uTransferred = m_pSlaveRecvThread->filePosition(); m_pSlaveRecvThread->doneGetInfo(); } - } else { + } + else + { if(m_pSlaveSendThread) { m_pSlaveSendThread->initGetInfo(); @@ -1538,7 +1643,7 @@ unsigned int DccFileTransfer::transferredBytes() return uTransferred; } -void DccFileTransfer::displayPaint(QPainter * p,int column, QRect rect) +void DccFileTransfer::displayPaint(QPainter * p, int column, QRect rect) { int width = rect.width(), height = rect.height(); QString txt; @@ -1548,19 +1653,29 @@ void DccFileTransfer::displayPaint(QPainter * p,int column, QRect rect) { case COLUMN_TRANSFERTYPE: { - if(!g_pDccFileTransferIcon)break; + if(!g_pDccFileTransferIcon) + break; int xoffset = 0; int yoffset = 0; - if(m_pDescriptor->bRecvFile)yoffset = 64; + if(m_pDescriptor->bRecvFile) + yoffset = 64; switch(m_eGeneralStatus) { - case Connecting: xoffset = 0; break; - case Transferring: xoffset = 48; break; - case Success: xoffset = 96; break; - case Failure: xoffset = 144; break; + case Connecting: + xoffset = 0; + break; + case Transferring: + xoffset = 48; + break; + case Success: + xoffset = 96; + break; + case Failure: + xoffset = 144; + break; } // 48 is width, 64 is height - p->drawPixmap(width / 2 - 48 / 2,rect.top() + height / 2 - 64 / 2,*g_pDccFileTransferIcon,xoffset,yoffset,48,64); + p->drawPixmap(width / 2 - 48 / 2, rect.top() + height / 2 - 64 / 2, *g_pDccFileTransferIcon, xoffset, yoffset, 48, 64); } break; case COLUMN_FILEINFO: @@ -1568,47 +1683,45 @@ void DccFileTransfer::displayPaint(QPainter * p,int column, QRect rect) QFontMetrics fm(p->font()); - QString szFrom = __tr2qs_ctx("From: ","dcc"); - QString szTo = __tr2qs_ctx("To: ","dcc"); + QString szFrom = __tr2qs_ctx("From: ", "dcc"); + QString szTo = __tr2qs_ctx("To: ", "dcc"); int daW1 = fm.width(szFrom); int daW2 = fm.width(szTo); - if(daW1 < daW2)daW1 = daW2; + if(daW1 < daW2) + daW1 = daW2; int iLineSpacing = fm.lineSpacing(); int iY = rect.top() + 4; p->setPen(Qt::black); - KviCString szRemote(KviCString::Format,"dcc://%s@%s:%s/%s",m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(), - m_pDescriptor->szFileName.toUtf8().data()); + KviCString szRemote(KviCString::Format, "dcc://%s@%s:%s/%s", m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(), + m_pDescriptor->szFileName.toUtf8().data()); - p->drawText(rect.left() + 4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft, - m_pDescriptor->bRecvFile ? szRemote.ptr() : m_pDescriptor->szLocalFileName.toUtf8().data()); + p->drawText(rect.left() + 4 + daW1, iY, width - (8 + daW1), height - 8, Qt::AlignTop | Qt::AlignLeft, + m_pDescriptor->bRecvFile ? szRemote.ptr() : m_pDescriptor->szLocalFileName.toUtf8().data()); iY += iLineSpacing; - p->drawText(rect.left() + 4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft, - m_pDescriptor->bRecvFile ? m_pDescriptor->szLocalFileName.toUtf8().data() : szRemote.ptr()); + p->drawText(rect.left() + 4 + daW1, iY, width - (8 + daW1), height - 8, Qt::AlignTop | Qt::AlignLeft, + m_pDescriptor->bRecvFile ? m_pDescriptor->szLocalFileName.toUtf8().data() : szRemote.ptr()); iY += iLineSpacing; - p->setPen(Qt::darkGray); - p->drawText(rect.left() + 4, rect.top() + 4,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szFrom); - p->drawText(rect.left() + 4, rect.top() + 4 + iLineSpacing,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szTo); + p->drawText(rect.left() + 4, rect.top() + 4, width - 8, height - 8, Qt::AlignTop | Qt::AlignLeft, szFrom); + p->drawText(rect.left() + 4, rect.top() + 4 + iLineSpacing, width - 8, height - 8, Qt::AlignTop | Qt::AlignLeft, szTo); - - p->setPen(QColor(180,180,200)); + p->setPen(QColor(180, 180, 200)); iLineSpacing += 2; - p->drawRect(rect.left() + 4, rect.top() + height - (iLineSpacing + 4),width - 8,iLineSpacing); - p->fillRect(rect.left() + 5, rect.top() + height - (iLineSpacing + 3),width - 10,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->drawRect(rect.left() + 4, rect.top() + height - (iLineSpacing + 4), width - 8, iLineSpacing); + p->fillRect(rect.left() + 5, rect.top() + height - (iLineSpacing + 3), width - 10, iLineSpacing - 2, bIsTerminated ? QColor(210, 210, 210) : QColor(190, 190, 240)); p->setPen(Qt::black); - p->drawText(rect.left() + 7, rect.top() + height - (iLineSpacing + 4),width - 14,iLineSpacing,Qt::AlignVCenter | Qt::AlignLeft,m_szStatusString); - + p->drawText(rect.left() + 7, rect.top() + height - (iLineSpacing + 4), width - 14, iLineSpacing, Qt::AlignVCenter | Qt::AlignLeft, m_szStatusString); } break; case COLUMN_PROGRESS: @@ -1633,7 +1746,9 @@ void DccFileTransfer::displayPaint(QPainter * p,int column, QRect rect) uTransferred = m_pSlaveRecvThread->filePosition(); m_pSlaveRecvThread->doneGetInfo(); } - } else { + } + else + { if(m_pSlaveSendThread) { m_pSlaveSendThread->initGetInfo(); @@ -1645,8 +1760,8 @@ void DccFileTransfer::displayPaint(QPainter * p,int column, QRect rect) } } - p->setPen(bIsTerminated ? Qt::lightGray : QColor(210,210,240)); - p->drawRect(rect.left() + 4, rect.top() + 4,iW,12); + p->setPen(bIsTerminated ? Qt::lightGray : QColor(210, 210, 240)); + p->drawRect(rect.left() + 4, rect.top() + 4, iW, 12); iW -= 2; @@ -1663,30 +1778,34 @@ void DccFileTransfer::displayPaint(QPainter * p,int column, QRect rect) // we are sending a file and are getting acks double dPerc1 = (double)(((double)uTransferred) * 100.0) / (double)m_uTotalFileSize; - int iL1 = (int) ((((double)iW) * dPerc1) / 100.0); + int iL1 = (int)((((double)iW) * dPerc1) / 100.0); double dPerc2 = (double)(((double)uAckedBytes) * 100.0) / (double)m_uTotalFileSize; - int iL2 = (int) ((((double)iW) * dPerc2) / 100.0); + int iL2 = (int)((((double)iW) * dPerc2) / 100.0); int iW2 = iL1 - iL2; - if(iW2 > 0)p->fillRect(rect.left() + 5 + iL2,rect.top() + 5,iW2,10,bIsTerminated ? QColor(150,130,110) : QColor(220,170,100)); - p->fillRect(rect.left() + 5,rect.top() + 5,iL2,10,bIsTerminated ? QColor(140,110,110) : QColor(200,100,100)); + if(iW2 > 0) + p->fillRect(rect.left() + 5 + iL2, rect.top() + 5, iW2, 10, bIsTerminated ? QColor(150, 130, 110) : QColor(220, 170, 100)); + p->fillRect(rect.left() + 5, rect.top() + 5, iL2, 10, bIsTerminated ? QColor(140, 110, 110) : QColor(200, 100, 100)); - txt = QString(__tr2qs_ctx("%1 of %2 (%3%)","dcc")).arg(KviQString::makeSizeReadable(uAckedBytes)).arg(KviQString::makeSizeReadable(m_uTotalFileSize)).arg(dPerc2,0,'f',2); - } else { + txt = QString(__tr2qs_ctx("%1 of %2 (%3%)", "dcc")).arg(KviQString::makeSizeReadable(uAckedBytes)).arg(KviQString::makeSizeReadable(m_uTotalFileSize)).arg(dPerc2, 0, 'f', 2); + } + else + { // we are receiving a file or not sending acks double dPerc = (double)(((double)uTransferred) * 100.0) / (double)m_uTotalFileSize; - int iL = (int) ((((double)iW) * dPerc) / 100.0); - p->fillRect(rect.left() + 5,rect.top() + 5,iL,10,bIsTerminated ? QColor(140,110,110) : QColor(200,100,100)); + int iL = (int)((((double)iW) * dPerc) / 100.0); + p->fillRect(rect.left() + 5, rect.top() + 5, iL, 10, bIsTerminated ? QColor(140, 110, 110) : QColor(200, 100, 100)); - txt = QString(__tr2qs_ctx("%1 of %2 (%3%)","dcc")).arg(KviQString::makeSizeReadable(uTransferred)).arg(KviQString::makeSizeReadable(m_uTotalFileSize)).arg(dPerc,0,'f',2); + txt = QString(__tr2qs_ctx("%1 of %2 (%3%)", "dcc")).arg(KviQString::makeSizeReadable(uTransferred)).arg(KviQString::makeSizeReadable(m_uTotalFileSize)).arg(dPerc, 0, 'f', 2); } - - } else { - txt = QString(__tr2qs_ctx("%1","dcc")).arg(KviQString::makeSizeReadable(uTransferred)); + } + else + { + txt = QString(__tr2qs_ctx("%1", "dcc")).arg(KviQString::makeSizeReadable(uTransferred)); } p->setPen(Qt::black); - p->drawText(rect.left() + 4,rect.top() + 19,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,txt); + p->drawText(rect.left() + 4, rect.top() + 19, width - 8, height - 8, Qt::AlignTop | Qt::AlignLeft, txt); int iLeftHalf = (iW - 2) / 2; int iRightHalf = iW - (iLeftHalf + 1); @@ -1694,21 +1813,23 @@ void DccFileTransfer::displayPaint(QPainter * p,int column, QRect rect) if(!bIsTerminated) { - txt = __tr2qs_ctx("Spd:","dcc"); + txt = __tr2qs_ctx("Spd:", "dcc"); txt += " "; QString tmpisp; - KviNetUtils::formatNetworkBandwidthString(tmpisp,uInstantSpeed); + KviNetUtils::formatNetworkBandwidthString(tmpisp, uInstantSpeed); txt += tmpisp; txt += " ["; - } else { + } + else + { txt = ""; } - txt += __tr2qs_ctx("Avg:","dcc"); + txt += __tr2qs_ctx("Avg:", "dcc"); txt += " "; QString tmpspd; - KviNetUtils::formatNetworkBandwidthString(tmpspd,uAvgBandwidth); + KviNetUtils::formatNetworkBandwidthString(tmpspd, uAvgBandwidth); txt += tmpspd; if(!bIsTerminated) @@ -1718,43 +1839,47 @@ void DccFileTransfer::displayPaint(QPainter * p,int column, QRect rect) int iDaH = height - (iLineSpacing + 4); - p->setPen(QColor(180,180,200)); - p->drawRect(rect.left() + 4,rect.top() + iDaH,iLeftHalf,iLineSpacing); - p->fillRect(rect.left() + 5,rect.top() + iDaH + 1,iLeftHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->setPen(QColor(180, 180, 200)); + p->drawRect(rect.left() + 4, rect.top() + iDaH, iLeftHalf, iLineSpacing); + p->fillRect(rect.left() + 5, rect.top() + iDaH + 1, iLeftHalf - 2, iLineSpacing - 2, bIsTerminated ? QColor(210, 210, 210) : QColor(190, 190, 240)); p->setPen(bIsTerminated ? Qt::darkGray : Qt::black); - p->drawText(rect.left() + 6,rect.top() + iDaH,iLeftHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); + p->drawText(rect.left() + 6, rect.top() + iDaH, iLeftHalf - 4, iLineSpacing, Qt::AlignLeft | Qt::AlignVCenter, txt); if(bIsTerminated) { if((m_tTransferStartTime != 0) && (m_tTransferEndTime != 0)) { - QString tot = KviTimeUtils::formatTimeInterval(kvi_timeSpan(m_tTransferEndTime,m_tTransferStartTime),KviTimeUtils::NoLeadingEmptyIntervals | KviTimeUtils::NoLeadingZeroes); + QString tot = KviTimeUtils::formatTimeInterval(kvi_timeSpan(m_tTransferEndTime, m_tTransferStartTime), KviTimeUtils::NoLeadingEmptyIntervals | KviTimeUtils::NoLeadingZeroes); txt = "TOT: "; txt += tot; - } else { + } + else + { txt = ""; } - } else { + } + else + { if(iEta >= 0) { - QString eta = KviTimeUtils::formatTimeInterval(iEta,KviTimeUtils::NoLeadingEmptyIntervals | KviTimeUtils::NoLeadingZeroes); + QString eta = KviTimeUtils::formatTimeInterval(iEta, KviTimeUtils::NoLeadingEmptyIntervals | KviTimeUtils::NoLeadingZeroes); txt = "ETA: "; txt += eta; - } else { + } + else + { txt = "ETA: ?"; } } - p->setPen(QColor(180,180,200)); - p->drawRect(rect.left() + width - (4 + iRightHalf),rect.top() + iDaH,iRightHalf,iLineSpacing); - p->fillRect(rect.left() + width - (3 + iRightHalf),rect.top() + iDaH + 1,iRightHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->setPen(QColor(180, 180, 200)); + p->drawRect(rect.left() + width - (4 + iRightHalf), rect.top() + iDaH, iRightHalf, iLineSpacing); + p->fillRect(rect.left() + width - (3 + iRightHalf), rect.top() + iDaH + 1, iRightHalf - 2, iLineSpacing - 2, bIsTerminated ? QColor(210, 210, 210) : QColor(190, 190, 240)); p->setPen(bIsTerminated ? Qt::darkGray : Qt::black); - p->drawText(rect.left() + width - (2 + iRightHalf),rect.top() + iDaH,iRightHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); - + p->drawText(rect.left() + width - (2 + iRightHalf), rect.top() + iDaH, iRightHalf - 4, iLineSpacing, Qt::AlignLeft | Qt::AlignVCenter, txt); } break; } - } int DccFileTransfer::displayHeight(int iLineSpacing) @@ -1770,7 +1895,7 @@ QString DccFileTransfer::tipText() s = QString("<table><tr><td bgcolor=\"#000000\"><font color=\"#FFFFFF\"><b>DCC %1 (ID %2)</b></font></td></tr>").arg(m_szDccType.ptr()).arg(id()); s += "<tr><td bgcolor=\"#404040\"><font color=\"#FFFFFF\">"; - s += __tr2qs_ctx("Transfer Log","dcc"); + s += __tr2qs_ctx("Transfer Log", "dcc"); s += "</font></td></tr>"; s += "<tr><td bgcolor=\"#C0C0C0\">"; s += m_szTransferLog; @@ -1782,36 +1907,43 @@ QString DccFileTransfer::tipText() void DccFileTransfer::init() { - if(g_pDccFileTransfers)return; + if(g_pDccFileTransfers) + return; g_pDccFileTransfers = new KviPointerList<DccFileTransfer>; g_pDccFileTransfers->setAutoDelete(false); QPixmap * pix = g_pIconManager->getImage("kvi_dccfiletransfericons.png", false); - if(pix)g_pDccFileTransferIcon = new QPixmap(*pix); - else g_pDccFileTransferIcon = 0; + if(pix) + g_pDccFileTransferIcon = new QPixmap(*pix); + else + g_pDccFileTransferIcon = 0; } void DccFileTransfer::done() { - if(!g_pDccFileTransfers)return; + if(!g_pDccFileTransfers) + return; while(DccFileTransfer * t = g_pDccFileTransfers->first()) delete t; delete g_pDccFileTransfers; g_pDccFileTransfers = 0; - if(g_pDccFileTransferIcon)delete g_pDccFileTransferIcon; + if(g_pDccFileTransferIcon) + delete g_pDccFileTransferIcon; g_pDccFileTransferIcon = 0; } unsigned int DccFileTransfer::transferCount() { - if(!g_pDccFileTransfers)return 0; + if(!g_pDccFileTransfers) + return 0; return g_pDccFileTransfers->count(); } -DccFileTransfer * DccFileTransfer::nonFailedTransferWithLocalFileName(const QString &szLocalFileName) +DccFileTransfer * DccFileTransfer::nonFailedTransferWithLocalFileName(const QString & szLocalFileName) { - if(!g_pDccFileTransfers)return 0; - for(DccFileTransfer * t = g_pDccFileTransfers->first();t;t = g_pDccFileTransfers->next()) + if(!g_pDccFileTransfers) + return 0; + for(DccFileTransfer * t = g_pDccFileTransfers->first(); t; t = g_pDccFileTransfers->next()) { #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) // on windows the file names are case insensitive @@ -1829,62 +1961,67 @@ DccFileTransfer * DccFileTransfer::nonFailedTransferWithLocalFileName(const QStr unsigned int DccFileTransfer::runningTransfersCount() { - if(!g_pDccFileTransfers)return 0; + if(!g_pDccFileTransfers) + return 0; unsigned int cnt = 0; - for(DccFileTransfer * t = g_pDccFileTransfers->first();t;t = g_pDccFileTransfers->next()) + for(DccFileTransfer * t = g_pDccFileTransfers->first(); t; t = g_pDccFileTransfers->next()) { - if(t->active())cnt++; + if(t->active()) + cnt++; } return cnt; } -bool DccFileTransfer::handleResumeAccepted(const char * filename,const char * port,const char * szZeroPortTag) +bool DccFileTransfer::handleResumeAccepted(const char * filename, const char * port, const char * szZeroPortTag) { - if(!g_pDccFileTransfers)return false; + if(!g_pDccFileTransfers) + return false; - for(DccFileTransfer * t = g_pDccFileTransfers->first();t;t = g_pDccFileTransfers->next()) + for(DccFileTransfer * t = g_pDccFileTransfers->first(); t; t = g_pDccFileTransfers->next()) { - if(t->resumeAccepted(filename,port,szZeroPortTag))return true; + if(t->resumeAccepted(filename, port, szZeroPortTag)) + return true; } return false; } -bool DccFileTransfer::handleResumeRequest(const char * filename,const char * port,quint64 filePos) +bool DccFileTransfer::handleResumeRequest(const char * filename, const char * port, quint64 filePos) { if(!g_pDccFileTransfers) return false; - for(DccFileTransfer * t = g_pDccFileTransfers->first();t;t = g_pDccFileTransfers->next()) + for(DccFileTransfer * t = g_pDccFileTransfers->first(); t; t = g_pDccFileTransfers->next()) { - if(t->doResume(filename,port,filePos)) + if(t->doResume(filename, port, filePos)) return true; } return false; } -void DccFileTransfer::outputAndLog(const QString &s) +void DccFileTransfer::outputAndLog(const QString & s) { KviWindow * out = transferWindow(); addToTransferLog(s); - if(out)out->output(KVI_OUT_DCCMSG,"[%Q]: %Q",&m_szTransferIdString,&s); + if(out) + out->output(KVI_OUT_DCCMSG, "[%Q]: %Q", &m_szTransferIdString, &s); } -void DccFileTransfer::outputAndLog(int msgtype,const QString &s) +void DccFileTransfer::outputAndLog(int msgtype, const QString & s) { KviWindow * out = transferWindow(); addToTransferLog(s); - if(out)out->output(msgtype,"[%Q]: %Q",&m_szTransferIdString,&s); + if(out) + out->output(msgtype, "[%Q]: %Q", &m_szTransferIdString, &s); } - -void DccFileTransfer::addToTransferLog(const QString &s) +void DccFileTransfer::addToTransferLog(const QString & s) { QDateTime dt = QDateTime::currentDateTime(); QString ts; - ts.sprintf("[%4d.%2d.%2d %2d:%2d:%2d] ",dt.date().year(),dt.date().month(),dt.date().day(),dt.time().hour(),dt.time().minute(),dt.time().second()); - m_szTransferLog += ts+s; + ts.sprintf("[%4d.%2d.%2d %2d:%2d:%2d] ", dt.date().year(), dt.date().month(), dt.date().day(), dt.time().hour(), dt.time().minute(), dt.time().second()); + m_szTransferLog += ts + s; m_szTransferLog += "<br>"; } @@ -1893,22 +2030,22 @@ void DccFileTransfer::connectionInProgress() if(m_pDescriptor->bActive) { // ACTIVE CONNECTION -// if((kvi_strEqualCS(m_szDccType.ptr(), "RECV")) || (kvi_strEqualCS(m_szDccType.ptr(),"TRECV"))) -// { -// // FIXME: that's not true!... we're NOT connected here -// if(TRIGGER_EVENT_5PARAM_RETVALUE(KviEvent_OnDCCGetConnected,this,m_pDescriptor->szPort.ptr(),m_pDescriptor->szFileName.ptr(),m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(),m_pDescriptor->szHost.ptr())); -// } else { -// if(TRIGGER_EVENT_5PARAM_RETVALUE(KviEvent_OnDCCSendConnected,this,m_pDescriptor->szPort.ptr(),m_pDescriptor->szFileName.ptr(),m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(),m_pDescriptor->szHost.ptr())); -// } -// - m_szStatusString = __tr2qs_ctx("Contacting host %1 on port %2","dcc").arg(m_pDescriptor->szIp, m_pDescriptor->szPort); + // if((kvi_strEqualCS(m_szDccType.ptr(), "RECV")) || (kvi_strEqualCS(m_szDccType.ptr(),"TRECV"))) + // { + // // FIXME: that's not true!... we're NOT connected here + // if(TRIGGER_EVENT_5PARAM_RETVALUE(KviEvent_OnDCCGetConnected,this,m_pDescriptor->szPort.ptr(),m_pDescriptor->szFileName.ptr(),m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(),m_pDescriptor->szHost.ptr())); + // } else { + // if(TRIGGER_EVENT_5PARAM_RETVALUE(KviEvent_OnDCCSendConnected,this,m_pDescriptor->szPort.ptr(),m_pDescriptor->szFileName.ptr(),m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(),m_pDescriptor->szHost.ptr())); + // } + // + m_szStatusString = __tr2qs_ctx("Contacting host %1 on port %2", "dcc").arg(m_pDescriptor->szIp, m_pDescriptor->szPort); outputAndLog(m_szStatusString); displayUpdate(); return; } // PASSIVE CONNECTION - m_szStatusString = __tr2qs_ctx("Listening on interface %1 port %2","dcc").arg(m_pMarshal->localIp(), m_pMarshal->localPort()); + m_szStatusString = __tr2qs_ctx("Listening on interface %1 port %2", "dcc").arg(m_pMarshal->localIp(), m_pMarshal->localPort()); outputAndLog(m_szStatusString); if(m_pDescriptor->bSendRequest) @@ -1917,7 +2054,9 @@ void DccFileTransfer::connectionInProgress() if(!m_pDescriptor->szFakeIp.isEmpty()) { ip = m_pDescriptor->szFakeIp; - } else { + } + else + { ip = m_pDescriptor->szListenIp; if(KVI_OPTION_BOOL(KviOption_boolDccGuessIpFromServerWhenLocalIsUnroutable)) @@ -1931,67 +2070,78 @@ void DccFileTransfer::connectionInProgress() if(!tmp.isEmpty()) { ip = tmp; - outputAndLog(__tr2qs_ctx("The local IP address is private, determining from IRC server: %1","dcc").arg(ip)); - } else { - outputAndLog(__tr2qs_ctx("The local IP address is private, but unable to determine it from the IRC server","dcc")); + outputAndLog(__tr2qs_ctx("The local IP address is private, determining from IRC server: %1", "dcc").arg(ip)); } - } else { - outputAndLog(__tr2qs_ctx("The local IP address is private, but have no IRC server to determine it from","dcc")); + else + { + outputAndLog(__tr2qs_ctx("The local IP address is private, but unable to determine it from the IRC server", "dcc")); + } + } + else + { + outputAndLog(__tr2qs_ctx("The local IP address is private, but have no IRC server to determine it from", "dcc")); } } } } - KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort(); + KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort(); //#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned nuumber)" struct in_addr a; - if(KviNetUtils::stringIpToBinaryIp(ip,&a))ip.setNum(htonl(a.s_addr)); + if(KviNetUtils::stringIpToBinaryIp(ip, &a)) + ip.setNum(htonl(a.s_addr)); QString tmp = m_pDescriptor->szFileName; // just to be sure - KviQString::cutToLast(tmp,'/'); - KviQString::cutToLast(tmp,'\\'); + KviQString::cutToLast(tmp, '/'); + KviQString::cutToLast(tmp, '\\'); QString fName; // BUG-TO-BUG mIrc compatibility if(KVI_OPTION_BOOL(KviOption_boolDCCFileTransferReplaceOutgoingSpacesWithUnderscores)) - tmp.replace(" ","_"); + tmp.replace(" ", "_"); - KviIrcServerParser::encodeCtcpParameter(tmp.toUtf8().data(),fName); + KviIrcServerParser::encodeCtcpParameter(tmp.toUtf8().data(), fName); // Zero port requests want DCC SEND as back-request KviCString szReq; if(m_pDescriptor->isZeroPortRequest()) { szReq = "SEND"; - if(m_pDescriptor->bIsTdcc) szReq.prepend("T"); + if(m_pDescriptor->bIsTdcc) + szReq.prepend("T"); #ifdef COMPILE_SSL_SUPPORT - if(m_pDescriptor->bIsSSL) szReq.prepend("S"); + if(m_pDescriptor->bIsSSL) + szReq.prepend("S"); #endif m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s %s %s %s %s%c", - m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), - 0x01, - m_pDescriptor->console()->connection()->encodeText(szReq.ptr()).data(), - m_pDescriptor->console()->connection()->encodeText(fName).data(), - ip.toUtf8().data(),port.ptr(), - m_pDescriptor->szFileSize.toUtf8().data(),m_pDescriptor->zeroPortRequestTag(),0x01); - } else { + m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), + 0x01, + m_pDescriptor->console()->connection()->encodeText(szReq.ptr()).data(), + m_pDescriptor->console()->connection()->encodeText(fName).data(), + ip.toUtf8().data(), port.ptr(), + m_pDescriptor->szFileSize.toUtf8().data(), m_pDescriptor->zeroPortRequestTag(), 0x01); + } + else + { szReq = m_szDccType; m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s %s %s %Q%c", - m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), - 0x01, - m_pDescriptor->console()->connection()->encodeText(szReq.ptr()).data(), - m_pDescriptor->console()->connection()->encodeText(fName).data(), - ip.toUtf8().data(),port.ptr(), - &(m_pDescriptor->szLocalFileSize),0x01); + m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), + 0x01, + m_pDescriptor->console()->connection()->encodeText(szReq.ptr()).data(), + m_pDescriptor->console()->connection()->encodeText(fName).data(), + ip.toUtf8().data(), port.ptr(), + &(m_pDescriptor->szLocalFileSize), 0x01); } - outputAndLog(__tr2qs_ctx("Sent DCC %1 request to %2, waiting for remote client to connect...","dcc").arg(szReq.ptr(), m_pDescriptor->szNick)); - } else { - outputAndLog(__tr2qs_ctx("DCC %1 request not sent, awaiting manual connection","dcc").arg(m_szDccType.ptr())); + outputAndLog(__tr2qs_ctx("Sent DCC %1 request to %2, waiting for remote client to connect...", "dcc").arg(szReq.ptr(), m_pDescriptor->szNick)); + } + else + { + outputAndLog(__tr2qs_ctx("DCC %1 request not sent, awaiting manual connection", "dcc").arg(m_szDccType.ptr())); } - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCFileTransferConnectionInProgress,eventWindow(),m_pDescriptor->idString()); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCFileTransferConnectionInProgress, eventWindow(), m_pDescriptor->idString()); displayUpdate(); } @@ -1999,19 +2149,19 @@ void DccFileTransfer::connectionInProgress() void DccFileTransfer::startingSSLHandshake() { #ifdef COMPILE_SSL_SUPPORT - outputAndLog(KVI_OUT_SSL,__tr2qs_ctx("Low-level transport connection established","dcc")); - outputAndLog(KVI_OUT_SSL,__tr2qs_ctx("Starting Secure Socket Layer handshake","dcc")); + outputAndLog(KVI_OUT_SSL, __tr2qs_ctx("Low-level transport connection established", "dcc")); + outputAndLog(KVI_OUT_SSL, __tr2qs_ctx("Starting Secure Socket Layer handshake", "dcc")); #endif } void DccFileTransfer::sslError(const char * msg) { #ifdef COMPILE_SSL_SUPPORT - outputAndLog(KVI_OUT_DCCERROR,__tr2qs_ctx("[SSL ERROR]: %1","dcc").arg(msg)); + outputAndLog(KVI_OUT_DCCERROR, __tr2qs_ctx("[SSL ERROR]: %1", "dcc").arg(msg)); #endif } -bool DccFileTransfer::event(QEvent *e) +bool DccFileTransfer::event(QEvent * e) { if(e->type() == KVI_THREAD_EVENT) { @@ -2023,20 +2173,20 @@ bool DccFileTransfer::event(QEvent *e) QString szErrorString = KviError::getDescription(*pError); delete pError; if(m_pDescriptor->bRecvFile) - g_pApp->fileDownloadTerminated(false,m_pDescriptor->szFileName.toUtf8().data(),m_pDescriptor->szLocalFileName.toUtf8().data(),m_pDescriptor->szNick.toUtf8().data(),szErrorString.toUtf8().data()); + g_pApp->fileDownloadTerminated(false, m_pDescriptor->szFileName.toUtf8().data(), m_pDescriptor->szLocalFileName.toUtf8().data(), m_pDescriptor->szNick.toUtf8().data(), szErrorString.toUtf8().data()); - m_szStatusString = __tr2qs_ctx("Transfer failed: ","dcc"); + m_szStatusString = __tr2qs_ctx("Transfer failed: ", "dcc"); m_szStatusString += szErrorString; m_eGeneralStatus = Failure; m_tTransferEndTime = kvi_unixTime(); KVS_TRIGGER_EVENT_3(KviEvent_OnDCCFileTransferFailed, - eventWindow(), - szErrorString, - (kvs_int_t)(m_pSlaveRecvThread ? m_pSlaveRecvThread->receivedBytes() : m_pSlaveSendThread->sentBytes()), - m_pDescriptor->idString()); + eventWindow(), + szErrorString, + (kvs_int_t)(m_pSlaveRecvThread ? m_pSlaveRecvThread->receivedBytes() : m_pSlaveSendThread->sentBytes()), + m_pDescriptor->idString()); - outputAndLog(KVI_OUT_DCCERROR,m_szStatusString); + outputAndLog(KVI_OUT_DCCERROR, m_szStatusString); displayUpdate(); return true; } @@ -2047,13 +2197,15 @@ bool DccFileTransfer::event(QEvent *e) // File Upload/Download terminated, or something like this if(KVI_OPTION_BOOL(KviOption_boolNotifyDccSendSuccessInConsole)) { - KviConsoleWindow *c; - if(!g_pApp->windowExists(m_pDescriptor->console())) c=g_pApp->activeConsole(); - else c=m_pDescriptor->console(); - c->output(KVI_OUT_DCCMSG,__tr2qs_ctx("DCC %s transfer with %Q@%Q:%Q completed: \r![!dbl]play $0\r%s\r","dcc"), - m_pDescriptor->bIsTdcc ? (m_pDescriptor->bRecvFile ? "TRECV" : "TSEND") : (m_pDescriptor->bRecvFile ? "RECV" : "SEND"), - &(m_pDescriptor->szNick),&(m_pDescriptor->szIp),&(m_pDescriptor->szPort), - &(m_pDescriptor->szLocalFileName)); + KviConsoleWindow * c; + if(!g_pApp->windowExists(m_pDescriptor->console())) + c = g_pApp->activeConsole(); + else + c = m_pDescriptor->console(); + c->output(KVI_OUT_DCCMSG, __tr2qs_ctx("DCC %s transfer with %Q@%Q:%Q completed: \r![!dbl]play $0\r%s\r", "dcc"), + m_pDescriptor->bIsTdcc ? (m_pDescriptor->bRecvFile ? "TRECV" : "TSEND") : (m_pDescriptor->bRecvFile ? "RECV" : "SEND"), + &(m_pDescriptor->szNick), &(m_pDescriptor->szIp), &(m_pDescriptor->szPort), + &(m_pDescriptor->szLocalFileName)); } /* // Also add an optional message to the notifier, unless it is an AVATAR download! @@ -2063,39 +2215,42 @@ bool DccFileTransfer::event(QEvent *e) g_pApp->notifierMessage(0,KVI_SMALLICON_DCCMSG,szMsg,KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime)); } */ - if(m_pDescriptor->bRecvFile)g_pApp->fileDownloadTerminated(true,m_pDescriptor->szFileName.toUtf8().data(),m_pDescriptor->szLocalFileName.toUtf8().data(),m_pDescriptor->szNick.toUtf8().data()); - m_szStatusString = __tr2qs_ctx("Transfer completed","dcc"); + if(m_pDescriptor->bRecvFile) + g_pApp->fileDownloadTerminated(true, m_pDescriptor->szFileName.toUtf8().data(), m_pDescriptor->szLocalFileName.toUtf8().data(), m_pDescriptor->szNick.toUtf8().data()); + m_szStatusString = __tr2qs_ctx("Transfer completed", "dcc"); outputAndLog(m_szStatusString); m_eGeneralStatus = Success; m_tTransferEndTime = kvi_unixTime(); - if (m_pResumeTimer) delete m_pResumeTimer; + if(m_pResumeTimer) + delete m_pResumeTimer; KVS_TRIGGER_EVENT_2(KviEvent_OnDCCFileTransferSuccess, - eventWindow(), - (kvs_int_t)(m_pSlaveRecvThread ? m_pSlaveRecvThread->receivedBytes() : m_pSlaveSendThread->sentBytes()), - m_pDescriptor->idString()); + eventWindow(), + (kvs_int_t)(m_pSlaveRecvThread ? m_pSlaveRecvThread->receivedBytes() : m_pSlaveSendThread->sentBytes()), + m_pDescriptor->idString()); displayUpdate(); - if(KVI_OPTION_BOOL(KviOption_boolAutoCloseDccSendOnSuccess))die(); + if(KVI_OPTION_BOOL(KviOption_boolAutoCloseDccSendOnSuccess)) + die(); return true; } break; case KVI_DCC_THREAD_EVENT_MESSAGE: { KviCString * str = ((KviThreadDataEvent<KviCString> *)e)->getData(); - outputAndLog(QString(__tr_no_xgettext_ctx(str->ptr(),"dcc"))); + outputAndLog(QString(__tr_no_xgettext_ctx(str->ptr(), "dcc"))); delete str; return true; } break; default: - qDebug("Invalid event type %d received",((KviThreadEvent *)e)->id()); - break; + qDebug("Invalid event type %d received", ((KviThreadEvent *)e)->id()); + break; } } -//#warning "Remove this!" -// if(e->type() == QEvent::Close)qDebug("Close event received"); + //#warning "Remove this!" + // if(e->type() == QEvent::Close)qDebug("Close event received"); return KviFileTransfer::event(e); } @@ -2103,23 +2258,23 @@ void DccFileTransfer::handleMarshalError(KviError::Code eError) { QString szErr = KviError::getDescription(eError); m_eGeneralStatus = Failure; - m_szStatusString = __tr2qs_ctx("Transfer failed: ","dcc"); + m_szStatusString = __tr2qs_ctx("Transfer failed: ", "dcc"); m_szStatusString += szErr; outputAndLog(m_szStatusString); - KVS_TRIGGER_EVENT_3(KviEvent_OnDCCFileTransferFailed,eventWindow(),szErr,(kvs_int_t)0,m_pDescriptor->idString()); + KVS_TRIGGER_EVENT_3(KviEvent_OnDCCFileTransferFailed, eventWindow(), szErr, (kvs_int_t)0, m_pDescriptor->idString()); displayUpdate(); } void DccFileTransfer::connected() { - outputAndLog(__tr2qs_ctx("Connected to %1:%2","dcc").arg(m_pMarshal->remoteIp(), m_pMarshal->remotePort())); - outputAndLog(__tr2qs_ctx("Local end is %1:%2","dcc").arg(m_pMarshal->localIp(), m_pMarshal->localPort())); + outputAndLog(__tr2qs_ctx("Connected to %1:%2", "dcc").arg(m_pMarshal->remoteIp(), m_pMarshal->remotePort())); + outputAndLog(__tr2qs_ctx("Local end is %1:%2", "dcc").arg(m_pMarshal->localIp(), m_pMarshal->localPort())); m_tTransferStartTime = kvi_unixTime(); if(!(m_pDescriptor->bActive)) { - m_pDescriptor->szIp = m_pMarshal->remoteIp(); + m_pDescriptor->szIp = m_pMarshal->remoteIp(); m_pDescriptor->szPort = m_pMarshal->remotePort(); m_pDescriptor->szHost = m_pMarshal->remoteIp(); } @@ -2127,18 +2282,19 @@ void DccFileTransfer::connected() if(m_pDescriptor->bRecvFile) { KviDccRecvThreadOptions * o = new KviDccRecvThreadOptions; - o->szFileName = m_pDescriptor->szLocalFileName.toUtf8().data(); + o->szFileName = m_pDescriptor->szLocalFileName.toUtf8().data(); bool bOk; - o->uTotalFileSize = m_pDescriptor->szFileSize.toULongLong(&bOk); - if(!bOk)o->uTotalFileSize = 0; - o->bResume = m_pDescriptor->bResume; + o->uTotalFileSize = m_pDescriptor->szFileSize.toULongLong(&bOk); + if(!bOk) + o->uTotalFileSize = 0; + o->bResume = m_pDescriptor->bResume; o->iIdleStepLengthInMSec = KVI_OPTION_BOOL(KviOption_boolDccSendForceIdleStep) ? KVI_OPTION_UINT(KviOption_uintDccSendIdleStepInMSec) : 0; - o->bIsTdcc = m_pDescriptor->bIsTdcc; - o->bSendZeroAck = KVI_OPTION_BOOL(KviOption_boolSendZeroAckInDccRecv); - o->bSend64BitAck = KVI_OPTION_BOOL(KviOption_boolSend64BitAckInDccRecv); - o->bNoAcks = m_pDescriptor->bNoAcks; - o->uMaxBandwidth = m_uMaxBandwidth; - m_pSlaveRecvThread = new DccRecvThread(this,m_pMarshal->releaseSocket(),o); + o->bIsTdcc = m_pDescriptor->bIsTdcc; + o->bSendZeroAck = KVI_OPTION_BOOL(KviOption_boolSendZeroAckInDccRecv); + o->bSend64BitAck = KVI_OPTION_BOOL(KviOption_boolSend64BitAckInDccRecv); + o->bNoAcks = m_pDescriptor->bNoAcks; + o->uMaxBandwidth = m_uMaxBandwidth; + m_pSlaveRecvThread = new DccRecvThread(this, m_pMarshal->releaseSocket(), o); #ifdef COMPILE_SSL_SUPPORT KviSSL * s = m_pMarshal->releaseSSL(); @@ -2148,20 +2304,24 @@ void DccFileTransfer::connected() } #endif m_pSlaveRecvThread->start(); - } else { + } + else + { KviDccSendThreadOptions * o = new KviDccSendThreadOptions; - o->szFileName = m_pDescriptor->szLocalFileName.toUtf8().data(); - o->bFastSend = KVI_OPTION_BOOL(KviOption_boolUseFastDccSend); + o->szFileName = m_pDescriptor->szLocalFileName.toUtf8().data(); + o->bFastSend = KVI_OPTION_BOOL(KviOption_boolUseFastDccSend); o->iIdleStepLengthInMSec = KVI_OPTION_BOOL(KviOption_boolDccSendForceIdleStep) ? KVI_OPTION_UINT(KviOption_uintDccSendIdleStepInMSec) : 0; bool bOk; - o->bIsTdcc = m_pDescriptor->bIsTdcc; - o->uStartPosition = m_pDescriptor->szFileSize.toULongLong(&bOk); - if(!bOk) o->uStartPosition = 0; - o->iPacketSize = KVI_OPTION_UINT(KviOption_uintDccSendPacketSize); - if(o->iPacketSize < 32)o->iPacketSize = 32; - o->uMaxBandwidth = m_uMaxBandwidth; - o->bNoAcks = m_pDescriptor->bNoAcks; - m_pSlaveSendThread = new DccSendThread(this,m_pMarshal->releaseSocket(),o); + o->bIsTdcc = m_pDescriptor->bIsTdcc; + o->uStartPosition = m_pDescriptor->szFileSize.toULongLong(&bOk); + if(!bOk) + o->uStartPosition = 0; + o->iPacketSize = KVI_OPTION_UINT(KviOption_uintDccSendPacketSize); + if(o->iPacketSize < 32) + o->iPacketSize = 32; + o->uMaxBandwidth = m_uMaxBandwidth; + o->bNoAcks = m_pDescriptor->bNoAcks; + m_pSlaveSendThread = new DccSendThread(this, m_pMarshal->releaseSocket(), o); #ifdef COMPILE_SSL_SUPPORT KviSSL * s = m_pMarshal->releaseSSL(); if(s) @@ -2173,33 +2333,32 @@ void DccFileTransfer::connected() } m_eGeneralStatus = Transferring; - m_szStatusString = __tr2qs_ctx("Transferring data","dcc"); + m_szStatusString = __tr2qs_ctx("Transferring data", "dcc"); - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCFileTransferBegin,eventWindow(),m_pDescriptor->idString()); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCFileTransferBegin, eventWindow(), m_pDescriptor->idString()); outputAndLog(m_szStatusString); displayUpdate(); } -bool DccFileTransfer::resumeAccepted(const char *filename,const char *port,const char *szZeroPortTag) +bool DccFileTransfer::resumeAccepted(const char * filename, const char * port, const char * szZeroPortTag) { - if(!(kvi_strEqualCI(filename,m_pDescriptor->szFileName.toUtf8().data()) || KVI_OPTION_BOOL(KviOption_boolAcceptBrokenFileNameDccResumeRequests))) + if(!(kvi_strEqualCI(filename, m_pDescriptor->szFileName.toUtf8().data()) || KVI_OPTION_BOOL(KviOption_boolAcceptBrokenFileNameDccResumeRequests))) return false; - if(!(kvi_strEqualCI(port,m_pDescriptor->szPort.toUtf8().data()) && - (!m_pSlaveRecvThread) && m_pDescriptor->bResume && m_pDescriptor->bRecvFile && m_pResumeTimer)) + if(!(kvi_strEqualCI(port, m_pDescriptor->szPort.toUtf8().data()) && (!m_pSlaveRecvThread) && m_pDescriptor->bResume && m_pDescriptor->bRecvFile && m_pResumeTimer)) return false; - if(kvi_strEqualCI(port,"0")) + if(kvi_strEqualCI(port, "0")) { - if(!kvi_strEqualCI(szZeroPortTag,m_pDescriptor->zeroPortRequestTag())) + if(!kvi_strEqualCI(szZeroPortTag, m_pDescriptor->zeroPortRequestTag())) return false; } delete m_pResumeTimer; m_pResumeTimer = 0; - outputAndLog(__tr2qs_ctx("RESUME accepted, transfer will begin at position %1","dcc").arg(m_pDescriptor->szLocalFileSize)); + outputAndLog(__tr2qs_ctx("RESUME accepted, transfer will begin at position %1", "dcc").arg(m_pDescriptor->szLocalFileSize)); listenOrConnect(); @@ -2218,7 +2377,7 @@ bool DccFileTransfer::resumeAccepted(const char *filename,const char *port,const return true; } -bool DccFileTransfer::doResume(const char * filename,const char * port,quint64 filePos) +bool DccFileTransfer::doResume(const char * filename, const char * port, quint64 filePos) { if(m_pSlaveRecvThread) return false; // we're already receiving stuff... @@ -2228,8 +2387,8 @@ bool DccFileTransfer::doResume(const char * filename,const char * port,quint64 f if(m_pDescriptor->bRecvFile) return false; // we're receiving... can't resume anything - bool bFileNameMatches = KviQString::equalCI(filename,m_pDescriptor->szFileName); - bool bPortMatches = KviQString::equalCI(port,m_pMarshal->dccPort()); + bool bFileNameMatches = KviQString::equalCI(filename, m_pDescriptor->szFileName); + bool bPortMatches = KviQString::equalCI(port, m_pMarshal->dccPort()); if(!bPortMatches) { @@ -2243,7 +2402,7 @@ bool DccFileTransfer::doResume(const char * filename,const char * port,quint64 f // hmm.. try to accept a mismatched port request if(_OUTPUT_VERBOSE) - outputAndLog(KVI_OUT_DCCMSG,__tr2qs_ctx("Processing RESUME request with mismatched port (%1)","dcc").arg(port)); + outputAndLog(KVI_OUT_DCCMSG, __tr2qs_ctx("Processing RESUME request with mismatched port (%1)", "dcc").arg(port)); } // port matches @@ -2260,16 +2419,15 @@ bool DccFileTransfer::doResume(const char * filename,const char * port,quint64 f { if(_OUTPUT_VERBOSE) outputAndLog( - KVI_OUT_DCCMSG, - __tr2qs_ctx("Invalid RESUME request: invalid file name (got '%1' but should be '%2')","dcc") - .arg(filename) - .arg(m_pDescriptor->szFileName) - ); + KVI_OUT_DCCMSG, + __tr2qs_ctx("Invalid RESUME request: invalid file name (got '%1' but should be '%2')", "dcc") + .arg(filename) + .arg(m_pDescriptor->szFileName)); return false; // bad file name } if(_OUTPUT_VERBOSE) - outputAndLog(KVI_OUT_DCCMSG,__tr2qs_ctx("Processing RESUME request with broken filename (%1)","dcc").arg(filename)); + outputAndLog(KVI_OUT_DCCMSG, __tr2qs_ctx("Processing RESUME request with broken filename (%1)", "dcc").arg(filename)); } bool bOk; @@ -2278,31 +2436,30 @@ bool DccFileTransfer::doResume(const char * filename,const char * port,quint64 f if(!bOk) { // ops...internal error - outputAndLog(KVI_OUT_DCCERROR,__tr2qs_ctx("Internal error in RESUME request","dcc")); + outputAndLog(KVI_OUT_DCCERROR, __tr2qs_ctx("Internal error in RESUME request", "dcc")); return false; } if(iLocalFileSize <= filePos) { - outputAndLog(KVI_OUT_DCCERROR,__tr2qs_ctx("Invalid RESUME request: position %1 is larger than file size","dcc").arg(filePos)); + outputAndLog(KVI_OUT_DCCERROR, __tr2qs_ctx("Invalid RESUME request: position %1 is larger than file size", "dcc").arg(filePos)); return false; } - outputAndLog(KVI_OUT_DCCERROR,__tr2qs_ctx("Accepting RESUME request, transfer will begin at position %1","dcc").arg(filePos)); + outputAndLog(KVI_OUT_DCCERROR, __tr2qs_ctx("Accepting RESUME request, transfer will begin at position %1", "dcc").arg(filePos)); m_pDescriptor->szFileSize.setNum(filePos); KviCString szBuffy; - KviIrcServerParser::encodeCtcpParameter(filename,szBuffy); + KviIrcServerParser::encodeCtcpParameter(filename, szBuffy); 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, - m_pDescriptor->console()->connection()->encodeText(QString::number(filePos)).data(), - 0x01 - ); + m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), + 0x01, + m_pDescriptor->console()->connection()->encodeText(szBuffy.ptr()).data(), + port, + m_pDescriptor->console()->connection()->encodeText(QString::number(filePos)).data(), + 0x01); return true; } @@ -2312,56 +2469,57 @@ DccThread * DccFileTransfer::getSlaveThread() if(m_pDescriptor->bRecvFile) { return m_pSlaveRecvThread; - } else { + } + else + { return m_pSlaveSendThread; } } - -DccFileTransferBandwidthDialog::DccFileTransferBandwidthDialog(QWidget * pParent,DccFileTransfer * t) -: QDialog(pParent) +DccFileTransferBandwidthDialog::DccFileTransferBandwidthDialog(QWidget * pParent, DccFileTransfer * t) + : QDialog(pParent) { QGridLayout * g = new QGridLayout(this); m_pTransfer = t; int iVal = m_pTransfer->bandwidthLimit(); - QString szText = __tr2qs_ctx("Configure Bandwidth for DCC Transfer %1","dcc").arg(t->id()); + QString szText = __tr2qs_ctx("Configure Bandwidth for DCC Transfer %1", "dcc").arg(t->id()); setWindowTitle(szText); - szText = t->isFileUpload() ? __tr2qs_ctx("Limit upload bandwidth to:","dcc") : __tr2qs_ctx("Limit download bandwidth to:","dcc"); + szText = t->isFileUpload() ? __tr2qs_ctx("Limit upload bandwidth to:", "dcc") : __tr2qs_ctx("Limit download bandwidth to:", "dcc"); - m_pEnableLimitCheck = new QCheckBox(szText,this); - g->addWidget(m_pEnableLimitCheck,0,0); + m_pEnableLimitCheck = new QCheckBox(szText, this); + g->addWidget(m_pEnableLimitCheck, 0, 0); m_pEnableLimitCheck->setChecked((iVal >= 0) && (iVal < MAX_DCC_BANDWIDTH_LIMIT)); m_pLimitBox = new QSpinBox(this); m_pLimitBox->setMinimum(0); - m_pLimitBox->setMaximum(MAX_DCC_BANDWIDTH_LIMIT-1); + m_pLimitBox->setMaximum(MAX_DCC_BANDWIDTH_LIMIT - 1); m_pLimitBox->setSingleStep(1); m_pLimitBox->setEnabled((iVal >= 0) && (iVal < MAX_DCC_BANDWIDTH_LIMIT)); - connect(m_pEnableLimitCheck,SIGNAL(toggled(bool)),m_pLimitBox,SLOT(setEnabled(bool))); - g->addWidget(m_pLimitBox,0,1,1,2); + connect(m_pEnableLimitCheck, SIGNAL(toggled(bool)), m_pLimitBox, SLOT(setEnabled(bool))); + g->addWidget(m_pLimitBox, 0, 1, 1, 2); szText = " "; - szText += __tr2qs_ctx("bytes/sec","dcc"); + szText += __tr2qs_ctx("bytes/sec", "dcc"); m_pLimitBox->setSuffix(szText); m_pLimitBox->setValue(iVal < MAX_DCC_BANDWIDTH_LIMIT ? iVal : 0); - QPushButton * pb = new QPushButton(__tr2qs_ctx("OK","dcc"),this); - connect(pb,SIGNAL(clicked()),this,SLOT(okClicked())); + QPushButton * pb = new QPushButton(__tr2qs_ctx("OK", "dcc"), this); + connect(pb, SIGNAL(clicked()), this, SLOT(okClicked())); pb->setMinimumWidth(80); - g->addWidget(pb,2,2); + g->addWidget(pb, 2, 2); - pb = new QPushButton(__tr2qs_ctx("Cancel","dcc"),this); - connect(pb,SIGNAL(clicked()),this,SLOT(cancelClicked())); + pb = new QPushButton(__tr2qs_ctx("Cancel", "dcc"), this); + connect(pb, SIGNAL(clicked()), this, SLOT(cancelClicked())); pb->setMinimumWidth(80); - g->addWidget(pb,2,1); + g->addWidget(pb, 2, 1); - g->setColumnStretch(0,1); - g->setRowStretch(1,1); + g->setColumnStretch(0, 1); + g->setRowStretch(1, 1); } DccFileTransferBandwidthDialog::~DccFileTransferBandwidthDialog() @@ -2374,8 +2532,10 @@ void DccFileTransferBandwidthDialog::okClicked() if(m_pEnableLimitCheck->isChecked()) { iVal = m_pLimitBox->value(); - if(iVal < 0)iVal = MAX_DCC_BANDWIDTH_LIMIT; - if(iVal > MAX_DCC_BANDWIDTH_LIMIT)iVal = MAX_DCC_BANDWIDTH_LIMIT; + if(iVal < 0) + iVal = MAX_DCC_BANDWIDTH_LIMIT; + if(iVal > MAX_DCC_BANDWIDTH_LIMIT) + iVal = MAX_DCC_BANDWIDTH_LIMIT; } m_pTransfer->setBandwidthLimit(iVal); delete this; diff --git a/src/modules/dcc/DccFileTransfer.h b/src/modules/dcc/DccFileTransfer.h index 1e26acab1..f8fb48a05 100644 --- a/src/modules/dcc/DccFileTransfer.h +++ b/src/modules/dcc/DccFileTransfer.h @@ -53,46 +53,47 @@ class QMenu; typedef struct _KviDccSendThreadOptions { - KviCString szFileName; - quint64 uStartPosition; - int iPacketSize; - int iIdleStepLengthInMSec; - bool bFastSend; - bool bNoAcks; - bool bIsTdcc; + KviCString szFileName; + quint64 uStartPosition; + int iPacketSize; + int iIdleStepLengthInMSec; + bool bFastSend; + bool bNoAcks; + bool bIsTdcc; unsigned int uMaxBandwidth; } KviDccSendThreadOptions; - class DccSendThread : public DccThread { public: - DccSendThread(QObject * par,kvi_socket_t fd,KviDccSendThreadOptions * opt); + DccSendThread(QObject * par, kvi_socket_t fd, KviDccSendThreadOptions * opt); ~DccSendThread(); + private: // stats: SHARED!!! - uint m_uAverageSpeed; - uint m_uInstantSpeed; - quint64 m_uFilePosition; - quint64 m_uAckedBytes; - quint64 m_uTotalSentBytes; + uint m_uAverageSpeed; + uint m_uInstantSpeed; + quint64 m_uFilePosition; + quint64 m_uAckedBytes; + quint64 m_uTotalSentBytes; // internal - unsigned long m_uStartTime; - unsigned long m_uInstantSpeedInterval; - quint64 m_uInstantSentBytes; + unsigned long m_uStartTime; + unsigned long m_uInstantSpeedInterval; + quint64 m_uInstantSentBytes; KviDccSendThreadOptions * m_pOpt; - KviMSecTimeInterval * m_pTimeInterval; // used for computing the instant bandwidth but not only + KviMSecTimeInterval * m_pTimeInterval; // used for computing the instant bandwidth but not only public: void initGetInfo(); - uint averageSpeed(){ return m_uAverageSpeed; }; - uint instantSpeed(){ return m_uInstantSpeed; }; - quint64 filePosition(){ return m_uFilePosition; }; + uint averageSpeed() { return m_uAverageSpeed; }; + uint instantSpeed() { return m_uInstantSpeed; }; + quint64 filePosition() { return m_uFilePosition; }; // sent ONLY in this session - quint64 sentBytes(){ return m_uTotalSentBytes; }; - quint64 ackedBytes(){ return m_uAckedBytes; }; - unsigned int bandwidthLimit(){ return m_pOpt->uMaxBandwidth; }; - void setBandwidthLimit(unsigned int uMaxBandwidth){ m_pOpt->uMaxBandwidth = uMaxBandwidth; }; + quint64 sentBytes() { return m_uTotalSentBytes; }; + quint64 ackedBytes() { return m_uAckedBytes; }; + unsigned int bandwidthLimit() { return m_pOpt->uMaxBandwidth; }; + void setBandwidthLimit(unsigned int uMaxBandwidth) { m_pOpt->uMaxBandwidth = uMaxBandwidth; }; void doneGetInfo(); + protected: void updateStats(); virtual void run(); @@ -100,47 +101,50 @@ protected: typedef struct _KviDccRecvThreadOptions { - bool bResume; - KviCString szFileName; - quint64 uTotalFileSize; - int iIdleStepLengthInMSec; - bool bSendZeroAck; - bool bSend64BitAck; - bool bNoAcks; - bool bIsTdcc; + bool bResume; + KviCString szFileName; + quint64 uTotalFileSize; + int iIdleStepLengthInMSec; + bool bSendZeroAck; + bool bSend64BitAck; + bool bNoAcks; + bool bIsTdcc; unsigned int uMaxBandwidth; } KviDccRecvThreadOptions; class DccRecvThread : public DccThread { public: - DccRecvThread(QObject * par,kvi_socket_t fd,KviDccRecvThreadOptions * opt); + DccRecvThread(QObject * par, kvi_socket_t fd, KviDccRecvThreadOptions * opt); ~DccRecvThread(); + protected: KviDccRecvThreadOptions * m_pOpt; // stats: SHARED! - uint m_uAverageSpeed; - uint m_uInstantSpeed; - quint64 m_uFilePosition; - quint64 m_uTotalReceivedBytes; + uint m_uAverageSpeed; + uint m_uInstantSpeed; + quint64 m_uFilePosition; + quint64 m_uTotalReceivedBytes; // internal - unsigned long m_uStartTime; - KviMSecTimeInterval * m_pTimeInterval; // used for computing the instant bandwidth - quint64 m_uInstantReceivedBytes; - quint64 m_uInstantSpeedInterval; - QFile * m_pFile; + unsigned long m_uStartTime; + KviMSecTimeInterval * m_pTimeInterval; // used for computing the instant bandwidth + quint64 m_uInstantReceivedBytes; + quint64 m_uInstantSpeedInterval; + QFile * m_pFile; + public: void initGetInfo(); - uint averageSpeed(){ return m_uAverageSpeed; }; - uint instantSpeed(){ return m_uInstantSpeed; }; - quint64 filePosition(){ return m_uFilePosition; }; + uint averageSpeed() { return m_uAverageSpeed; }; + uint instantSpeed() { return m_uInstantSpeed; }; + quint64 filePosition() { return m_uFilePosition; }; // received ONLY in this session - quint64 receivedBytes(){ return m_uTotalReceivedBytes; }; - unsigned int bandwidthLimit(){ return m_pOpt->uMaxBandwidth; }; - void setBandwidthLimit(unsigned int uMaxBandwidth){ m_pOpt->uMaxBandwidth = uMaxBandwidth; }; + quint64 receivedBytes() { return m_uTotalReceivedBytes; }; + unsigned int bandwidthLimit() { return m_pOpt->uMaxBandwidth; }; + void setBandwidthLimit(unsigned int uMaxBandwidth) { m_pOpt->uMaxBandwidth = uMaxBandwidth; }; void doneGetInfo(); + protected: void postMessageEvent(const char * msg); void updateStats(); @@ -148,82 +152,89 @@ protected: virtual void run(); }; - class DccFileTransferBandwidthDialog : public QDialog { Q_OBJECT public: - DccFileTransferBandwidthDialog(QWidget * pParent,DccFileTransfer * t); + DccFileTransferBandwidthDialog(QWidget * pParent, DccFileTransfer * t); ~DccFileTransferBandwidthDialog(); + protected: DccFileTransfer * m_pTransfer; QCheckBox * m_pEnableLimitCheck; QSpinBox * m_pLimitBox; + protected: - virtual void closeEvent(QCloseEvent *e); + virtual void closeEvent(QCloseEvent * e); protected slots: void okClicked(); void cancelClicked(); }; - class DccFileTransfer : public KviFileTransfer, public DccMarshalOutputContext { - enum GeneralStatus { Connecting, Transferring, Success, Failure }; + enum GeneralStatus + { + Connecting, + Transferring, + Success, + Failure + }; Q_OBJECT public: DccFileTransfer(DccDescriptor * dcc); ~DccFileTransfer(); + private: - DccSendThread * m_pSlaveSendThread; - DccRecvThread * m_pSlaveRecvThread; - DccDescriptor * m_pDescriptor; - DccMarshal * m_pMarshal; + DccSendThread * m_pSlaveSendThread; + DccRecvThread * m_pSlaveRecvThread; + DccDescriptor * m_pDescriptor; + DccMarshal * m_pMarshal; - KviCString m_szTarget; - KviCString m_szDccType; - QString m_szTransferIdString; + KviCString m_szTarget; + KviCString m_szDccType; + QString m_szTransferIdString; - QString m_szStatusString; - GeneralStatus m_eGeneralStatus; + QString m_szStatusString; + GeneralStatus m_eGeneralStatus; - QString m_szTransferLog; // html + QString m_szTransferLog; // html - kvi_time_t m_tTransferStartTime; - kvi_time_t m_tTransferEndTime; + kvi_time_t m_tTransferStartTime; + kvi_time_t m_tTransferEndTime; // cached stats - quint64 m_uTotalFileSize; // total file size to transfer + quint64 m_uTotalFileSize; // total file size to transfer - unsigned int m_uMaxBandwidth; + unsigned int m_uMaxBandwidth; DccFileTransferBandwidthDialog * m_pBandwidthDialog; - QTimer * m_pResumeTimer; // used to signal resume timeout + QTimer * m_pResumeTimer; // used to signal resume timeout public: - bool resumeAccepted(const char * filename,const char * port,const char *szZeroPortTag); - bool doResume(const char * filename,const char * port,quint64 filePos); + bool resumeAccepted(const char * filename, const char * port, const char * szZeroPortTag); + bool doResume(const char * filename, const char * port, quint64 filePos); static void init(); static void done(); static unsigned int runningTransfersCount(); - static DccFileTransfer * nonFailedTransferWithLocalFileName(const QString &szLocalFileName); + static DccFileTransfer * nonFailedTransferWithLocalFileName(const QString & szLocalFileName); static unsigned int transferCount(); - static bool handleResumeAccepted(const char * filename,const char * port,const char * szZeroPortTag); - static bool handleResumeRequest(const char * filename,const char * port,quint64 filePos); + static bool handleResumeAccepted(const char * filename, const char * port, const char * szZeroPortTag); + static bool handleResumeRequest(const char * filename, const char * port, quint64 filePos); - virtual bool event(QEvent *e); + virtual bool event(QEvent * e); virtual KviWindow * dccMarshalOutputWindow(); virtual const char * dccMarshalOutputContextString(); - virtual void displayPaint(QPainter * p,int column, QRect rect); + virtual void displayPaint(QPainter * p, int column, QRect rect); virtual int displayHeight(int iLineSpacing); virtual void fillContextPopup(QMenu * m); - virtual void fillStatusString(QString &szBuffer); + virtual void fillStatusString(QString & szBuffer); virtual bool active(); virtual QString tipText(); virtual QString localFileName(); - bool isFileUpload(){ return m_pDescriptor->isFileUpload(); }; + bool isFileUpload() { return m_pDescriptor->isFileUpload(); }; unsigned int averageSpeed(); unsigned int instantSpeed(); @@ -232,12 +243,13 @@ public: int bandwidthLimit(); void setBandwidthLimit(int iVal); virtual DccThread * getSlaveThread(); + protected: void startConnection(); void listenOrConnect(); - void addToTransferLog(const QString &s); - void outputAndLog(const QString &s); - void outputAndLog(int msgtype,const QString &s); + void addToTransferLog(const QString & s); + void outputAndLog(const QString & s); + void outputAndLog(int msgtype, const QString & s); KviWindow * eventWindow(); protected slots: void connectionInProgress(); diff --git a/src/modules/dcc/DccMarshal.cpp b/src/modules/dcc/DccMarshal.cpp index 0575ab9e5..9f7b9af34 100644 --- a/src/modules/dcc/DccMarshal.cpp +++ b/src/modules/dcc/DccMarshal.cpp @@ -37,16 +37,16 @@ #include <QTimer> DccMarshal::DccMarshal(DccMarshalOutputContext * ctx) -: QObject(0) + : QObject(0) { setObjectName("dcc_marshal"); - m_pSn = 0; - m_fd = KVI_INVALID_SOCKET; - m_pTimeoutTimer = 0; - m_bIPv6 = false; - m_pOutputContext = ctx; + m_pSn = 0; + m_fd = KVI_INVALID_SOCKET; + m_pTimeoutTimer = 0; + m_bIPv6 = false; + m_pOutputContext = ctx; #ifdef COMPILE_SSL_SUPPORT - m_pSSL = 0; + m_pSSL = 0; #endif m_szIp = ""; m_szPort = ""; @@ -88,10 +88,10 @@ void DccMarshal::reset() m_fd = KVI_INVALID_SOCKET; } #ifdef COMPILE_SSL_SUPPORT -// qDebug("MARSHAL RESETTING (SSL=%d)",m_pSSL); + // qDebug("MARSHAL RESETTING (SSL=%d)",m_pSSL); if(m_pSSL) { -// qDebug("MARSHAL CLEARING THE SSL"); + // qDebug("MARSHAL CLEARING THE SSL"); KviSSLMaster::freeSSL(m_pSSL); m_pSSL = 0; } @@ -104,7 +104,7 @@ void DccMarshal::reset() m_bIPv6 = false; } -KviError::Code DccMarshal::dccListen(const QString &ip,const QString &port,bool bUseTimeout,bool bUseSSL) +KviError::Code DccMarshal::dccListen(const QString & ip, const QString & port, bool bUseTimeout, bool bUseSSL) { if(m_fd != KVI_INVALID_SOCKET) return KviError::AnotherConnectionInProgress; @@ -143,7 +143,9 @@ void DccMarshal::doListen() { emit error(KviError::InvalidIpAddress); return; - } else m_bIPv6 = true; + } + else + m_bIPv6 = true; #else emit error(KviError::InvalidIpAddress); return; @@ -166,12 +168,11 @@ void DccMarshal::doListen() } #endif - #ifdef COMPILE_IPV6_SUPPORT m_fd = kvi_socket_create(m_bIPv6 ? KVI_SOCKET_PF_INET6 : KVI_SOCKET_PF_INET, - KVI_SOCKET_TYPE_STREAM,KVI_SOCKET_PROTO_TCP); + KVI_SOCKET_TYPE_STREAM, KVI_SOCKET_PROTO_TCP); #else - m_fd = kvi_socket_create(KVI_SOCKET_PF_INET,KVI_SOCKET_TYPE_STREAM,KVI_SOCKET_PROTO_TCP); + m_fd = kvi_socket_create(KVI_SOCKET_PF_INET, KVI_SOCKET_TYPE_STREAM, KVI_SOCKET_PROTO_TCP); #endif if(m_fd == KVI_INVALID_SOCKET) @@ -183,9 +184,9 @@ void DccMarshal::doListen() if((!KVI_OPTION_BOOL(KviOption_boolUserDefinedPortRange)) || (m_uPort != 0)) { #ifdef COMPILE_IPV6_SUPPORT - KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,m_bIPv6); + KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, m_bIPv6); #else - KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,false); + KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, false); #endif if(!sa.socketAddress()) @@ -195,22 +196,25 @@ void DccMarshal::doListen() return; } - if(!kvi_socket_bind(m_fd,sa.socketAddress(),sa.addressLength())) + if(!kvi_socket_bind(m_fd, sa.socketAddress(), sa.addressLength())) { reset(); emit error(KviError::BindFailed); return; } - - } else { + } + else + { m_uPort = KVI_OPTION_UINT(KviOption_uintDccMinPort); - if(KVI_OPTION_UINT(KviOption_uintDccMaxPort) > 65535)KVI_OPTION_UINT(KviOption_uintDccMaxPort) = 65535; + if(KVI_OPTION_UINT(KviOption_uintDccMaxPort) > 65535) + KVI_OPTION_UINT(KviOption_uintDccMaxPort) = 65535; bool bBindSuccess; - do { + do + { #ifdef COMPILE_IPV6_SUPPORT - KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,m_bIPv6); + KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, m_bIPv6); #else - KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,false); + KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, false); #endif if(!sa.socketAddress()) { @@ -219,7 +223,7 @@ void DccMarshal::doListen() return; } - bBindSuccess = kvi_socket_bind(m_fd,sa.socketAddress(),sa.addressLength()); + bBindSuccess = kvi_socket_bind(m_fd, sa.socketAddress(), sa.addressLength()); if(!bBindSuccess) { @@ -240,41 +244,40 @@ void DccMarshal::doListen() emit error(KviError::BindFailed); return; } - } - if(!kvi_socket_listen(m_fd,1)) + if(!kvi_socket_listen(m_fd, 1)) { reset(); emit error(KviError::ListenFailed); return; } - - // Reread the port in case we're binding to a random one (0) +// Reread the port in case we're binding to a random one (0) #ifdef COMPILE_IPV6_SUPPORT - KviSockaddr sareal(0,m_bIPv6); + KviSockaddr sareal(0, m_bIPv6); #else - KviSockaddr sareal(0,false); + KviSockaddr sareal(0, false); #endif - int size = sareal.addressLength(); - if(kvi_socket_getsockname(m_fd,sareal.socketAddress(),&size)) + if(kvi_socket_getsockname(m_fd, sareal.socketAddress(), &size)) { -// qDebug("GETSOCKNAMEOK"); + // qDebug("GETSOCKNAMEOK"); m_szPort.setNum(sareal.port()); m_uPort = sareal.port(); -// qDebug("REALPORT %u",m_uPort); - } else { -// qDebug("GETSOCKNAMEFAILED"); + // qDebug("REALPORT %u",m_uPort); + } + else + { + // qDebug("GETSOCKNAMEFAILED"); } // and setup the READ notifier... - m_pSn = new QSocketNotifier(m_fd,QSocketNotifier::Read); - QObject::connect(m_pSn,SIGNAL(activated(int)),this,SLOT(snActivated(int))); + m_pSn = new QSocketNotifier(m_fd, QSocketNotifier::Read); + QObject::connect(m_pSn, SIGNAL(activated(int)), this, SLOT(snActivated(int))); m_pSn->setEnabled(true); // set the timer @@ -290,7 +293,7 @@ void DccMarshal::doListen() if(m_bUseTimeout) { m_pTimeoutTimer = new QTimer(); - connect(m_pTimeoutTimer,SIGNAL(timeout()),this,SLOT(connectionTimedOut())); + connect(m_pTimeoutTimer, SIGNAL(timeout()), this, SLOT(connectionTimedOut())); m_pTimeoutTimer->setSingleShot(true); m_pTimeoutTimer->setInterval((KVI_OPTION_UINT(KviOption_uintDccSocketTimeout) * 1000)); m_pTimeoutTimer->start(); @@ -300,7 +303,7 @@ void DccMarshal::doListen() emit inProgress(); } -KviError::Code DccMarshal::dccConnect(const char * ip,const char * port,bool bUseTimeout,bool bUseSSL) +KviError::Code DccMarshal::dccConnect(const char * ip, const char * port, bool bUseTimeout, bool bUseSSL) { if(m_fd != KVI_INVALID_SOCKET) return KviError::AnotherConnectionInProgress; @@ -336,7 +339,9 @@ void DccMarshal::doConnect() { emit error(KviError::InvalidIpAddress); return; - } else m_bIPv6 = true; + } + else + m_bIPv6 = true; #else emit error(KviError::InvalidIpAddress); return; @@ -351,14 +356,13 @@ void DccMarshal::doConnect() return; } - - // create the socket +// create the socket #ifdef COMPILE_IPV6_SUPPORT m_fd = kvi_socket_create(m_bIPv6 ? KVI_SOCKET_PF_INET6 : KVI_SOCKET_PF_INET, - KVI_SOCKET_TYPE_STREAM,KVI_SOCKET_PROTO_TCP); + KVI_SOCKET_TYPE_STREAM, KVI_SOCKET_PROTO_TCP); #else m_fd = kvi_socket_create(KVI_SOCKET_PF_INET, - KVI_SOCKET_TYPE_STREAM,KVI_SOCKET_PROTO_TCP); + KVI_SOCKET_TYPE_STREAM, KVI_SOCKET_PROTO_TCP); #endif if(m_fd == KVI_INVALID_SOCKET) { @@ -374,13 +378,12 @@ void DccMarshal::doConnect() return; } - - // fill the sockaddr structure +// fill the sockaddr structure #ifdef COMPILE_IPV6_SUPPORT - KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,m_bIPv6); + KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, m_bIPv6); #else - KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,false); + KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, false); #endif if(!sa.socketAddress()) @@ -390,34 +393,36 @@ void DccMarshal::doConnect() return; } - if(!kvi_socket_connect(m_fd,sa.socketAddress(),sa.addressLength())) + if(!kvi_socket_connect(m_fd, sa.socketAddress(), sa.addressLength())) { int err = kvi_socket_error(); if(!kvi_socket_recoverableConnectError(err)) { // Ops... - int sockError=err; - if(sockError==0) + int sockError = err; + if(sockError == 0) { // Zero error ?...let's look closer - int iSize=sizeof(int); - if(!kvi_socket_getsockopt(m_fd,SOL_SOCKET,SO_ERROR, - (void *)&sockError,&iSize))sockError=0; + int iSize = sizeof(int); + if(!kvi_socket_getsockopt(m_fd, SOL_SOCKET, SO_ERROR, + (void *)&sockError, &iSize)) + sockError = 0; } // Die reset(); // And declare problems :) - if(sockError)emit error(KviError::translateSystemError(sockError)); - else emit error(KviError::UnknownError); //Error 0 ? + if(sockError) + emit error(KviError::translateSystemError(sockError)); + else + emit error(KviError::UnknownError); //Error 0 ? return; } } - // and setup the WRITE notifier... - m_pSn = new QSocketNotifier(m_fd,QSocketNotifier::Write); - QObject::connect(m_pSn,SIGNAL(activated(int)),this,SLOT(snActivated(int))); + m_pSn = new QSocketNotifier(m_fd, QSocketNotifier::Write); + QObject::connect(m_pSn, SIGNAL(activated(int)), this, SLOT(snActivated(int))); m_pSn->setEnabled(true); // set the timer @@ -433,7 +438,7 @@ void DccMarshal::doConnect() if(m_bUseTimeout) { m_pTimeoutTimer = new QTimer(); - connect(m_pTimeoutTimer,SIGNAL(timeout()),this,SLOT(connectionTimedOut())); + connect(m_pTimeoutTimer, SIGNAL(timeout()), this, SLOT(connectionTimedOut())); m_pTimeoutTimer->setSingleShot(true); m_pTimeoutTimer->setInterval(KVI_OPTION_UINT(KviOption_uintDccSocketTimeout) * 1000); m_pTimeoutTimer->start(); @@ -443,7 +448,6 @@ void DccMarshal::doConnect() emit inProgress(); } - void DccMarshal::snActivated(int) { if(m_pTimeoutTimer) @@ -454,7 +458,7 @@ void DccMarshal::snActivated(int) #ifdef COMPILE_IPV6_SUPPORT struct sockaddr_in6 hostSockAddr6; #endif - struct sockaddr_in hostSockAddr; + struct sockaddr_in hostSockAddr; int size = sizeof(hostSockAddr); struct sockaddr * addr = (struct sockaddr *)&hostSockAddr; @@ -472,14 +476,17 @@ void DccMarshal::snActivated(int) // outgoing connection (we have called connect()) // Check for errors... int sockError; - int iSize=sizeof(int); - if(!kvi_socket_getsockopt(m_fd,SOL_SOCKET,SO_ERROR,(void *)&sockError,&iSize))sockError = -1; + int iSize = sizeof(int); + if(!kvi_socket_getsockopt(m_fd, SOL_SOCKET, SO_ERROR, (void *)&sockError, &iSize)) + sockError = -1; if(sockError != 0) { //failed KviError::Code eError; - if(sockError > 0)eError = KviError::translateSystemError(sockError); - else eError = KviError::UnknownError; //Error 0 ? + if(sockError > 0) + eError = KviError::translateSystemError(sockError); + else + eError = KviError::UnknownError; //Error 0 ? reset(); emit error(eError); return; @@ -488,29 +495,35 @@ void DccMarshal::snActivated(int) delete m_pSn; m_pSn = 0; // get the local address - if(!kvi_socket_getsockname(m_fd,addr,&size)) + if(!kvi_socket_getsockname(m_fd, addr, &size)) { m_szSecondaryIp = "localhost"; - m_szSecondaryPort = __tr2qs_ctx("unknown","dcc"); - } else { + m_szSecondaryPort = __tr2qs_ctx("unknown", "dcc"); + } + else + { #ifdef COMPILE_IPV6_SUPPORT if(m_bIPv6) { m_szSecondaryPort.setNum(ntohs(((struct sockaddr_in6 *)addr)->sin6_port)); - if(!KviNetUtils::binaryIpToStringIp_V6(((struct sockaddr_in6 *)addr)->sin6_addr,m_szSecondaryIp)) + if(!KviNetUtils::binaryIpToStringIp_V6(((struct sockaddr_in6 *)addr)->sin6_addr, m_szSecondaryIp)) m_szSecondaryIp = "localhost"; - } else { + } + else + { #endif m_szSecondaryPort.setNum(ntohs(((struct sockaddr_in *)addr)->sin_port)); - if(!KviNetUtils::binaryIpToStringIp(((struct sockaddr_in *)addr)->sin_addr,m_szSecondaryIp)) + if(!KviNetUtils::binaryIpToStringIp(((struct sockaddr_in *)addr)->sin_addr, m_szSecondaryIp)) m_szSecondaryIp = "localhost"; #ifdef COMPILE_IPV6_SUPPORT } #endif } - } else { + } + else + { // Incoming connection - int newsock = kvi_socket_accept(m_fd,addr,&size); + int newsock = kvi_socket_accept(m_fd, addr, &size); if(newsock != KVI_INVALID_SOCKET) { // Connected @@ -520,13 +533,15 @@ void DccMarshal::snActivated(int) if(m_bIPv6) { m_szSecondaryPort.setNum(ntohs(((struct sockaddr_in6 *)addr)->sin6_port)); - if(!KviNetUtils::binaryIpToStringIp_V6(((struct sockaddr_in6 *)addr)->sin6_addr,m_szSecondaryIp)) - m_szSecondaryIp = __tr2qs_ctx("unknown","dcc"); - } else { + if(!KviNetUtils::binaryIpToStringIp_V6(((struct sockaddr_in6 *)addr)->sin6_addr, m_szSecondaryIp)) + m_szSecondaryIp = __tr2qs_ctx("unknown", "dcc"); + } + else + { #endif m_szSecondaryPort.setNum(ntohs(((struct sockaddr_in *)addr)->sin_port)); - if(!KviNetUtils::binaryIpToStringIp(((struct sockaddr_in *)addr)->sin_addr,m_szSecondaryIp)) - m_szSecondaryIp = __tr2qs_ctx("unknown","dcc"); + if(!KviNetUtils::binaryIpToStringIp(((struct sockaddr_in *)addr)->sin_addr, m_szSecondaryIp)) + m_szSecondaryIp = __tr2qs_ctx("unknown", "dcc"); #ifdef COMPILE_IPV6_SUPPORT } #endif @@ -538,8 +553,9 @@ void DccMarshal::snActivated(int) emit error(KviError::AsyncSocketFailed); return; } - - } else { + } + else + { // Huh ?.. wait for the next notifier call return; } @@ -549,13 +565,15 @@ void DccMarshal::snActivated(int) // SSL Handshake needed ? if(m_bUseSSL) { - m_pSSL = KviSSLMaster::allocSSL(m_pOutputContext->dccMarshalOutputWindow(),m_fd,m_bOutgoing ? KviSSL::Client : KviSSL::Server,m_pOutputContext->dccMarshalOutputContextString()); + m_pSSL = KviSSLMaster::allocSSL(m_pOutputContext->dccMarshalOutputWindow(), m_fd, m_bOutgoing ? KviSSL::Client : KviSSL::Server, m_pOutputContext->dccMarshalOutputContextString()); if(m_pSSL) { emit startingSSLHandshake(); doSSLHandshake(0); - } else { + } + else + { reset(); emit error(KviError::SSLError); } @@ -569,7 +587,7 @@ void DccMarshal::snActivated(int) void DccMarshal::doSSLHandshake(int) { #ifdef COMPILE_SSL_SUPPORT -// qDebug("DO SSL HANDSHAKE"); + // qDebug("DO SSL HANDSHAKE"); if(m_pSn) { delete m_pSn; @@ -590,24 +608,24 @@ void DccMarshal::doSSLHandshake(int) { case KviSSL::Success: // done! -// qDebug("EMITTING CONNECTED"); + // qDebug("EMITTING CONNECTED"); emit connected(); -// qDebug("CONNECTED EMITTED"); - break; + // qDebug("CONNECTED EMITTED"); + break; case KviSSL::WantRead: - m_pSn = new QSocketNotifier((int)m_fd,QSocketNotifier::Read); - QObject::connect(m_pSn,SIGNAL(activated(int)),this,SLOT(doSSLHandshake(int))); + m_pSn = new QSocketNotifier((int)m_fd, QSocketNotifier::Read); + QObject::connect(m_pSn, SIGNAL(activated(int)), this, SLOT(doSSLHandshake(int))); m_pSn->setEnabled(true); - break; + break; case KviSSL::WantWrite: - m_pSn = new QSocketNotifier((int)m_fd,QSocketNotifier::Write); - QObject::connect(m_pSn,SIGNAL(activated(int)),this,SLOT(doSSLHandshake(int))); + m_pSn = new QSocketNotifier((int)m_fd, QSocketNotifier::Write); + QObject::connect(m_pSn, SIGNAL(activated(int)), this, SLOT(doSSLHandshake(int))); m_pSn->setEnabled(true); - break; + break; case KviSSL::RemoteEndClosedConnection: reset(); emit error(KviError::RemoteEndClosedConnection); - break; + break; case KviSSL::SyscallError: { // syscall problem @@ -615,11 +633,13 @@ void DccMarshal::doSSLHandshake(int) if(kvi_socket_recoverableError(err)) { // can recover ? (EAGAIN, EINTR ?) - m_pSn = new QSocketNotifier((int)m_fd,QSocketNotifier::Write); - QObject::connect(m_pSn,SIGNAL(activated(int)),this,SLOT(doSSLHandshake(int))); + m_pSn = new QSocketNotifier((int)m_fd, QSocketNotifier::Write); + QObject::connect(m_pSn, SIGNAL(activated(int)), this, SLOT(doSSLHandshake(int))); m_pSn->setEnabled(true); return; - } else { + } + else + { // Declare problems :) reset(); emit error(err ? KviError::translateSystemError(err) : KviError::UnknownError); @@ -629,7 +649,8 @@ void DccMarshal::doSSLHandshake(int) default: { KviCString buffer; - while(m_pSSL->getLastErrorString(buffer))emit sslError(buffer.ptr()); + while(m_pSSL->getLastErrorString(buffer)) + emit sslError(buffer.ptr()); reset(); emit error(KviError::SSLError); } diff --git a/src/modules/dcc/DccMarshal.h b/src/modules/dcc/DccMarshal.h index d60e86342..b9a3e17b1 100644 --- a/src/modules/dcc/DccMarshal.h +++ b/src/modules/dcc/DccMarshal.h @@ -37,16 +37,17 @@ class KviWindow; class DccMarshal; #ifdef COMPILE_SSL_SUPPORT - #include "KviSSLMaster.h" +#include "KviSSLMaster.h" #endif - class DccMarshalOutputContext { friend class DccMarshal; + public: DccMarshalOutputContext(){}; virtual ~DccMarshalOutputContext(){}; + protected: virtual KviWindow * dccMarshalOutputWindow() = 0; virtual const char * dccMarshalOutputContextString() = 0; @@ -58,26 +59,28 @@ class DccMarshal : public QObject public: DccMarshal(DccMarshalOutputContext * ctx); ~DccMarshal(); + protected: // DCC DESCRIPTOR - QString m_szIp; // Dcc initiator ip address (the one that listens) - QString m_szPort; // Dcc initiator port (the one that listens) + QString m_szIp; // Dcc initiator ip address (the one that listens) + QString m_szPort; // Dcc initiator port (the one that listens) // other info - bool m_bIPv6; // Dcc mode - kvi_u32_t m_uPort; // Dcc initiator port - bool m_bOutgoing; // true if WE have connected to the remote host (so m_szIp is the remote host ip) - QString m_szSecondaryIp; // Ip of the client that has connected to the remote host - QString m_szSecondaryPort; // Port of the client that has connected to the remote host + bool m_bIPv6; // Dcc mode + kvi_u32_t m_uPort; // Dcc initiator port + bool m_bOutgoing; // true if WE have connected to the remote host (so m_szIp is the remote host ip) + QString m_szSecondaryIp; // Ip of the client that has connected to the remote host + QString m_szSecondaryPort; // Port of the client that has connected to the remote host // internals - kvi_socket_t m_fd; // socket - QSocketNotifier * m_pSn; - bool m_bUseTimeout; - QTimer * m_pTimeoutTimer; + kvi_socket_t m_fd; // socket + QSocketNotifier * m_pSn; + bool m_bUseTimeout; + QTimer * m_pTimeoutTimer; #ifdef COMPILE_SSL_SUPPORT - KviSSL * m_pSSL; - bool m_bUseSSL; + KviSSL * m_pSSL; + bool m_bUseSSL; #endif DccMarshalOutputContext * m_pOutputContext; + public: const QString & dccIp() const { return m_szIp; }; const QString & dccPort() const { return m_szPort; }; @@ -85,21 +88,22 @@ public: const QString & localPort() const { return m_bOutgoing ? m_szSecondaryPort : m_szPort; }; const QString & remoteIp() const { return m_bOutgoing ? m_szIp : m_szSecondaryIp; }; const QString & remotePort() const { return m_bOutgoing ? m_szPort : m_szSecondaryPort; }; - KviError::Code dccListen(const QString &ip,const QString &port,bool bUseTimeout,bool bUseSSL = false); - KviError::Code dccConnect(const char * ip,const char * port,bool bUseTimeout,bool bUseSSL = false); + KviError::Code dccListen(const QString & ip, const QString & port, bool bUseTimeout, bool bUseSSL = false); + KviError::Code dccConnect(const char * ip, const char * port, bool bUseTimeout, bool bUseSSL = false); kvi_socket_t releaseSocket(); #ifdef COMPILE_SSL_SUPPORT KviSSL * releaseSSL(); #endif void abort(); + private: void reset(); -//#ifdef COMPILE_SSL_SUPPORT -// bool trySSLCertificate(); -//#endif + //#ifdef COMPILE_SSL_SUPPORT + // bool trySSLCertificate(); + //#endif private slots: void doSSLHandshake(int); -// void doListenSSLHandshake(); + // void doListenSSLHandshake(); void snActivated(int); void connectionTimedOut(); void doListen(); @@ -112,5 +116,4 @@ signals: void error(KviError::Code); }; - #endif //_MARSHAL_H_ diff --git a/src/modules/dcc/DccThread.cpp b/src/modules/dcc/DccThread.cpp index a2ace585e..d3ec9af52 100644 --- a/src/modules/dcc/DccThread.cpp +++ b/src/modules/dcc/DccThread.cpp @@ -33,28 +33,30 @@ #include "kvi_socket.h" #ifdef COMPILE_SSL_SUPPORT - #include "KviSSLMaster.h" +#include "KviSSLMaster.h" #endif -DccThread::DccThread(QObject * par,kvi_socket_t fd) -: KviSensitiveThread() +DccThread::DccThread(QObject * par, kvi_socket_t fd) + : KviSensitiveThread() { - m_pParent = par; - m_fd = fd; - m_pMutex = new KviMutex(); + m_pParent = par; + m_fd = fd; + m_pMutex = new KviMutex(); #ifdef COMPILE_SSL_SUPPORT -// qDebug("CLEARING SSL IN DccThread constructor"); - m_pSSL = 0; + // qDebug("CLEARING SSL IN DccThread constructor"); + m_pSSL = 0; #endif } DccThread::~DccThread() { #ifdef COMPILE_SSL_SUPPORT - if(m_pSSL)KviSSLMaster::freeSSL(m_pSSL); + if(m_pSSL) + KviSSLMaster::freeSSL(m_pSSL); m_pSSL = 0; #endif - if(m_fd != KVI_INVALID_SOCKET)kvi_socket_close(m_fd); + if(m_fd != KVI_INVALID_SOCKET) + kvi_socket_close(m_fd); KVI_ASSERT(!m_pMutex->locked()); delete m_pMutex; } @@ -62,7 +64,8 @@ DccThread::~DccThread() #ifdef COMPILE_SSL_SUPPORT void DccThread::setSSL(KviSSL * s) { - if(m_pSSL)KviSSLMaster::freeSSL(m_pSSL); + if(m_pSSL) + KviSSLMaster::freeSSL(m_pSSL); m_pSSL = s; } #endif @@ -75,7 +78,9 @@ bool DccThread::handleInvalidSocketRead(int readLen) // connection closed postErrorEvent(KviError::RemoteEndClosedConnection); return false; - } else { + } + else + { // error ? int err = kvi_socket_error(); if((err != EINTR) && (err != EAGAIN)) @@ -93,7 +98,7 @@ void DccThread::raiseSSLError() KviCString buffer; while(m_pSSL->getLastErrorString(buffer)) { - KviCString msg(KviCString::Format,"[SSL ERROR]: %s",buffer.ptr()); + KviCString msg(KviCString::Format, "[SSL ERROR]: %s", buffer.ptr()); postMessageEvent(msg.ptr()); } } @@ -103,12 +108,12 @@ void DccThread::postErrorEvent(int err) { KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ERROR); e->setData(new int(err)); - postEvent(m_pParent,e); + postEvent(m_pParent, e); } void DccThread::postMessageEvent(const char * message) { KviThreadDataEvent<KviCString> * e = new KviThreadDataEvent<KviCString>(KVI_DCC_THREAD_EVENT_MESSAGE); e->setData(new KviCString(message)); - postEvent(m_pParent,e); + postEvent(m_pParent, e); } diff --git a/src/modules/dcc/DccThread.h b/src/modules/dcc/DccThread.h index 55041ed6e..25f6fc4fd 100644 --- a/src/modules/dcc/DccThread.h +++ b/src/modules/dcc/DccThread.h @@ -32,7 +32,7 @@ #include <QObject> #ifdef COMPILE_SSL_SUPPORT - #include "KviSSL.h" +#include "KviSSL.h" #endif // KviThreadDataEvent<int> @@ -48,26 +48,28 @@ typedef struct _KviDccThreadIncomingData { - int iLen; + int iLen; char * buffer; } KviDccThreadIncomingData; class DccThread : public KviSensitiveThread { public: - DccThread(QObject * par,kvi_socket_t fd); + DccThread(QObject * par, kvi_socket_t fd); ~DccThread(); + protected: - KviMutex * m_pMutex; // OWNED! PROTECTS m_pOutBuffers - kvi_socket_t m_fd; - QObject * m_pParent; // READ ONLY! + KviMutex * m_pMutex; // OWNED! PROTECTS m_pOutBuffers + kvi_socket_t m_fd; + QObject * m_pParent; // READ ONLY! #ifdef COMPILE_SSL_SUPPORT - KviSSL * m_pSSL; + KviSSL * m_pSSL; #endif protected: bool handleInvalidSocketRead(int readLen); + public: - QObject * parent(){ return m_pParent; }; + QObject * parent() { return m_pParent; }; void postErrorEvent(int err); // Warning!..newer call __tr() here!...use __tr_no_lookup() void postMessageEvent(const char * message); diff --git a/src/modules/dcc/DccUtils.cpp b/src/modules/dcc/DccUtils.cpp index 6d491b8f5..878f5ebd9 100644 --- a/src/modules/dcc/DccUtils.cpp +++ b/src/modules/dcc/DccUtils.cpp @@ -102,7 +102,7 @@ bool dcc_module_get_listen_ip_address(KviCommand *c,KviConsoleWindow * pConsole, } */ -bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsoleWindow * pConsole,QString &szListenIp) +bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall * c, KviConsoleWindow * pConsole, QString & szListenIp) { // // Find an interface suitable for listening.... @@ -116,16 +116,19 @@ bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsoleWindow * { if(KviNetUtils::isValidStringIp(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data())) { - if(KviQString::equalCI(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface),"0.0.0.0")) + if(KviQString::equalCI(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface), "0.0.0.0")) { // Try to find the first available IPv4 interface if(!kvi_getLocalHostAddress(szListenIp)) { - if(c)c->warning(__tr2qs_ctx("Can't retrieve a suitable local IPv4 address","dcc"), - KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data()); + if(c) + c->warning(__tr2qs_ctx("Can't retrieve a suitable local IPv4 address", "dcc"), + KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data()); return false; } - } else { + } + else + { szListenIp = KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface); } return true; @@ -134,20 +137,25 @@ bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsoleWindow * if(KviNetUtils::isValidStringIPv6(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data())) { szListenIp = KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface); - } else { + } + else + { #endif - if(!KviNetUtils::getInterfaceAddress(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface),szListenIp)) + if(!KviNetUtils::getInterfaceAddress(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface), szListenIp)) { KVI_OPTION_BOOL(KviOption_boolDccListenOnSpecifiedInterfaceByDefault) = false; - if(c)c->warning(__tr2qs_ctx("Can't listen on default interface '%s': fix it in the options dialog, disabling the option (so the next DCC will work)","dcc"), - KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data()); + if(c) + c->warning(__tr2qs_ctx("Can't listen on default interface '%s': fix it in the options dialog, disabling the option (so the next DCC will work)", "dcc"), + KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data()); return false; } #ifdef COMPILE_IPV6_SUPPORT } #endif return true; - } else { + } + else + { // the option was empty.. disable it KVI_OPTION_BOOL(KviOption_boolDccListenOnSpecifiedInterfaceByDefault) = false; } @@ -158,11 +166,15 @@ bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsoleWindow * if(pConsole->isConnected()) { //#warning "The IPV6 choice is not OK here.... and maybe allow to bind to specified ports" - pConsole->connection()->link()->socket()->getLocalHostIp(szListenIp,pConsole->isIPv6Connection()); - } else { + pConsole->connection()->link()->socket()->getLocalHostIp(szListenIp, pConsole->isIPv6Connection()); + } + else + { szListenIp = "0.0.0.0"; // huh ? :) } - } else { + } + else + { szListenIp = "0.0.0.0"; } diff --git a/src/modules/dcc/DccUtils.h b/src/modules/dcc/DccUtils.h index 150e88de6..6020557ee 100644 --- a/src/modules/dcc/DccUtils.h +++ b/src/modules/dcc/DccUtils.h @@ -30,7 +30,7 @@ #include "KviKvsModuleInterface.h" #ifndef _UTILS_CPP_ - extern bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsoleWindow * pConsole,QString &szListenIp); +extern bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall * c, KviConsoleWindow * pConsole, QString & szListenIp); #endif #endif //_UTILS_H_ diff --git a/src/modules/dcc/DccVideoWindow.cpp b/src/modules/dcc/DccVideoWindow.cpp index 546043804..3cedf19af 100644 --- a/src/modules/dcc/DccVideoWindow.cpp +++ b/src/modules/dcc/DccVideoWindow.cpp @@ -48,11 +48,11 @@ #include <QBuffer> #ifdef COMPILE_CRYPT_SUPPORT - #include "KviCryptController.h" +#include "KviCryptController.h" #endif #ifdef COMPILE_SSL_SUPPORT - #include "KviSSLMaster.h" +#include "KviSSLMaster.h" #endif #include <sys/ioctl.h> @@ -63,10 +63,10 @@ extern DccBroker * g_pDccBroker; bool kvi_dcc_video_is_valid_codec(const char * codecName) { - if(kvi_strEqualCI("sjpeg",codecName)) + if(kvi_strEqualCI("sjpeg", codecName)) return true; #ifndef COMPILE_DISABLE_OGG_THEORA - if(kvi_strEqualCI("theora",codecName)) + if(kvi_strEqualCI("theora", codecName)) return true; #endif return false; @@ -76,15 +76,14 @@ static DccVideoCodec * kvi_dcc_video_get_codec(const char * codecName) { Q_UNUSED(codecName); #ifndef COMPILE_DISABLE_OGG_THEORA - if(kvi_strEqualCI("theora",codecName)) + if(kvi_strEqualCI("theora", codecName)) return new DccVideoTheoraCodec(); #endif return new DccVideoSJpegCodec(); } - -DccVideoThread::DccVideoThread(KviWindow * wnd,kvi_socket_t fd,KviDccVideoThreadOptions * opt) -: DccThread(wnd,fd) +DccVideoThread::DccVideoThread(KviWindow * wnd, kvi_socket_t fd, KviDccVideoThreadOptions * opt) + : DccThread(wnd, fd) { m_pOpt = opt; m_bPlaying = false; @@ -104,25 +103,28 @@ DccVideoThread::~DccVideoThread() bool DccVideoThread::readWriteStep() { -// qDebug("DccVideoThread::readWriteStep()"); + // qDebug("DccVideoThread::readWriteStep()"); // Socket management bool bCanRead; bool bCanWrite; - if(kvi_select(m_fd,&bCanRead,&bCanWrite)) + if(kvi_select(m_fd, &bCanRead, &bCanWrite)) { while(bCanRead) { unsigned int actualSize = m_inFrameBuffer.size(); m_inFrameBuffer.resize(actualSize + 16384); - int readLen = kvi_socket_recv(m_fd,(void *)(m_inFrameBuffer.data() + actualSize),16384); + int readLen = kvi_socket_recv(m_fd, (void *)(m_inFrameBuffer.data() + actualSize), 16384); if(readLen > 0) { - if(readLen < 16384)m_inFrameBuffer.resize(actualSize + readLen); - m_pOpt->pCodec->decode(&m_inFrameBuffer,&m_videoInSignalBuffer,&m_textInSignalBuffer); - } else { - bCanRead=false; -// if(!handleInvalidSocketRead(readLen))return false; + if(readLen < 16384) + m_inFrameBuffer.resize(actualSize + readLen); + m_pOpt->pCodec->decode(&m_inFrameBuffer, &m_videoInSignalBuffer, &m_textInSignalBuffer); + } + else + { + bCanRead = false; + // if(!handleInvalidSocketRead(readLen))return false; m_inFrameBuffer.resize(actualSize); } } @@ -132,12 +134,15 @@ bool DccVideoThread::readWriteStep() // Have somethihg to write ? if(m_outFrameBuffer.size() > 0) { - int written = kvi_socket_send(m_fd,m_outFrameBuffer.data(),m_outFrameBuffer.size()); + int written = kvi_socket_send(m_fd, m_outFrameBuffer.data(), m_outFrameBuffer.size()); if(written > 0) { m_outFrameBuffer.remove(written); - } else { - if(!handleInvalidSocketRead(written))return false; + } + else + { + if(!handleInvalidSocketRead(written)) + return false; } } } @@ -147,7 +152,7 @@ bool DccVideoThread::readWriteStep() bool DccVideoThread::videoStep() { -// qDebug("DccVideoThread::videoStep()"); + // qDebug("DccVideoThread::videoStep()"); // Are we playing ? if(m_bPlaying) @@ -164,17 +169,17 @@ bool DccVideoThread::videoStep() // Are we recording ? if(m_bRecording) { - QImage * pImage = ((DccVideoWindow*)parent())->m_pCameraImage; + QImage * pImage = ((DccVideoWindow *)parent())->m_pCameraImage; if(pImage) { // grab the frame - m_videoOutSignalBuffer.append((const unsigned char*) pImage->bits(), pImage->byteCount()); - m_pOpt->pCodec->encodeVideo(&m_videoOutSignalBuffer,&m_outFrameBuffer); + m_videoOutSignalBuffer.append((const unsigned char *)pImage->bits(), pImage->byteCount()); + m_pOpt->pCodec->encodeVideo(&m_videoOutSignalBuffer, &m_outFrameBuffer); // tell our parent to prepare a new frame KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION); e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_GRAB_FRAME)); - postEvent(DccThread::parent(),e); + postEvent(DccThread::parent(), e); } } return true; @@ -182,7 +187,7 @@ bool DccVideoThread::videoStep() bool DccVideoThread::textStep() { -// qDebug("DccVideoThread::textStep()"); + // qDebug("DccVideoThread::textStep()"); // Are we playing ? if(m_bPlaying) { @@ -190,9 +195,9 @@ bool DccVideoThread::textStep() { KviDccThreadIncomingData data; data.iLen = m_textInSignalBuffer.size(); - data.buffer = (char*) KviMemory::allocate(data.iLen); + data.buffer = (char *)KviMemory::allocate(data.iLen); memcpy(data.buffer, m_textInSignalBuffer.data(), data.iLen); - handleIncomingData(&data,false); + handleIncomingData(&data, false); m_textInSignalBuffer.clear(); } @@ -201,20 +206,20 @@ bool DccVideoThread::textStep() // Are we recording ? if(m_bRecording) { - if(((DccVideoWindow*)parent())->m_tmpTextDataOut.size()) + if(((DccVideoWindow *)parent())->m_tmpTextDataOut.size()) { - m_textOutSignalBuffer.append((const unsigned char*) ((DccVideoWindow*)parent())->m_tmpTextDataOut.constData(), ((DccVideoWindow*)parent())->m_tmpTextDataOut.size()); - ((DccVideoWindow*)parent())->m_tmpTextDataOut.clear(); + m_textOutSignalBuffer.append((const unsigned char *)((DccVideoWindow *)parent())->m_tmpTextDataOut.constData(), ((DccVideoWindow *)parent())->m_tmpTextDataOut.size()); + ((DccVideoWindow *)parent())->m_tmpTextDataOut.clear(); } if(m_textOutSignalBuffer.size()) - m_pOpt->pCodec->encodeText(&m_textOutSignalBuffer,&m_outFrameBuffer); + m_pOpt->pCodec->encodeText(&m_textOutSignalBuffer, &m_outFrameBuffer); } return true; } -bool DccVideoThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCritical) +bool DccVideoThread::handleIncomingData(KviDccThreadIncomingData * data, bool bCritical) { //qDebug("DccVideoThread::handleIncomingData"); KVI_ASSERT(data->iLen); @@ -228,34 +233,39 @@ bool DccVideoThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCr KviThreadDataEvent<KviCString> * e = new KviThreadDataEvent<KviCString>(KVI_DCC_THREAD_EVENT_DATA); // The left part is len chars long int len = aux - data->buffer; -// qDebug("LEN = %d, iLen = %d",len,data->iLen); -//#warning "DO IT BETTER (the \r cutting)" - KviCString * s = new KviCString(data->buffer,len); - if(s->lastCharIs('\r'))s->cutRight(1); + // qDebug("LEN = %d, iLen = %d",len,data->iLen); + //#warning "DO IT BETTER (the \r cutting)" + KviCString * s = new KviCString(data->buffer, len); + if(s->lastCharIs('\r')) + s->cutRight(1); e->setData(s); // but we cut also \n (or \0) ++aux; // so len += 1; --> new data->iLen -= len; data->iLen -= (len + 1); -// qDebug("iLen now = %d",data->iLen); + // qDebug("iLen now = %d",data->iLen); KVI_ASSERT(data->iLen >= 0); if(data->iLen > 0) { // memmove the remaining part to the beginning // aux points after \n or \0 - KviMemory::move(data->buffer,aux,data->iLen); - data->buffer = (char *)KviMemory::reallocate(data->buffer,data->iLen); + KviMemory::move(data->buffer, aux, data->iLen); + data->buffer = (char *)KviMemory::reallocate(data->buffer, data->iLen); end = data->buffer + data->iLen; aux = data->buffer; - } else { + } + else + { // no more data in the buffer KVI_ASSERT(data->iLen == 0); KviMemory::free(data->buffer); data->buffer = end = aux = 0; } - postEvent(parent(),e); - } else aux++; -// qDebug("PASSING CHAR %c",*aux); + postEvent(parent(), e); + } + else + aux++; + // qDebug("PASSING CHAR %c",*aux); } // now aux == end if(bCritical) @@ -265,13 +275,14 @@ bool DccVideoThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCr { // in the last part there are no NULL and \n chars KviThreadDataEvent<KviCString> * e = new KviThreadDataEvent<KviCString>(KVI_DCC_THREAD_EVENT_DATA); - KviCString * s = new KviCString(data->buffer,data->iLen); - if(s->lastCharIs('\r'))s->cutRight(1); + KviCString * s = new KviCString(data->buffer, data->iLen); + if(s->lastCharIs('\r')) + s->cutRight(1); e->setData(s); data->iLen = 0; KviMemory::free(data->buffer); data->buffer = 0; - postEvent(parent(),e); + postEvent(parent(), e); } } return true; @@ -279,7 +290,7 @@ bool DccVideoThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCr void DccVideoThread::restartRecording(int iDevice, int iInput, int) { - m_bRecording=false; + m_bRecording = false; /* if(!g_pVideoDevicePool) g_pVideoDevicePool = Kopete::AV::VideoDevicePool::self(); @@ -291,21 +302,22 @@ void DccVideoThread::restartRecording(int iDevice, int iInput, int) g_pVideoDevicePool->selectInput(iInput); g_pVideoDevicePool->startCapturing(); */ - m_bRecording=true; + m_bRecording = true; } void DccVideoThread::startRecording() { //qDebug("Start recording"); - if(m_bRecording)return; // already started + if(m_bRecording) + return; // already started //ensure capturing -// g_pVideoDevicePool->startCapturing(); + // g_pVideoDevicePool->startCapturing(); //qDebug("Posting event"); KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION); e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_START_RECORDING)); - postEvent(DccThread::parent(),e); + postEvent(DccThread::parent(), e); m_bRecording = true; } @@ -313,11 +325,12 @@ void DccVideoThread::startRecording() void DccVideoThread::stopRecording() { //qDebug("Stop recording"); - if(!m_bRecording)return; // already stopped + if(!m_bRecording) + return; // already stopped KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION); e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_STOP_RECORDING)); - postEvent(DccThread::parent(),e); + postEvent(DccThread::parent(), e); m_bRecording = false; } @@ -325,22 +338,24 @@ void DccVideoThread::stopRecording() void DccVideoThread::startPlaying() { //qDebug("Start playing"); - if(m_bPlaying)return; + if(m_bPlaying) + return; KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION); e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_START_PLAYING)); - postEvent(DccThread::parent(),e); + postEvent(DccThread::parent(), e); m_bPlaying = true; } void DccVideoThread::stopPlaying() { //qDebug("Stop playing"); - if(!m_bPlaying)return; + if(!m_bPlaying) + return; KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION); e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_STOP_PLAYING)); - postEvent(DccThread::parent(),e); + postEvent(DccThread::parent(), e); m_bPlaying = false; } @@ -356,36 +371,43 @@ void DccVideoThread::run() { delete e; goto exit_dcc; - } else if(e->id() == KVI_DCC_THREAD_EVENT_ACTION) + } + else if(e->id() == KVI_DCC_THREAD_EVENT_ACTION) { int * act = ((KviThreadDataEvent<int> *)e)->getData(); - if(*act)startRecording(); - else stopRecording(); + if(*act) + startRecording(); + else + stopRecording(); delete act; delete e; - } else { + } + else + { // Other events are senseless to us delete e; } } - if(!readWriteStep())goto exit_dcc; - if(!videoStep())goto exit_dcc; - if(!textStep())goto exit_dcc; + if(!readWriteStep()) + goto exit_dcc; + if(!videoStep()) + goto exit_dcc; + if(!textStep()) + goto exit_dcc; - usleep(FRAME_DURATION*1000); + usleep(FRAME_DURATION * 1000); //qDebug("in %d out %d in_sig %d out_sig %d", m_inFrameBuffer.size(), m_outFrameBuffer.size(), m_videoInSignalBuffer.size(), m_videoOutSignalBuffer.size()); } - exit_dcc: kvi_socket_close(m_fd); m_fd = KVI_INVALID_SOCKET; } -DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name) -: DccWindow(KviWindow::DccVideo,name,dcc) +DccVideoWindow::DccVideoWindow(DccDescriptor * dcc, const char * name) + : DccWindow(KviWindow::DccVideo, name, dcc) { m_pDescriptor = dcc; m_pSlaveThread = 0; @@ -395,7 +417,7 @@ DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name) m_pLabel = new KviThemedLabel(m_pButtonBox, this, "dcc_video_label"); m_pLabel->setText(name); - m_pButtonBox->setStretchFactor(m_pLabel,1); + m_pButtonBox->setStretchFactor(m_pLabel, 1); createTextEncodingButton(m_pButtonBox); @@ -404,7 +426,7 @@ DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name) #endif // Central splitter - m_pSplitter = new KviTalSplitter(Qt::Horizontal,this); + m_pSplitter = new KviTalSplitter(Qt::Horizontal, this); m_pSplitter->setObjectName("dcc_video_splitter"); m_pSplitter->setChildrenCollapsible(false); @@ -412,9 +434,9 @@ DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name) m_pLayout = new QGridLayout(m_pContainerWidget); m_pContainerWidget->setLayout(m_pLayout); - m_pIrcView = new KviIrcView(this,this); - connect(m_pIrcView,SIGNAL(rightClicked()),this,SLOT(textViewRightClicked())); - m_pInput = new KviInput(this); + m_pIrcView = new KviIrcView(this, this); + connect(m_pIrcView, SIGNAL(rightClicked()), this, SLOT(textViewRightClicked())); + m_pInput = new KviInput(this); //remote video m_pInVideoLabel = new QLabel(); @@ -427,7 +449,7 @@ DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name) //local video QByteArray cameraDevice; - if (cameraDevice.isEmpty()) + if(cameraDevice.isEmpty()) m_pCamera = new QCamera; else m_pCamera = new QCamera(cameraDevice); @@ -445,39 +467,40 @@ DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name) //local video input: config m_pVideoLabel[0] = new QLabel(); - m_pVideoLabel[0]->setText(__tr2qs_ctx("Video device:","dcc")); + m_pVideoLabel[0]->setText(__tr2qs_ctx("Video device:", "dcc")); m_pLayout->addWidget(m_pVideoLabel[0], 1, 2, 1, 1); m_pCDevices = new QComboBox(); m_pLayout->addWidget(m_pCDevices, 2, 2, 1, 1); m_pVideoLabel[1] = new QLabel(); - m_pVideoLabel[1]->setText(__tr2qs_ctx("Input:","dcc")); + m_pVideoLabel[1]->setText(__tr2qs_ctx("Input:", "dcc")); m_pLayout->addWidget(m_pVideoLabel[1], 3, 2, 1, 1); m_pCInputs = new QComboBox(); m_pLayout->addWidget(m_pCInputs, 4, 2, 1, 1); m_pVideoLabel[2] = new QLabel(); - m_pVideoLabel[2]->setText(__tr2qs_ctx("Standard:","dcc")); + m_pVideoLabel[2]->setText(__tr2qs_ctx("Standard:", "dcc")); m_pLayout->addWidget(m_pVideoLabel[2], 5, 2, 1, 1); m_pCStandards = new QComboBox(); m_pLayout->addWidget(m_pCStandards, 6, 2, 1, 1); m_pLayout->addWidget(m_pIrcView, 7, 0, 1, 3); - m_pLayout->setRowStretch(7,1); + m_pLayout->setRowStretch(7, 1); - if(KVI_OPTION_BOOL(KviOption_boolAutoLogDccChat))m_pIrcView->startLogging(); + if(KVI_OPTION_BOOL(KviOption_boolAutoLogDccChat)) + m_pIrcView->startLogging(); - connect(&m_Timer, SIGNAL(timeout()), this, SLOT(slotUpdateImage()) ); + connect(&m_Timer, SIGNAL(timeout()), this, SLOT(slotUpdateImage())); m_Timer.start(FRAME_DURATION); m_pMarshal = new DccMarshal(this); - connect(m_pMarshal,SIGNAL(error(KviError::Code)),this,SLOT(handleMarshalError(KviError::Code))); - connect(m_pMarshal,SIGNAL(connected()),this,SLOT(connected())); - connect(m_pMarshal,SIGNAL(inProgress()),this,SLOT(connectionInProgress())); + connect(m_pMarshal, SIGNAL(error(KviError::Code)), this, SLOT(handleMarshalError(KviError::Code))); + connect(m_pMarshal, SIGNAL(connected()), this, SLOT(connected())); + connect(m_pMarshal, SIGNAL(inProgress()), this, SLOT(connectionInProgress())); connect(m_pCDevices, SIGNAL(currentIndexChanged(int)), this, SLOT(videoInputChanged(int))); connect(m_pCInputs, SIGNAL(currentIndexChanged(int)), this, SLOT(videoInputChanged(int))); @@ -492,37 +515,37 @@ DccVideoWindow::~DccVideoWindow() if(m_pInVideoLabel) { delete m_pInVideoLabel; - m_pInVideoLabel=0; + m_pInVideoLabel = 0; } if(m_pCameraView) { delete m_pCameraView; - m_pCameraView=0; + m_pCameraView = 0; } if(m_pCameraImage) { delete m_pCameraImage; - m_pCameraImage=0; + m_pCameraImage = 0; } if(m_pCamera) { delete m_pCamera; - m_pCamera=0; + m_pCamera = 0; } if(m_pCDevices) { delete m_pCDevices; - m_pCDevices=0; + m_pCDevices = 0; } if(m_pCInputs) { delete m_pCInputs; - m_pCInputs=0; + m_pCInputs = 0; } if(m_pCStandards) { delete m_pCStandards; - m_pCStandards=0; + m_pCStandards = 0; } if(m_pVideoLabel[0]) { @@ -536,7 +559,7 @@ DccVideoWindow::~DccVideoWindow() if(m_pLayout) { delete m_pLayout; - m_pLayout=0; + m_pLayout = 0; } g_pDccBroker->unregisterDccWindow(this); @@ -561,31 +584,31 @@ void DccVideoWindow::resizeEvent(QResizeEvent *) { int iHeight = m_pInput->heightHint(); int iHeight2 = m_pButtonBox->sizeHint().height(); - m_pButtonBox->setGeometry(0,0,width(),iHeight2); - m_pSplitter->setGeometry(0,iHeight2,width(),height() - (iHeight + iHeight2)); - m_pInput->setGeometry(0,height() - iHeight, width(),iHeight); + m_pButtonBox->setGeometry(0, 0, width(), iHeight2); + m_pSplitter->setGeometry(0, iHeight2, width(), height() - (iHeight + iHeight2)); + m_pInput->setGeometry(0, height() - iHeight, width(), iHeight); } QSize DccVideoWindow::sizeHint() const { QSize ret(m_pSplitter->sizeHint().width(), - m_pContainerWidget->sizeHint().height() + m_pButtonBox->sizeHint().height()); + m_pContainerWidget->sizeHint().height() + m_pButtonBox->sizeHint().height()); return ret; } void DccVideoWindow::textViewRightClicked() { - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatPopupRequest,this,m_pDescriptor->idString()); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatPopupRequest, this, m_pDescriptor->idString()); } void DccVideoWindow::triggerCreationEvents() { - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowCreated,this,m_pDescriptor->idString()); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowCreated, this, m_pDescriptor->idString()); } void DccVideoWindow::triggerDestructionEvents() { - KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowClosing,this,m_pDescriptor->idString()); + KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowClosing, this, m_pDescriptor->idString()); } void DccVideoWindow::startConnection() @@ -593,14 +616,16 @@ void DccVideoWindow::startConnection() if(!(m_pDescriptor->bActive)) { // PASSIVE CONNECTION - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting a passive DCC VIDEO connection","dcc")); - KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp,m_pDescriptor->szListenPort,m_pDescriptor->bDoTimeout); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting a passive DCC VIDEO connection", "dcc")); + KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp, m_pDescriptor->szListenPort, m_pDescriptor->bDoTimeout); if(eError != KviError::Success) handleMarshalError(eError); - } else { + } + else + { // ACTIVE CONNECTION - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting an active DCC VIDEO connection","dcc")); - KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(),m_pDescriptor->bDoTimeout); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting an active DCC VIDEO connection", "dcc")); + KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(), m_pDescriptor->bDoTimeout); if(eError != KviError::Success) handleMarshalError(eError); } @@ -610,29 +635,34 @@ void DccVideoWindow::connectionInProgress() { if(m_pDescriptor->bActive) { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Contacting host %Q on port %Q","dcc"),&(m_pDescriptor->szIp),&(m_pDescriptor->szPort)); - } else { + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Contacting host %Q on port %Q", "dcc"), &(m_pDescriptor->szIp), &(m_pDescriptor->szPort)); + } + else + { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Listening on interface %Q port %Q","dcc"), - &(m_pMarshal->localIp()),&(m_pMarshal->localPort())); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Listening on interface %Q port %Q", "dcc"), + &(m_pMarshal->localIp()), &(m_pMarshal->localPort())); if(m_pDescriptor->bSendRequest) { - QString ip = !m_pDescriptor->szFakeIp.isEmpty() ? m_pDescriptor->szFakeIp : m_pDescriptor->szListenIp; - KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort(); -//#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned nuumber)" + QString ip = !m_pDescriptor->szFakeIp.isEmpty() ? m_pDescriptor->szFakeIp : m_pDescriptor->szListenIp; + KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort(); + //#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned nuumber)" struct in_addr a; - if(KviNetUtils::stringIpToBinaryIp(ip,&a)) { + if(KviNetUtils::stringIpToBinaryIp(ip, &a)) + { ip.setNum(htonl(a.s_addr)); } m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC VIDEO %s %Q %s %d%c", - m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), - 0x01,m_pDescriptor->szCodec.ptr(), - &ip,port.ptr(),m_pDescriptor->iSampleRate,0x01); - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Sent DCC VIDEO (%s) request to %Q, waiting for the remote client to connect...","dcc"), - m_pDescriptor->szCodec.ptr(),&(m_pDescriptor->szNick)); - } else output(KVI_OUT_DCCMSG,__tr2qs_ctx("DCC VIDEO request not sent: awaiting manual connection","dcc")); + m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), + 0x01, m_pDescriptor->szCodec.ptr(), + &ip, port.ptr(), m_pDescriptor->iSampleRate, 0x01); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Sent DCC VIDEO (%s) request to %Q, waiting for the remote client to connect...", "dcc"), + m_pDescriptor->szCodec.ptr(), &(m_pDescriptor->szNick)); + } + else + output(KVI_OUT_DCCMSG, __tr2qs_ctx("DCC VIDEO request not sent: awaiting manual connection", "dcc")); } } @@ -642,20 +672,20 @@ const QString & DccVideoWindow::target() if(!m_pszTarget) m_pszTarget = new QString(); - m_pszTarget->sprintf("%s@%s:%s",m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data()); + m_pszTarget->sprintf("%s@%s:%s", m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data()); return *m_pszTarget; } -void DccVideoWindow::getBaseLogFileName(QString &buffer) +void DccVideoWindow::getBaseLogFileName(QString & buffer) { - buffer.sprintf("dccvideo_%s_%s_%s",m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szLocalFileName.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data()); + buffer.sprintf("dccvideo_%s_%s_%s", m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szLocalFileName.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data()); } void DccVideoWindow::fillCaptionBuffers() { - KviCString tmp(KviCString::Format,"DCC Video %s@%s:%s %s", - m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(), - m_pDescriptor->szLocalFileName.toUtf8().data()); + KviCString tmp(KviCString::Format, "DCC Video %s@%s:%s %s", + m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(), + m_pDescriptor->szLocalFileName.toUtf8().data()); m_szPlainTextCaption = tmp; } @@ -665,17 +695,18 @@ QPixmap * DccVideoWindow::myIconPtr() return g_pIconManager->getSmallIcon(KviIconManager::DccVoice); } -void DccVideoWindow::ownMessage(const QString &text, bool bUserFeedback) +void DccVideoWindow::ownMessage(const QString & text, bool bUserFeedback) { if(!m_pSlaveThread) { - output(KVI_OUT_SYSTEMWARNING,__tr2qs_ctx("Can't send data: no active connection","dcc")); + output(KVI_OUT_SYSTEMWARNING, __tr2qs_ctx("Can't send data: no active connection", "dcc")); return; } QByteArray szData = encodeText(text); const char * d = szData.data(); - if(!d)return; + if(!d) + return; #ifdef COMPILE_CRYPT_SUPPORT if(cryptSessionInfo()) @@ -686,28 +717,28 @@ void DccVideoWindow::ownMessage(const QString &text, bool bUserFeedback) { KviCString encrypted; cryptSessionInfo()->m_pEngine->setMaxEncryptLen(-1); - switch(cryptSessionInfo()->m_pEngine->encrypt(d,encrypted)) + switch(cryptSessionInfo()->m_pEngine->encrypt(d, encrypted)) { case KviCryptEngine::Encrypted: { - KviCString buf(KviCString::Format,"%s\r\n",encrypted.ptr()); + KviCString buf(KviCString::Format, "%s\r\n", encrypted.ptr()); m_tmpTextDataOut.append(buf.ptr(), buf.len()); if(bUserFeedback) - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSGCRYPTED, - m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(), - m_pDescriptor->szLocalHost.toUtf8().data(),text,KviConsoleWindow::NoNotifications); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSGCRYPTED, + m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), + m_pDescriptor->szLocalHost.toUtf8().data(), text, KviConsoleWindow::NoNotifications); } break; case KviCryptEngine::Encoded: { - KviCString buf(KviCString::Format,"%s\r\n",encrypted.ptr()); + KviCString buf(KviCString::Format, "%s\r\n", encrypted.ptr()); m_tmpTextDataOut.append(buf.ptr(), buf.len()); if(bUserFeedback) { QString encr = decodeText(encrypted.ptr()); - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG, - m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(), - m_pDescriptor->szLocalHost.toUtf8().data(),encr,KviConsoleWindow::NoNotifications); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, + m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), + m_pDescriptor->szLocalHost.toUtf8().data(), encr, KviConsoleWindow::NoNotifications); } } break; @@ -715,34 +746,36 @@ void DccVideoWindow::ownMessage(const QString &text, bool bUserFeedback) { QString szErr = cryptSessionInfo()->m_pEngine->lastError(); output(KVI_OUT_SYSTEMERROR, - __tr2qs_ctx("The encryption engine was not able to encrypt the current message (%Q): %Q, no data was sent to the remote end","dcc"), - &text,&szErr); + __tr2qs_ctx("The encryption engine was not able to encrypt the current message (%Q): %Q, no data was sent to the remote end", "dcc"), + &text, &szErr); } break; } return; - } else { + } + else + { d++; //eat the escape code - KviCString buf(KviCString::Format,"%s\r\n",d); + KviCString buf(KviCString::Format, "%s\r\n", d); QString tmp = text.right(text.length() - 1); m_tmpTextDataOut.append(buf.ptr(), buf.len()); if(bUserFeedback) - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG, - m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(), - m_pDescriptor->szLocalHost.toUtf8().data(),tmp,KviConsoleWindow::NoNotifications); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, + m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), + m_pDescriptor->szLocalHost.toUtf8().data(), tmp, KviConsoleWindow::NoNotifications); return; } } } #endif - KviCString buf(KviCString::Format,"%s\r\n",d); + KviCString buf(KviCString::Format, "%s\r\n", d); m_tmpTextDataOut.append(buf.ptr(), buf.len()); if(bUserFeedback) - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG, - m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(), - m_pDescriptor->szLocalHost.toUtf8().data(),text,KviConsoleWindow::NoNotifications); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, + m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(), + m_pDescriptor->szLocalHost.toUtf8().data(), text, KviConsoleWindow::NoNotifications); } const QString & DccVideoWindow::localNick() @@ -752,7 +785,7 @@ const QString & DccVideoWindow::localNick() return m_szLocalNick; } -void DccVideoWindow::ownAction(const QString &text) +void DccVideoWindow::ownAction(const QString & text) { if(m_pSlaveThread) { @@ -761,22 +794,27 @@ void DccVideoWindow::ownAction(const QString &text) if(KVI_OPTION_BOOL(KviOption_boolStripMircColorsInUserMessages)) { szTmpBuffer = KviControlCodes::stripControlBytes(text); - } else { + } + else + { szTmpBuffer = text; } QByteArray szData = encodeText(szTmpBuffer); const char * d = szData.data(); - if(!d)return; - KviCString buf(KviCString::Format,"%cACTION %s%c\r\n",0x01,d,0x01); + if(!d) + return; + KviCString buf(KviCString::Format, "%cACTION %s%c\r\n", 0x01, d, 0x01); m_tmpTextDataOut.append(buf.ptr(), buf.len()); - output(KVI_OUT_ACTION,"%Q %Q",&(m_pDescriptor->szLocalNick),&szTmpBuffer); - } else { - output(KVI_OUT_SYSTEMWARNING,__tr2qs_ctx("Can't send data: no active connection","dcc")); + output(KVI_OUT_ACTION, "%Q %Q", &(m_pDescriptor->szLocalNick), &szTmpBuffer); + } + else + { + output(KVI_OUT_SYSTEMWARNING, __tr2qs_ctx("Can't send data: no active connection", "dcc")); } } -bool DccVideoWindow::event(QEvent *e) +bool DccVideoWindow::event(QEvent * e) { if(e->type() == KVI_THREAD_EVENT) { @@ -786,7 +824,7 @@ bool DccVideoWindow::event(QEvent *e) { KviError::Code * pError = ((KviThreadDataEvent<KviError::Code> *)e)->getData(); QString ssss = KviError::getDescription(*pError); - output(KVI_OUT_DCCERROR,__tr2qs_ctx("ERROR: %Q","dcc"),&(ssss)); + output(KVI_OUT_DCCERROR, __tr2qs_ctx("ERROR: %Q", "dcc"), &(ssss)); delete pError; return true; } @@ -794,16 +832,16 @@ bool DccVideoWindow::event(QEvent *e) case KVI_DCC_THREAD_EVENT_DATA: { KviCString * encoded = ((KviThreadDataEvent<KviCString> *)e)->getData(); - KviCString d=KviCString(decodeText(encoded->ptr())); + KviCString d = KviCString(decodeText(encoded->ptr())); if(d.firstCharIs(0x01)) { d.cutLeft(1); if(d.lastCharIs(0x01)) d.cutRight(1); - if(kvi_strEqualCIN("ACTION",d.ptr(),6)) + if(kvi_strEqualCIN("ACTION", d.ptr(), 6)) d.cutLeft(6); d.stripLeftWhiteSpace(); - output(KVI_OUT_ACTION,"%Q %s",&(m_pDescriptor->szNick),d.ptr()); + output(KVI_OUT_ACTION, "%Q %s", &(m_pDescriptor->szNick), d.ptr()); if(!hasAttention(KviWindow::MainWindowIsVisible)) { if(KVI_OPTION_BOOL(KviOption_boolFlashDccChatWindowOnNewMessages)) @@ -817,10 +855,12 @@ bool DccVideoWindow::event(QEvent *e) szMsg += "</b> "; szMsg += KviQString::toHtmlEscaped(QString(d.ptr())); //qDebug("KviIrcServerParser_ctcp.cpp:975 debug: %s",szMsg.data()); - g_pApp->notifierMessage(this,KVI_OPTION_MSGTYPE(KVI_OUT_ACTION).pixId(),szMsg,KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime)); + g_pApp->notifierMessage(this, KVI_OPTION_MSGTYPE(KVI_OUT_ACTION).pixId(), szMsg, KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime)); } } - } else { + } + else + { #ifdef COMPILE_CRYPT_SUPPORT if(KviCryptSessionInfo * cinf = cryptSessionInfo()) @@ -828,39 +868,41 @@ bool DccVideoWindow::event(QEvent *e) if(cinf->m_bDoDecrypt) { KviCString decryptedStuff; - switch(cinf->m_pEngine->decrypt(d.ptr(),decryptedStuff)) + switch(cinf->m_pEngine->decrypt(d.ptr(), decryptedStuff)) { case KviCryptEngine::DecryptOkWasEncrypted: case KviCryptEngine::DecryptOkWasEncoded: case KviCryptEngine::DecryptOkWasPlainText: - if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage,this,QString(decryptedStuff.ptr()),m_pDescriptor->idString())) + if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage, this, QString(decryptedStuff.ptr()), m_pDescriptor->idString())) { - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG, - m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szUser.toUtf8().data(), - m_pDescriptor->szHost.toUtf8().data(),decryptedStuff.ptr()); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_DCCCHATMSG, + m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szUser.toUtf8().data(), + m_pDescriptor->szHost.toUtf8().data(), decryptedStuff.ptr()); } delete encoded; return true; - break; + break; default: // also case KviCryptEngine::DecryptError { QString szErr = cinf->m_pEngine->lastError(); output(KVI_OUT_SYSTEMERROR, - __tr2qs_ctx("The following message appears to be encrypted, but the encryption engine failed to decode it: %Q","dcc"), - &szErr); + __tr2qs_ctx("The following message appears to be encrypted, but the encryption engine failed to decode it: %Q", "dcc"), + &szErr); } break; } } - } else { + } + else + { #endif // FIXME! - if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage,this,QString(d.ptr()),m_pDescriptor->idString())) + if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage, this, QString(d.ptr()), m_pDescriptor->idString())) { - g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG, - m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szUser.toUtf8().data(), - m_pDescriptor->szHost.toUtf8().data(),d.ptr()); + g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_DCCCHATMSG, + m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szUser.toUtf8().data(), + m_pDescriptor->szHost.toUtf8().data(), d.ptr()); if(!hasAttention(KviWindow::MainWindowIsVisible)) { if(KVI_OPTION_BOOL(KviOption_boolFlashDccChatWindowOnNewMessages)) @@ -870,7 +912,7 @@ bool DccVideoWindow::event(QEvent *e) if(KVI_OPTION_BOOL(KviOption_boolPopupNotifierOnNewDccChatMessages)) { QString szMsg = KviQString::toHtmlEscaped(QString(d.ptr())); - g_pApp->notifierMessage(this,KviIconManager::DccChatMsg,szMsg,KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime)); + g_pApp->notifierMessage(this, KviIconManager::DccChatMsg, szMsg, KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime)); } } } @@ -885,7 +927,7 @@ bool DccVideoWindow::event(QEvent *e) case KVI_DCC_THREAD_EVENT_MESSAGE: { KviCString * str = ((KviThreadDataEvent<KviCString> *)e)->getData(); - outputNoFmt(KVI_OUT_DCCMSG,__tr_no_xgettext_ctx(str->ptr(),"dcc")); + outputNoFmt(KVI_OUT_DCCMSG, __tr_no_xgettext_ctx(str->ptr(), "dcc")); delete str; return true; } @@ -896,31 +938,29 @@ bool DccVideoWindow::event(QEvent *e) switch(*act) { case KVI_DCC_VIDEO_THREAD_ACTION_START_RECORDING: -// m_pRecordingLabel->setEnabled(true); - break; + // m_pRecordingLabel->setEnabled(true); + break; case KVI_DCC_VIDEO_THREAD_ACTION_STOP_RECORDING: -// m_pRecordingLabel->setEnabled(false); - break; + // m_pRecordingLabel->setEnabled(false); + break; case KVI_DCC_VIDEO_THREAD_ACTION_START_PLAYING: -// m_pPlayingLabel->setEnabled(true); - break; + // m_pPlayingLabel->setEnabled(true); + break; case KVI_DCC_VIDEO_THREAD_ACTION_STOP_PLAYING: -// m_pPlayingLabel->setEnabled(false); - break; + // m_pPlayingLabel->setEnabled(false); + break; case KVI_DCC_VIDEO_THREAD_ACTION_GRAB_FRAME: - m_pCameraView->render( m_pCameraImage ); - break; - + m_pCameraView->render(m_pCameraImage); + break; } delete act; return true; } break; default: - qDebug("Invalid event type %d received",((KviThreadEvent *)e)->id()); - break; + qDebug("Invalid event type %d received", ((KviThreadEvent *)e)->id()); + break; } - } return KviWindow::event(e); @@ -929,18 +969,18 @@ bool DccVideoWindow::event(QEvent *e) void DccVideoWindow::handleMarshalError(KviError::Code eError) { QString ssss = KviError::getDescription(eError); - output(KVI_OUT_DCCERROR,__tr2qs_ctx("DCC Failed: %Q","dcc"),&ssss); + output(KVI_OUT_DCCERROR, __tr2qs_ctx("DCC Failed: %Q", "dcc"), &ssss); } void DccVideoWindow::connected() { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Connected to %Q:%Q","dcc"), - &(m_pMarshal->remoteIp()),&(m_pMarshal->remotePort())); - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Local end is %Q:%Q","dcc"), - &(m_pMarshal->localIp()),&(m_pMarshal->localPort())); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Connected to %Q:%Q", "dcc"), + &(m_pMarshal->remoteIp()), &(m_pMarshal->remotePort())); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Local end is %Q:%Q", "dcc"), + &(m_pMarshal->localIp()), &(m_pMarshal->localPort())); if(!(m_pDescriptor->bActive)) { - m_pDescriptor->szIp = m_pMarshal->remoteIp(); + m_pDescriptor->szIp = m_pMarshal->remoteIp(); m_pDescriptor->szPort = m_pMarshal->remotePort(); m_pDescriptor->szHost = m_pMarshal->remoteIp(); } @@ -950,10 +990,10 @@ void DccVideoWindow::connected() opt->pCodec = kvi_dcc_video_get_codec(m_pDescriptor->szCodec.ptr()); - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Actual codec used is '%s'","dcc"),opt->pCodec->name()); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Actual codec used is '%s'", "dcc"), opt->pCodec->name()); - m_pSlaveThread = new DccVideoThread(this,m_pMarshal->releaseSocket(),opt); -/* + m_pSlaveThread = new DccVideoThread(this, m_pMarshal->releaseSocket(), opt); + /* #ifndef COMPILE_DISABLE_DCC_VIDEO if(g_pVideoDevicePool) { @@ -985,8 +1025,10 @@ void DccVideoWindow::startTalking() void DccVideoWindow::startOrStopTalking(bool bStart) { - if(bStart)startTalking(); - else stopTalking(); + if(bStart) + startTalking(); + else + stopTalking(); } void DccVideoWindow::slotUpdateImage() @@ -997,9 +1039,9 @@ void DccVideoWindow::slotUpdateImage() } } -void DccVideoWindow::videoInputChanged(int ) +void DccVideoWindow::videoInputChanged(int) { -// FIXME this currently leads to a segfault -// if(m_pSlaveThread) -// m_pSlaveThread->restartRecording(m_pCDevices->currentIndex(), m_pCInputs->currentIndex(), m_pCStandards->currentIndex()); + // FIXME this currently leads to a segfault + // if(m_pSlaveThread) + // m_pSlaveThread->restartRecording(m_pCDevices->currentIndex(), m_pCInputs->currentIndex(), m_pCStandards->currentIndex()); } diff --git a/src/modules/dcc/DccVideoWindow.h b/src/modules/dcc/DccVideoWindow.h index 8f7e846c7..eca3ed97f 100644 --- a/src/modules/dcc/DccVideoWindow.h +++ b/src/modules/dcc/DccVideoWindow.h @@ -48,14 +48,14 @@ #include <QCameraViewfinder> #ifdef COMPILE_CRYPT_SUPPORT - class KviCryptSessionInfo; +class KviCryptSessionInfo; #endif class QSlider; class DccMarshal; #ifndef _DCC_VIDEO_CPP_ - extern bool kvi_dcc_video_is_valid_codec(const char * codecName); +extern bool kvi_dcc_video_is_valid_codec(const char * codecName); #endif #define KVI_DCC_VIDEO_THREAD_ACTION_START_RECORDING 0 @@ -66,29 +66,33 @@ class DccMarshal; typedef struct _KviDccVideoThreadOptions { - QString szVideoDevice; + QString szVideoDevice; DccVideoCodec * pCodec; } KviDccVideoThreadOptions; class DccVideoThread : public DccThread { friend class DccVideoWindow; + public: - DccVideoThread(KviWindow * wnd,kvi_socket_t fd,KviDccVideoThreadOptions * opt); + DccVideoThread(KviWindow * wnd, kvi_socket_t fd, KviDccVideoThreadOptions * opt); ~DccVideoThread(); + protected: KviDccVideoThreadOptions * m_pOpt; - KviDataBuffer m_outFrameBuffer; - KviDataBuffer m_inFrameBuffer; - KviDataBuffer m_videoInSignalBuffer; - KviDataBuffer m_textInSignalBuffer; - KviDataBuffer m_videoOutSignalBuffer; - KviDataBuffer m_textOutSignalBuffer; - bool m_bPlaying; - bool m_bRecording; + KviDataBuffer m_outFrameBuffer; + KviDataBuffer m_inFrameBuffer; + KviDataBuffer m_videoInSignalBuffer; + KviDataBuffer m_textInSignalBuffer; + KviDataBuffer m_videoOutSignalBuffer; + KviDataBuffer m_textOutSignalBuffer; + bool m_bPlaying; + bool m_bRecording; + protected: - QImage m_inImage; - QImage m_outImage; + QImage m_inImage; + QImage m_outImage; + protected: bool readWriteStep(); bool videoStep(); @@ -100,48 +104,50 @@ protected: void stopPlaying(); inline bool isPlaying() { return m_bPlaying; }; virtual void run(); - virtual bool handleIncomingData(KviDccThreadIncomingData *data,bool bCritical); + virtual bool handleIncomingData(KviDccThreadIncomingData * data, bool bCritical); }; - class DccVideoWindow : public DccWindow { Q_OBJECT friend class DccVideoThread; + public: - DccVideoWindow(DccDescriptor * dcc,const char * name); + DccVideoWindow(DccDescriptor * dcc, const char * name); ~DccVideoWindow(); + protected: - KviThemedLabel * m_pLabel; - QWidget * m_pContainerWidget; - QImage * m_pCameraImage; - QCameraViewfinder * m_pCameraView; - QCamera * m_pCamera; - QLabel * m_pInVideoLabel; - QComboBox * m_pCDevices; - QComboBox * m_pCInputs; - QComboBox * m_pCStandards; - QGridLayout * m_pLayout; - QTimer m_Timer; - QLabel * m_pVideoLabel[3]; - QString * m_pszTarget; - DccVideoThread * m_pSlaveThread; - QByteArray m_tmpTextDataOut; - QString m_szLocalNick; + KviThemedLabel * m_pLabel; + QWidget * m_pContainerWidget; + QImage * m_pCameraImage; + QCameraViewfinder * m_pCameraView; + QCamera * m_pCamera; + QLabel * m_pInVideoLabel; + QComboBox * m_pCDevices; + QComboBox * m_pCInputs; + QComboBox * m_pCStandards; + QGridLayout * m_pLayout; + QTimer m_Timer; + QLabel * m_pVideoLabel[3]; + QString * m_pszTarget; + DccVideoThread * m_pSlaveThread; + QByteArray m_tmpTextDataOut; + QString m_szLocalNick; + protected: virtual void triggerCreationEvents(); virtual void triggerDestructionEvents(); virtual const QString & target(); virtual void fillCaptionBuffers(); virtual QPixmap * myIconPtr(); - virtual bool event(QEvent *e); - virtual void getBaseLogFileName(QString &buffer); + virtual bool event(QEvent * e); + virtual void getBaseLogFileName(QString & buffer); void startTalking(); void stopTalking(); void startConnection(); virtual const QString & localNick(); - virtual void ownMessage(const QString &text, bool bUserFeedback = true); - virtual void ownAction(const QString &text); + virtual void ownMessage(const QString & text, bool bUserFeedback = true); + virtual void ownAction(const QString & text); virtual void resizeEvent(QResizeEvent *); virtual QSize sizeHint() const; protected slots: @@ -151,8 +157,7 @@ protected slots: void connectionInProgress(); void slotUpdateImage(); void textViewRightClicked(); - void videoInputChanged(int ); + void videoInputChanged(int); }; - #endif //_VIDEO_H_ diff --git a/src/modules/dcc/DccVoiceAdpcmCodec.cpp b/src/modules/dcc/DccVoiceAdpcmCodec.cpp index 2ac4f4156..70f2cb227 100644 --- a/src/modules/dcc/DccVoiceAdpcmCodec.cpp +++ b/src/modules/dcc/DccVoiceAdpcmCodec.cpp @@ -56,11 +56,9 @@ #include <stdio.h> /*DBG*/ #ifndef __STDC__ - #define signed +#define signed #endif - - #define ADPCM_PACKED_FRAME_SIZE_IN_BYTES 512 #define ADPCM_UNPACKED_FRAME_SIZE_IN_BYTES 2048 #define ADPCM_UNPACKED_FRAME_SIZE_IN_SHORTS 1024 @@ -83,10 +81,10 @@ static int stepsizeTable[89] = { 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 }; -void ADPCM_compress(short indata[],char outdata[],int len,ADPCM_state *state) +void ADPCM_compress(short indata[], char outdata[], int len, ADPCM_state * state) { - short *lpIn; /* Input buffer pointer */ - signed char *lpOut; /* output buffer pointer */ + short * lpIn; /* Input buffer pointer */ + signed char * lpOut; /* output buffer pointer */ int val; /* Current input sample value */ int sign; /* Current adpcm sign bit */ int delta; /* Current adpcm output value */ @@ -96,10 +94,10 @@ void ADPCM_compress(short indata[],char outdata[],int len,ADPCM_state *state) int vpdiff; /* Current change to valpred */ int index; /* Current step change index */ int outputbuffer = 0; /* place to keep previous 4-bit value */ - int bufferstep; /* toggle between outputbuffer/output */ + int bufferstep; /* toggle between outputbuffer/output */ lpOut = (signed char *)outdata; - lpIn = indata; + lpIn = indata; valpred = state->valprev; index = state->index; @@ -107,12 +105,14 @@ void ADPCM_compress(short indata[],char outdata[],int len,ADPCM_state *state) bufferstep = 1; - for ( ;len > 0;len-- ) { + for(; len > 0; len--) + { val = *lpIn++; // Step 1 - compute difference with previous value diff = val - valpred; sign = (diff < 0) ? 8 : 0; - if(sign)diff=(-diff); + if(sign) + diff = (-diff); // Step 2 - Divide and clamp // Note: // This code *approximately* computes: @@ -124,57 +124,69 @@ void ADPCM_compress(short indata[],char outdata[],int len,ADPCM_state *state) // delta = 0; vpdiff = (step >> 3); - if (diff >=step){ + if(diff >= step) + { delta = 4; diff -= step; vpdiff += step; } step >>= 1; - if (diff >= step) { + if(diff >= step) + { delta |= 2; diff -= step; vpdiff += step; } step >>= 1; - if ( diff >= step ) { + if(diff >= step) + { delta |= 1; vpdiff += step; } // Step 3 - Update previous value - if(sign)valpred -= vpdiff; - else valpred += vpdiff; + if(sign) + valpred -= vpdiff; + else + valpred += vpdiff; // Step 4 - Clamp previous value to 16 bits - if ( valpred > 32767 )valpred = 32767; - else if ( valpred < -32768 )valpred = -32768; + if(valpred > 32767) + valpred = 32767; + else if(valpred < -32768) + valpred = -32768; // Step 5 - Assemble value, update index and step values delta |= sign; index += indexTable[delta]; - if ( index < 0 ) index = 0; - if ( index > 88 ) index = 88; + if(index < 0) + index = 0; + if(index > 88) + index = 88; step = stepsizeTable[index]; // Step 6 - Output value - if ( bufferstep )outputbuffer = (delta << 4) & 0xf0; - else *lpOut++ = (delta & 0x0f) | outputbuffer; + if(bufferstep) + outputbuffer = (delta << 4) & 0xf0; + else + *lpOut++ = (delta & 0x0f) | outputbuffer; bufferstep = !bufferstep; } // Output last step, if needed - if (!bufferstep)*lpOut++ = outputbuffer; + if(!bufferstep) + *lpOut++ = outputbuffer; state->valprev = valpred; state->index = index; } -void ADPCM_uncompress(char indata[],short outdata[],int len,ADPCM_state *state) +void ADPCM_uncompress(char indata[], short outdata[], int len, ADPCM_state * state) { - signed char *inp; /* Input buffer pointer */ - short *outp; /* output buffer pointer */ - int sign; /* Current adpcm sign bit */ - int delta; /* Current adpcm output value */ - int step; /* Stepsize */ - int valpred; /* Predicted value */ - int vpdiff; /* Current change to valpred */ - int index; /* Current step change index */ - int inputbuffer=0; /* place to keep next 4-bit value */ - int bufferstep; /* toggle between inputbuffer/input */ + signed char * inp; /* Input buffer pointer */ + short * outp; /* output buffer pointer */ + int sign; /* Current adpcm sign bit */ + int delta; /* Current adpcm output value */ + int step; /* Stepsize */ + int valpred; /* Predicted value */ + int vpdiff; /* Current change to valpred */ + int index; /* Current step change index */ + int inputbuffer = 0; /* place to keep next 4-bit value */ + int bufferstep; /* toggle between inputbuffer/input */ outp = outdata; inp = (signed char *)indata; @@ -185,10 +197,13 @@ void ADPCM_uncompress(char indata[],short outdata[],int len,ADPCM_state *state) bufferstep = 0; - for ( ; len > 0 ; len-- ) { + for(; len > 0; len--) + { /* Step 1 - get the delta value */ - if ( bufferstep )delta = inputbuffer & 0xf; - else { + if(bufferstep) + delta = inputbuffer & 0xf; + else + { inputbuffer = *inp++; delta = (inputbuffer >> 4) & 0xf; } @@ -196,8 +211,10 @@ void ADPCM_uncompress(char indata[],short outdata[],int len,ADPCM_state *state) /* Step 2 - Find new index value (for later) */ index += indexTable[delta]; - if ( index < 0 ) index = 0; - if ( index > 88 ) index = 88; + if(index < 0) + index = 0; + if(index > 88) + index = 88; /* Step 3 - Separate sign and magnitude */ sign = delta & 8; @@ -209,16 +226,23 @@ void ADPCM_uncompress(char indata[],short outdata[],int len,ADPCM_state *state) ** in adpcm_coder. */ vpdiff = step >> 3; - if( delta & 4 )vpdiff += step; - if( delta & 2 )vpdiff += step>>1; - if( delta & 1 )vpdiff += step>>2; + if(delta & 4) + vpdiff += step; + if(delta & 2) + vpdiff += step >> 1; + if(delta & 1) + vpdiff += step >> 2; - if(sign)valpred -= vpdiff; - else valpred += vpdiff; + if(sign) + valpred -= vpdiff; + else + valpred += vpdiff; /* Step 5 - clamp output value */ - if(valpred > 32767)valpred = 32767; - else if(valpred < -32768)valpred = -32768; + if(valpred > 32767) + valpred = 32767; + else if(valpred < -32768) + valpred = -32768; /* Step 6 - Update step value */ step = stepsizeTable[index]; @@ -231,9 +255,8 @@ void ADPCM_uncompress(char indata[],short outdata[],int len,ADPCM_state *state) state->index = index; } - DccVoiceAdpcmCodec::DccVoiceAdpcmCodec() -: DccVoiceCodec() + : DccVoiceCodec() { m_pEncodeState = new ADPCM_state; m_pEncodeState->index = 0; @@ -250,9 +273,10 @@ DccVoiceAdpcmCodec::~DccVoiceAdpcmCodec() delete m_pDecodeState; } -void DccVoiceAdpcmCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream) +void DccVoiceAdpcmCodec::encode(KviDataBuffer * signal, KviDataBuffer * stream) { - if(signal->size() < ADPCM_UNPACKED_FRAME_SIZE_IN_BYTES)return; // nothing to encode + if(signal->size() < ADPCM_UNPACKED_FRAME_SIZE_IN_BYTES) + return; // nothing to encode char * ptr = (char *)signal->data(); @@ -265,16 +289,17 @@ void DccVoiceAdpcmCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream) while(ptr != endPtr) { - ADPCM_compress((short *)ptr,(char *)(stream->data() + uFrameOffset),ADPCM_UNPACKED_FRAME_SIZE_IN_SHORTS,m_pEncodeState); + ADPCM_compress((short *)ptr, (char *)(stream->data() + uFrameOffset), ADPCM_UNPACKED_FRAME_SIZE_IN_SHORTS, m_pEncodeState); ptr += ADPCM_UNPACKED_FRAME_SIZE_IN_BYTES; uFrameOffset += ADPCM_PACKED_FRAME_SIZE_IN_BYTES; } signal->remove(uTotalDataCompressed); } -void DccVoiceAdpcmCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal) +void DccVoiceAdpcmCodec::decode(KviDataBuffer * stream, KviDataBuffer * signal) { - if(stream->size() < ADPCM_PACKED_FRAME_SIZE_IN_BYTES)return; // nothing to decode + if(stream->size() < ADPCM_PACKED_FRAME_SIZE_IN_BYTES) + return; // nothing to decode char * ptr = (char *)stream->data(); @@ -288,7 +313,7 @@ void DccVoiceAdpcmCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal) while(ptr != endPtr) { - ADPCM_uncompress((char *)ptr,(short *)(signal->data() + uSignalOffset),ADPCM_UNPACKED_FRAME_SIZE_IN_SHORTS,m_pDecodeState); + ADPCM_uncompress((char *)ptr, (short *)(signal->data() + uSignalOffset), ADPCM_UNPACKED_FRAME_SIZE_IN_SHORTS, m_pDecodeState); ptr += ADPCM_PACKED_FRAME_SIZE_IN_BYTES; uSignalOffset += ADPCM_UNPACKED_FRAME_SIZE_IN_BYTES; } diff --git a/src/modules/dcc/DccVoiceAdpcmCodec.h b/src/modules/dcc/DccVoiceAdpcmCodec.h index 4e9ece4ff..e437c18b5 100644 --- a/src/modules/dcc/DccVoiceAdpcmCodec.h +++ b/src/modules/dcc/DccVoiceAdpcmCodec.h @@ -50,24 +50,24 @@ typedef struct adpcm_state { short valprev; /* Previous output value */ - char index; /* HelpIndex into stepsize table */ + char index; /* HelpIndex into stepsize table */ } ADPCM_state; - class DccVoiceAdpcmCodec : public DccVoiceCodec { public: DccVoiceAdpcmCodec(); virtual ~DccVoiceAdpcmCodec(); + private: ADPCM_state * m_pEncodeState; ADPCM_state * m_pDecodeState; + public: - virtual void encode(KviDataBuffer * signal,KviDataBuffer * stream); - virtual void decode(KviDataBuffer * stream,KviDataBuffer * signal); + virtual void encode(KviDataBuffer * signal, KviDataBuffer * stream); + virtual void decode(KviDataBuffer * stream, KviDataBuffer * signal); virtual int encodedFrameSize(); virtual int decodedFrameSize(); }; - #endif //_ADPCMCODEC_H_ diff --git a/src/modules/dcc/DccVoiceCodec.cpp b/src/modules/dcc/DccVoiceCodec.cpp index 0784c54b3..57be1681e 100644 --- a/src/modules/dcc/DccVoiceCodec.cpp +++ b/src/modules/dcc/DccVoiceCodec.cpp @@ -24,7 +24,6 @@ #include "DccVoiceCodec.h" - #include <QImage> #include <QByteArray> #include <QBuffer> @@ -37,11 +36,11 @@ DccVoiceCodec::~DccVoiceCodec() { } -void DccVoiceCodec::encode(KviDataBuffer *,KviDataBuffer *) +void DccVoiceCodec::encode(KviDataBuffer *, KviDataBuffer *) { } -void DccVoiceCodec::decode(KviDataBuffer *,KviDataBuffer *) +void DccVoiceCodec::decode(KviDataBuffer *, KviDataBuffer *) { } @@ -61,7 +60,7 @@ const char * DccVoiceCodec::name() } DccVoiceNullCodec::DccVoiceNullCodec() -: DccVoiceCodec() + : DccVoiceCodec() { m_szName = "null (no compression)"; } @@ -70,17 +69,19 @@ DccVoiceNullCodec::~DccVoiceNullCodec() { } -void DccVoiceNullCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream) +void DccVoiceNullCodec::encode(KviDataBuffer * signal, KviDataBuffer * stream) { - if(signal->size() < 1)return; - stream->append(signal->data(),signal->size()); + if(signal->size() < 1) + return; + stream->append(signal->data(), signal->size()); signal->resize(0); } -void DccVoiceNullCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal) +void DccVoiceNullCodec::decode(KviDataBuffer * stream, KviDataBuffer * signal) { - if(stream->size() < 1)return; - signal->append(stream->data(),stream->size()); + if(stream->size() < 1) + return; + signal->append(stream->data(), stream->size()); stream->resize(0); } @@ -105,15 +106,15 @@ DccVideoCodec::~DccVideoCodec() { } -void DccVideoCodec::encodeVideo(KviDataBuffer *,KviDataBuffer *) +void DccVideoCodec::encodeVideo(KviDataBuffer *, KviDataBuffer *) { } -void DccVideoCodec::encodeText(KviDataBuffer *,KviDataBuffer *) +void DccVideoCodec::encodeText(KviDataBuffer *, KviDataBuffer *) { } -void DccVideoCodec::decode(KviDataBuffer *,KviDataBuffer *,KviDataBuffer *) +void DccVideoCodec::decode(KviDataBuffer *, KviDataBuffer *, KviDataBuffer *) { } @@ -133,7 +134,7 @@ const char * DccVideoCodec::name() } DccVideoSJpegCodec::DccVideoSJpegCodec() -: DccVideoCodec() + : DccVideoCodec() { m_szName = "sjpeg"; } @@ -142,10 +143,11 @@ DccVideoSJpegCodec::~DccVideoSJpegCodec() { } -void DccVideoSJpegCodec::encodeVideo(KviDataBuffer * videoSignal,KviDataBuffer * stream) +void DccVideoSJpegCodec::encodeVideo(KviDataBuffer * videoSignal, KviDataBuffer * stream) { - if(videoSignal->size() < 1) return; + if(videoSignal->size() < 1) + return; QImage img(videoSignal->data(), 320, 240, 1280, QImage::Format_ARGB32); QByteArray ba; @@ -157,65 +159,67 @@ void DccVideoSJpegCodec::encodeVideo(KviDataBuffer * videoSignal,KviDataBuffer * img.save(&buffer, "JPEG", 20); if(ba.size() > 0) { - stream->append((const unsigned char*)ba.data(),ba.size()); - } + stream->append((const unsigned char *)ba.data(), ba.size()); + } videoSignal->clear(); } void DccVideoSJpegCodec::encodeText(KviDataBuffer * textSignal, KviDataBuffer * stream) { - static unsigned const char *irct_magic_init = (unsigned const char*) "\0<text>\0"; - static unsigned const char *irct_magic_end = (unsigned const char*) "\0</text>\0"; + static unsigned const char * irct_magic_init = (unsigned const char *)"\0<text>\0"; + static unsigned const char * irct_magic_end = (unsigned const char *)"\0</text>\0"; - qDebug("encodeText %s %d",textSignal->data(), textSignal->size()); - if(textSignal->size() < 1) return; - stream->append(irct_magic_init,8); - stream->append((const unsigned char*)textSignal->data(),textSignal->size()); - stream->append(irct_magic_end,9); + qDebug("encodeText %s %d", textSignal->data(), textSignal->size()); + if(textSignal->size() < 1) + return; + stream->append(irct_magic_init, 8); + stream->append((const unsigned char *)textSignal->data(), textSignal->size()); + stream->append(irct_magic_end, 9); textSignal->clear(); return; } -void DccVideoSJpegCodec::decode(KviDataBuffer * stream,KviDataBuffer * videoSignal,KviDataBuffer * textSignal) +void DccVideoSJpegCodec::decode(KviDataBuffer * stream, KviDataBuffer * videoSignal, KviDataBuffer * textSignal) { - static unsigned const char jpg_magic_init[4] = { 0xFF, 0xD8, 0xFF, 0xE0}; //SOI + APP0 - static unsigned const char jpg_magic_end[2] = { 0xFF, 0xD9}; //EOI - - static unsigned const char *irct_magic_init = (unsigned const char*) "\0<text>\0"; - static unsigned const char *irct_magic_end = (unsigned const char*) "\0</text>\0"; + static unsigned const char jpg_magic_init[4] = { 0xFF, 0xD8, 0xFF, 0xE0 }; //SOI + APP0 + static unsigned const char jpg_magic_end[2] = { 0xFF, 0xD9 }; //EOI - if(stream->size() < 1)return; + static unsigned const char * irct_magic_init = (unsigned const char *)"\0<text>\0"; + static unsigned const char * irct_magic_end = (unsigned const char *)"\0</text>\0"; + if(stream->size() < 1) + return; int txtStart = stream->find(irct_magic_init, 8); int txtEnd = stream->find(irct_magic_end, 9); int jpgStart = stream->find(jpg_magic_init, 4); - if(txtStart!=-1 && txtEnd !=-1 && txtStart<jpgStart) + if(txtStart != -1 && txtEnd != -1 && txtStart < jpgStart) { - qDebug("a txtStart %d txtEnd %d",txtStart,txtEnd); - stream->remove(txtStart+8); - int len = txtEnd - txtStart -8; //-8 irct_magic_init - if(len>0) + qDebug("a txtStart %d txtEnd %d", txtStart, txtEnd); + stream->remove(txtStart + 8); + int len = txtEnd - txtStart - 8; //-8 irct_magic_init + if(len > 0) { textSignal->append(stream->data(), len); - char*txt=(char*)malloc(len+1); - memcpy(txt,stream->data(), len); - txt[len]='\0'; - qDebug("a recv |%s| %d",txt,len); + char * txt = (char *)malloc(len + 1); + memcpy(txt, stream->data(), len); + txt[len] = '\0'; + qDebug("a recv |%s| %d", txt, len); } - stream->remove(len+9); + stream->remove(len + 9); } - if(stream->size() < 1)return; + if(stream->size() < 1) + return; jpgStart = stream->find(jpg_magic_init, 4); int jpgEnd = stream->find(jpg_magic_end, 2); if(jpgStart != -1 && jpgEnd != -1) { -// qDebug("jpgStart %d jpgEnd %d",jpgStart,jpgEnd); + // qDebug("jpgStart %d jpgEnd %d",jpgStart,jpgEnd); QImage img; //remove junk before jpeg start if(jpgStart > 0) @@ -227,7 +231,7 @@ void DccVideoSJpegCodec::decode(KviDataBuffer * stream,KviDataBuffer * videoSign if(!img.isNull()) { videoSignal->clear(); - videoSignal->append(img.bits(),img.byteCount()); + videoSignal->append(img.bits(), img.byteCount()); } stream->remove(len); } @@ -235,20 +239,20 @@ void DccVideoSJpegCodec::decode(KviDataBuffer * stream,KviDataBuffer * videoSign txtStart = stream->find(irct_magic_init, 8); txtEnd = stream->find(irct_magic_end, 9); - if(txtStart!=-1 && txtEnd !=-1) + if(txtStart != -1 && txtEnd != -1) { - qDebug("b txtStart %d txtEnd %d",txtStart,txtEnd); - stream->remove(txtStart+8); - int len = txtEnd - txtStart -8; //-8 irct_magic_init - if(len>0) + qDebug("b txtStart %d txtEnd %d", txtStart, txtEnd); + stream->remove(txtStart + 8); + int len = txtEnd - txtStart - 8; //-8 irct_magic_init + if(len > 0) { textSignal->append(stream->data(), len); - char*txt=(char*)malloc(len+1); - memcpy(txt,stream->data(), len); - txt[len]='\0'; - qDebug("b recv |%s| %d",txt,len); + char * txt = (char *)malloc(len + 1); + memcpy(txt, stream->data(), len); + txt[len] = '\0'; + qDebug("b recv |%s| %d", txt, len); } - stream->remove(len+9); + stream->remove(len + 9); } } @@ -262,10 +266,9 @@ int DccVideoSJpegCodec::decodedFrameSize() return 0; } - #ifndef COMPILE_DISABLE_OGG_THEORA DccVideoTheoraCodec::DccVideoTheoraCodec() -: DccVideoCodec() + : DccVideoCodec() { m_szName = "theora"; m_pEncoder = 0; @@ -276,38 +279,41 @@ DccVideoTheoraCodec::~DccVideoTheoraCodec() { if(m_pEncoder) delete m_pEncoder; - m_pEncoder=0; + m_pEncoder = 0; if(m_pDecoder) delete m_pDecoder; - m_pDecoder=0; + m_pDecoder = 0; } -void DccVideoTheoraCodec::encodeVideo(KviDataBuffer * videoSignal,KviDataBuffer * stream) +void DccVideoTheoraCodec::encodeVideo(KviDataBuffer * videoSignal, KviDataBuffer * stream) { - if(videoSignal->size() < 1) return; + if(videoSignal->size() < 1) + return; if(!m_pEncoder) m_pEncoder = new KviOggTheoraEncoder(stream); - m_pEncoder->addVideoFrame((QRgb *) videoSignal->data(),videoSignal->size()); + m_pEncoder->addVideoFrame((QRgb *)videoSignal->data(), videoSignal->size()); videoSignal->clear(); } void DccVideoTheoraCodec::encodeText(KviDataBuffer * textSignal, KviDataBuffer * stream) { - if(textSignal->size() < 1) return; + if(textSignal->size() < 1) + return; if(!m_pEncoder) m_pEncoder = new KviOggTheoraEncoder(stream); - m_pEncoder->addTextFrame(textSignal->data(),textSignal->size()); + m_pEncoder->addTextFrame(textSignal->data(), textSignal->size()); textSignal->clear(); } -void DccVideoTheoraCodec::decode(KviDataBuffer * stream,KviDataBuffer * videoSignal,KviDataBuffer * textSignal) +void DccVideoTheoraCodec::decode(KviDataBuffer * stream, KviDataBuffer * videoSignal, KviDataBuffer * textSignal) { - if(stream->size() < 1)return; + if(stream->size() < 1) + return; if(!m_pDecoder) m_pDecoder = new KviOggTheoraDecoder(videoSignal, textSignal); diff --git a/src/modules/dcc/DccVoiceCodec.h b/src/modules/dcc/DccVoiceCodec.h index 85c97de42..70e4ebddc 100644 --- a/src/modules/dcc/DccVoiceCodec.h +++ b/src/modules/dcc/DccVoiceCodec.h @@ -28,8 +28,8 @@ #include "KviDataBuffer.h" #ifndef COMPILE_DISABLE_OGG_THEORA - #include "KviOggTheoraDecoder.h" - #include "KviOggTheoraEncoder.h" +#include "KviOggTheoraDecoder.h" +#include "KviOggTheoraEncoder.h" #endif class DccVoiceCodec @@ -37,12 +37,14 @@ class DccVoiceCodec public: DccVoiceCodec(); virtual ~DccVoiceCodec(); + protected: KviCString m_szName; + public: const char * name(); - virtual void encode(KviDataBuffer * signal,KviDataBuffer * stream); - virtual void decode(KviDataBuffer * stream,KviDataBuffer * signal); + virtual void encode(KviDataBuffer * signal, KviDataBuffer * stream); + virtual void decode(KviDataBuffer * stream, KviDataBuffer * signal); virtual int encodedFrameSize(); virtual int decodedFrameSize(); }; @@ -52,9 +54,10 @@ class DccVoiceNullCodec : public DccVoiceCodec public: DccVoiceNullCodec(); virtual ~DccVoiceNullCodec(); + public: - virtual void encode(KviDataBuffer * signal,KviDataBuffer * stream); - virtual void decode(KviDataBuffer * stream,KviDataBuffer * signal); + virtual void encode(KviDataBuffer * signal, KviDataBuffer * stream); + virtual void decode(KviDataBuffer * stream, KviDataBuffer * signal); virtual int encodedFrameSize(); virtual int decodedFrameSize(); }; @@ -64,13 +67,15 @@ class DccVideoCodec public: DccVideoCodec(); virtual ~DccVideoCodec(); + protected: KviCString m_szName; + public: const char * name(); virtual void encodeVideo(KviDataBuffer * videoSignal, KviDataBuffer * stream); virtual void encodeText(KviDataBuffer * textSignal, KviDataBuffer * stream); - virtual void decode(KviDataBuffer * stream,KviDataBuffer * videoSignal,KviDataBuffer * textSignal); + virtual void decode(KviDataBuffer * stream, KviDataBuffer * videoSignal, KviDataBuffer * textSignal); virtual int encodedFrameSize(); virtual int decodedFrameSize(); }; @@ -80,10 +85,11 @@ class DccVideoSJpegCodec : public DccVideoCodec public: DccVideoSJpegCodec(); virtual ~DccVideoSJpegCodec(); + public: virtual void encodeVideo(KviDataBuffer * videoSignal, KviDataBuffer * stream); virtual void encodeText(KviDataBuffer * textSignal, KviDataBuffer * stream); - virtual void decode(KviDataBuffer * stream,KviDataBuffer * videoSignal,KviDataBuffer * textSignal); + virtual void decode(KviDataBuffer * stream, KviDataBuffer * videoSignal, KviDataBuffer * textSignal); virtual int encodedFrameSize(); virtual int decodedFrameSize(); }; @@ -94,12 +100,14 @@ class DccVideoTheoraCodec : public DccVideoCodec public: DccVideoTheoraCodec(); virtual ~DccVideoTheoraCodec(); + public: virtual void encodeVideo(KviDataBuffer * videoSignal, KviDataBuffer * stream); virtual void encodeText(KviDataBuffer * textSignal, KviDataBuffer * stream); - virtual void decode(KviDataBuffer * stream,KviDataBuffer * videoSignal,KviDataBuffer * textSignal); + virtual void decode(KviDataBuffer * stream, KviDataBuffer * videoSignal, KviDataBuffer * textSignal); virtual int encodedFrameSize(); virtual int decodedFrameSize(); + private: KviOggTheoraEncoder * m_pEncoder; KviOggTheoraDecoder * m_pDecoder; diff --git a/src/modules/dcc/DccVoiceGsmCodec.cpp b/src/modules/dcc/DccVoiceGsmCodec.cpp index 8f7fb6534..e2a23bb4e 100644 --- a/src/modules/dcc/DccVoiceGsmCodec.cpp +++ b/src/modules/dcc/DccVoiceGsmCodec.cpp @@ -27,122 +27,125 @@ #include "DccVoiceGsmCodec.h" #ifdef COMPILE_USE_GSM - #include <dlfcn.h> +#include <dlfcn.h> - #define GSM_PACKED_FRAME_SIZE_IN_BYTES 33 - #define GSM_UNPACKED_FRAME_SIZE_IN_BYTES 320 - #define GSM_UNPACKED_FRAME_SIZE_IN_SHORTS 160 +#define GSM_PACKED_FRAME_SIZE_IN_BYTES 33 +#define GSM_UNPACKED_FRAME_SIZE_IN_BYTES 320 +#define GSM_UNPACKED_FRAME_SIZE_IN_SHORTS 160 - void * (*gsm_session_create)() = 0; - void (*gsm_session_destroy)(void *) = 0; - void (*gsm_session_encode)(void *,short *,unsigned char *) = 0; - int (*gsm_session_decode)(void *,unsigned char *,short *) = 0; +void * (*gsm_session_create)() = 0; +void (*gsm_session_destroy)(void *) = 0; +void (*gsm_session_encode)(void *, short *, unsigned char *) = 0; +int (*gsm_session_decode)(void *, unsigned char *, short *) = 0; - void * g_pGSMCodecLibraryHandle = 0; +void * g_pGSMCodecLibraryHandle = 0; - bool kvi_gsm_codec_init() - { - if(g_pGSMCodecLibraryHandle)return true; // Already initialized - - g_pGSMCodecLibraryHandle = dlopen("libgsm.so",RTLD_NOW | RTLD_GLOBAL); - if(!g_pGSMCodecLibraryHandle)return false; // no way to open it +bool kvi_gsm_codec_init() +{ + if(g_pGSMCodecLibraryHandle) + return true; // Already initialized - gsm_session_create = (void * (*)()) dlsym(g_pGSMCodecLibraryHandle,"gsm_create"); - gsm_session_destroy = (void (*)(void *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_destroy"); - gsm_session_encode = (void (*)(void *,short *,unsigned char *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_encode"); - gsm_session_decode = (int (*)(void *,unsigned char *,short *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_decode"); + g_pGSMCodecLibraryHandle = dlopen("libgsm.so", RTLD_NOW | RTLD_GLOBAL); + if(!g_pGSMCodecLibraryHandle) + return false; // no way to open it - if(! (gsm_session_create && gsm_session_destroy && gsm_session_encode && gsm_session_decode)) - { - dlclose(g_pGSMCodecLibraryHandle); - g_pGSMCodecLibraryHandle = 0; - return false; - } - return true; - } + gsm_session_create = (void * (*)())dlsym(g_pGSMCodecLibraryHandle, "gsm_create"); + gsm_session_destroy = (void (*)(void *))dlsym(g_pGSMCodecLibraryHandle, "gsm_destroy"); + gsm_session_encode = (void (*)(void *, short *, unsigned char *))dlsym(g_pGSMCodecLibraryHandle, "gsm_encode"); + gsm_session_decode = (int (*)(void *, unsigned char *, short *))dlsym(g_pGSMCodecLibraryHandle, "gsm_decode"); - void kvi_gsm_codec_done() + if(!(gsm_session_create && gsm_session_destroy && gsm_session_encode && gsm_session_decode)) { - if(g_pGSMCodecLibraryHandle) - { - dlclose(g_pGSMCodecLibraryHandle); - g_pGSMCodecLibraryHandle = 0; - } + dlclose(g_pGSMCodecLibraryHandle); + g_pGSMCodecLibraryHandle = 0; + return false; } + return true; +} - - DccVoiceGsmCodec::DccVoiceGsmCodec() - : DccVoiceCodec() +void kvi_gsm_codec_done() +{ + if(g_pGSMCodecLibraryHandle) { - m_pEncodeState = gsm_session_create(); - m_pDecodeState = gsm_session_create(); - m_szName = "gsm (compression 33:320)"; + dlclose(g_pGSMCodecLibraryHandle); + g_pGSMCodecLibraryHandle = 0; } +} - DccVoiceGsmCodec::~DccVoiceGsmCodec() - { - gsm_session_destroy(m_pEncodeState); - gsm_session_destroy(m_pDecodeState); - } +DccVoiceGsmCodec::DccVoiceGsmCodec() + : DccVoiceCodec() +{ + m_pEncodeState = gsm_session_create(); + m_pDecodeState = gsm_session_create(); + m_szName = "gsm (compression 33:320)"; +} - void DccVoiceGsmCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream) - { - if(signal->size() < GSM_UNPACKED_FRAME_SIZE_IN_BYTES)return; // nothing to encode +DccVoiceGsmCodec::~DccVoiceGsmCodec() +{ + gsm_session_destroy(m_pEncodeState); + gsm_session_destroy(m_pDecodeState); +} - unsigned char * ptr = signal->data(); +void DccVoiceGsmCodec::encode(KviDataBuffer * signal, KviDataBuffer * stream) +{ + if(signal->size() < GSM_UNPACKED_FRAME_SIZE_IN_BYTES) + return; // nothing to encode - int uFrames = signal->size() / GSM_UNPACKED_FRAME_SIZE_IN_BYTES; - int uTotalDataCompressed = uFrames * GSM_UNPACKED_FRAME_SIZE_IN_BYTES; - int uFrameOffset = stream->size(); - unsigned char * endPtr = ptr + uTotalDataCompressed; + unsigned char * ptr = signal->data(); - stream->addSize(GSM_PACKED_FRAME_SIZE_IN_BYTES * uFrames); + int uFrames = signal->size() / GSM_UNPACKED_FRAME_SIZE_IN_BYTES; + int uTotalDataCompressed = uFrames * GSM_UNPACKED_FRAME_SIZE_IN_BYTES; + int uFrameOffset = stream->size(); + unsigned char * endPtr = ptr + uTotalDataCompressed; - while(ptr != endPtr) - { - gsm_session_encode(m_pEncodeState,(short *)ptr,stream->data() + uFrameOffset); - ptr += GSM_UNPACKED_FRAME_SIZE_IN_BYTES; - uFrameOffset += GSM_PACKED_FRAME_SIZE_IN_BYTES; - } - signal->remove(uTotalDataCompressed); - } + stream->addSize(GSM_PACKED_FRAME_SIZE_IN_BYTES * uFrames); - void DccVoiceGsmCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal) + while(ptr != endPtr) { - if(stream->size() < GSM_PACKED_FRAME_SIZE_IN_BYTES)return; // nothing to decode + gsm_session_encode(m_pEncodeState, (short *)ptr, stream->data() + uFrameOffset); + ptr += GSM_UNPACKED_FRAME_SIZE_IN_BYTES; + uFrameOffset += GSM_PACKED_FRAME_SIZE_IN_BYTES; + } + signal->remove(uTotalDataCompressed); +} - unsigned char * ptr = stream->data(); +void DccVoiceGsmCodec::decode(KviDataBuffer * stream, KviDataBuffer * signal) +{ + if(stream->size() < GSM_PACKED_FRAME_SIZE_IN_BYTES) + return; // nothing to decode - // Gsm codec - int uFrames = stream->size() / GSM_PACKED_FRAME_SIZE_IN_BYTES; - int uTotalDataDecompressed = uFrames * GSM_PACKED_FRAME_SIZE_IN_BYTES; - int uSignalOffset = signal->size(); - unsigned char * endPtr = ptr + (uTotalDataDecompressed); + unsigned char * ptr = stream->data(); - signal->addSize(GSM_UNPACKED_FRAME_SIZE_IN_BYTES * uFrames); + // Gsm codec + int uFrames = stream->size() / GSM_PACKED_FRAME_SIZE_IN_BYTES; + int uTotalDataDecompressed = uFrames * GSM_PACKED_FRAME_SIZE_IN_BYTES; + int uSignalOffset = signal->size(); + unsigned char * endPtr = ptr + (uTotalDataDecompressed); - while(ptr != endPtr) - { - // We don't check the return value here - // Well..it is either an unrecoverable internal error - // or a broken frame... - // but if we receive broken frames over DCC...well....better - // check the hardware...or the remote codec as well... - gsm_session_decode(m_pDecodeState,ptr,(short *)(signal->data() + uSignalOffset)); - ptr += GSM_PACKED_FRAME_SIZE_IN_BYTES; - uSignalOffset += GSM_UNPACKED_FRAME_SIZE_IN_BYTES; - } - stream->remove(uTotalDataDecompressed); - } + signal->addSize(GSM_UNPACKED_FRAME_SIZE_IN_BYTES * uFrames); - int DccVoiceGsmCodec::encodedFrameSize() + while(ptr != endPtr) { - return GSM_PACKED_FRAME_SIZE_IN_BYTES; + // We don't check the return value here + // Well..it is either an unrecoverable internal error + // or a broken frame... + // but if we receive broken frames over DCC...well....better + // check the hardware...or the remote codec as well... + gsm_session_decode(m_pDecodeState, ptr, (short *)(signal->data() + uSignalOffset)); + ptr += GSM_PACKED_FRAME_SIZE_IN_BYTES; + uSignalOffset += GSM_UNPACKED_FRAME_SIZE_IN_BYTES; } + stream->remove(uTotalDataDecompressed); +} - int DccVoiceGsmCodec::decodedFrameSize() - { - return GSM_UNPACKED_FRAME_SIZE_IN_BYTES; - } +int DccVoiceGsmCodec::encodedFrameSize() +{ + return GSM_PACKED_FRAME_SIZE_IN_BYTES; +} + +int DccVoiceGsmCodec::decodedFrameSize() +{ + return GSM_UNPACKED_FRAME_SIZE_IN_BYTES; +} #endif // COMPILE_USE_GSM diff --git a/src/modules/dcc/DccVoiceGsmCodec.h b/src/modules/dcc/DccVoiceGsmCodec.h index 36cc1ae95..9a86de7ba 100644 --- a/src/modules/dcc/DccVoiceGsmCodec.h +++ b/src/modules/dcc/DccVoiceGsmCodec.h @@ -26,30 +26,31 @@ #include "kvi_settings.h" - #ifdef COMPILE_USE_GSM - #include "DccVoiceCodec.h" +#include "DccVoiceCodec.h" + +#ifndef _GSMCODEC_CPP_ +extern bool kvi_gsm_codec_init(); +extern void kvi_gsm_codec_done(); +#endif //_GSMCODEC_CPP_ + +class DccVoiceGsmCodec : public DccVoiceCodec +{ +public: + DccVoiceGsmCodec(); + virtual ~DccVoiceGsmCodec(); - #ifndef _GSMCODEC_CPP_ - extern bool kvi_gsm_codec_init(); - extern void kvi_gsm_codec_done(); - #endif //_GSMCODEC_CPP_ +private: + void * m_pEncodeState; + void * m_pDecodeState; - class DccVoiceGsmCodec : public DccVoiceCodec - { - public: - DccVoiceGsmCodec(); - virtual ~DccVoiceGsmCodec(); - private: - void * m_pEncodeState; - void * m_pDecodeState; - public: - virtual void encode(KviDataBuffer * signal,KviDataBuffer * stream); - virtual void decode(KviDataBuffer * stream,KviDataBuffer * signal); - virtual int encodedFrameSize(); - virtual int decodedFrameSize(); - }; +public: + virtual void encode(KviDataBuffer * signal, KviDataBuffer * stream); + virtual void decode(KviDataBuffer * stream, KviDataBuffer * signal); + virtual int encodedFrameSize(); + virtual int decodedFrameSize(); +}; #endif //COMPILE_USE_GSM diff --git a/src/modules/dcc/DccVoiceWindow.cpp b/src/modules/dcc/DccVoiceWindow.cpp index 4356a274a..0a353bfaf 100644 --- a/src/modules/dcc/DccVoiceWindow.cpp +++ b/src/modules/dcc/DccVoiceWindow.cpp @@ -46,14 +46,14 @@ #include <QToolTip> #if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW) - #include <sys/time.h> - #include <sys/types.h> - #include <unistd.h> - #include <errno.h> - #include <fcntl.h> - //#include "KviError.h" - #include <sys/stat.h> // for open() - #include <sys/ioctl.h> // for ioctl() +#include <sys/time.h> +#include <sys/types.h> +#include <unistd.h> +#include <errno.h> +#include <fcntl.h> +//#include "KviError.h" +#include <sys/stat.h> // for open() +#include <sys/ioctl.h> // for ioctl() #endif extern DccBroker * g_pDccBroker; @@ -61,25 +61,24 @@ extern DccBroker * g_pDccBroker; //Check for the *SS Api....we don't want to fail here... #ifndef COMPILE_DISABLE_DCC_VOICE - #ifdef HAVE_LINUX_SOUNDCARD_H - #include <linux/soundcard.h> - #else - #ifdef HAVE_SYS_SOUNDCARD_H - #include <sys/soundcard.h> - #else - #ifdef HAVE_SOUNDCARD_H - #include <soundcard.h> - #else - //CAN NOT COMPILE :( - #define COMPILE_DISABLE_DCC_VOICE - #if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW) - #warning "Can't find the soundcard.h header; you will NOT be able to use DCC Voice" - #endif - #endif - #endif - #endif +#ifdef HAVE_LINUX_SOUNDCARD_H +#include <linux/soundcard.h> +#else +#ifdef HAVE_SYS_SOUNDCARD_H +#include <sys/soundcard.h> +#else +#ifdef HAVE_SOUNDCARD_H +#include <soundcard.h> +#else +//CAN NOT COMPILE :( +#define COMPILE_DISABLE_DCC_VOICE +#if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW) +#warning "Can't find the soundcard.h header; you will NOT be able to use DCC Voice" +#endif +#endif +#endif +#endif #endif - //#define KVI_AUDIO_DEVICE "/dev/dsp" // 32 fragments, 512 bytes @@ -88,36 +87,39 @@ extern DccBroker * g_pDccBroker; #define KVI_FORMAT AFMT_S16_LE #define KVI_NUM_CHANNELS 1 - bool kvi_dcc_voice_is_valid_codec(const char * codecName) { #ifdef COMPILE_USE_GSM - if(kvi_strEqualCI("gsm",codecName)) + if(kvi_strEqualCI("gsm", codecName)) { return kvi_gsm_codec_init(); } #endif - if(kvi_strEqualCI("adpcm",codecName))return true; - if(kvi_strEqualCI("null",codecName))return true; + if(kvi_strEqualCI("adpcm", codecName)) + return true; + if(kvi_strEqualCI("null", codecName)) + return true; return false; } static DccVoiceCodec * kvi_dcc_voice_get_codec(const char * codecName) { #ifdef COMPILE_USE_GSM - if(kvi_strEqualCI("gsm",codecName)) + if(kvi_strEqualCI("gsm", codecName)) { - if(kvi_gsm_codec_init())return new DccVoiceGsmCodec(); + if(kvi_gsm_codec_init()) + return new DccVoiceGsmCodec(); } #endif - if(kvi_strEqualCI("adpcm",codecName))return new DccVoiceAdpcmCodec(); - if(kvi_strEqualCI("null",codecName))return new DccVoiceNullCodec(); + if(kvi_strEqualCI("adpcm", codecName)) + return new DccVoiceAdpcmCodec(); + if(kvi_strEqualCI("null", codecName)) + return new DccVoiceNullCodec(); return new DccVoiceAdpcmCodec(); } - -DccVoiceThread::DccVoiceThread(KviWindow * wnd,kvi_socket_t fd,KviDccVoiceThreadOptions * opt) -: DccThread(wnd,fd) +DccVoiceThread::DccVoiceThread(KviWindow * wnd, kvi_socket_t fd, KviDccVoiceThreadOptions * opt) + : DccThread(wnd, fd) { #ifndef COMPILE_DISABLE_DCC_VOICE m_pOpt = opt; @@ -148,7 +150,8 @@ bool DccVoiceThread::checkSoundcard() bool bOpened = false; if(m_soundFd == -1) { - if(!openSoundcard(O_RDONLY))return false; + if(!openSoundcard(O_RDONLY)) + return false; bOpened = true; } @@ -156,59 +159,66 @@ bool DccVoiceThread::checkSoundcard() m_bSoundcardChecked = true; - if(ioctl(m_soundFd,SNDCTL_DSP_GETCAPS,&caps) < 0) + if(ioctl(m_soundFd, SNDCTL_DSP_GETCAPS, &caps) < 0) { - postMessageEvent(__tr2qs_ctx("WARNING: failed to check the soundcard duplex capabilities: if this is a half-duplex soundcard, use the DCC VOICE option to force half-duplex algorithm","dcc").toUtf8().data()); - if(bOpened)closeSoundcard(); + postMessageEvent(__tr2qs_ctx("WARNING: failed to check the soundcard duplex capabilities: if this is a half-duplex soundcard, use the DCC VOICE option to force half-duplex algorithm", "dcc").toUtf8().data()); + if(bOpened) + closeSoundcard(); return false; } if(!(caps & DSP_CAP_DUPLEX)) { m_pOpt->bForceHalfDuplex = true; // the device is half duplex...use it in that way - postMessageEvent(__tr2qs_ctx("Half-duplex soundcard detected, you will not be able to talk and listen at the same time","dcc").toUtf8().data()); + postMessageEvent(__tr2qs_ctx("Half-duplex soundcard detected, you will not be able to talk and listen at the same time", "dcc").toUtf8().data()); } - if(bOpened)closeSoundcard(); + if(bOpened) + closeSoundcard(); return true; #endif } - bool DccVoiceThread::openSoundcard(int mode) { #ifdef COMPILE_DISABLE_DCC_VOICE return false; #else int speed = m_pOpt->iSampleRate; - static int chans=KVI_NUM_CHANNELS; - static int fmt=KVI_FORMAT; + static int chans = KVI_NUM_CHANNELS; + static int fmt = KVI_FORMAT; static int frag = KVI_SNDCTL_FRAG_SIZE; - if(m_soundFd != -1) { - if(m_soundFdMode == mode)return true; // already open + if(m_soundFdMode == mode) + return true; // already open closeSoundcard(); } - m_soundFd = ::open(m_pOpt->szSoundDevice.ptr(),mode | O_NONBLOCK); - if(m_soundFd < 0)return false; + m_soundFd = ::open(m_pOpt->szSoundDevice.ptr(), mode | O_NONBLOCK); + if(m_soundFd < 0) + return false; if(!m_pOpt->bForceHalfDuplex) { - if(ioctl(m_soundFd,SNDCTL_DSP_SETDUPLEX,0) < 0)goto exit_false; + if(ioctl(m_soundFd, SNDCTL_DSP_SETDUPLEX, 0) < 0) + goto exit_false; } - if(ioctl(m_soundFd,SNDCTL_DSP_SETFRAGMENT,&frag)<0)goto exit_false; - if(ioctl(m_soundFd,SNDCTL_DSP_SETFMT,&fmt)<0)goto exit_false; - if(ioctl(m_soundFd,SNDCTL_DSP_CHANNELS,&chans)<0)goto exit_false; - if(ioctl(m_soundFd,SNDCTL_DSP_SPEED,&speed)<0)goto exit_false; + if(ioctl(m_soundFd, SNDCTL_DSP_SETFRAGMENT, &frag) < 0) + goto exit_false; + if(ioctl(m_soundFd, SNDCTL_DSP_SETFMT, &fmt) < 0) + goto exit_false; + if(ioctl(m_soundFd, SNDCTL_DSP_CHANNELS, &chans) < 0) + goto exit_false; + if(ioctl(m_soundFd, SNDCTL_DSP_SPEED, &speed) < 0) + goto exit_false; if(speed != m_pOpt->iSampleRate) { - KviCString tmp(KviCString::Format,__tr2qs_ctx("WARNING: failed to set the requested sample rate (%d): the device used closest match (%d)","dcc").toUtf8().data(), - m_pOpt->iSampleRate,speed); + KviCString tmp(KviCString::Format, __tr2qs_ctx("WARNING: failed to set the requested sample rate (%d): the device used closest match (%d)", "dcc").toUtf8().data(), + m_pOpt->iSampleRate, speed); postMessageEvent(tmp.ptr()); } @@ -216,7 +226,6 @@ bool DccVoiceThread::openSoundcard(int mode) m_soundFdMode = mode; - return true; exit_false: @@ -228,7 +237,7 @@ exit_false: bool DccVoiceThread::openSoundcardForWriting() { #ifndef COMPILE_DISABLE_DCC_VOICE - return openSoundcardWithDuplexOption(O_WRONLY,O_RDONLY); + return openSoundcardWithDuplexOption(O_WRONLY, O_RDONLY); #else return false; #endif @@ -237,13 +246,13 @@ bool DccVoiceThread::openSoundcardForWriting() bool DccVoiceThread::openSoundcardForReading() { #ifndef COMPILE_DISABLE_DCC_VOICE - return openSoundcardWithDuplexOption(O_RDONLY,O_WRONLY); + return openSoundcardWithDuplexOption(O_RDONLY, O_WRONLY); #else return false; #endif } -bool DccVoiceThread::openSoundcardWithDuplexOption(int openMode,int failMode) +bool DccVoiceThread::openSoundcardWithDuplexOption(int openMode, int failMode) { #ifndef COMPILE_DISABLE_DCC_VOICE if(m_soundFd == -1) @@ -252,8 +261,11 @@ bool DccVoiceThread::openSoundcardWithDuplexOption(int openMode,int failMode) if(m_pOpt->bForceHalfDuplex) { // Forcing half duplex... (user option or the card does not support full duplex mode) - if(!openSoundcard(openMode))return false; - } else { + if(!openSoundcard(openMode)) + return false; + } + else + { // Try read/write open if(!openSoundcard(O_RDWR)) { @@ -262,15 +274,18 @@ bool DccVoiceThread::openSoundcardWithDuplexOption(int openMode,int failMode) { // We haven't checked the full-duplex support yet... // Try to open in RDONLY o WRONLY mode - if(!openSoundcard(openMode))return false; + if(!openSoundcard(openMode)) + return false; if(!checkSoundcard()) { - postMessageEvent(__tr2qs_ctx("Oops! Failed to test the soundcard capabilities, expect problems...","dcc").toUtf8().data()); + postMessageEvent(__tr2qs_ctx("Oops! Failed to test the soundcard capabilities, expect problems...", "dcc").toUtf8().data()); } } // else the test has been done and it is a full duplex card that is just busy } } - } else { + } + else + { // Hmmm...already open // If it is open in O_RDWR or O_WRONLY mode...it is ok for us // but if it is open in O_RDONLY mode...we can do nothing...just wait @@ -302,23 +317,27 @@ bool DccVoiceThread::readWriteStep() bool bCanRead; bool bCanWrite; - if(kvi_select(m_fd,&bCanRead,&bCanWrite)) + if(kvi_select(m_fd, &bCanRead, &bCanWrite)) { if(bCanRead) { unsigned int actualSize = m_inFrameBuffer.size(); m_inFrameBuffer.resize(actualSize + 1024); - int readLen = kvi_socket_recv(m_fd,(void *)(m_inFrameBuffer.data() + actualSize),1024); + int readLen = kvi_socket_recv(m_fd, (void *)(m_inFrameBuffer.data() + actualSize), 1024); if(readLen > 0) { - if(readLen < 1024)m_inFrameBuffer.resize(actualSize + readLen); - m_pOpt->pCodec->decode(&m_inFrameBuffer,&m_inSignalBuffer); -//#warning "A maximum length for the signal buffer is actually needed!!!" - } else { - if(!handleInvalidSocketRead(readLen))return false; + if(readLen < 1024) + m_inFrameBuffer.resize(actualSize + readLen); + m_pOpt->pCodec->decode(&m_inFrameBuffer, &m_inSignalBuffer); + //#warning "A maximum length for the signal buffer is actually needed!!!" + } + else + { + if(!handleInvalidSocketRead(readLen)) + return false; m_inFrameBuffer.resize(actualSize); } - }// else { + } // else { // m_uSleepTime += 100; //} @@ -327,21 +346,24 @@ bool DccVoiceThread::readWriteStep() // Have somethihg to write ? if(m_outFrameBuffer.size() > 0) { - int written = kvi_socket_send(m_fd,m_outFrameBuffer.data(),m_outFrameBuffer.size()); + int written = kvi_socket_send(m_fd, m_outFrameBuffer.data(), m_outFrameBuffer.size()); if(written > 0) { m_outFrameBuffer.remove(written); - } else { - if(!handleInvalidSocketRead(written))return false; } - }// else { - // m_uSleepTime += 100; - // } - }// else { - // m_uSleepTime += 100; -// } -//#warning "Usleep here ?" - }// else { + else + { + if(!handleInvalidSocketRead(written)) + return false; + } + } // else { + // m_uSleepTime += 100; + // } + } // else { + // m_uSleepTime += 100; + // } + //#warning "Usleep here ?" + } // else { // if(!(m_bPlaying || m_bRecording)) // { // // Really NOTHING is happening...sleep a bit more @@ -367,7 +389,7 @@ bool DccVoiceThread::soundStep() { // Get the number of fragments that can be written to the soundcard without blocking - if(ioctl(m_soundFd,SNDCTL_DSP_GETOSPACE,&info) < 0) + if(ioctl(m_soundFd, SNDCTL_DSP_GETOSPACE, &info) < 0) { qDebug("get o space failed"); info.bytes = KVI_FRAGMENT_SIZE_IN_BYTES; // dummy... if this is not correct...well...we will block for 1024/16000 of a sec @@ -378,29 +400,37 @@ bool DccVoiceThread::soundStep() { int toWrite = info.fragments * info.fragsize; //qDebug("Can write %d bytes",toWrite); - if(m_inSignalBuffer.size() < toWrite)toWrite = m_inSignalBuffer.size(); - int written = write(m_soundFd,m_inSignalBuffer.data(),toWrite); - if(written > 0)m_inSignalBuffer.remove(written); - else { -//#warning "Do something for -1 here ?" -//#warning "Usleep ?" + if(m_inSignalBuffer.size() < toWrite) + toWrite = m_inSignalBuffer.size(); + int written = write(m_soundFd, m_inSignalBuffer.data(), toWrite); + if(written > 0) + m_inSignalBuffer.remove(written); + else + { + //#warning "Do something for -1 here ?" + //#warning "Usleep ?" } } //else { - // No stuff can be written...we are running too fast ? - // m_uSleepTime += 100; // sleep for a while - //} - } else { + // No stuff can be written...we are running too fast ? + // m_uSleepTime += 100; // sleep for a while + //} + } + else + { // hmmmm....playing, but nothing to write, possible underrun or EOF // a nice idea would be to use SNDCTL_DSP_GETODELAY here... // but it appears to be broken on some audio devices - if(ioctl(m_soundFd,SNDCTL_DSP_GETOSPACE,&info) < 0)info.fragstotal = info.fragments; // dummy...but what should we do ? + if(ioctl(m_soundFd, SNDCTL_DSP_GETOSPACE, &info) < 0) + info.fragstotal = info.fragments; // dummy...but what should we do ? if(info.fragstotal == info.fragments) { // underrun or EOF: close the device stopPlaying(); } } - } else { + } + else + { // do we have anything to play ? if(m_inSignalBuffer.size() > 0) { @@ -410,11 +440,13 @@ bool DccVoiceThread::soundStep() startPlaying(); m_iLastSignalBufferSize = m_inSignalBuffer.size(); - } else { + } + else + { // have stuff to play, but it's not enough to fill the pre-buffer // struct timeval tv; - gettimeofday(&tv,0); + gettimeofday(&tv, 0); long int sigBufferTime = (tv.tv_sec * 1000) + (tv.tv_usec / 1000); @@ -431,16 +463,18 @@ bool DccVoiceThread::soundStep() if((sigBufferTime - m_iLastSignalBufferTime) > preBufferTime) { startPlaying(); - if(m_bPlaying)m_iLastSignalBufferSize = 0; + if(m_bPlaying) + m_iLastSignalBufferSize = 0; } - } else { + } + else + { // signal buffer size differs...we have received new packets // and still pre-buffering m_iLastSignalBufferSize = m_inSignalBuffer.size(); m_iLastSignalBufferTime = sigBufferTime; } } - } } @@ -449,16 +483,16 @@ bool DccVoiceThread::soundStep() { fd_set rs; FD_ZERO(&rs); - FD_SET(m_soundFd,&rs); + FD_SET(m_soundFd, &rs); struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 10; - int ret = select(m_soundFd + 1,&rs,0,0,&tv); + int ret = select(m_soundFd + 1, &rs, 0, 0, &tv); if(ret > 0) { // This is rather easy... audio_buf_info info; - if(ioctl(m_soundFd,SNDCTL_DSP_GETISPACE,&info) < 0) + if(ioctl(m_soundFd, SNDCTL_DSP_GETISPACE, &info) < 0) { qDebug("Ispace failed"); info.fragments = 0; // dummy... @@ -478,23 +512,27 @@ bool DccVoiceThread::soundStep() int oldSize = m_outSignalBuffer.size(); int available = info.fragments * info.fragsize; m_outSignalBuffer.addSize(available); - int readed = read(m_soundFd,m_outSignalBuffer.data() + oldSize,available); + int readed = read(m_soundFd, m_outSignalBuffer.data() + oldSize, available); if(readed < available) { // huh ? ...error ? - if(readed >= 0)m_outSignalBuffer.resize(oldSize + readed); - else { + if(readed >= 0) + m_outSignalBuffer.resize(oldSize + readed); + else + { if((errno == EINTR) || (errno == EAGAIN)) { m_outSignalBuffer.resize(oldSize); - } else { -//#warning "Critical error...do something reasonable!" + } + else + { + //#warning "Critical error...do something reasonable!" m_outSignalBuffer.resize(oldSize); } } } -/* + /* qDebug("Signal buffer:"); for(int i=0;i<200;i+=2) { @@ -504,12 +542,12 @@ bool DccVoiceThread::soundStep() } qDebug("END\n"); */ - m_pOpt->pCodec->encode(&m_outSignalBuffer,&m_outFrameBuffer); + m_pOpt->pCodec->encode(&m_outSignalBuffer, &m_outFrameBuffer); } - }// else { - // Nothing to read - // m_uSleepTime += 100; - // } + } // else { + // Nothing to read + // m_uSleepTime += 100; + // } } #endif // !COMPILE_DISABLE_DCC_VOICE @@ -520,17 +558,20 @@ void DccVoiceThread::startRecording() { #ifndef COMPILE_DISABLE_DCC_VOICE //qDebug("Start recording"); - if(m_bRecording)return; // already started + if(m_bRecording) + return; // already started if(openSoundcardForReading()) { -// qDebug("Posting event"); + // qDebug("Posting event"); KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION); e->setData(new int(KVI_DCC_VOICE_THREAD_ACTION_START_RECORDING)); - postEvent(parent(),e); + postEvent(parent(), e); m_bRecording = true; m_bRecordingRequestPending = false; - } else { + } + else + { m_bRecordingRequestPending = true; } #endif @@ -541,14 +582,16 @@ void DccVoiceThread::stopRecording() #ifndef COMPILE_DISABLE_DCC_VOICE //qDebug("Stop recording"); m_bRecordingRequestPending = false; - if(!m_bRecording)return; // already stopped + if(!m_bRecording) + return; // already stopped KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION); e->setData(new int(KVI_DCC_VOICE_THREAD_ACTION_STOP_RECORDING)); - postEvent(parent(),e); + postEvent(parent(), e); m_bRecording = false; - if(!m_bPlaying)closeSoundcard(); + if(!m_bPlaying) + closeSoundcard(); #endif } @@ -556,13 +599,14 @@ void DccVoiceThread::startPlaying() { #ifndef COMPILE_DISABLE_DCC_VOICE //qDebug("Start playing"); - if(m_bPlaying)return; + if(m_bPlaying) + return; if(openSoundcardForWriting()) { KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION); e->setData(new int(KVI_DCC_VOICE_THREAD_ACTION_START_PLAYING)); - postEvent(parent(),e); + postEvent(parent(), e); m_bPlaying = true; } #endif @@ -572,14 +616,16 @@ void DccVoiceThread::stopPlaying() { #ifndef COMPILE_DISABLE_DCC_VOICE //qDebug("Stop playing"); - if(!m_bPlaying)return; + if(!m_bPlaying) + return; KviThreadDataEvent<int> * e = new KviThreadDataEvent<int>(KVI_DCC_THREAD_EVENT_ACTION); e->setData(new int(KVI_DCC_VOICE_THREAD_ACTION_STOP_PLAYING)); - postEvent(parent(),e); + postEvent(parent(), e); m_bPlaying = false; - if(!m_bRecording)closeSoundcard(); + if(!m_bRecording) + closeSoundcard(); #endif } @@ -588,7 +634,7 @@ void DccVoiceThread::run() #ifndef COMPILE_DISABLE_DCC_VOICE for(;;) { -// m_uSleepTime = 0; + // m_uSleepTime = 0; // Dequeue events while(KviThreadEvent * e = dequeueEvent()) @@ -597,21 +643,28 @@ void DccVoiceThread::run() { delete e; goto exit_dcc; - } else if(e->id() == KVI_DCC_THREAD_EVENT_ACTION) + } + else if(e->id() == KVI_DCC_THREAD_EVENT_ACTION) { int * act = ((KviThreadDataEvent<int> *)e)->getData(); - if(*act)startRecording(); - else stopRecording(); + if(*act) + startRecording(); + else + stopRecording(); delete act; delete e; - } else { + } + else + { // Other events are senseless to us delete e; } } - if(!readWriteStep())goto exit_dcc; - if(!soundStep())goto exit_dcc; + if(!readWriteStep()) + goto exit_dcc; + if(!soundStep()) + goto exit_dcc; m_pInfoMutex->lock(); m_iInputBufferSize = m_inSignalBuffer.size(); @@ -621,13 +674,13 @@ void DccVoiceThread::run() // Actually the maximum that we can sleep here is // around 500 usecs... = 0.0005 sec -> 8 bytes at 8 KHz - // if(m_uSleepTime)usleep(m_uSleepTime); + // if(m_uSleepTime)usleep(m_uSleepTime); // Start recording if the request was not fulfilled yet - if(m_bRecordingRequestPending)startRecording(); + if(m_bRecordingRequestPending) + startRecording(); } - exit_dcc: #endif //! COMPILE_DISABLE_DCC_VOICE @@ -636,24 +689,23 @@ exit_dcc: m_fd = KVI_INVALID_SOCKET; } - -DccVoiceWindow::DccVoiceWindow(DccDescriptor * dcc,const char * name) -: DccWindow(KviWindow::DccVoice,name,dcc) +DccVoiceWindow::DccVoiceWindow(DccDescriptor * dcc, const char * name) + : DccWindow(KviWindow::DccVoice, name, dcc) { m_pDescriptor = dcc; m_pSlaveThread = 0; - m_pSplitter = new KviTalSplitter(Qt::Horizontal,this); + m_pSplitter = new KviTalSplitter(Qt::Horizontal, this); m_pSplitter->setObjectName("dcc_window_splitter"); - m_pIrcView = new KviIrcView(m_pSplitter,this); + m_pIrcView = new KviIrcView(m_pSplitter, this); m_pHBox = new KviTalHBox(this); KviTalVBox * vbox = new KviTalVBox(m_pHBox); - m_pInputLabel = new QLabel(__tr2qs_ctx("Input buffer","dcc"),vbox); + m_pInputLabel = new QLabel(__tr2qs_ctx("Input buffer", "dcc"), vbox); m_pInputLabel->setFrameStyle(QFrame::Sunken | QFrame::Panel); - m_pOutputLabel = new QLabel(__tr2qs_ctx("Output buffer","dcc"),vbox); + m_pOutputLabel = new QLabel(__tr2qs_ctx("Output buffer", "dcc"), vbox); m_pOutputLabel->setFrameStyle(QFrame::Sunken | QFrame::Panel); vbox->setSpacing(1); @@ -673,7 +725,7 @@ DccVoiceWindow::DccVoiceWindow(DccDescriptor * dcc,const char * name) //#warning "The volume slider should be enabled only when receiving data" //m_pVolumeSlider = new QSlider(-100, 0, 10, 0, Qt::Vertical, m_pHBox, "dcc_voice_volume_slider"); - m_pVolumeSlider = new QSlider(Qt::Vertical,m_pHBox); + m_pVolumeSlider = new QSlider(Qt::Vertical, m_pHBox); m_pVolumeSlider->setObjectName("dcc_voice_volume_slider"); m_pVolumeSlider->setMinimum(-100); m_pVolumeSlider->setMaximum(0); @@ -684,29 +736,29 @@ DccVoiceWindow::DccVoiceWindow(DccDescriptor * dcc,const char * name) /* Update the tooltip */ setMixerVolume(m_pVolumeSlider->value()); m_pVolumeSlider->setMaximumWidth(16); - m_pVolumeSlider->setMaximumHeight(2*m_pPlayingLabel->height()); + m_pVolumeSlider->setMaximumHeight(2 * m_pPlayingLabel->height()); connect(m_pVolumeSlider, SIGNAL(valueChanged(int)), this, SLOT(setMixerVolume(int))); m_pTalkButton = new QToolButton(m_pHBox); m_pTalkButton->setEnabled(false); m_pTalkButton->setCheckable(true); QIcon iset; - iset.addPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_DISCONNECTED)),QIcon::Normal,QIcon::Off); - iset.addPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_CONNECTED)),QIcon::Normal,QIcon::On); + iset.addPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_DISCONNECTED)), QIcon::Normal, QIcon::Off); + iset.addPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_CONNECTED)), QIcon::Normal, QIcon::On); m_pTalkButton->setIcon(iset); - m_pTalkButton->setIconSize(QSize(32,32)); - connect(m_pTalkButton,SIGNAL(toggled(bool)),this,SLOT(startOrStopTalking(bool))); + m_pTalkButton->setIconSize(QSize(32, 32)); + connect(m_pTalkButton, SIGNAL(toggled(bool)), this, SLOT(startOrStopTalking(bool))); - m_pHBox->setStretchFactor(vbox,1); + m_pHBox->setStretchFactor(vbox, 1); m_pHBox->setMargin(2); m_pHBox->setSpacing(1); //setFocusHandler(m_pIrcView,this); m_pMarshal = new DccMarshal(this); - connect(m_pMarshal,SIGNAL(error(KviError::Code)),this,SLOT(handleMarshalError(KviError::Code))); - connect(m_pMarshal,SIGNAL(connected()),this,SLOT(connected())); - connect(m_pMarshal,SIGNAL(inProgress()),this,SLOT(connectionInProgress())); + connect(m_pMarshal, SIGNAL(error(KviError::Code)), this, SLOT(handleMarshalError(KviError::Code))); + connect(m_pMarshal, SIGNAL(connected()), this, SLOT(connected())); + connect(m_pMarshal, SIGNAL(inProgress()), this, SLOT(connectionInProgress())); m_pUpdateTimer = new QTimer(); @@ -726,24 +778,25 @@ DccVoiceWindow::~DccVoiceWindow() KviThreadManager::killPendingEvents(this); delete m_pUpdateTimer; -// delete m_pDescriptor; -// delete m_pMarshal; + // delete m_pDescriptor; + // delete m_pMarshal; } - void DccVoiceWindow::startConnection() { if(!(m_pDescriptor->bActive)) { // PASSIVE CONNECTION - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting a passive DCC VOICE connection","dcc")); - KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp,m_pDescriptor->szListenPort,m_pDescriptor->bDoTimeout); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting a passive DCC VOICE connection", "dcc")); + KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp, m_pDescriptor->szListenPort, m_pDescriptor->bDoTimeout); if(eError != KviError::Success) handleMarshalError(eError); - } else { + } + else + { // ACTIVE CONNECTION - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting an active DCC VOICE connection","dcc")); - KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(),m_pDescriptor->bDoTimeout); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting an active DCC VOICE connection", "dcc")); + KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(), m_pDescriptor->bDoTimeout); if(eError != KviError::Success) handleMarshalError(eError); } @@ -753,29 +806,34 @@ void DccVoiceWindow::connectionInProgress() { if(m_pDescriptor->bActive) { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Contacting host %Q on port %Q","dcc"),&(m_pDescriptor->szIp),&(m_pDescriptor->szPort)); - } else { + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Contacting host %Q on port %Q", "dcc"), &(m_pDescriptor->szIp), &(m_pDescriptor->szPort)); + } + else + { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Listening on interface %Q port %Q","dcc"), - &(m_pMarshal->localIp()),&(m_pMarshal->localPort())); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Listening on interface %Q port %Q", "dcc"), + &(m_pMarshal->localIp()), &(m_pMarshal->localPort())); if(m_pDescriptor->bSendRequest) { - QString ip = !m_pDescriptor->szFakeIp.isEmpty() ? m_pDescriptor->szFakeIp : m_pDescriptor->szListenIp; - KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort(); -//#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned nuumber)" + QString ip = !m_pDescriptor->szFakeIp.isEmpty() ? m_pDescriptor->szFakeIp : m_pDescriptor->szListenIp; + KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort(); + //#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned nuumber)" struct in_addr a; - if(KviNetUtils::stringIpToBinaryIp(ip,&a)) { + if(KviNetUtils::stringIpToBinaryIp(ip, &a)) + { ip.setNum(htonl(a.s_addr)); } m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC VOICE %s %Q %s %d%c", - m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), - 0x01,m_pDescriptor->szCodec.ptr(), - &ip,port.ptr(),m_pDescriptor->iSampleRate,0x01); - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Sent DCC VOICE (%s) request to %Q, waiting for the remote client to connect...","dcc"), - m_pDescriptor->szCodec.ptr(),&(m_pDescriptor->szNick)); - } else output(KVI_OUT_DCCMSG,__tr2qs_ctx("DCC VOICE request not sent: awaiting manual connections","dcc")); + m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(), + 0x01, m_pDescriptor->szCodec.ptr(), + &ip, port.ptr(), m_pDescriptor->iSampleRate, 0x01); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Sent DCC VOICE (%s) request to %Q, waiting for the remote client to connect...", "dcc"), + m_pDescriptor->szCodec.ptr(), &(m_pDescriptor->szNick)); + } + else + output(KVI_OUT_DCCMSG, __tr2qs_ctx("DCC VOICE request not sent: awaiting manual connections", "dcc")); } } @@ -783,20 +841,20 @@ const QString & DccVoiceWindow::target() { // This may change on the fly... m_szTarget.sprintf("%s@%s:%s", - m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data()); + m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data()); return m_szTarget; } -void DccVoiceWindow::getBaseLogFileName(QString &buffer) +void DccVoiceWindow::getBaseLogFileName(QString & buffer) { - buffer.sprintf("dccvoice_%s_%s_%s",m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szLocalFileName.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data()); + buffer.sprintf("dccvoice_%s_%s_%s", m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szLocalFileName.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data()); } void DccVoiceWindow::fillCaptionBuffers() { - KviCString tmp(KviCString::Format,"DCC Voice %s@%s:%s %s", - m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(), - m_pDescriptor->szLocalFileName.toUtf8().data()); + KviCString tmp(KviCString::Format, "DCC Voice %s@%s:%s %s", + m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(), + m_pDescriptor->szLocalFileName.toUtf8().data()); m_szPlainTextCaption = tmp; } @@ -806,7 +864,7 @@ QPixmap * DccVoiceWindow::myIconPtr() return g_pIconManager->getSmallIcon(KviIconManager::DccVoice); } -bool DccVoiceWindow::event(QEvent *e) +bool DccVoiceWindow::event(QEvent * e) { if(e->type() == KVI_THREAD_EVENT) { @@ -816,7 +874,7 @@ bool DccVoiceWindow::event(QEvent *e) { KviError::Code * pError = ((KviThreadDataEvent<KviError::Code> *)e)->getData(); QString ssss = KviError::getDescription(*pError); - output(KVI_OUT_DCCERROR,__tr2qs_ctx("ERROR: %Q","dcc"),&(ssss)); + output(KVI_OUT_DCCERROR, __tr2qs_ctx("ERROR: %Q", "dcc"), &(ssss)); delete pError; m_pUpdateTimer->stop(); updateInfo(); @@ -829,7 +887,7 @@ bool DccVoiceWindow::event(QEvent *e) case KVI_DCC_THREAD_EVENT_MESSAGE: { KviCString * str = ((KviThreadDataEvent<KviCString> *)e)->getData(); - outputNoFmt(KVI_OUT_DCCMSG,__tr_no_xgettext_ctx(str->ptr(),"dcc")); + outputNoFmt(KVI_OUT_DCCMSG, __tr_no_xgettext_ctx(str->ptr(), "dcc")); delete str; return true; } @@ -841,26 +899,25 @@ bool DccVoiceWindow::event(QEvent *e) { case KVI_DCC_VOICE_THREAD_ACTION_START_RECORDING: m_pRecordingLabel->setEnabled(true); - break; + break; case KVI_DCC_VOICE_THREAD_ACTION_STOP_RECORDING: m_pRecordingLabel->setEnabled(false); - break; + break; case KVI_DCC_VOICE_THREAD_ACTION_START_PLAYING: m_pPlayingLabel->setEnabled(true); - break; + break; case KVI_DCC_VOICE_THREAD_ACTION_STOP_PLAYING: m_pPlayingLabel->setEnabled(false); - break; + break; } delete act; return true; } break; default: - qDebug("Invalid event type %d received",((KviThreadEvent *)e)->id()); - break; + qDebug("Invalid event type %d received", ((KviThreadEvent *)e)->id()); + break; } - } return KviWindow::event(e); @@ -874,9 +931,9 @@ void DccVoiceWindow::updateInfo() int iOSize = m_pSlaveThread->m_iOutputBufferSize; int iISize = m_pSlaveThread->m_iInputBufferSize; m_pSlaveThread->m_pInfoMutex->unlock(); - KviCString tmp(KviCString::Format,__tr_ctx("Input buffer: %d bytes","dcc"),iISize); + KviCString tmp(KviCString::Format, __tr_ctx("Input buffer: %d bytes", "dcc"), iISize); m_pInputLabel->setText(tmp.ptr()); - tmp.sprintf(__tr_ctx("Output buffer: %d bytes","dcc"),iOSize); + tmp.sprintf(__tr_ctx("Output buffer: %d bytes", "dcc"), iOSize); m_pOutputLabel->setText(tmp.ptr()); } } @@ -884,8 +941,8 @@ void DccVoiceWindow::updateInfo() void DccVoiceWindow::resizeEvent(QResizeEvent *) { int hght2 = m_pHBox->sizeHint().height(); - m_pHBox->setGeometry(0,0,width(),hght2); - m_pSplitter->setGeometry(0,hght2,width(),height() - hght2); + m_pHBox->setGeometry(0, 0, width(), hght2); + m_pSplitter->setGeometry(0, hght2, width(), height() - hght2); } QSize DccVoiceWindow::sizeHint() const @@ -899,7 +956,7 @@ QSize DccVoiceWindow::sizeHint() const void DccVoiceWindow::handleMarshalError(KviError::Code eError) { QString ssss = KviError::getDescription(eError); - output(KVI_OUT_DCCERROR,__tr2qs_ctx("DCC failed: %Q","dcc"),&ssss); + output(KVI_OUT_DCCERROR, __tr2qs_ctx("DCC failed: %Q", "dcc"), &ssss); m_pTalkButton->setEnabled(false); m_pTalkButton->setChecked(false); m_pRecordingLabel->setEnabled(false); @@ -908,36 +965,35 @@ void DccVoiceWindow::handleMarshalError(KviError::Code eError) void DccVoiceWindow::connected() { - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Connected to %Q:%Q","dcc"), - &(m_pMarshal->remoteIp()),&(m_pMarshal->remotePort())); - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Local end is %Q:%Q","dcc"), - &(m_pMarshal->localIp()),&(m_pMarshal->localPort())); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Connected to %Q:%Q", "dcc"), + &(m_pMarshal->remoteIp()), &(m_pMarshal->remotePort())); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Local end is %Q:%Q", "dcc"), + &(m_pMarshal->localIp()), &(m_pMarshal->localPort())); if(!(m_pDescriptor->bActive)) { - m_pDescriptor->szIp = m_pMarshal->remoteIp(); + m_pDescriptor->szIp = m_pMarshal->remoteIp(); m_pDescriptor->szPort = m_pMarshal->remotePort(); m_pDescriptor->szHost = m_pMarshal->remoteIp(); } updateCaption(); - connect(m_pUpdateTimer,SIGNAL(timeout()),this,SLOT(updateInfo())); + connect(m_pUpdateTimer, SIGNAL(timeout()), this, SLOT(updateInfo())); m_pUpdateTimer->start(1000); KviDccVoiceThreadOptions * opt = new KviDccVoiceThreadOptions; - opt->pCodec = kvi_dcc_voice_get_codec(m_pDescriptor->szCodec.ptr()); - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Actual codec used is '%s'","dcc"),opt->pCodec->name()); + output(KVI_OUT_DCCMSG, __tr2qs_ctx("Actual codec used is '%s'", "dcc"), opt->pCodec->name()); opt->bForceHalfDuplex = KVI_OPTION_BOOL(KviOption_boolDccVoiceForceHalfDuplex); -// opt->bForceDummyReadTrigger = false; + // opt->bForceDummyReadTrigger = false; opt->iPreBufferSize = KVI_OPTION_UINT(KviOption_uintDccVoicePreBufferSize); opt->szSoundDevice = KVI_OPTION_STRING(KviOption_stringDccVoiceSoundDevice).toUtf8().data(); opt->iSampleRate = m_pDescriptor->iSampleRate; - m_pSlaveThread = new DccVoiceThread(this,m_pMarshal->releaseSocket(),opt); - connect(m_pUpdateTimer,SIGNAL(timeout()),this,SLOT(updateInfo())); + m_pSlaveThread = new DccVoiceThread(this, m_pMarshal->releaseSocket(), opt); + connect(m_pUpdateTimer, SIGNAL(timeout()), this, SLOT(updateInfo())); m_pSlaveThread->start(); m_pTalkButton->setEnabled(true); @@ -959,8 +1015,10 @@ void DccVoiceWindow::startTalking() void DccVoiceWindow::startOrStopTalking(bool bStart) { - if(bStart)startTalking(); - else stopTalking(); + if(bStart) + startTalking(); + else + stopTalking(); } int DccVoiceWindow::getMixerVolume(void) const @@ -978,14 +1036,14 @@ int DccVoiceWindow::getMixerVolume(void) const req = KVI_OPTION_BOOL(KviOption_boolDccVoiceVolumeSliderControlsPCM) ? SOUND_MIXER_READ_PCM : SOUND_MIXER_READ_VOLUME; - if(::ioctl(fd,req,&ret)) + if(::ioctl(fd, req, &ret)) { ::close(fd); return 0; } left = (ret & 0x00ff); -// right = (ret & 0xff00) >> 8; + // right = (ret & 0xff00) >> 8; ::close(fd); @@ -1011,17 +1069,16 @@ void DccVoiceWindow::setMixerVolume(int vol) ::ioctl(fd, req, &val); ::close(fd); - m_pVolumeSlider->setToolTip(__tr2qs_ctx("Volume: %1","dcc").arg(-vol)); + m_pVolumeSlider->setToolTip(__tr2qs_ctx("Volume: %1", "dcc").arg(-vol)); #endif } - /* The code below doesn't work. Guess I have to catch some other widget's focusInEvent. Which one ? */ /* The point is to move the volume slider to correct position if for example user switched to * another KVirc window, fired up xmms, changed the volume, and returned to our dcc voice window */ -void DccVoiceWindow::focusInEvent(QFocusEvent *e) +void DccVoiceWindow::focusInEvent(QFocusEvent * e) { -// qDebug("focusInEvent()"); + // qDebug("focusInEvent()"); m_pVolumeSlider->setValue(getMixerVolume()); setMixerVolume(m_pVolumeSlider->value()); diff --git a/src/modules/dcc/DccVoiceWindow.h b/src/modules/dcc/DccVoiceWindow.h index d641c766e..bc37ffecb 100644 --- a/src/modules/dcc/DccVoiceWindow.h +++ b/src/modules/dcc/DccVoiceWindow.h @@ -43,7 +43,7 @@ class QSlider; class DccMarshal; #ifndef _DCC_VOICE_CPP_ - extern bool kvi_dcc_voice_is_valid_codec(const char * codecName); +extern bool kvi_dcc_voice_is_valid_codec(const char * codecName); #endif #define KVI_DCC_VOICE_THREAD_ACTION_START_RECORDING 0 @@ -53,42 +53,45 @@ class DccMarshal; typedef struct _KviDccVoiceThreadOptions { - bool bForceHalfDuplex; - int iPreBufferSize; - int iSampleRate; - KviCString szSoundDevice; + bool bForceHalfDuplex; + int iPreBufferSize; + int iSampleRate; + KviCString szSoundDevice; DccVoiceCodec * pCodec; } KviDccVoiceThreadOptions; class DccVoiceThread : public DccThread { friend class DccVoiceWindow; + public: - DccVoiceThread(KviWindow * wnd,kvi_socket_t fd,KviDccVoiceThreadOptions * opt); + DccVoiceThread(KviWindow * wnd, kvi_socket_t fd, KviDccVoiceThreadOptions * opt); ~DccVoiceThread(); + protected: -// bool m_bUseGsm; + // bool m_bUseGsm; KviDccVoiceThreadOptions * m_pOpt; - int m_soundFd; - int m_soundFdMode; - KviDataBuffer m_outFrameBuffer; - KviDataBuffer m_inFrameBuffer; - KviDataBuffer m_inSignalBuffer; - KviDataBuffer m_outSignalBuffer; - bool m_bPlaying; - bool m_bRecording; - bool m_bRecordingRequestPending; - bool m_bSoundcardChecked; - int m_iLastSignalBufferSize; - long m_iLastSignalBufferTime; -// unsigned int m_uSleepTime; - KviMutex * m_pInfoMutex; + int m_soundFd; + int m_soundFdMode; + KviDataBuffer m_outFrameBuffer; + KviDataBuffer m_inFrameBuffer; + KviDataBuffer m_inSignalBuffer; + KviDataBuffer m_outSignalBuffer; + bool m_bPlaying; + bool m_bRecording; + bool m_bRecordingRequestPending; + bool m_bSoundcardChecked; + int m_iLastSignalBufferSize; + long m_iLastSignalBufferTime; + // unsigned int m_uSleepTime; + KviMutex * m_pInfoMutex; // stuff protected by the mutex: - int m_iInputBufferSize; - int m_iOutputBufferSize; + int m_iInputBufferSize; + int m_iOutputBufferSize; + protected: bool checkSoundcard(); - bool openSoundcardWithDuplexOption(int openMode,int failMode); + bool openSoundcardWithDuplexOption(int openMode, int failMode); bool openSoundcard(int mode); bool openSoundcardForWriting(); bool openSoundcardForReading(); @@ -102,33 +105,34 @@ protected: virtual void run(); }; - class DccVoiceWindow : public DccWindow { Q_OBJECT public: - DccVoiceWindow(DccDescriptor * dcc,const char * name); + DccVoiceWindow(DccDescriptor * dcc, const char * name); ~DccVoiceWindow(); + protected: - KviTalHBox * m_pHBox; - QSlider * m_pVolumeSlider; - QLabel * m_pInputLabel; - QLabel * m_pOutputLabel; - QLabel * m_pRecordingLabel; - QLabel * m_pPlayingLabel; - QToolButton * m_pTalkButton; - QTimer * m_pUpdateTimer; - QString m_szTarget; - DccVoiceThread * m_pSlaveThread; + KviTalHBox * m_pHBox; + QSlider * m_pVolumeSlider; + QLabel * m_pInputLabel; + QLabel * m_pOutputLabel; + QLabel * m_pRecordingLabel; + QLabel * m_pPlayingLabel; + QToolButton * m_pTalkButton; + QTimer * m_pUpdateTimer; + QString m_szTarget; + DccVoiceThread * m_pSlaveThread; + protected: virtual void focusInEvent(QFocusEvent *); virtual const QString & target(); virtual void fillCaptionBuffers(); virtual QPixmap * myIconPtr(); - virtual void resizeEvent(QResizeEvent *e); + virtual void resizeEvent(QResizeEvent * e); virtual QSize sizeHint() const; - virtual bool event(QEvent *e); - virtual void getBaseLogFileName(QString &buffer); + virtual bool event(QEvent * e); + virtual void getBaseLogFileName(QString & buffer); void startTalking(); void stopTalking(); void startConnection(); @@ -140,7 +144,7 @@ protected slots: void startOrStopTalking(bool bStart); void setMixerVolume(int); void connectionInProgress(); -// void stopTalking(); + // void stopTalking(); }; #if 0 @@ -437,7 +441,6 @@ void KviVoiceConference::conferenceThread() // read raw audio data at sample rate X, sample size Y // multiplex data always at this sample rate and sample size - #endif #endif //_VOICE_H_ diff --git a/src/modules/dcc/DccWindow.cpp b/src/modules/dcc/DccWindow.cpp index 3f4b47994..e9eb2c597 100644 --- a/src/modules/dcc/DccWindow.cpp +++ b/src/modules/dcc/DccWindow.cpp @@ -26,20 +26,22 @@ #include "KviTalHBox.h" -DccWindow::DccWindow(KviWindow::Type eType,const char * name,DccDescriptor * d) -: KviWindow(eType,name, d->console()) +DccWindow::DccWindow(KviWindow::Type eType, const char * name, DccDescriptor * d) + : KviWindow(eType, name, d->console()) { m_pDescriptor = d; m_pDescriptor->setWindow(this); - m_pMarshal = 0; + m_pMarshal = 0; m_pButtonBox = new KviTalHBox(this); createTextEncodingButton(m_pButtonBox); } DccWindow::~DccWindow() { - if(m_pMarshal)delete m_pMarshal; - if(m_pDescriptor)delete m_pDescriptor; + if(m_pMarshal) + delete m_pMarshal; + if(m_pDescriptor) + delete m_pDescriptor; } KviWindow * DccWindow::dccMarshalOutputWindow() diff --git a/src/modules/dcc/DccWindow.h b/src/modules/dcc/DccWindow.h index 58d6f3355..31a4710fd 100644 --- a/src/modules/dcc/DccWindow.h +++ b/src/modules/dcc/DccWindow.h @@ -35,17 +35,19 @@ class DccWindow : public KviWindow, public DccMarshalOutputContext { Q_OBJECT public: - DccWindow(KviWindow::Type eType,const char * name,DccDescriptor * d); + DccWindow(KviWindow::Type eType, const char * name, DccDescriptor * d); ~DccWindow(); + protected: - DccDescriptor * m_pDescriptor; - DccMarshal * m_pMarshal; + DccDescriptor * m_pDescriptor; + DccMarshal * m_pMarshal; + public: - DccDescriptor * descriptor() { return m_pDescriptor; }; - const DccMarshal * marshal() { return m_pMarshal; }; - virtual DccThread * getSlaveThread() { return 0; }; - virtual KviWindow * dccMarshalOutputWindow(); - virtual const char * dccMarshalOutputContextString(); + DccDescriptor * descriptor() { return m_pDescriptor; }; + const DccMarshal * marshal() { return m_pMarshal; }; + virtual DccThread * getSlaveThread() { return 0; }; + virtual KviWindow * dccMarshalOutputWindow(); + virtual const char * dccMarshalOutputContextString(); }; #endif //_WINDOW_H_ diff --git a/src/modules/dcc/canvaswidget.cpp b/src/modules/dcc/canvaswidget.cpp index 4660c3173..e89326c49 100644 --- a/src/modules/dcc/canvaswidget.cpp +++ b/src/modules/dcc/canvaswidget.cpp @@ -25,1486 +25,1515 @@ #include "canvaswidget.h" #ifdef COMPILE_DCC_CANVAS - #include "KviCString.h" - #include "KviLocale.h" +#include "KviCString.h" +#include "KviLocale.h" - #include <QCursor> - #include <QPainter> - #include <QLineEdit> - #include <QComboBox> - #include <QValidator> - #include <QMenu> +#include <QCursor> +#include <QPainter> +#include <QLineEdit> +#include <QComboBox> +#include <QValidator> +#include <QMenu> - #include <math.h> - #include <stdlib.h> +#include <math.h> +#include <stdlib.h> - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviCanvasRectangleItem - // +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviCanvasRectangleItem +// - KviCanvasRectangleItem::KviCanvasRectangleItem(QCanvas * c,int x,int y,int w,int h) - : QCanvasRectangle(x,y,w,h,c) - { - } +KviCanvasRectangleItem::KviCanvasRectangleItem(QCanvas * c, int x, int y, int w, int h) + : QCanvasRectangle(x, y, w, h, c) +{ +} - KviCanvasRectangleItem::~KviCanvasRectangleItem() - { - } +KviCanvasRectangleItem::~KviCanvasRectangleItem() +{ +} - void KviCanvasRectangleItem::drawSelection(QPainter &p) - { - p.setRasterOp(NotROP); - p.fillRect((int)x() + 1,(int)y() + 1,width() - 2,height() - 2,QBrush(Dense6Pattern)); - p.setPen(QPen(DotLine)); - p.drawRect((int)x(),(int)y(),width(),height()); - p.setRasterOp(CopyROP); - } +void KviCanvasRectangleItem::drawSelection(QPainter & p) +{ + p.setRasterOp(NotROP); + p.fillRect((int)x() + 1, (int)y() + 1, width() - 2, height() - 2, QBrush(Dense6Pattern)); + p.setPen(QPen(DotLine)); + p.drawRect((int)x(), (int)y(), width(), height()); + p.setRasterOp(CopyROP); +} - void KviCanvasRectangleItem::setProperty(const QString &property,const QVariant &val) +void KviCanvasRectangleItem::setProperty(const QString & property, const QVariant & val) +{ + if(m_properties[property].isValid()) { - if(m_properties[property].isValid()) - { - m_properties.replace(property,val); - hide(); - show(); - } + m_properties.replace(property, val); + hide(); + show(); } +} +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviCanvasPolygon +// +KviCanvasPolygon::KviCanvasPolygon(QCanvas * c, int x, int y, QPointArray & pnts, double dScaleFactor) + : QCanvasPolygon(c) +{ + m_properties.insert("clrForeground", QVariant(QColor(0, 0, 0))); + m_properties.insert("uLineWidth", QVariant((unsigned int)0)); - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviCanvasPolygon - // - KviCanvasPolygon::KviCanvasPolygon(QCanvas * c,int x,int y,QPointArray &pnts,double dScaleFactor) - : QCanvasPolygon(c) - { - m_properties.insert("clrForeground",QVariant(QColor(0,0,0))); - m_properties.insert("uLineWidth",QVariant((unsigned int)0)); + m_properties.insert("clrBackground", QVariant(QColor(0, 0, 0))); + m_properties.insert("bHasBackground", QVariant(false, 1)); - m_properties.insert("clrBackground",QVariant(QColor(0,0,0))); - m_properties.insert("bHasBackground",QVariant(false,1)); + m_dScaleFactor = dScaleFactor; + m_points = pnts; - m_dScaleFactor = dScaleFactor; - m_points = pnts; + resetPoints(); + move(x, y); +} - resetPoints(); - move(x,y); - } +KviCanvasPolygon::~KviCanvasPolygon() +{ +} - KviCanvasPolygon::~KviCanvasPolygon() - { - } +void KviCanvasPolygon::setScaleFactor(double dScaleFactor) +{ + m_dScaleFactor = dScaleFactor; + resetPoints(); +} - void KviCanvasPolygon::setScaleFactor(double dScaleFactor) - { - m_dScaleFactor = dScaleFactor; - resetPoints(); - } +void KviCanvasPolygon::setInternalPoints(const QPointArray & pnts) +{ + m_points = pnts; + resetPoints(); +} - void KviCanvasPolygon::setInternalPoints(const QPointArray &pnts) +void KviCanvasPolygon::resetPoints() +{ + QPointArray scaled(m_points.size()); + for(unsigned int i = 0; i < m_points.size(); i++) { - m_points = pnts; - resetPoints(); - + int px; + int py; + m_points.point(i, &px, &py); + px = (int)(px * m_dScaleFactor); + py = (int)(py * m_dScaleFactor); + scaled.setPoint(i, px, py); } + setPoints(scaled); +} - void KviCanvasPolygon::resetPoints() - { - QPointArray scaled(m_points.size()); - for(unsigned int i=0;i<m_points.size();i++) - { - int px; - int py; - m_points.point(i,&px,&py); - px = (int)(px * m_dScaleFactor); - py = (int)(py * m_dScaleFactor); - scaled.setPoint(i,px,py); - } - setPoints(scaled); - } +int KviCanvasPolygon::rtti() const +{ + return KVI_CANVAS_RTTI_POLYGON; +} - int KviCanvasPolygon::rtti() const +void KviCanvasPolygon::setProperty(const QString & property, const QVariant & val) +{ + if(m_properties[property].isValid()) { - return KVI_CANVAS_RTTI_POLYGON; - } - - void KviCanvasPolygon::setProperty(const QString &property,const QVariant &val) - { - if(m_properties[property].isValid()) + m_properties.replace(property, val); + if((property == "clrForeground") || (property == "uLineWidth")) { - m_properties.replace(property,val); - if((property == "clrForeground") || (property == "uLineWidth")) - { - setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt())); - } else if((property == "clrBackground") || (property == "bHasBackground")) - { - if(m_properties["bHasBackground"].asBool()) - setBrush(QBrush(m_properties["clrBackground"].asColor())); - else - setBrush(QBrush()); - } else { - hide(); show(); - } + setPen(QPen(m_properties["clrForeground"].asColor(), m_properties["uLineWidth"].toInt())); } - } - - void KviCanvasPolygon::draw(QPainter &p) - { - if(isEnabled()) + else if((property == "clrBackground") || (property == "bHasBackground")) { - p.setBrush(brush()); - p.setPen(pen()); - p.drawPolygon(areaPoints()); + if(m_properties["bHasBackground"].asBool()) + setBrush(QBrush(m_properties["clrBackground"].asColor())); + else + setBrush(QBrush()); } - - if(isSelected()) + else { - p.setRasterOp(NotROP); - p.setPen(QPen(DotLine)); - p.drawPolygon(areaPoints()); - p.setBrush(QBrush()); - double dVal = 10; - p.drawEllipse((int)(x() - dVal),(int)(y() - dVal),(int)(dVal * 2),(int)(dVal * 2)); - p.drawLine((int)(x() - (dVal * 2)),(int)y(),(int)(x() + (dVal * 2)),(int)y()); - p.drawLine((int)x(),(int)(y() - (dVal * 2)),(int)x(),(int)(y() + (dVal * 2))); - p.setRasterOp(CopyROP); - canvas()->setChanged(QRect((int)(x() - dVal),(int)(y() - dVal),(int)(dVal * 4),(int)(dVal * 4))); + hide(); + show(); } } +} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviCanvasEllipticItem - // - - KviCanvasEllipticItem::KviCanvasEllipticItem(QCanvas * c,int x,int y,int w,int h) - : KviCanvasRectangleItem(c,x,y,w,h) +void KviCanvasPolygon::draw(QPainter & p) +{ + if(isEnabled()) { - m_properties.insert("clrForeground",QVariant(QColor(0,0,0))); - m_properties.insert("uLineWidth",QVariant((unsigned int)0)); - - m_properties.insert("clrBackground",QVariant(QColor(0,0,0))); - m_properties.insert("bHasBackground",QVariant(false,1)); - - // m_properties.insert("iStartAngle",QVariant(0)); - // m_properties.insert("iEndAngle",QVariant(360)); + p.setBrush(brush()); + p.setPen(pen()); + p.drawPolygon(areaPoints()); } - KviCanvasEllipticItem::~KviCanvasEllipticItem() + if(isSelected()) { + p.setRasterOp(NotROP); + p.setPen(QPen(DotLine)); + p.drawPolygon(areaPoints()); + p.setBrush(QBrush()); + double dVal = 10; + p.drawEllipse((int)(x() - dVal), (int)(y() - dVal), (int)(dVal * 2), (int)(dVal * 2)); + p.drawLine((int)(x() - (dVal * 2)), (int)y(), (int)(x() + (dVal * 2)), (int)y()); + p.drawLine((int)x(), (int)(y() - (dVal * 2)), (int)x(), (int)(y() + (dVal * 2))); + p.setRasterOp(CopyROP); + canvas()->setChanged(QRect((int)(x() - dVal), (int)(y() - dVal), (int)(dVal * 4), (int)(dVal * 4))); } +} - void KviCanvasEllipticItem::draw(QPainter &p) - { - if(isEnabled()) - { - QBrush b = p.brush(); - if(m_properties["bHasBackground"].asBool())p.setBrush(m_properties["clrBackground"].asColor()); - else p.setBrush(QBrush()); - p.setPen(pen()); - drawContent(p); - p.setBrush(b); - } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviCanvasEllipticItem +// - if(isSelected())drawSelection(p); - } +KviCanvasEllipticItem::KviCanvasEllipticItem(QCanvas * c, int x, int y, int w, int h) + : KviCanvasRectangleItem(c, x, y, w, h) +{ + m_properties.insert("clrForeground", QVariant(QColor(0, 0, 0))); + m_properties.insert("uLineWidth", QVariant((unsigned int)0)); - void KviCanvasEllipticItem::drawContent(QPainter &p) - { - } + m_properties.insert("clrBackground", QVariant(QColor(0, 0, 0))); + m_properties.insert("bHasBackground", QVariant(false, 1)); - void KviCanvasEllipticItem::setProperty(const QString & property,const QVariant &val) - { - if(m_properties[property].isValid()) - { - m_properties.replace(property,val); - if((property == "clrForeground") || (property == "uLineWidth")) - { - setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt())); - } else { - hide(); show(); - } - } - } + // m_properties.insert("iStartAngle",QVariant(0)); + // m_properties.insert("iEndAngle",QVariant(360)); +} + +KviCanvasEllipticItem::~KviCanvasEllipticItem() +{ +} - int KviCanvasEllipticItem::rtti() const +void KviCanvasEllipticItem::draw(QPainter & p) +{ + if(isEnabled()) { - return KVI_CANVAS_RTTI_ELLIPSE; + QBrush b = p.brush(); + if(m_properties["bHasBackground"].asBool()) + p.setBrush(m_properties["clrBackground"].asColor()); + else + p.setBrush(QBrush()); + p.setPen(pen()); + drawContent(p); + p.setBrush(b); } + if(isSelected()) + drawSelection(p); +} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviCanvasEllipse - // - +void KviCanvasEllipticItem::drawContent(QPainter & p) +{ +} - KviCanvasEllipse::KviCanvasEllipse(QCanvas * c,int x,int y,int w,int h) - : KviCanvasEllipticItem(c,x,y,w,h) +void KviCanvasEllipticItem::setProperty(const QString & property, const QVariant & val) +{ + if(m_properties[property].isValid()) { + m_properties.replace(property, val); + if((property == "clrForeground") || (property == "uLineWidth")) + { + setPen(QPen(m_properties["clrForeground"].asColor(), m_properties["uLineWidth"].toInt())); + } + else + { + hide(); + show(); + } } +} - KviCanvasEllipse::~KviCanvasEllipse() - { - } +int KviCanvasEllipticItem::rtti() const +{ + return KVI_CANVAS_RTTI_ELLIPSE; +} - int KviCanvasEllipse::rtti() const - { - return KVI_CANVAS_RTTI_ELLIPSE; - } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviCanvasEllipse +// - void KviCanvasEllipse::drawContent(QPainter &p) - { - p.drawEllipse((int)x(),(int)y(),width(),height()); - } +KviCanvasEllipse::KviCanvasEllipse(QCanvas * c, int x, int y, int w, int h) + : KviCanvasEllipticItem(c, x, y, w, h) +{ +} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviCanvasPie - // +KviCanvasEllipse::~KviCanvasEllipse() +{ +} +int KviCanvasEllipse::rtti() const +{ + return KVI_CANVAS_RTTI_ELLIPSE; +} - KviCanvasPie::KviCanvasPie(QCanvas * c,int x,int y,int w,int h) - : KviCanvasEllipticItem(c,x,y,w,h) - { - m_properties.insert("iStartAngle",QVariant((int)0)); - m_properties.insert("iExtensionAngle",QVariant((int)360)); - } +void KviCanvasEllipse::drawContent(QPainter & p) +{ + p.drawEllipse((int)x(), (int)y(), width(), height()); +} - KviCanvasPie::~KviCanvasPie() - { - } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviCanvasPie +// - int KviCanvasPie::rtti() const - { - return KVI_CANVAS_RTTI_PIE; - } +KviCanvasPie::KviCanvasPie(QCanvas * c, int x, int y, int w, int h) + : KviCanvasEllipticItem(c, x, y, w, h) +{ + m_properties.insert("iStartAngle", QVariant((int)0)); + m_properties.insert("iExtensionAngle", QVariant((int)360)); +} - void KviCanvasPie::drawContent(QPainter &p) - { - int iStartAngle = m_properties["iStartAngle"].asInt() * 16; - int iEndAngle = m_properties["iExtensionAngle"].asInt() * 16; - p.drawPie((int)x(),(int)y(),width(),height(),iStartAngle,iEndAngle); - } +KviCanvasPie::~KviCanvasPie() +{ +} +int KviCanvasPie::rtti() const +{ + return KVI_CANVAS_RTTI_PIE; +} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviCanvasChord - // - KviCanvasChord::KviCanvasChord(QCanvas * c,int x,int y,int w,int h) - : KviCanvasEllipticItem(c,x,y,w,h) - { - m_properties.insert("iStartAngle",QVariant((int)0)); - m_properties.insert("iExtensionAngle",QVariant((int)360)); - } +void KviCanvasPie::drawContent(QPainter & p) +{ + int iStartAngle = m_properties["iStartAngle"].asInt() * 16; + int iEndAngle = m_properties["iExtensionAngle"].asInt() * 16; + p.drawPie((int)x(), (int)y(), width(), height(), iStartAngle, iEndAngle); +} - KviCanvasChord::~KviCanvasChord() - { - } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviCanvasChord +// +KviCanvasChord::KviCanvasChord(QCanvas * c, int x, int y, int w, int h) + : KviCanvasEllipticItem(c, x, y, w, h) +{ + m_properties.insert("iStartAngle", QVariant((int)0)); + m_properties.insert("iExtensionAngle", QVariant((int)360)); +} - int KviCanvasChord::rtti() const - { - return KVI_CANVAS_RTTI_CHORD; - } +KviCanvasChord::~KviCanvasChord() +{ +} - void KviCanvasChord::drawContent(QPainter &p) - { - int iStartAngle = m_properties["iStartAngle"].asInt() * 16; - int iEndAngle = m_properties["iExtensionAngle"].asInt() * 16; - p.drawChord((int)x(),(int)y(),width(),height(),iStartAngle,iEndAngle); - } +int KviCanvasChord::rtti() const +{ + return KVI_CANVAS_RTTI_CHORD; +} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviCanvasRectangle - // - KviCanvasRectangle::KviCanvasRectangle(QCanvas * c,int x,int y,int w,int h) - : KviCanvasRectangleItem(c,x,y,w,h) - { - m_properties.insert("clrForeground",QVariant(QColor(0,0,0))); - m_properties.insert("uLineWidth",QVariant((unsigned int)0)); +void KviCanvasChord::drawContent(QPainter & p) +{ + int iStartAngle = m_properties["iStartAngle"].asInt() * 16; + int iEndAngle = m_properties["iExtensionAngle"].asInt() * 16; + p.drawChord((int)x(), (int)y(), width(), height(), iStartAngle, iEndAngle); +} - m_properties.insert("clrBackground",QVariant(QColor(0,0,0))); - m_properties.insert("bHasBackground",QVariant(false,1)); - } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviCanvasRectangle +// +KviCanvasRectangle::KviCanvasRectangle(QCanvas * c, int x, int y, int w, int h) + : KviCanvasRectangleItem(c, x, y, w, h) +{ + m_properties.insert("clrForeground", QVariant(QColor(0, 0, 0))); + m_properties.insert("uLineWidth", QVariant((unsigned int)0)); - KviCanvasRectangle::~KviCanvasRectangle() - { - } + m_properties.insert("clrBackground", QVariant(QColor(0, 0, 0))); + m_properties.insert("bHasBackground", QVariant(false, 1)); +} - int KviCanvasRectangle::rtti() const - { - return KVI_CANVAS_RTTI_RECTANGLE; - } +KviCanvasRectangle::~KviCanvasRectangle() +{ +} - void KviCanvasRectangle::setProperty(const QString &property,const QVariant &val) +int KviCanvasRectangle::rtti() const +{ + return KVI_CANVAS_RTTI_RECTANGLE; +} + +void KviCanvasRectangle::setProperty(const QString & property, const QVariant & val) +{ + if(m_properties[property].isValid()) { - if(m_properties[property].isValid()) + m_properties.replace(property, val); + if((property == "clrForeground") || (property == "uLineWidth")) { - m_properties.replace(property,val); - if((property == "clrForeground") || (property == "uLineWidth")) - { - setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt())); - } else { - hide(); show(); - } + setPen(QPen(m_properties["clrForeground"].asColor(), m_properties["uLineWidth"].toInt())); + } + else + { + hide(); + show(); } } +} - void KviCanvasRectangle::draw(QPainter & p) +void KviCanvasRectangle::draw(QPainter & p) +{ + if(isEnabled()) { - if(isEnabled()) + if(m_properties["bHasBackground"].asBool()) { - if(m_properties["bHasBackground"].asBool()) - { - p.fillRect((int)x() + 1,(int)y() + 1,width() - 2,height() - 2,m_properties["clrBackground"].asColor()); - } - p.setPen(pen()); - p.drawRect((int)x(),(int)y(),width(),height()); + p.fillRect((int)x() + 1, (int)y() + 1, width() - 2, height() - 2, m_properties["clrBackground"].asColor()); } - - if(isSelected())drawSelection(p); + p.setPen(pen()); + p.drawRect((int)x(), (int)y(), width(), height()); } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviCanvasRichText - // - KviCanvasRichText::KviCanvasRichText(QCanvas * c,int x,int y,int w,int h) - : KviCanvasRectangleItem(c,x,y,w,h) - { - QFont f = QFont(); - f.setStyleHint(QFont::SansSerif); - f.setPointSize(12); - m_properties.insert("szText",QVariant(QString("Insert here your <font color=\"#FF0000\"><b>RICH TEXT</b></font>"))); - m_properties.insert("fntDefault",QVariant(f)); - } + if(isSelected()) + drawSelection(p); +} - KviCanvasRichText::~KviCanvasRichText() - { - } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviCanvasRichText +// +KviCanvasRichText::KviCanvasRichText(QCanvas * c, int x, int y, int w, int h) + : KviCanvasRectangleItem(c, x, y, w, h) +{ + QFont f = QFont(); + f.setStyleHint(QFont::SansSerif); + f.setPointSize(12); + m_properties.insert("szText", QVariant(QString("Insert here your <font color=\"#FF0000\"><b>RICH TEXT</b></font>"))); + m_properties.insert("fntDefault", QVariant(f)); +} + +KviCanvasRichText::~KviCanvasRichText() +{ +} + +int KviCanvasRichText::rtti() const +{ + return KVI_CANVAS_RTTI_RICHTEXT; +} - int KviCanvasRichText::rtti() const +void KviCanvasRichText::draw(QPainter & p) +{ + if(isEnabled()) { - return KVI_CANVAS_RTTI_RICHTEXT; + QString szText = m_properties["szText"].asString(); + QSimpleRichText text(szText, m_properties["fntDefault"].asFont()); + text.setWidth(width()); + text.draw(&p, (int)x() + 1, (int)y() + 1, QRegion(QRect((int)x() + 1, (int)y() + 1, width(), height())), QColorGroup()); } - void KviCanvasRichText::draw(QPainter & p) - { - if(isEnabled()) - { - QString szText = m_properties["szText"].asString(); - QSimpleRichText text(szText,m_properties["fntDefault"].asFont()); - text.setWidth(width()); - text.draw(&p,(int)x() + 1,(int)y() + 1,QRegion(QRect((int)x() + 1,(int)y() + 1,width(),height())),QColorGroup()); - } + if(isSelected()) + drawSelection(p); +} - if(isSelected())drawSelection(p); - } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviCanvasLine +// +KviCanvasLine::KviCanvasLine(QCanvas * c, int x1, int y1, int x2, int y2) + : QCanvasLine(c) +{ + setPoints(x1, y1, x2, y2); + m_properties.insert("uLineWidth", QVariant((unsigned int)0)); + m_properties.insert("clrForeground", QVariant(QColor())); +} +KviCanvasLine::~KviCanvasLine() +{ +} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviCanvasLine - // - KviCanvasLine::KviCanvasLine(QCanvas * c,int x1,int y1,int x2,int y2) - : QCanvasLine(c) +void KviCanvasLine::setProperty(const QString & property, const QVariant & val) +{ + m_properties.replace(property, val); + if((property == "uLineWidth") || (property == "clrForeground")) { - setPoints(x1,y1,x2,y2); - m_properties.insert("uLineWidth",QVariant((unsigned int)0)); - m_properties.insert("clrForeground",QVariant(QColor())); + setPen(QPen(m_properties["clrForeground"].asColor(), m_properties["uLineWidth"].toInt())); } +} - KviCanvasLine::~KviCanvasLine() - { - } +int KviCanvasLine::rtti() const +{ + return KVI_CANVAS_RTTI_LINE; +} - void KviCanvasLine::setProperty(const QString &property,const QVariant &val) +void KviCanvasLine::draw(QPainter & p) +{ + if(isEnabled()) { - m_properties.replace(property,val); - if((property == "uLineWidth") || (property == "clrForeground")) - { - setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt())); - } + p.setPen(pen()); + p.drawLine(startPoint(), endPoint()); } - int KviCanvasLine::rtti() const + if(isSelected()) { - return KVI_CANVAS_RTTI_LINE; + p.setRasterOp(NotROP); + p.setPen(QPen(DotLine)); + p.drawLine(startPoint(), endPoint()); + p.setRasterOp(CopyROP); } +} - void KviCanvasLine::draw(QPainter &p) - { - if(isEnabled()) - { - p.setPen(pen()); - p.drawLine(startPoint(),endPoint()); - } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviCanvasView +// +KviCanvasView::KviCanvasView(QCanvas * c, DccCanvasWidget * cw, QWidget * par) + : QCanvasView(c, par) +{ + m_pCanvasWidget = cw; + m_state = Idle; + m_dragMode = None; + m_pSelectedItem = 0; + viewport()->setMouseTracking(true); +} - if(isSelected()) - { - p.setRasterOp(NotROP); - p.setPen(QPen(DotLine)); - p.drawLine(startPoint(),endPoint()); - p.setRasterOp(CopyROP); - } - } +KviCanvasView::~KviCanvasView() +{ +} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviCanvasView - // - KviCanvasView::KviCanvasView(QCanvas * c,DccCanvasWidget * cw,QWidget * par) - : QCanvasView(c,par) - { - m_pCanvasWidget = cw; - m_state = Idle; - m_dragMode = None; - m_pSelectedItem = 0; - viewport()->setMouseTracking(true); - } +void KviCanvasView::insertRectangle() +{ + m_state = SelectOrigin; + setCursor(crossCursor); + m_objectToInsert = Rectangle; +} - KviCanvasView::~KviCanvasView() - { - } +void KviCanvasView::insertRichText() +{ + m_state = SelectOrigin; + setCursor(crossCursor); + m_objectToInsert = RichText; +} - void KviCanvasView::insertRectangle() - { - m_state = SelectOrigin; - setCursor(crossCursor); - m_objectToInsert = Rectangle; - } +void KviCanvasView::insertLine() +{ + m_state = SelectOrigin; + setCursor(crossCursor); + m_objectToInsert = Line; +} - void KviCanvasView::insertRichText() - { - m_state = SelectOrigin; - setCursor(crossCursor); - m_objectToInsert = RichText; - } +void KviCanvasView::insertEllipse() +{ + m_state = SelectOrigin; + setCursor(crossCursor); + m_objectToInsert = Ellipse; +} - void KviCanvasView::insertLine() - { - m_state = SelectOrigin; - setCursor(crossCursor); - m_objectToInsert = Line; - } +void KviCanvasView::insertPie() +{ + m_state = SelectOrigin; + setCursor(crossCursor); + m_objectToInsert = Pie; +} - void KviCanvasView::insertEllipse() - { - m_state = SelectOrigin; - setCursor(crossCursor); - m_objectToInsert = Ellipse; - } +void KviCanvasView::insertChord() +{ + m_state = SelectOrigin; + setCursor(crossCursor); + m_objectToInsert = Chord; +} - void KviCanvasView::insertPie() - { - m_state = SelectOrigin; - setCursor(crossCursor); - m_objectToInsert = Pie; - } +void KviCanvasView::insertPolygonTriangle() +{ + m_state = SelectOrigin; + setCursor(crossCursor); + m_objectToInsert = PolygonTriangle; +} - void KviCanvasView::insertChord() - { - m_state = SelectOrigin; - setCursor(crossCursor); - m_objectToInsert = Chord; - } +void KviCanvasView::insertPolygonRectangle() +{ + m_state = SelectOrigin; + setCursor(crossCursor); + m_objectToInsert = PolygonRectangle; +} - void KviCanvasView::insertPolygonTriangle() - { - m_state = SelectOrigin; - setCursor(crossCursor); - m_objectToInsert = PolygonTriangle; - } +void KviCanvasView::insertPolygonPentagon() +{ + m_state = SelectOrigin; + setCursor(crossCursor); + m_objectToInsert = PolygonPentagon; +} - void KviCanvasView::insertPolygonRectangle() - { - m_state = SelectOrigin; - setCursor(crossCursor); - m_objectToInsert = PolygonRectangle; - } +void KviCanvasView::insertPolygonHexagon() +{ + m_state = SelectOrigin; + setCursor(crossCursor); + m_objectToInsert = PolygonPentagon; +} - void KviCanvasView::insertPolygonPentagon() - { - m_state = SelectOrigin; - setCursor(crossCursor); - m_objectToInsert = PolygonPentagon; - } +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif - void KviCanvasView::insertPolygonHexagon() +static void calcPolygonPoints(QPointArray & pnts, unsigned int nVertices) +{ + double dDelta = (2 * M_PI) / nVertices; + for(unsigned int i = 0; i < nVertices; i++) { - m_state = SelectOrigin; - setCursor(crossCursor); - m_objectToInsert = PolygonPentagon; + double dAng = dDelta * i; + double theX = 300 * sin(dAng); + double theY = 300 * cos(dAng); + pnts.setPoint(i, (int)theX, (int)theY); } +} - #ifndef M_PI - #define M_PI 3.14159265358979323846 - #endif - - static void calcPolygonPoints(QPointArray &pnts,unsigned int nVertices) - { - double dDelta = (2 * M_PI) / nVertices; - for(unsigned int i=0;i<nVertices;i++) - { - double dAng = dDelta * i; - double theX = 300 * sin(dAng); - double theY = 300 * cos(dAng); - pnts.setPoint(i,(int)theX,(int)theY); - } - } +void KviCanvasView::insertObjectAt(const QPoint & pnt, ObjectType o) +{ + QCanvasItem * r = 0; - void KviCanvasView::insertObjectAt(const QPoint & pnt,ObjectType o) + switch(o) { - QCanvasItem * r = 0; - - switch(o) - { - case Rectangle: - r = new KviCanvasRectangle(canvas(),pnt.x(),pnt.y(),0,0); - break; - case RichText: - r = new KviCanvasRichText(canvas(),pnt.x(),pnt.y(),0,0); + case Rectangle: + r = new KviCanvasRectangle(canvas(), pnt.x(), pnt.y(), 0, 0); break; - case Line: - r = new KviCanvasLine(canvas(),pnt.x(),pnt.y(),pnt.x(),pnt.y()); + case RichText: + r = new KviCanvasRichText(canvas(), pnt.x(), pnt.y(), 0, 0); break; - case Ellipse: - r = new KviCanvasEllipse(canvas(),pnt.x(),pnt.y(),0,0); + case Line: + r = new KviCanvasLine(canvas(), pnt.x(), pnt.y(), pnt.x(), pnt.y()); break; - case Pie: - r = new KviCanvasPie(canvas(),pnt.x(),pnt.y(),0,0); + case Ellipse: + r = new KviCanvasEllipse(canvas(), pnt.x(), pnt.y(), 0, 0); break; - case Chord: - r = new KviCanvasChord(canvas(),pnt.x(),pnt.y(),0,0); + case Pie: + r = new KviCanvasPie(canvas(), pnt.x(), pnt.y(), 0, 0); break; - case PolygonTriangle: - { - QPointArray pa(3); - pa.setPoint(0,0,-500); - pa.setPoint(1,-450,220); - pa.setPoint(2,450,220); - r = new KviCanvasPolygon(canvas(),pnt.x(),pnt.y(),pa,0.1); - } - break; - case PolygonRectangle: - { - QPointArray pa(4); - pa.setPoint(0,-350,-350); - pa.setPoint(1,350,-350); - pa.setPoint(2,350,350); - pa.setPoint(3,-350,350); - r = new KviCanvasPolygon(canvas(),pnt.x(),pnt.y(),pa,0.1); - } - break; - case PolygonPentagon: - { - QPointArray pa(5); - calcPolygonPoints(pa,5); - r = new KviCanvasPolygon(canvas(),pnt.x(),pnt.y(),pa,0.1); - } - break; - case PolygonHexagon: - { - QPointArray pa(6); - calcPolygonPoints(pa,6); - r = new KviCanvasPolygon(canvas(),pnt.x(),pnt.y(),pa,0.1); - } + case Chord: + r = new KviCanvasChord(canvas(), pnt.x(), pnt.y(), 0, 0); break; + case PolygonTriangle: + { + QPointArray pa(3); + pa.setPoint(0, 0, -500); + pa.setPoint(1, -450, 220); + pa.setPoint(2, 450, 220); + r = new KviCanvasPolygon(canvas(), pnt.x(), pnt.y(), pa, 0.1); } - - if(r) + break; + case PolygonRectangle: { - setItemSelected(r); - r->setEnabled(true); - r->show(); + QPointArray pa(4); + pa.setPoint(0, -350, -350); + pa.setPoint(1, 350, -350); + pa.setPoint(2, 350, 350); + pa.setPoint(3, -350, 350); + r = new KviCanvasPolygon(canvas(), pnt.x(), pnt.y(), pa, 0.1); } - - switch(KVI_CANVAS_RTTI_CONTROL_TYPE(r)) + break; + case PolygonPentagon: { - case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: - beginDragRectangle((KviCanvasRectangleItem *)r,pnt,true); - break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: - beginDragLine((KviCanvasLine *)r,pnt,true); - break; - // case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: - // beginDragPolygon((KviCanvasPolygon *)r,pnt,true); - // break; + QPointArray pa(5); + calcPolygonPoints(pa, 5); + r = new KviCanvasPolygon(canvas(), pnt.x(), pnt.y(), pa, 0.1); } + break; + case PolygonHexagon: + { + QPointArray pa(6); + calcPolygonPoints(pa, 6); + r = new KviCanvasPolygon(canvas(), pnt.x(), pnt.y(), pa, 0.1); + } + break; + } - // canvas()->update(); + if(r) + { + setItemSelected(r); + r->setEnabled(true); + r->show(); } - void KviCanvasView::setItemSelected(QCanvasItem * it) + switch(KVI_CANVAS_RTTI_CONTROL_TYPE(r)) { - clearSelection(); - it->setSelected(true); - m_pSelectedItem = it; - m_pCanvasWidget->m_pPropertiesWidget->editItem(it); + case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: + beginDragRectangle((KviCanvasRectangleItem *)r, pnt, true); + break; + case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: + beginDragLine((KviCanvasLine *)r, pnt, true); + break; + // case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: + // beginDragPolygon((KviCanvasPolygon *)r,pnt,true); + // break; + } + + // canvas()->update(); +} + +void KviCanvasView::setItemSelected(QCanvasItem * it) +{ + clearSelection(); + it->setSelected(true); + m_pSelectedItem = it; + m_pCanvasWidget->m_pPropertiesWidget->editItem(it); +} +void KviCanvasView::clearSelection() +{ + if(!m_pSelectedItem) + return; + m_pSelectedItem->setSelected(false); + m_pSelectedItem = 0; + m_pCanvasWidget->m_pPropertiesWidget->editItem(0); +} + +void KviCanvasView::beginDragLine(KviCanvasLine * it, const QPoint & p, bool bInitial) +{ + QPoint sp = it->startPoint(); + + m_dragBegin = p - sp; + + if(bInitial) + { + m_dragMode = Bottom; + setCursor(sizeAllCursor); + return; } - void KviCanvasView::clearSelection() + if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3)) { - if(!m_pSelectedItem)return; - m_pSelectedItem->setSelected(false); - m_pSelectedItem = 0; - m_pCanvasWidget->m_pPropertiesWidget->editItem(0); + m_dragMode = Top; + setCursor(sizeAllCursor); + return; } - void KviCanvasView::beginDragLine(KviCanvasLine * it,const QPoint &p,bool bInitial) + sp = it->endPoint(); + if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3)) { - QPoint sp = it->startPoint(); + m_dragMode = Bottom; + setCursor(sizeAllCursor); + return; + } - m_dragBegin = p - sp; + m_dragMode = All; + setCursor(pointingHandCursor); +} - if(bInitial) +void KviCanvasView::dragLine(KviCanvasLine * it, const QPoint & p) +{ + switch(m_dragMode) + { + case Bottom: { - m_dragMode = Bottom; - setCursor(sizeAllCursor); - return; + QPoint sp = it->startPoint(); + it->setPoints(sp.x(), sp.y(), p.x(), p.y()); } - - if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3)) + break; + case Top: { - m_dragMode = Top; - setCursor(sizeAllCursor); - return; + QPoint ep = it->endPoint(); + it->setPoints(p.x(), p.y(), ep.x(), ep.y()); } - - sp = it->endPoint(); - if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3)) + break; + case All: { - m_dragMode = Bottom; - setCursor(sizeAllCursor); - return; + QPoint sp = p - m_dragBegin; + QPoint ep = sp + (it->endPoint() - it->startPoint()); + it->setPoints(sp.x(), sp.y(), ep.x(), ep.y()); } - - m_dragMode = All; - setCursor(pointingHandCursor); - } - - void KviCanvasView::dragLine(KviCanvasLine * it,const QPoint &p) - { - switch(m_dragMode) - { - case Bottom: - { - QPoint sp = it->startPoint(); - it->setPoints(sp.x(),sp.y(),p.x(),p.y()); - } - break; - case Top: - { - QPoint ep = it->endPoint(); - it->setPoints(p.x(),p.y(),ep.x(),ep.y()); - } + break; + default: /* make gcc happy */ break; - case All: - { - QPoint sp = p - m_dragBegin; - QPoint ep = sp + (it->endPoint() - it->startPoint()); - it->setPoints(sp.x(),sp.y(),ep.x(),ep.y()); - } - break; - default: /* make gcc happy */ - break; - } - canvas()->update(); } + canvas()->update(); +} - static double ssm_2d_rotationAngleFromXAxis(double dx,double dy) - { - // - // v1 . v2 dx * 1 + dy * 0 dx - //acos(---------) = acos(-----------------) = acos(---------) - // |v1||v2| |(dx,dy)| * 1 |(dx,dy)| - // +static double ssm_2d_rotationAngleFromXAxis(double dx, double dy) +{ + // + // v1 . v2 dx * 1 + dy * 0 dx + //acos(---------) = acos(-----------------) = acos(---------) + // |v1||v2| |(dx,dy)| * 1 |(dx,dy)| + // - //double dVal = hypot(dx,dy); - double dVal = sqrt((dx * dx) + (dy * dy)); + //double dVal = hypot(dx,dy); + double dVal = sqrt((dx * dx) + (dy * dy)); - if(dVal == 0.0)return 0; // ??? + if(dVal == 0.0) + return 0; // ??? - dVal = acos(dx / dVal); + dVal = acos(dx / dVal); - return (dy > 0.0) ? dVal : -dVal; - } + return (dy > 0.0) ? dVal : -dVal; +} - static double ssm_2d_rotationAngle(double drefx,double drefy,double drotatedx,double drotatedy) - { - double dRefAngle = ssm_2d_rotationAngleFromXAxis(drefx,drefy); - double dRotAngle = ssm_2d_rotationAngleFromXAxis(drotatedx,drotatedy); - return dRotAngle - dRefAngle; - } +static double ssm_2d_rotationAngle(double drefx, double drefy, double drotatedx, double drotatedy) +{ + double dRefAngle = ssm_2d_rotationAngleFromXAxis(drefx, drefy); + double dRotAngle = ssm_2d_rotationAngleFromXAxis(drotatedx, drotatedy); + return dRotAngle - dRefAngle; +} - static void ssm_2d_rotate(double &dx,double &dy,double dAngle) - { - // Rotation matrix: - // - // | cos(x) sin(x) | - // | | - // | -sin(x) cos(x) | +static void ssm_2d_rotate(double & dx, double & dy, double dAngle) +{ + // Rotation matrix: + // + // | cos(x) sin(x) | + // | | + // | -sin(x) cos(x) | - double s = sin(dAngle); - double c = cos(dAngle); + double s = sin(dAngle); + double c = cos(dAngle); - double tmpX = (dx * c) - (dy * s); - double tmpY = (dx * s) + (dy * c); + double tmpX = (dx * c) - (dy * s); + double tmpY = (dx * s) + (dy * c); - dx = tmpX; - dy = tmpY; - } + dx = tmpX; + dy = tmpY; +} - static double ssm_hypot(double a,double b) - { - return sqrt((a * a) + (b * b)); - } +static double ssm_hypot(double a, double b) +{ + return sqrt((a * a) + (b * b)); +} - void KviCanvasView::beginDragPolygon(KviCanvasPolygon * it,const QPoint &p,bool bShift,bool bCtrl) - { - m_dragBegin = QPoint((int)(p.x() - it->x()),(int)(p.y() - it->y())); +void KviCanvasView::beginDragPolygon(KviCanvasPolygon * it, const QPoint & p, bool bShift, bool bCtrl) +{ + m_dragBegin = QPoint((int)(p.x() - it->x()), (int)(p.y() - it->y())); - QPointArray pa = it->areaPoints(); + QPointArray pa = it->areaPoints(); - for(unsigned int i=0;i<pa.size();i++) - { - QPoint pnt = pa.point(i); - double dX = pnt.x() - p.x(); - double dY = pnt.y() - p.y(); - double dHypot = sqrt((dX * dX) + (dY * dY)); - if(dHypot < 3.0) - { - // We're dragging a point - m_dragMode = SinglePoint; - m_dragPointIndex = i; - setCursor(crossCursor); - return; - } - } - - if(bShift) + for(unsigned int i = 0; i < pa.size(); i++) + { + QPoint pnt = pa.point(i); + double dX = pnt.x() - p.x(); + double dY = pnt.y() - p.y(); + double dHypot = sqrt((dX * dX) + (dY * dY)); + if(dHypot < 3.0) { - m_dragMode = Scale; - m_dragScaleFactor = it->scaleFactor(); - setCursor(sizeAllCursor); + // We're dragging a point + m_dragMode = SinglePoint; + m_dragPointIndex = i; + setCursor(crossCursor); return; } + } - if(bCtrl) - { - m_dragMode = Rotate; - m_dragPointArray = it->internalPoints(); - // qDebug("Here"); - setCursor(sizeHorCursor); - return; - } + if(bShift) + { + m_dragMode = Scale; + m_dragScaleFactor = it->scaleFactor(); + setCursor(sizeAllCursor); + return; + } - m_dragMode = All; - setCursor(pointingHandCursor); + if(bCtrl) + { + m_dragMode = Rotate; + m_dragPointArray = it->internalPoints(); + // qDebug("Here"); + setCursor(sizeHorCursor); + return; } - void KviCanvasView::dragPolygon(KviCanvasPolygon * it,const QPoint &p) + m_dragMode = All; + setCursor(pointingHandCursor); +} + +void KviCanvasView::dragPolygon(KviCanvasPolygon * it, const QPoint & p) +{ + switch(m_dragMode) { - switch(m_dragMode) - { - case All: - it->move(p.x() - m_dragBegin.x(),p.y() - m_dragBegin.y()); - break; - case SinglePoint: - { - QPointArray pnt = it->internalPoints(); - pnt.setPoint(m_dragPointIndex,(int)((p.x() - it->x()) / it->scaleFactor()),(int)((p.y() - it->y()) / it->scaleFactor())); - it->setInternalPoints(pnt); - } - break; - case Scale: - { - double dDistance = ssm_hypot(p.x() - it->x(),p.y() - it->y()); - double dOriginal = ssm_hypot(m_dragBegin.x(),m_dragBegin.y()); - if(dOriginal < 1)dOriginal = 1; - if(dDistance < 0.1)dDistance = 0.1; - it->setScaleFactor(m_dragScaleFactor * dDistance / dOriginal); - } + case All: + it->move(p.x() - m_dragBegin.x(), p.y() - m_dragBegin.y()); break; - case Rotate: + case SinglePoint: + { + QPointArray pnt = it->internalPoints(); + pnt.setPoint(m_dragPointIndex, (int)((p.x() - it->x()) / it->scaleFactor()), (int)((p.y() - it->y()) / it->scaleFactor())); + it->setInternalPoints(pnt); + } + break; + case Scale: + { + double dDistance = ssm_hypot(p.x() - it->x(), p.y() - it->y()); + double dOriginal = ssm_hypot(m_dragBegin.x(), m_dragBegin.y()); + if(dOriginal < 1) + dOriginal = 1; + if(dDistance < 0.1) + dDistance = 0.1; + it->setScaleFactor(m_dragScaleFactor * dDistance / dOriginal); + } + break; + case Rotate: + { + QPoint act((int)(p.x() - it->x()), (int)(p.y() - it->y())); + double dAngle = ssm_2d_rotationAngle(m_dragBegin.x(), m_dragBegin.y(), act.x(), act.y()); + // qDebug("%d,%d %d,%d %f",m_dragBegin.x(),m_dragBegin.y(),act.x(),act.y(),dAngle); + QPointArray thePoints = m_dragPointArray.copy(); + for(unsigned int i = 0; i < thePoints.size(); i++) { - QPoint act((int)(p.x() - it->x()),(int)(p.y() - it->y())); - double dAngle = ssm_2d_rotationAngle(m_dragBegin.x(),m_dragBegin.y(),act.x(),act.y()); - // qDebug("%d,%d %d,%d %f",m_dragBegin.x(),m_dragBegin.y(),act.x(),act.y(),dAngle); - QPointArray thePoints = m_dragPointArray.copy(); - for(unsigned int i=0;i<thePoints.size();i++) - { - QPoint tmp = thePoints.point(i); - double dx = tmp.x(); - double dy = tmp.y(); - ssm_2d_rotate(dx,dy,dAngle); - thePoints.setPoint(i,(int)dx,(int)dy); - } - it->setInternalPoints(thePoints); + QPoint tmp = thePoints.point(i); + double dx = tmp.x(); + double dy = tmp.y(); + ssm_2d_rotate(dx, dy, dAngle); + thePoints.setPoint(i, (int)dx, (int)dy); } - break; - default: - break; + it->setInternalPoints(thePoints); } - canvas()->update(); + break; + default: + break; } + canvas()->update(); +} + +void KviCanvasView::beginDragRectangle(KviCanvasRectangleItem * it, const QPoint & p, bool bInitial) +{ + m_dragBegin = QPoint((int)(p.x() - it->x()), (int)(p.y() - it->y())); - void KviCanvasView::beginDragRectangle(KviCanvasRectangleItem * it,const QPoint & p,bool bInitial) + if(bInitial) { - m_dragBegin = QPoint((int)(p.x() - it->x()),(int)(p.y() - it->y())); + // Right bottom + m_dragMode = RightBottom; + setCursor(sizeFDiagCursor); + return; + } - if(bInitial) + if(p.x() < (((int)it->x()) + 2)) + { + // Left edge + if(p.y() < (((int)it->y()) + 2)) { - // Right bottom - m_dragMode = RightBottom; + // Left top + m_dragMode = LeftTop; setCursor(sizeFDiagCursor); return; } - - if(p.x() < (((int)it->x()) + 2)) + if(p.y() > (it->bottom() - 2)) { - // Left edge - if(p.y() < (((int)it->y()) + 2)) - { - // Left top - m_dragMode = LeftTop; - setCursor(sizeFDiagCursor); - return; - } - if(p.y() > ( it->bottom() - 2)) - { - // Left bottom - m_dragMode = LeftBottom; - setCursor(sizeBDiagCursor); - return; - } - m_dragMode = Left; - setCursor(sizeHorCursor); - return; - } - - if(p.x() > (it->right() - 2)) - { - // Right edge - if(p.y() < (((int)it->y()) + 2)) - { - // Right top - m_dragMode = RightTop; - setCursor(sizeBDiagCursor); - return; - } - if(p.y() > ( it->bottom() - 2)) - { - // Right bottom - m_dragMode = RightBottom; - setCursor(sizeFDiagCursor); - return; - } - m_dragMode = Right; - setCursor(sizeHorCursor); + // Left bottom + m_dragMode = LeftBottom; + setCursor(sizeBDiagCursor); return; } + m_dragMode = Left; + setCursor(sizeHorCursor); + return; + } - // Somewhere in the middle + if(p.x() > (it->right() - 2)) + { + // Right edge if(p.y() < (((int)it->y()) + 2)) { - // Top - m_dragMode = Top; - setCursor(sizeVerCursor); + // Right top + m_dragMode = RightTop; + setCursor(sizeBDiagCursor); return; } - if(p.y() > ( it->bottom() - 2)) + if(p.y() > (it->bottom() - 2)) { - // Bottom - m_dragMode = Bottom; - setCursor(sizeVerCursor); + // Right bottom + m_dragMode = RightBottom; + setCursor(sizeFDiagCursor); return; } - - m_dragMode = All; - setCursor(pointingHandCursor); + m_dragMode = Right; + setCursor(sizeHorCursor); + return; } - void KviCanvasView::dragRectangle(KviCanvasRectangleItem * it,const QPoint & p) + // Somewhere in the middle + if(p.y() < (((int)it->y()) + 2)) + { + // Top + m_dragMode = Top; + setCursor(sizeVerCursor); + return; + } + if(p.y() > (it->bottom() - 2)) { + // Bottom + m_dragMode = Bottom; + setCursor(sizeVerCursor); + return; + } - int aux1,aux2,aux3,aux4; + m_dragMode = All; + setCursor(pointingHandCursor); +} - switch(m_dragMode) - { - case All: - it->move(p.x() - m_dragBegin.x(),p.y() - m_dragBegin.y()); +void KviCanvasView::dragRectangle(KviCanvasRectangleItem * it, const QPoint & p) +{ + + int aux1, aux2, aux3, aux4; + + switch(m_dragMode) + { + case All: + it->move(p.x() - m_dragBegin.x(), p.y() - m_dragBegin.y()); break; - case Left: - aux1 = it->width() + (int)(it->x() - p.x()); - aux2 = p.x(); - if(aux1 < 1) - { - aux2 += (aux1 - 1); - aux1 = 1; - } - it->move(aux2,it->y()); - it->setSize(aux1,it->height()); + case Left: + aux1 = it->width() + (int)(it->x() - p.x()); + aux2 = p.x(); + if(aux1 < 1) + { + aux2 += (aux1 - 1); + aux1 = 1; + } + it->move(aux2, it->y()); + it->setSize(aux1, it->height()); break; - case Right: - aux1 = it->width() + (p.x() - it->right()); - if(aux1 < 1)aux1 = 1; - it->setSize(aux1,it->height()); + case Right: + aux1 = it->width() + (p.x() - it->right()); + if(aux1 < 1) + aux1 = 1; + it->setSize(aux1, it->height()); break; - case Top: - aux1 = it->height() + (int)(it->y() - p.y()); - aux2 = p.y(); - if(aux1 < 1) - { - aux2 += (aux1 - 1); - aux1 = 1; - } - it->move(it->x(),aux2); - it->setSize(it->width(),aux1); + case Top: + aux1 = it->height() + (int)(it->y() - p.y()); + aux2 = p.y(); + if(aux1 < 1) + { + aux2 += (aux1 - 1); + aux1 = 1; + } + it->move(it->x(), aux2); + it->setSize(it->width(), aux1); break; - case Bottom: - aux1 = (int)it->height() + (p.y() - it->bottom()); - if(aux1 < 1)aux1 = 1; - it->setSize(it->width(),aux1); + case Bottom: + aux1 = (int)it->height() + (p.y() - it->bottom()); + if(aux1 < 1) + aux1 = 1; + it->setSize(it->width(), aux1); break; - case LeftTop: - aux1 = it->width() + (int)(it->x() - p.x()); - aux3 = p.x(); - if(aux1 < 1) - { - aux3 += (aux1 - 1); - aux1 = 1; - } - aux2 = it->height() + (int)(it->y() - p.y()); - aux4 = p.y(); - if(aux2 < 1) - { - aux4 += (aux2 - 1); - aux2 = 1; - } - it->setSize(aux1,aux2); - it->move(aux3,aux4); + case LeftTop: + aux1 = it->width() + (int)(it->x() - p.x()); + aux3 = p.x(); + if(aux1 < 1) + { + aux3 += (aux1 - 1); + aux1 = 1; + } + aux2 = it->height() + (int)(it->y() - p.y()); + aux4 = p.y(); + if(aux2 < 1) + { + aux4 += (aux2 - 1); + aux2 = 1; + } + it->setSize(aux1, aux2); + it->move(aux3, aux4); break; - case RightTop: - aux1 = it->width() + (int)(p.x() - it->right()); - if(aux1 < 1)aux1 = 1; - aux2 = it->height() + (int)(it->y() - p.y()); - aux4 = p.y(); - if(aux2 < 1) - { - aux4 += (aux2 - 1); - aux2 = 1; - } - it->setSize(aux1,aux2); - it->move(it->x(),aux4); + case RightTop: + aux1 = it->width() + (int)(p.x() - it->right()); + if(aux1 < 1) + aux1 = 1; + aux2 = it->height() + (int)(it->y() - p.y()); + aux4 = p.y(); + if(aux2 < 1) + { + aux4 += (aux2 - 1); + aux2 = 1; + } + it->setSize(aux1, aux2); + it->move(it->x(), aux4); break; - case LeftBottom: - aux1 = it->width() + (int)(it->x() - p.x()); - aux3 = p.x(); - if(aux1 < 1) - { - aux3 += (aux1 - 1); - aux1 = 1; - } - aux2 = it->height() + (int)(p.y() - it->bottom()); - if(aux2 < 1)aux2 = 1; - it->setSize(aux1,aux2); - it->move(aux3,it->y()); + case LeftBottom: + aux1 = it->width() + (int)(it->x() - p.x()); + aux3 = p.x(); + if(aux1 < 1) + { + aux3 += (aux1 - 1); + aux1 = 1; + } + aux2 = it->height() + (int)(p.y() - it->bottom()); + if(aux2 < 1) + aux2 = 1; + it->setSize(aux1, aux2); + it->move(aux3, it->y()); break; - case RightBottom: - aux1 = it->width() + (int)(p.x() - it->right()); - if(aux1 < 1)aux1 = 1; - aux2 = it->height() + (int)(p.y() - it->bottom()); - if(aux2 < 1)aux2 = 1; - it->setSize(aux1,aux2); + case RightBottom: + aux1 = it->width() + (int)(p.x() - it->right()); + if(aux1 < 1) + aux1 = 1; + aux2 = it->height() + (int)(p.y() - it->bottom()); + if(aux2 < 1) + aux2 = 1; + it->setSize(aux1, aux2); break; - default: + default: break; - } - - canvas()->update(); } - void KviCanvasView::contentsMouseMoveEvent(QMouseEvent *e) - { + canvas()->update(); +} + +void KviCanvasView::contentsMouseMoveEvent(QMouseEvent * e) +{ // QPoint p = inverseWorldMatrix().map(e->pos()); - QPoint p = e->pos(); - if(e->state() & Qt::LeftButton) + QPoint p = e->pos(); + if(e->state() & Qt::LeftButton) + { + if((m_dragMode != None) && (m_pSelectedItem)) { - if((m_dragMode != None) && (m_pSelectedItem)) + if(m_pSelectedItem->isEnabled()) + m_pSelectedItem->setEnabled(false); + switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem)) { - if(m_pSelectedItem->isEnabled())m_pSelectedItem->setEnabled(false); - switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem)) - { - case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: - dragRectangle((KviCanvasRectangleItem *)m_pSelectedItem,p); + case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: + dragRectangle((KviCanvasRectangleItem *)m_pSelectedItem, p); break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: - dragLine((KviCanvasLine *)m_pSelectedItem,p); + case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: + dragLine((KviCanvasLine *)m_pSelectedItem, p); break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: - dragPolygon((KviCanvasPolygon *)m_pSelectedItem,p); + case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: + dragPolygon((KviCanvasPolygon *)m_pSelectedItem, p); break; - } } - } else { - // Without buttons - if(m_state == Idle) - { - QCanvasItemList l = canvas()->collisions(p); - QCanvasItemList::Iterator it = l.begin(); + } + } + else + { + // Without buttons + if(m_state == Idle) + { + QCanvasItemList l = canvas()->collisions(p); + QCanvasItemList::Iterator it = l.begin(); - if(it != l.end()) + if(it != l.end()) + { + // Got an item + QCanvasItem * hit = (QCanvasItem *)*it; + // Now find the point on that we have clicked it + if(hit == m_pSelectedItem) { - // Got an item - QCanvasItem * hit = (QCanvasItem *)*it; - // Now find the point on that we have clicked it - if(hit == m_pSelectedItem) + switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem)) { - switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem)) - { - case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: - beginDragRectangle((KviCanvasRectangleItem *)m_pSelectedItem,p); + case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: + beginDragRectangle((KviCanvasRectangleItem *)m_pSelectedItem, p); break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: - beginDragLine((KviCanvasLine *)m_pSelectedItem,p); + case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: + beginDragLine((KviCanvasLine *)m_pSelectedItem, p); break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: - beginDragPolygon((KviCanvasPolygon *)m_pSelectedItem,p); + case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: + beginDragPolygon((KviCanvasPolygon *)m_pSelectedItem, p); break; - } } - else if(m_dragMode != None)setCursor(arrowCursor); - } else { - if(m_dragMode != None)setCursor(arrowCursor); } + else if(m_dragMode != None) + setCursor(arrowCursor); + } + else + { + if(m_dragMode != None) + setCursor(arrowCursor); } } } +} - void KviCanvasView::contentsMouseReleaseEvent(QMouseEvent *e) +void KviCanvasView::contentsMouseReleaseEvent(QMouseEvent * e) +{ + if(m_dragMode != None) { - if(m_dragMode != None) + // Was just dragging a rectangle + m_dragMode = None; + setCursor(arrowCursor); + if(m_pSelectedItem) { - // Was just dragging a rectangle - m_dragMode = None; - setCursor(arrowCursor); - if(m_pSelectedItem) - { - m_pSelectedItem->setEnabled(true); - canvas()->update(); - } + m_pSelectedItem->setEnabled(true); + canvas()->update(); } } +} - void KviCanvasView::contentsMousePressEvent(QMouseEvent *e) +void KviCanvasView::contentsMousePressEvent(QMouseEvent * e) +{ + if(e->button() & Qt::LeftButton) { - if(e->button() & Qt::LeftButton) + // QPoint p = inverseWorldMatrix().map(e->pos()); + QPoint p = e->pos(); + + switch(m_state) { - // QPoint p = inverseWorldMatrix().map(e->pos()); - QPoint p = e->pos(); + case SelectOrigin: + clearSelection(); + setCursor(arrowCursor); + m_state = Idle; + insertObjectAt(p, m_objectToInsert); + canvas()->update(); + break; - switch(m_state) + case Idle: { - case SelectOrigin: - clearSelection(); - setCursor(arrowCursor); - m_state = Idle; - insertObjectAt(p,m_objectToInsert); - canvas()->update(); - break; + QCanvasItemList l = canvas()->collisions(p); + QCanvasItemList::Iterator it = l.begin(); - case Idle: + if(it != l.end()) { - QCanvasItemList l = canvas()->collisions(p); - QCanvasItemList::Iterator it = l.begin(); - - if(it != l.end()) + // Got an item + QCanvasItem * hit = *it; + if(hit != m_pSelectedItem) + { + // Was not selected yet + setItemSelected(hit); + canvas()->update(); + } + // Now find the point on that we have clicked it + switch(KVI_CANVAS_RTTI_CONTROL_TYPE(hit)) { - // Got an item - QCanvasItem * hit = *it; - if(hit != m_pSelectedItem) - { - // Was not selected yet - setItemSelected(hit); - canvas()->update(); - } - // Now find the point on that we have clicked it - switch(KVI_CANVAS_RTTI_CONTROL_TYPE(hit)) - { - case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: - beginDragRectangle(((KviCanvasRectangleItem *)hit),p); + case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: + beginDragRectangle(((KviCanvasRectangleItem *)hit), p); break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: - beginDragLine(((KviCanvasLine *)hit),p); + case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: + beginDragLine(((KviCanvasLine *)hit), p); break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: - beginDragPolygon(((KviCanvasPolygon *)hit),p,e->state() & Qt::ShiftButton,e->state() & Qt::ControlButton); + case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: + beginDragPolygon(((KviCanvasPolygon *)hit), p, e->state() & Qt::ShiftButton, e->state() & Qt::ControlButton); break; - } - } else { - // No item - clearSelection(); - canvas()->update(); } } - break; + else + { + // No item + clearSelection(); + canvas()->update(); + } } + break; } } +} - void KviCanvasView::propertyChanged(const QString &s,const QVariant &v) - { - if(!m_pSelectedItem)return; +void KviCanvasView::propertyChanged(const QString & s, const QVariant & v) +{ + if(!m_pSelectedItem) + return; - switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem)) - { - case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: - ((KviCanvasRectangleItem *)m_pSelectedItem)->setProperty(s,v); + switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem)) + { + case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: + ((KviCanvasRectangleItem *)m_pSelectedItem)->setProperty(s, v); break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: - ((KviCanvasLine *)m_pSelectedItem)->setProperty(s,v); + case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: + ((KviCanvasLine *)m_pSelectedItem)->setProperty(s, v); break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: - ((KviCanvasPolygon *)m_pSelectedItem)->setProperty(s,v); + case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: + ((KviCanvasPolygon *)m_pSelectedItem)->setProperty(s, v); break; - } - - canvas()->update(); } + canvas()->update(); +} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviVariantTableItem - // - KviVariantTableItem::KviVariantTableItem(QTable * t,const QVariant & property) - : QTableItem(t,QTableItem::WhenCurrent,QString()) - { - m_property = property; - } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviVariantTableItem +// +KviVariantTableItem::KviVariantTableItem(QTable * t, const QVariant & property) + : QTableItem(t, QTableItem::WhenCurrent, QString()) +{ + m_property = property; +} - KviVariantTableItem::~KviVariantTableItem() - { - } +KviVariantTableItem::~KviVariantTableItem() +{ +} - QWidget * KviVariantTableItem::createEditor() const +QWidget * KviVariantTableItem::createEditor() const +{ + switch(m_property.type()) { - switch(m_property.type()) + case QVariant::String: { - case QVariant::String: - { - QLineEdit * e = new QLineEdit(table()->viewport()); - e->setText(m_property.toString()); - return e; - } - break; - case QVariant::Int: - { - QLineEdit * e = new QLineEdit(table()->viewport()); - QString sz; - sz.setNum(m_property.toInt()); - e->setText(sz); - e->setValidator(new QIntValidator(e)); - return e; - } - break; - case QVariant::UInt: - { - QLineEdit * e = new QLineEdit(table()->viewport()); - QString sz; - sz.setNum(m_property.toInt()); - e->setText(sz); - QIntValidator * i = new QIntValidator(e); - i->setBottom(0); - e->setValidator(i); - return e; - } - break; - case QVariant::Bool: - { - QComboBox * b = new QComboBox(false,table()->viewport()); - b->addAction("false"); - b->addAction("true"); - b->setCurrentItem(m_property.toBool() ? 1 : 0); - return b; - } - break; - case QVariant::Color: - { - QLineEdit * e = new QLineEdit(table()->viewport()); - e->setText(m_property.toColor().name()); - return e; - } - break; - case QVariant::Font: - { - QComboBox * b = new QComboBox(true,table()->viewport()); - QString tmp; - QString tmpDefault; - QFont f = QFont(); - f.setStyleHint(QFont::SansSerif); - tmpDefault = f.family(); - f.setStyleHint(QFont::TypeWriter); - tmp.setNum(m_property.toFont().pointSize()); - tmp.prepend(", "); - tmp.prepend(m_property.toFont().family()); - b->addAction(tmp); - b->addAction(tmpDefault + ", 8"); - b->addAction(tmpDefault + ", 10"); - b->addAction(tmpDefault + ", 12"); - b->addAction(tmpDefault + ", 14"); - b->addAction(tmpDefault + ", 16"); - b->addAction(tmpDefault + ", 18"); - b->addAction(tmpDefault + ", 20"); - b->addAction(tmpDefault + ", 24"); - b->addAction(tmpDefault + ", 28"); - b->addAction(tmpDefault + ", 32"); - b->addAction(tmpDefault + ", 40"); - b->addAction(tmpDefault + ", 48"); - b->addAction(f.family() + ", 12"); - b->setCurrentItem(0); - b->setCurrentItem(m_property.toBool() ? 1 : 0); - return b; - } - break; - default: - break; + QLineEdit * e = new QLineEdit(table()->viewport()); + e->setText(m_property.toString()); + return e; } - return 0; + break; + case QVariant::Int: + { + QLineEdit * e = new QLineEdit(table()->viewport()); + QString sz; + sz.setNum(m_property.toInt()); + e->setText(sz); + e->setValidator(new QIntValidator(e)); + return e; + } + break; + case QVariant::UInt: + { + QLineEdit * e = new QLineEdit(table()->viewport()); + QString sz; + sz.setNum(m_property.toInt()); + e->setText(sz); + QIntValidator * i = new QIntValidator(e); + i->setBottom(0); + e->setValidator(i); + return e; + } + break; + case QVariant::Bool: + { + QComboBox * b = new QComboBox(false, table()->viewport()); + b->addAction("false"); + b->addAction("true"); + b->setCurrentItem(m_property.toBool() ? 1 : 0); + return b; + } + break; + case QVariant::Color: + { + QLineEdit * e = new QLineEdit(table()->viewport()); + e->setText(m_property.toColor().name()); + return e; + } + break; + case QVariant::Font: + { + QComboBox * b = new QComboBox(true, table()->viewport()); + QString tmp; + QString tmpDefault; + QFont f = QFont(); + f.setStyleHint(QFont::SansSerif); + tmpDefault = f.family(); + f.setStyleHint(QFont::TypeWriter); + tmp.setNum(m_property.toFont().pointSize()); + tmp.prepend(", "); + tmp.prepend(m_property.toFont().family()); + b->addAction(tmp); + b->addAction(tmpDefault + ", 8"); + b->addAction(tmpDefault + ", 10"); + b->addAction(tmpDefault + ", 12"); + b->addAction(tmpDefault + ", 14"); + b->addAction(tmpDefault + ", 16"); + b->addAction(tmpDefault + ", 18"); + b->addAction(tmpDefault + ", 20"); + b->addAction(tmpDefault + ", 24"); + b->addAction(tmpDefault + ", 28"); + b->addAction(tmpDefault + ", 32"); + b->addAction(tmpDefault + ", 40"); + b->addAction(tmpDefault + ", 48"); + b->addAction(f.family() + ", 12"); + b->setCurrentItem(0); + b->setCurrentItem(m_property.toBool() ? 1 : 0); + return b; + } + break; + default: + break; } + return 0; +} - void KviVariantTableItem::setContentFromEditor(QWidget * w) +void KviVariantTableItem::setContentFromEditor(QWidget * w) +{ + switch(m_property.type()) { - switch(m_property.type()) - { - case QVariant::String: - m_property = QVariant(((QLineEdit *)w)->text()); + case QVariant::String: + m_property = QVariant(((QLineEdit *)w)->text()); break; - case QVariant::Int: - m_property = QVariant(((QLineEdit *)w)->text().toInt()); + case QVariant::Int: + m_property = QVariant(((QLineEdit *)w)->text().toInt()); break; - case QVariant::UInt: - m_property = QVariant(((QLineEdit *)w)->text().toUInt()); + case QVariant::UInt: + m_property = QVariant(((QLineEdit *)w)->text().toUInt()); break; - case QVariant::Bool: - m_property = QVariant(((QComboBox *)w)->currentItem(),1); + case QVariant::Bool: + m_property = QVariant(((QComboBox *)w)->currentItem(), 1); break; - case QVariant::Color: - m_property.asColor().setNamedColor(((QLineEdit *)w)->text()); + case QVariant::Color: + m_property.asColor().setNamedColor(((QLineEdit *)w)->text()); break; - case QVariant::Font: + case QVariant::Font: + { + KviCString txt = ((QComboBox *)w)->currentText(); + if(txt.hasData()) { - KviCString txt = ((QComboBox *)w)->currentText(); - if(txt.hasData()) - { - KviCString fam = txt; - fam.cutFromFirst(',',true); - fam.trimmed(); - KviCString psz = txt; - psz.cutToFirst(',',true); - psz.trimmed(); - bool bOk; - unsigned int uSize = psz.toUInt(&bOk); - if(!bOk)uSize = 12; - m_property = QVariant(QFont(fam.ptr(),uSize)); - } + KviCString fam = txt; + fam.cutFromFirst(',', true); + fam.trimmed(); + KviCString psz = txt; + psz.cutToFirst(',', true); + psz.trimmed(); + bool bOk; + unsigned int uSize = psz.toUInt(&bOk); + if(!bOk) + uSize = 12; + m_property = QVariant(QFont(fam.ptr(), uSize)); } - break; - default: - break; } + break; + default: + break; } +} - void KviVariantTableItem::paint(QPainter *p,const QColorGroup &cg,const QRect &cr,bool) - { - p->fillRect(0,0,cr.width(),cr.height(),cg.base()); +void KviVariantTableItem::paint(QPainter * p, const QColorGroup & cg, const QRect & cr, bool) +{ + p->fillRect(0, 0, cr.width(), cr.height(), cg.base()); - if(m_property.type() == QVariant::Color) + if(m_property.type() == QVariant::Color) + { + p->fillRect(3, 3, cr.width() - 6, cr.height() - 6, m_property.asColor()); + } + else + { + QString sz; + switch(m_property.type()) { - p->fillRect(3,3,cr.width() - 6,cr.height() - 6,m_property.asColor()); - } else { - QString sz; - switch(m_property.type()) - { - case QVariant::String: - sz = m_property.toString(); + case QVariant::String: + sz = m_property.toString(); break; - case QVariant::Bool: - sz = m_property.toBool() ? "true" : "false"; + case QVariant::Bool: + sz = m_property.toBool() ? "true" : "false"; break; - case QVariant::Font: - sz.setNum(m_property.toFont().pointSize()); - sz.prepend(", "); - sz.prepend(m_property.toFont().family()); + case QVariant::Font: + sz.setNum(m_property.toFont().pointSize()); + sz.prepend(", "); + sz.prepend(m_property.toFont().family()); break; - case QVariant::Int: - sz.setNum(m_property.toInt()); + case QVariant::Int: + sz.setNum(m_property.toInt()); break; - case QVariant::UInt: - sz.setNum(m_property.toUInt()); + case QVariant::UInt: + sz.setNum(m_property.toUInt()); break; - default: + default: break; - } - p->setPen(cg.text()); - p->drawText(0,0,cr.width(),cr.height(),Qt::AlignLeft | Qt::AlignTop,sz); } + p->setPen(cg.text()); + p->drawText(0, 0, cr.width(), cr.height(), Qt::AlignLeft | Qt::AlignTop, sz); } +} +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// KviCanvasItemPropertiesWidget +// +KviCanvasItemPropertiesWidget::KviCanvasItemPropertiesWidget(QWidget * par) + : QTable(par) +{ + setSelectionMode(QTable::NoSelection); + setColumnMovingEnabled(false); + setRowMovingEnabled(false); + setShowGrid(true); + setNumCols(2); + setSorting(false); + setLeftMargin(0); + verticalHeader()->hide(); + connect(this, SIGNAL(valueChanged(int, int)), this, SLOT(cellEdited(int, int))); +} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // KviCanvasItemPropertiesWidget - // - KviCanvasItemPropertiesWidget::KviCanvasItemPropertiesWidget(QWidget * par) - : QTable(par) - { - setSelectionMode(QTable::NoSelection); - setColumnMovingEnabled(false); - setRowMovingEnabled(false); - setShowGrid(true); - setNumCols(2); - setSorting(false); - setLeftMargin(0); - verticalHeader()->hide(); - connect(this,SIGNAL(valueChanged(int,int)),this,SLOT(cellEdited(int,int))); - } - - KviCanvasItemPropertiesWidget::~KviCanvasItemPropertiesWidget() - { - } +KviCanvasItemPropertiesWidget::~KviCanvasItemPropertiesWidget() +{ +} - void KviCanvasItemPropertiesWidget::cellEdited(int row,int) - { - QTableItem * it = item(row,0); - if(!it)return; - QString szName = it->text(); - it = item(row,1); - if(!it)return; - emit propertyChanged(szName,((KviVariantTableItem *)it)->property()); - } +void KviCanvasItemPropertiesWidget::cellEdited(int row, int) +{ + QTableItem * it = item(row, 0); + if(!it) + return; + QString szName = it->text(); + it = item(row, 1); + if(!it) + return; + emit propertyChanged(szName, ((KviVariantTableItem *)it)->property()); +} - void KviCanvasItemPropertiesWidget::editItem(QCanvasItem * it) +void KviCanvasItemPropertiesWidget::editItem(QCanvasItem * it) +{ + if(!it) { - if(!it) + for(int i = 0; i < numRows(); i++) { - for(int i=0;i<numRows();i++) - { - clearCell(i,0); - clearCell(i,1); - clearCellWidget(i,1); - } - setNumRows(0); - return; + clearCell(i, 0); + clearCell(i, 1); + clearCellWidget(i, 1); } + setNumRows(0); + return; + } - QMap<QString,QVariant> * m = 0; + QMap<QString, QVariant> * m = 0; - switch(KVI_CANVAS_RTTI_CONTROL_TYPE(it)) - { - case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: - m = ((KviCanvasRectangleItem *)it)->properties(); + switch(KVI_CANVAS_RTTI_CONTROL_TYPE(it)) + { + case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: + m = ((KviCanvasRectangleItem *)it)->properties(); break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: - m = ((KviCanvasLine *)it)->properties(); + case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: + m = ((KviCanvasLine *)it)->properties(); break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: - m = ((KviCanvasPolygon *)it)->properties(); + case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: + m = ((KviCanvasPolygon *)it)->properties(); break; - } - - if(!m) - { - editItem(0); - return; - } + } - for(int i=0;i<numRows();i++) - { - clearCell(i,0); - clearCell(i,1); - clearCellWidget(i,1); - } + if(!m) + { + editItem(0); + return; + } - setNumRows(m->count()); + for(int i = 0; i < numRows(); i++) + { + clearCell(i, 0); + clearCell(i, 1); + clearCellWidget(i, 1); + } - QTableItem * item; + setNumRows(m->count()); - int idx = 0; + QTableItem * item; - for(QMap<QString,QVariant>::ConstIterator iter = m->begin();iter != m->end();++iter) - { - item = new QTableItem(this,QTableItem::Never,iter.key().toUtf8().data()); - setItem(idx,0,item); - item = new KviVariantTableItem(this,iter.data()); - setItem(idx,1,item); - idx++; - } + int idx = 0; + for(QMap<QString, QVariant>::ConstIterator iter = m->begin(); iter != m->end(); ++iter) + { + item = new QTableItem(this, QTableItem::Never, iter.key().toUtf8().data()); + setItem(idx, 0, item); + item = new KviVariantTableItem(this, iter.data()); + setItem(idx, 1, item); + idx++; } +} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // DccCanvasWidget - // - DccCanvasWidget::DccCanvasWidget(QWidget * par) - : QWidget(par,"canvas_widget") - { - m_pCanvas = new QCanvas(this); - //#warning "Make this size as parameter of Dcc ?" - m_pCanvas->resize(648,480); - m_pMenuBar = new QMenuBar(this); - m_pSplitter = new QSplitter(QSplitter::Horizontal,this); - m_pCanvasView = new KviCanvasView(m_pCanvas,this,m_pSplitter); - m_pStatusLabel = new QLabel(this); - m_pPropertiesWidget = new KviCanvasItemPropertiesWidget(m_pSplitter); - QValueList<int> l; - l.append(80); - l.append(20); - m_pSplitter->setSizes(l); +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// DccCanvasWidget +// +DccCanvasWidget::DccCanvasWidget(QWidget * par) + : QWidget(par, "canvas_widget") +{ + m_pCanvas = new QCanvas(this); + //#warning "Make this size as parameter of Dcc ?" + m_pCanvas->resize(648, 480); + m_pMenuBar = new QMenuBar(this); + m_pSplitter = new QSplitter(QSplitter::Horizontal, this); + m_pCanvasView = new KviCanvasView(m_pCanvas, this, m_pSplitter); + m_pStatusLabel = new QLabel(this); + m_pPropertiesWidget = new KviCanvasItemPropertiesWidget(m_pSplitter); + QValueList<int> l; + l.append(80); + l.append(20); + m_pSplitter->setSizes(l); - connect(m_pPropertiesWidget,SIGNAL(propertyChanged(const QString &,const QVariant &)),m_pCanvasView,SLOT(propertyChanged(const QString &,const QVariant &))); + connect(m_pPropertiesWidget, SIGNAL(propertyChanged(const QString &, const QVariant &)), m_pCanvasView, SLOT(propertyChanged(const QString &, const QVariant &))); - QMenu * add = new QMenu(m_pMenuBar); - QMenu * shapes = new QMenu(add); - QMenu * polygons = new QMenu(add); - QMenu * items = new QMenu(add); - shapes->addAction(__tr2qs_ctx("&Line","dcc"),m_pCanvasView,SLOT(insertLine())); - shapes->addAction(__tr2qs_ctx("&Rectangle","dcc"),m_pCanvasView,SLOT(insertRectangle())); - shapes->addAction(__tr2qs_ctx("&Ellipse","dcc"),m_pCanvasView,SLOT(insertEllipse())); - shapes->addAction(__tr2qs_ctx("&Pie","dcc"),m_pCanvasView,SLOT(insertPie())); - shapes->addAction(__tr2qs_ctx("&Chord","dcc"),m_pCanvasView,SLOT(insertChord())); + QMenu * add = new QMenu(m_pMenuBar); + QMenu * shapes = new QMenu(add); + QMenu * polygons = new QMenu(add); + QMenu * items = new QMenu(add); + shapes->addAction(__tr2qs_ctx("&Line", "dcc"), m_pCanvasView, SLOT(insertLine())); + shapes->addAction(__tr2qs_ctx("&Rectangle", "dcc"), m_pCanvasView, SLOT(insertRectangle())); + shapes->addAction(__tr2qs_ctx("&Ellipse", "dcc"), m_pCanvasView, SLOT(insertEllipse())); + shapes->addAction(__tr2qs_ctx("&Pie", "dcc"), m_pCanvasView, SLOT(insertPie())); + shapes->addAction(__tr2qs_ctx("&Chord", "dcc"), m_pCanvasView, SLOT(insertChord())); - items->addAction(__tr2qs_ctx("&Rich text (html)","dcc"),m_pCanvasView,SLOT(insertRichText())); + items->addAction(__tr2qs_ctx("&Rich text (html)", "dcc"), m_pCanvasView, SLOT(insertRichText())); - polygons->addAction(__tr2qs_ctx("&Triangle","dcc"),m_pCanvasView,SLOT(insertPolygonTriangle())); - polygons->addAction(__tr2qs_ctx("&Rectangle","dcc"),m_pCanvasView,SLOT(insertPolygonRectangle())); - polygons->addAction(__tr2qs_ctx("&Pentagon","dcc"),m_pCanvasView,SLOT(insertPolygonPentagon())); - polygons->addAction(__tr2qs_ctx("&Hexagon","dcc"),m_pCanvasView,SLOT(insertPolygonHexagon())); + polygons->addAction(__tr2qs_ctx("&Triangle", "dcc"), m_pCanvasView, SLOT(insertPolygonTriangle())); + polygons->addAction(__tr2qs_ctx("&Rectangle", "dcc"), m_pCanvasView, SLOT(insertPolygonRectangle())); + polygons->addAction(__tr2qs_ctx("&Pentagon", "dcc"), m_pCanvasView, SLOT(insertPolygonPentagon())); + polygons->addAction(__tr2qs_ctx("&Hexagon", "dcc"), m_pCanvasView, SLOT(insertPolygonHexagon())); - add->addAction(__tr2qs_ctx("&Shape","dcc"),shapes); - add->addAction(__tr2qs_ctx("&Item","dcc"),items); - add->addAction(__tr2qs_ctx("&Polygons","dcc"),polygons); + add->addAction(__tr2qs_ctx("&Shape", "dcc"), shapes); + add->addAction(__tr2qs_ctx("&Item", "dcc"), items); + add->addAction(__tr2qs_ctx("&Polygons", "dcc"), polygons); - m_pMenuBar->addAction(__tr2qs_ctx("&Insert","dcc"),add); - } + m_pMenuBar->addAction(__tr2qs_ctx("&Insert", "dcc"), add); +} - DccCanvasWidget::~DccCanvasWidget() - { - } +DccCanvasWidget::~DccCanvasWidget() +{ +} - void DccCanvasWidget::resizeEvent(QResizeEvent *) - { - int h = m_pMenuBar->sizeHint().height(); - m_pMenuBar->setGeometry(0,0,width(),h); - int h2 = m_pStatusLabel->sizeHint().height(); - m_pStatusLabel->setGeometry(0,height() - h2,width(),h2); - m_pSplitter->setGeometry(0,h,width(),height() - (h + h2)); - } +void DccCanvasWidget::resizeEvent(QResizeEvent *) +{ + int h = m_pMenuBar->sizeHint().height(); + m_pMenuBar->setGeometry(0, 0, width(), h); + int h2 = m_pStatusLabel->sizeHint().height(); + m_pStatusLabel->setGeometry(0, height() - h2, width(), h2); + m_pSplitter->setGeometry(0, h, width(), height() - (h + h2)); +} #endif diff --git a/src/modules/dcc/canvaswidget.h b/src/modules/dcc/canvaswidget.h index da40016e7..d6737cef4 100644 --- a/src/modules/dcc/canvaswidget.h +++ b/src/modules/dcc/canvaswidget.h @@ -27,276 +27,309 @@ #include "DccBroker.h" #ifdef COMPILE_DCC_CANVAS - #include <QCanvas> - #include <QMenuBar> - #include <QLabel> - #include <QMap> - #include <QVariant> - #include <QTable> - #include <QSplitter> +#include <QCanvas> +#include <QMenuBar> +#include <QLabel> +#include <QMap> +#include <QVariant> +#include <QTable> +#include <QSplitter> - class DccCanvasWidget; +class DccCanvasWidget; - #define KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE 1 - #define KVI_CANVAS_RTTI_CONTROL_TYPE_LINE 2 - #define KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON 4 +#define KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE 1 +#define KVI_CANVAS_RTTI_CONTROL_TYPE_LINE 2 +#define KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON 4 - #define KVI_CANVAS_RTTI_CONTROL_TYPE_MASK 255 +#define KVI_CANVAS_RTTI_CONTROL_TYPE_MASK 255 - #define KVI_CANVAS_RTTI_RECTANGLE (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (1 << 8)) - #define KVI_CANVAS_RTTI_RICHTEXT (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (2 << 8)) - #define KVI_CANVAS_RTTI_LINE (KVI_CANVAS_RTTI_CONTROL_TYPE_LINE | (3 << 8)) - #define KVI_CANVAS_RTTI_ELLIPSE (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (4 << 8)) - #define KVI_CANVAS_RTTI_CHORD (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (5 << 8)) - #define KVI_CANVAS_RTTI_PIE (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (6 << 8)) - #define KVI_CANVAS_RTTI_POLYGON (KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON | (7 << 8)) +#define KVI_CANVAS_RTTI_RECTANGLE (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (1 << 8)) +#define KVI_CANVAS_RTTI_RICHTEXT (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (2 << 8)) +#define KVI_CANVAS_RTTI_LINE (KVI_CANVAS_RTTI_CONTROL_TYPE_LINE | (3 << 8)) +#define KVI_CANVAS_RTTI_ELLIPSE (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (4 << 8)) +#define KVI_CANVAS_RTTI_CHORD (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (5 << 8)) +#define KVI_CANVAS_RTTI_PIE (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (6 << 8)) +#define KVI_CANVAS_RTTI_POLYGON (KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON | (7 << 8)) - #define KVI_CANVAS_RTTI_CONTROL_TYPE(__item) (__item->rtti() & KVI_CANVAS_RTTI_CONTROL_TYPE_MASK) +#define KVI_CANVAS_RTTI_CONTROL_TYPE(__item) (__item->rtti() & KVI_CANVAS_RTTI_CONTROL_TYPE_MASK) +class KviCanvasPolygon : public QCanvasPolygon +{ +public: + KviCanvasPolygon(QCanvas * c, int x, int y, QPointArray & pnts, double dScaleFactor); + virtual ~KviCanvasPolygon(); +protected: + QMap<QString, QVariant> m_properties; + double m_dScaleFactor; + QPointArray m_points; - class KviCanvasPolygon : public QCanvasPolygon - { - public: - KviCanvasPolygon(QCanvas * c,int x,int y,QPointArray &pnts,double dScaleFactor); - virtual ~KviCanvasPolygon(); - protected: - QMap<QString,QVariant> m_properties; - double m_dScaleFactor; - QPointArray m_points; - public: - virtual void draw(QPainter & p); - double scaleFactor(){ return m_dScaleFactor; }; - void setScaleFactor(double dScaleFactor); - void resetPoints(); - const QPointArray & internalPoints(){ return m_points; }; - void setInternalPoints(const QPointArray &pnts); - QMap<QString,QVariant> * properties(){ return &m_properties; }; - virtual void setProperty(const QString &property,const QVariant &val); - virtual int rtti() const; - }; +public: + virtual void draw(QPainter & p); + double scaleFactor() { return m_dScaleFactor; }; + void setScaleFactor(double dScaleFactor); + void resetPoints(); + const QPointArray & internalPoints() { return m_points; }; + void setInternalPoints(const QPointArray & pnts); + QMap<QString, QVariant> * properties() { return &m_properties; }; + virtual void setProperty(const QString & property, const QVariant & val); + virtual int rtti() const; +}; +class KviCanvasRectangleItem : public QCanvasRectangle +{ + friend class KviCanvasRectangle; + friend class KviCanvasRichText; + friend class KviCanvasEllipticItem; - class KviCanvasRectangleItem : public QCanvasRectangle - { - friend class KviCanvasRectangle; - friend class KviCanvasRichText; - friend class KviCanvasEllipticItem; - protected: - KviCanvasRectangleItem(QCanvas * c,int x,int y,int w,int h); - public: - virtual ~KviCanvasRectangleItem(); - protected: - QMap<QString,QVariant> m_properties; - public: - int right(){ return ((int)x()) + width(); }; - int bottom(){ return ((int)y()) + height(); }; - QMap<QString,QVariant> * properties(){ return &m_properties; }; - virtual void setProperty(const QString &property,const QVariant &val); +protected: + KviCanvasRectangleItem(QCanvas * c, int x, int y, int w, int h); + +public: + virtual ~KviCanvasRectangleItem(); + +protected: + QMap<QString, QVariant> m_properties; + +public: + int right() { return ((int)x()) + width(); }; + int bottom() { return ((int)y()) + height(); }; + QMap<QString, QVariant> * properties() { return &m_properties; }; + virtual void setProperty(const QString & property, const QVariant & val); // QVariant property(const QString &name){ return m_properties[name]; }; - protected: - void drawSelection(QPainter &p); - }; +protected: + void drawSelection(QPainter & p); +}; +class KviCanvasEllipticItem : public KviCanvasRectangleItem +{ + friend class KviCanvasEllipse; + friend class KviCanvasChord; + friend class KviCanvasPie; - class KviCanvasEllipticItem : public KviCanvasRectangleItem - { - friend class KviCanvasEllipse; - friend class KviCanvasChord; - friend class KviCanvasPie; - protected: - KviCanvasEllipticItem(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasEllipticItem(); - public: - virtual void setProperty(const QString & property,const QVariant &val); - virtual void draw(QPainter & p); - virtual void drawContent(QPainter & p); - virtual int rtti() const; - }; +protected: + KviCanvasEllipticItem(QCanvas * c, int x, int y, int w, int h); + ~KviCanvasEllipticItem(); +public: + virtual void setProperty(const QString & property, const QVariant & val); + virtual void draw(QPainter & p); + virtual void drawContent(QPainter & p); + virtual int rtti() const; +}; - class KviCanvasEllipse : public KviCanvasEllipticItem - { - public: - KviCanvasEllipse(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasEllipse(); - public: - virtual void drawContent(QPainter & p); - virtual int rtti() const; - }; +class KviCanvasEllipse : public KviCanvasEllipticItem +{ +public: + KviCanvasEllipse(QCanvas * c, int x, int y, int w, int h); + ~KviCanvasEllipse(); +public: + virtual void drawContent(QPainter & p); + virtual int rtti() const; +}; - class KviCanvasPie : public KviCanvasEllipticItem - { - public: - KviCanvasPie(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasPie(); - public: - virtual void drawContent(QPainter & p); - virtual int rtti() const; - }; +class KviCanvasPie : public KviCanvasEllipticItem +{ +public: + KviCanvasPie(QCanvas * c, int x, int y, int w, int h); + ~KviCanvasPie(); +public: + virtual void drawContent(QPainter & p); + virtual int rtti() const; +}; - class KviCanvasChord : public KviCanvasEllipticItem - { - public: - KviCanvasChord(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasChord(); - public: - virtual void drawContent(QPainter & p); - virtual int rtti() const; - }; +class KviCanvasChord : public KviCanvasEllipticItem +{ +public: + KviCanvasChord(QCanvas * c, int x, int y, int w, int h); + ~KviCanvasChord(); +public: + virtual void drawContent(QPainter & p); + virtual int rtti() const; +}; - class KviCanvasLine : public QCanvasLine - { - public: - KviCanvasLine(QCanvas * c,int x1,int y1,int x2,int y2); - virtual ~KviCanvasLine(); - protected: - QMap<QString,QVariant> m_properties; - public: - QMap<QString,QVariant> * properties(){ return &m_properties; }; - virtual void setProperty(const QString &property,const QVariant &val); +class KviCanvasLine : public QCanvasLine +{ +public: + KviCanvasLine(QCanvas * c, int x1, int y1, int x2, int y2); + virtual ~KviCanvasLine(); + +protected: + QMap<QString, QVariant> m_properties; + +public: + QMap<QString, QVariant> * properties() { return &m_properties; }; + virtual void setProperty(const QString & property, const QVariant & val); // QVariant property(const QString &name){ return m_properties[name]; }; - virtual void draw(QPainter & p); - virtual int rtti() const; - }; + virtual void draw(QPainter & p); + virtual int rtti() const; +}; +class KviCanvasRectangle : public KviCanvasRectangleItem +{ +public: + KviCanvasRectangle(QCanvas * c, int x, int y, int w, int h); + ~KviCanvasRectangle(); - class KviCanvasRectangle : public KviCanvasRectangleItem - { - public: - KviCanvasRectangle(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasRectangle(); - public: - virtual void draw(QPainter & p); - virtual void setProperty(const QString &property,const QVariant &val); - virtual int rtti() const; - }; +public: + virtual void draw(QPainter & p); + virtual void setProperty(const QString & property, const QVariant & val); + virtual int rtti() const; +}; + +class KviCanvasRichText : public KviCanvasRectangleItem +{ +public: + KviCanvasRichText(QCanvas * c, int x, int y, int w, int h); + ~KviCanvasRichText(); +public: + virtual void draw(QPainter & p); + virtual int rtti() const; +}; - class KviCanvasRichText : public KviCanvasRectangleItem +class KviCanvasView : public QCanvasView +{ + Q_OBJECT +public: + KviCanvasView(QCanvas * c, DccCanvasWidget * cw, QWidget * par); + ~KviCanvasView(); + +public: + enum State { - public: - KviCanvasRichText(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasRichText(); - public: - virtual void draw(QPainter & p); - virtual int rtti() const; + Idle, + SelectOrigin + }; + enum ObjectType + { + Rectangle, + RichText, + Line, + Ellipse, + Chord, + Pie, + PolygonTriangle, + PolygonRectangle, + PolygonPentagon, + PolygonHexagon + }; + enum DragMode + { + None, + All, + Left, + Right, + Top, + Bottom, + LeftTop, + RightTop, + LeftBottom, + RightBottom, + Scale, + SinglePoint, + Rotate }; +protected: + DccCanvasWidget * m_pCanvasWidget; - class KviCanvasView : public QCanvasView - { - Q_OBJECT - public: - KviCanvasView(QCanvas * c,DccCanvasWidget * cw,QWidget * par); - ~KviCanvasView(); - public: - enum State { Idle, SelectOrigin }; - enum ObjectType { - Rectangle, RichText, Line, Ellipse, Chord, Pie, - PolygonTriangle, PolygonRectangle, PolygonPentagon, - PolygonHexagon - }; - enum DragMode { - None, All, Left, Right, Top, Bottom, LeftTop, RightTop, - LeftBottom, RightBottom, Scale, SinglePoint, Rotate - }; - protected: - DccCanvasWidget * m_pCanvasWidget; + // Insertion of objects + State m_state; + ObjectType m_objectToInsert; - // Insertion of objects - State m_state; - ObjectType m_objectToInsert; + // Selected item + QCanvasItem * m_pSelectedItem; - // Selected item - QCanvasItem * m_pSelectedItem; + DragMode m_dragMode; + QPoint m_dragBegin; + double m_dragScaleFactor; + unsigned int m_dragPointIndex; + QPointArray m_dragPointArray; - DragMode m_dragMode; - QPoint m_dragBegin; - double m_dragScaleFactor; - unsigned int m_dragPointIndex; - QPointArray m_dragPointArray; - protected: - void beginDragRectangle(KviCanvasRectangleItem * it,const QPoint &p,bool bInitial = false); - void dragRectangle(KviCanvasRectangleItem * it,const QPoint & p); +protected: + void beginDragRectangle(KviCanvasRectangleItem * it, const QPoint & p, bool bInitial = false); + void dragRectangle(KviCanvasRectangleItem * it, const QPoint & p); - void beginDragLine(KviCanvasLine * it,const QPoint &p,bool bInitial = false); - void dragLine(KviCanvasLine * it,const QPoint &p); + void beginDragLine(KviCanvasLine * it, const QPoint & p, bool bInitial = false); + void dragLine(KviCanvasLine * it, const QPoint & p); - void beginDragPolygon(KviCanvasPolygon * it,const QPoint &p,bool bShift = false,bool bCtrl = false); - void dragPolygon(KviCanvasPolygon * it,const QPoint &p); + void beginDragPolygon(KviCanvasPolygon * it, const QPoint & p, bool bShift = false, bool bCtrl = false); + void dragPolygon(KviCanvasPolygon * it, const QPoint & p); - void setItemSelected(QCanvasItem * it); - void clearSelection(); - void insertObjectAt(const QPoint & pnt,ObjectType o); - virtual void contentsMousePressEvent(QMouseEvent *e); - virtual void contentsMouseMoveEvent(QMouseEvent *e); - virtual void contentsMouseReleaseEvent(QMouseEvent *e); - public slots: - void insertRectangle(); - void insertRichText(); - void insertLine(); - void insertPie(); - void insertChord(); - void insertEllipse(); - void insertPolygonTriangle(); - void insertPolygonRectangle(); - void insertPolygonPentagon(); - void insertPolygonHexagon(); - void propertyChanged(const QString &s,const QVariant &v); - }; + void setItemSelected(QCanvasItem * it); + void clearSelection(); + void insertObjectAt(const QPoint & pnt, ObjectType o); + virtual void contentsMousePressEvent(QMouseEvent * e); + virtual void contentsMouseMoveEvent(QMouseEvent * e); + virtual void contentsMouseReleaseEvent(QMouseEvent * e); +public slots: + void insertRectangle(); + void insertRichText(); + void insertLine(); + void insertPie(); + void insertChord(); + void insertEllipse(); + void insertPolygonTriangle(); + void insertPolygonRectangle(); + void insertPolygonPentagon(); + void insertPolygonHexagon(); + void propertyChanged(const QString & s, const QVariant & v); +}; +class KviVariantTableItem : public QTableItem +{ +public: + KviVariantTableItem(QTable * t, const QVariant & property); + ~KviVariantTableItem(); - class KviVariantTableItem : public QTableItem - { - public: - KviVariantTableItem(QTable * t,const QVariant & property); - ~KviVariantTableItem(); - private: - QVariant m_property; - public: - virtual QWidget * createEditor() const; - virtual void setContentFromEditor(QWidget *w); - QVariant & property(){ return m_property; }; - virtual void paint(QPainter *p,const QColorGroup &cg,const QRect &cr,bool selected); - }; +private: + QVariant m_property; +public: + virtual QWidget * createEditor() const; + virtual void setContentFromEditor(QWidget * w); + QVariant & property() { return m_property; }; + virtual void paint(QPainter * p, const QColorGroup & cg, const QRect & cr, bool selected); +}; - class KviCanvasItemPropertiesWidget : public QTable - { - Q_OBJECT - public: - KviCanvasItemPropertiesWidget(QWidget * par); - ~KviCanvasItemPropertiesWidget(); - public: - void editItem(QCanvasItem * it); - protected slots: - void cellEdited(int row,int col); - signals: - void propertyChanged(const QString &s,const QVariant &v); - }; +class KviCanvasItemPropertiesWidget : public QTable +{ + Q_OBJECT +public: + KviCanvasItemPropertiesWidget(QWidget * par); + ~KviCanvasItemPropertiesWidget(); +public: + void editItem(QCanvasItem * it); +protected slots: + void cellEdited(int row, int col); +signals: + void propertyChanged(const QString & s, const QVariant & v); +}; - class DccCanvasWidget : public QWidget - { - friend class KviCanvasView; - Q_OBJECT - public: - DccCanvasWidget(QWidget * par); - ~DccCanvasWidget(); - protected: - QSplitter * m_pSplitter; - QCanvas * m_pCanvas; - QMenuBar * m_pMenuBar; - KviCanvasView * m_pCanvasView; - QLabel * m_pStatusLabel; - KviCanvasItemPropertiesWidget * m_pPropertiesWidget; - protected: - virtual void resizeEvent(QResizeEvent *); - }; +class DccCanvasWidget : public QWidget +{ + friend class KviCanvasView; + Q_OBJECT +public: + DccCanvasWidget(QWidget * par); + ~DccCanvasWidget(); + +protected: + QSplitter * m_pSplitter; + QCanvas * m_pCanvas; + QMenuBar * m_pMenuBar; + KviCanvasView * m_pCanvasView; + QLabel * m_pStatusLabel; + KviCanvasItemPropertiesWidget * m_pPropertiesWidget; + +protected: + virtual void resizeEvent(QResizeEvent *); +}; #endif #endif //_CANVAS_WIDGET_H_ diff --git a/src/modules/dcc/libkvidcc.cpp b/src/modules/dcc/libkvidcc.cpp index 6acd8eddb..aa8bc979d 100644 --- a/src/modules/dcc/libkvidcc.cpp +++ b/src/modules/dcc/libkvidcc.cpp @@ -53,8 +53,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" @@ -63,21 +63,22 @@ DccBroker * g_pDccBroker = 0; - -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_kvs_parse_default_parameters(DccDescriptor * d,KviKvsModuleCommandCall *c) +static bool dcc_kvs_parse_default_parameters(DccDescriptor * d, KviKvsModuleCommandCall * c) { - d->bIsTdcc = c->switches()->find('t',"tdcc"); + d->bIsTdcc = c->switches()->find('t', "tdcc"); - KviKvsVariant * pSw = c->switches()->find('m',"minimize"); + KviKvsVariant * pSw = c->switches()->find('m', "minimize"); if(pSw != 0) d->bOverrideMinimize = pSw->asBoolean(); @@ -87,12 +88,14 @@ static bool dcc_kvs_parse_default_parameters(DccDescriptor * d,KviKvsModuleComma if(!d->console()) { // We don't need a console with -c and -n, otherwise we need it - if(!(c->switches()->find('c',"connect") || c->switches()->find('n',"no-ctcp"))) + if(!(c->switches()->find('c', "connect") || c->switches()->find('n', "no-ctcp"))) { delete d; - c->error(__tr2qs_ctx("This window has no associated IRC context (an IRC context is required unless -c or -n are passed)","dcc")); + c->error(__tr2qs_ctx("This window has no associated IRC context (an IRC context is required unless -c or -n are passed)", "dcc")); return false; - } else d->setConsole(g_pMainWindow->firstConsole()); + } + else + d->setConsole(g_pMainWindow->firstConsole()); } KVI_ASSERT(d->console()); @@ -100,83 +103,93 @@ static bool dcc_kvs_parse_default_parameters(DccDescriptor * d,KviKvsModuleComma if(!d->console()->isConnected()) { // We don't need a connection with -c and -n, otherwise we need it - if(!(c->switches()->find('c',"connect") || c->switches()->find('n',"no-ctcp"))) + if(!(c->switches()->find('c', "connect") || c->switches()->find('n', "no-ctcp"))) { delete d; - c->error(__tr2qs_ctx("You're not connected to a server (an active connection is required unless -c or -n are passed)","dcc")); + c->error(__tr2qs_ctx("You're not connected to a server (an active connection is required unless -c or -n are passed)", "dcc")); return false; - } else { + } + else + { // -c or -n, grab a local nick from somewhere - d->szLocalNick = KVI_OPTION_STRING(KviOption_stringNickname1).trimmed(); - if(d->szLocalNick.isEmpty())d->szLocalNick = KVI_DEFAULT_NICKNAME1; - d->szLocalUser = __tr2qs_ctx("unknown","dcc"); // we can live without it - d->szLocalHost = d->szLocalUser; // we can live without it + d->szLocalNick = KVI_OPTION_STRING(KviOption_stringNickname1).trimmed(); + if(d->szLocalNick.isEmpty()) + d->szLocalNick = KVI_DEFAULT_NICKNAME1; + d->szLocalUser = __tr2qs_ctx("unknown", "dcc"); // we can live without it + d->szLocalHost = d->szLocalUser; // we can live without it } - } else { + } + else + { // We know everything - d->szLocalNick = d->console()->connection()->userInfo()->nickName(); - d->szLocalUser = d->console()->connection()->userInfo()->userName(); - d->szLocalHost = d->console()->connection()->userInfo()->hostName(); + d->szLocalNick = d->console()->connection()->userInfo()->nickName(); + d->szLocalUser = d->console()->connection()->userInfo()->userName(); + d->szLocalHost = d->console()->connection()->userInfo()->hostName(); } - if( (pSw = c->switches()->find('i',"ip")) ) + if((pSw = c->switches()->find('i', "ip"))) { pSw->asString(d->szListenIp); if(!(d->szListenIp.contains('.') || d->szListenIp.contains(':'))) { // This will magically work with the same buffer as source and dst! - if(!KviNetUtils::getInterfaceAddress(d->szListenIp,d->szListenIp)) + if(!KviNetUtils::getInterfaceAddress(d->szListenIp, d->szListenIp)) { - c->error(__tr2qs_ctx("Unable to get address of interface %Q","dcc"),&(d->szListenIp)); + c->error(__tr2qs_ctx("Unable to get address of interface %Q", "dcc"), &(d->szListenIp)); delete d; return false; } } - } else { + } + else + { QString tmp; - if(!dcc_kvs_get_listen_ip_address(c,d->console(),tmp)) + if(!dcc_kvs_get_listen_ip_address(c, d->console(), tmp)) { delete d; - c->error(__tr2qs_ctx("No suitable interfaces to listen on, use -i","dcc")); + c->error(__tr2qs_ctx("No suitable interfaces to listen on, use -i", "dcc")); return false; } - d->szListenIp=tmp; + d->szListenIp = tmp; } - if( (pSw = c->switches()->find('p',"port")) ) + if((pSw = c->switches()->find('p', "port"))) { pSw->asString(d->szListenPort); // fixme! } - else d->szListenPort = "0"; // any port is ok + else + d->szListenPort = "0"; // any port is ok - if( (pSw = c->switches()->find('a',"fake-address")) ) + if((pSw = c->switches()->find('a', "fake-address"))) { pSw->asString(d->szFakeIp); } - else { + else + { 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( (pSw = c->switches()->find('f',"fake-port")) ) + if((pSw = c->switches()->find('f', "fake-port"))) { pSw->asString(d->szFakePort); } - d->bDoTimeout = (!c->switches()->find('u',"unlimited")); + d->bDoTimeout = (!c->switches()->find('u', "unlimited")); #ifdef COMPILE_SSL_SUPPORT - d->bIsSSL = c->switches()->find('s',"ssl"); + d->bIsSSL = c->switches()->find('s', "ssl"); #else - if(c->switches()->find('s',"ssl"))c->warning(__tr2qs_ctx("This executable was built without SSL support, -s switch ignored","dcc")); + if(c->switches()->find('s', "ssl")) + c->warning(__tr2qs_ctx("This executable was built without SSL support, -s switch ignored", "dcc")); #endif return true; } - /* @doc: dcc.chat @type: @@ -390,61 +403,63 @@ static bool dcc_kvs_cmd_chat(KviKvsModuleCommandCall * c) { QString szTarget; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("target",KVS_PT_NONEMPTYSTRING,0,szTarget) + KVSM_PARAMETER("target", KVS_PT_NONEMPTYSTRING, 0, szTarget) KVSM_PARAMETERS_END(c) DccDescriptor * d = new DccDescriptor(c->window()->console()); - d->szNick = szTarget; // we always specify the nickname - d->szUser = __tr2qs_ctx("unknown","dcc"); // username is always unknown - d->szHost = d->szUser; // host is always unknown + d->szNick = szTarget; // we always specify the nickname + d->szUser = __tr2qs_ctx("unknown", "dcc"); // username is always unknown + d->szHost = d->szUser; // host is always unknown - if(!dcc_kvs_parse_default_parameters(d,c))return false; - dcc_module_set_dcc_type(d,"CHAT"); + if(!dcc_kvs_parse_default_parameters(d, c)) + return false; + dcc_module_set_dcc_type(d, "CHAT"); - if(c->switches()->find('z',"zero-port")) + if(c->switches()->find('z', "zero-port")) { // we want to have it reversed... add a tag and send out the request KviDccZeroPortTag * t = g_pDccBroker->addZeroPortTag(); d->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %s chat 127.0.0.1 0 %s%c", - d->console()->connection()->encodeText(d->szNick).data(), - 0x01, - d->console()->connection()->encodeText(d->szType).data(), - d->console()->connection()->encodeText(t->m_szTag).data(), - 0x01); + d->console()->connection()->encodeText(d->szNick).data(), + 0x01, + d->console()->connection()->encodeText(d->szType).data(), + d->console()->connection()->encodeText(t->m_szTag).data(), + 0x01); return true; } - if(c->switches()->find('c',"connect")) + if(c->switches()->find('c', "connect")) { - if(!(c->switches()->find('i',"ip") && c->switches()->find('p',"port"))) + if(!(c->switches()->find('i', "ip") && c->switches()->find('p', "port"))) { delete d; - c->error(__tr2qs_ctx("-c requires -i and -p","dcc")); + c->error(__tr2qs_ctx("-c requires -i and -p", "dcc")); return false; } - d->szIp = d->szListenIp; - d->szPort = d->szListenPort; - d->szListenIp = ""; // useless + d->szIp = d->szListenIp; + d->szPort = d->szListenPort; + d->szListenIp = ""; // useless d->szListenPort = ""; // useless - d->bActive = true; - } else { - d->szIp = __tr2qs_ctx("unknown","dcc"); - d->szPort = d->szIp; - d->bActive = false; - d->bSendRequest = !c->switches()->find('n',"no-ctcp"); + d->bActive = true; + } + else + { + d->szIp = __tr2qs_ctx("unknown", "dcc"); + d->szPort = d->szIp; + d->bActive = false; + d->bSendRequest = !c->switches()->find('n', "no-ctcp"); } //c->window()->output(0,"%Q %Q %Q",&(d->szIp),&(d->szPort),&(d->szListenIp)); d->triggerCreationEvent(); - g_pDccBroker->executeChat(0,d); + g_pDccBroker->executeChat(0, d); return true; } - /* @doc: dcc.send @type: @@ -582,20 +597,20 @@ static bool dcc_kvs_cmd_chat(KviKvsModuleCommandCall * c) static bool dcc_kvs_cmd_send(KviKvsModuleCommandCall * c) { - QString szTarget,szFileName; + QString szTarget, szFileName; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("target",KVS_PT_NONEMPTYSTRING,0,szTarget) - KVSM_PARAMETER("file name",KVS_PT_NONEMPTYSTRING,KVS_PF_OPTIONAL,szFileName) + KVSM_PARAMETER("target", KVS_PT_NONEMPTYSTRING, 0, szTarget) + KVSM_PARAMETER("file name", KVS_PT_NONEMPTYSTRING, KVS_PF_OPTIONAL, szFileName) KVSM_PARAMETERS_END(c) DccDescriptor * d = new DccDescriptor(c->window()->console()); - d->szNick = szTarget; // we always specify the nickname + d->szNick = szTarget; // we always specify the nickname QString szTmp; KviKvsVariant * pSw = 0; - if( (pSw = c->switches()->find('g',"get")) ) + if((pSw = c->switches()->find('g', "get"))) { d->szFileName = QFileInfo(szFileName).fileName(); @@ -607,57 +622,68 @@ static bool dcc_kvs_cmd_send(KviKvsModuleCommandCall * c) pSw->asString(szTmp); // avoid sprintf as long as possible d->szFileSize = szTmp; - } else { - d->szFileSize = __tr_ctx("<unknown size>","dcc"); + } + else + { + d->szFileSize = __tr_ctx("<unknown size>", "dcc"); } } - } else { - d->szFileName = szFileName; + } + else + { + d->szFileName = szFileName; d->szLocalFileName = szFileName; } - d->szUser = __tr2qs_ctx("unknown","dcc"); // username is always unknown - d->szHost = d->szUser; // host is always unknown - d->bRecvFile = pSw != 0; - d->bNoAcks = c->switches()->find('b',"blind") || c->switches()->find('t',"tdcc"); - d->bResume = false; - d->bAutoAccept = pSw != 0; + d->szUser = __tr2qs_ctx("unknown", "dcc"); // username is always unknown + d->szHost = d->szUser; // host is always unknown + d->bRecvFile = pSw != 0; + d->bNoAcks = c->switches()->find('b', "blind") || c->switches()->find('t', "tdcc"); + d->bResume = false; + d->bAutoAccept = pSw != 0; d->bIsIncomingAvatar = false; - if(!dcc_kvs_parse_default_parameters(d,c))return false; + if(!dcc_kvs_parse_default_parameters(d, c)) + return false; - if(c->switches()->find('c',"connect")) + if(c->switches()->find('c', "connect")) { - if(!(c->switches()->find('i',"ip") && c->switches()->find('p',"port"))) + if(!(c->switches()->find('i', "ip") && c->switches()->find('p', "port"))) { delete d; - c->error(__tr2qs_ctx("-c requires -i and -p","dcc")); + c->error(__tr2qs_ctx("-c requires -i and -p", "dcc")); return false; } - d->szIp = d->szListenIp; - d->szPort = d->szListenPort; - d->szListenIp = ""; // useless + d->szIp = d->szListenIp; + d->szPort = d->szListenPort; + d->szListenIp = ""; // useless d->szListenPort = ""; // useless - d->bActive = true; - } else { - d->szIp = __tr2qs_ctx("unknown","dcc"); - d->szPort = d->szIp; - d->bActive = false; - d->bSendRequest = !c->switches()->find('n',"no-ctcp"); + d->bActive = true; + } + else + { + d->szIp = __tr2qs_ctx("unknown", "dcc"); + d->szPort = d->szIp; + d->bActive = false; + d->bSendRequest = !c->switches()->find('n', "no-ctcp"); } - if(c->switches()->find('g',"get")) + if(c->switches()->find('g', "get")) { - dcc_module_set_dcc_type(d,"RECV"); + dcc_module_set_dcc_type(d, "RECV"); d->triggerCreationEvent(); g_pDccBroker->recvFileManage(d); - } else { - dcc_module_set_dcc_type(d,"SEND"); + } + else + { + dcc_module_set_dcc_type(d, "SEND"); d->triggerCreationEvent(); if(!d->szLocalFileName.isEmpty()) { - g_pDccBroker->sendFileExecute(0,d); - } else { + g_pDccBroker->sendFileExecute(0, d); + } + else + { g_pDccBroker->sendFileManage(d); } } @@ -757,38 +783,40 @@ static bool dcc_kvs_cmd_send(KviKvsModuleCommandCall * c) static bool dcc_kvs_cmd_recv(KviKvsModuleCommandCall * c) { - QString szTarget,szFileName; + QString szTarget, szFileName; kvs_uint_t uSize; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("target",KVS_PT_NONEMPTYSTRING,0,szTarget) - KVSM_PARAMETER("filename",KVS_PT_NONEMPTYSTRING,0,szFileName) - KVSM_PARAMETER("size",KVS_PT_UINT,0,uSize) + KVSM_PARAMETER("target", KVS_PT_NONEMPTYSTRING, 0, szTarget) + KVSM_PARAMETER("filename", KVS_PT_NONEMPTYSTRING, 0, szFileName) + KVSM_PARAMETER("size", KVS_PT_UINT, 0, uSize) KVSM_PARAMETERS_END(c) DccDescriptor * d = new DccDescriptor(c->window()->console()); - d->szNick = szTarget; - d->szUser = __tr2qs_ctx("unknown","dcc"); - d->szHost = d->szUser; - d->szIp = __tr2qs_ctx("unknown","dcc"); - d->szPort = d->szIp; + d->szNick = szTarget; + d->szUser = __tr2qs_ctx("unknown", "dcc"); + d->szHost = d->szUser; + d->szIp = __tr2qs_ctx("unknown", "dcc"); + d->szPort = d->szIp; // -c is senseless here...but we accept it for compatibility - if(!dcc_kvs_parse_default_parameters(d,c))return false; + if(!dcc_kvs_parse_default_parameters(d, c)) + return false; - d->szFileName = szFileName; + d->szFileName = szFileName; d->szFileSize.setNum(uSize); - d->bActive = false; // we have to listen! - d->bResume = false; - d->bRecvFile = true; // we have to receive the file! - d->bSendRequest = !c->switches()->find('n',"no-ctcp"); - d->bNoAcks = d->bIsTdcc || c->switches()->find('b',"blind"); - d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccSend); - d->bIsIncomingAvatar = g_pApp->findPendingAvatarChange(d->console(),d->szNick,d->szFileName); + d->bActive = false; // we have to listen! + d->bResume = false; + d->bRecvFile = true; // we have to receive the file! + d->bSendRequest = !c->switches()->find('n', "no-ctcp"); + d->bNoAcks = d->bIsTdcc || c->switches()->find('b', "blind"); + d->bAutoAccept = KVI_OPTION_BOOL(KviOption_boolAutoAcceptDccSend); + d->bIsIncomingAvatar = g_pApp->findPendingAvatarChange(d->console(), d->szNick, d->szFileName); - if(KVI_OPTION_BOOL(KviOption_boolAutoAcceptIncomingAvatars))d->bAutoAccept = d->bAutoAccept || d->bIsIncomingAvatar; - dcc_module_set_dcc_type(d,"RECV"); + if(KVI_OPTION_BOOL(KviOption_boolAutoAcceptIncomingAvatars)) + d->bAutoAccept = d->bAutoAccept || d->bIsIncomingAvatar; + dcc_module_set_dcc_type(d, "RECV"); d->triggerCreationEvent(); g_pDccBroker->recvFileManage(d); @@ -838,39 +866,38 @@ static bool dcc_kvs_cmd_recv(KviKvsModuleCommandCall * c) static bool dcc_kvs_cmd_rsend(KviKvsModuleCommandCall * c) { - QString szTarget,szFileName; + QString szTarget, szFileName; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("target",KVS_PT_NONEMPTYSTRING,0,szTarget) - KVSM_PARAMETER("filename",KVS_PT_NONEMPTYSTRING,KVS_PF_OPTIONAL,szFileName) + KVSM_PARAMETER("target", KVS_PT_NONEMPTYSTRING, 0, szTarget) + KVSM_PARAMETER("filename", KVS_PT_NONEMPTYSTRING, KVS_PF_OPTIONAL, szFileName) KVSM_PARAMETERS_END(c) KVSM_REQUIRE_CONNECTION(c) DccDescriptor * d = new DccDescriptor(c->window()->console()); - d->szNick = szTarget; - d->szLocalFileName = szFileName; - d->bIsTdcc = c->switches()->find('t',"tdcc"); + d->szNick = szTarget; + d->szLocalFileName = szFileName; + d->bIsTdcc = c->switches()->find('t', "tdcc"); #ifdef COMPILE_SSL_SUPPORT - d->bIsSSL = c->switches()->find('s',"ssl"); + d->bIsSSL = c->switches()->find('s', "ssl"); #else - if(c->switches()->find('s',"ssl"))c->warning(__tr2qs_ctx("This executable has been built without SSL support, -s switch ignored","dcc")); + if(c->switches()->find('s', "ssl")) + c->warning(__tr2qs_ctx("This executable has been built without SSL support, -s switch ignored", "dcc")); #endif //!COMPILE_SSL_SUPPORT - if(c->switches()->find('z',"zero-port")) + if(c->switches()->find('z', "zero-port")) { - dcc_module_set_dcc_type(d,"SEND"); + dcc_module_set_dcc_type(d, "SEND"); d->setZeroPortRequestTag("nonempty"); // just to tag it - } else - dcc_module_set_dcc_type(d,"RSEND"); + } + else + dcc_module_set_dcc_type(d, "RSEND"); d->triggerCreationEvent(); g_pDccBroker->rsendManage(d); return true; } - - - /* @doc: dcc.get @type: @@ -901,17 +928,17 @@ static bool dcc_kvs_cmd_rsend(KviKvsModuleCommandCall * c) static bool dcc_kvs_cmd_get(KviKvsModuleCommandCall * c) { - QString szTarget,szFileName; + QString szTarget, szFileName; kvs_uint_t uSize; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("target",KVS_PT_NONEMPTYSTRING,0,szTarget) - KVSM_PARAMETER("filename",KVS_PT_NONEMPTYSTRING,0,szFileName) - KVSM_PARAMETER("size",KVS_PT_UINT,KVS_PF_OPTIONAL,uSize) + KVSM_PARAMETER("target", KVS_PT_NONEMPTYSTRING, 0, szTarget) + KVSM_PARAMETER("filename", KVS_PT_NONEMPTYSTRING, 0, szFileName) + KVSM_PARAMETER("size", KVS_PT_UINT, KVS_PF_OPTIONAL, uSize) KVSM_PARAMETERS_END(c) KVSM_REQUIRE_CONNECTION(c) - KviQString::cutToLast(szFileName,'/'); + KviQString::cutToLast(szFileName, '/'); if(szFileName.contains(' ')) { @@ -921,36 +948,38 @@ static bool dcc_kvs_cmd_get(KviKvsModuleCommandCall * c) KviCString szDCC("GET"); #ifdef COMPILE_SSL_SUPPORT - if(c->switches()->find('s',"ssl"))szDCC.prepend('S'); + if(c->switches()->find('s', "ssl")) + szDCC.prepend('S'); #else - if(c->switches()->find('s',"ssl"))c->warning(__tr2qs_ctx("This executable has no SSL support, -s switch ignored","dcc")); + if(c->switches()->find('s', "ssl")) + c->warning(__tr2qs_ctx("This executable has no SSL support, -s switch ignored", "dcc")); #endif - if(c->switches()->find('t',"tdcc"))szDCC.prepend('T'); + if(c->switches()->find('t', "tdcc")) + szDCC.prepend('T'); if(uSize == 0) { c->window()->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %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(), - 0x01); - } else { + c->window()->console()->connection()->encodeText(szTarget).data(), + 0x01, + c->window()->console()->connection()->encodeText(szDCC.ptr()).data(), + c->window()->console()->connection()->encodeText(szFileName).data(), + 0x01); + } + else + { 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(), - c->window()->console()->connection()->encodeText(QString::number(uSize)).data(), - 0x01); + c->window()->console()->connection()->encodeText(szTarget).data(), + 0x01, + c->window()->console()->connection()->encodeText(szDCC.ptr()).data(), + c->window()->console()->connection()->encodeText(szFileName).data(), + c->window()->console()->connection()->encodeText(QString::number(uSize)).data(), + 0x01); } return true; } - - - // FIXME: SSL support for DCC VOICE ? (has a sense ?) /* @@ -1064,71 +1093,76 @@ static bool dcc_kvs_cmd_voice(KviKvsModuleCommandCall * c) { QString szTarget; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("target",KVS_PT_NONEMPTYSTRING,0,szTarget) + KVSM_PARAMETER("target", KVS_PT_NONEMPTYSTRING, 0, szTarget) KVSM_PARAMETERS_END(c) #ifdef COMPILE_DISABLE_DCC_VOICE - c->warning(__tr2qs_ctx("DCC VOICE support not enabled at compilation time","dcc")); + c->warning(__tr2qs_ctx("DCC VOICE support not enabled at compilation time", "dcc")); return true; #endif DccDescriptor * d = new DccDescriptor(c->window()->console()); - d->szNick = szTarget; // we always specify the nickname - d->szUser = __tr2qs_ctx("unknown","dcc"); // username is always unknown - d->szHost = d->szUser; // host is always unknown - d->iSampleRate = 8000; + d->szNick = szTarget; // we always specify the nickname + d->szUser = __tr2qs_ctx("unknown", "dcc"); // username is always unknown + d->szHost = d->szUser; // host is always unknown + d->iSampleRate = 8000; - if(!dcc_kvs_parse_default_parameters(d,c))return false; + if(!dcc_kvs_parse_default_parameters(d, c)) + return false; - if(KviKvsVariant * pSR = c->switches()->find('h',"sample-rate")) + if(KviKvsVariant * pSR = c->switches()->find('h', "sample-rate")) { kvs_int_t iSR; if(!pSR->asInteger(iSR)) { - c->warning(__tr2qs_ctx("Invalid sample rate specified, defaulting to 8000","dcc")); + c->warning(__tr2qs_ctx("Invalid sample rate specified, defaulting to 8000", "dcc")); d->iSampleRate = 8000; - } else { + } + else + { d->iSampleRate = iSR; } } d->szCodec = "adpcm"; - if(KviKvsVariant * pCodec = c->switches()->find('g',"codec")) + if(KviKvsVariant * pCodec = c->switches()->find('g', "codec")) { QString szCodec; pCodec->asString(szCodec); if(!kvi_dcc_voice_is_valid_codec(szCodec.toUtf8().data())) { - c->warning(__tr2qs_ctx("Invalid codec specified, defaulting to 'ADPCM'","dcc")); + c->warning(__tr2qs_ctx("Invalid codec specified, defaulting to 'ADPCM'", "dcc")); d->szCodec = "adpcm"; } } - dcc_module_set_dcc_type(d,"VOICE"); - if(c->switches()->find('c',"connect")) + dcc_module_set_dcc_type(d, "VOICE"); + if(c->switches()->find('c', "connect")) { - if(!(c->switches()->find('i',"ip") && c->switches()->find('p',"port"))) + if(!(c->switches()->find('i', "ip") && c->switches()->find('p', "port"))) { delete d; - c->error(__tr2qs_ctx("-c requires -i and -p","dcc")); + c->error(__tr2qs_ctx("-c requires -i and -p", "dcc")); return false; } - d->szIp = d->szListenIp; - d->szPort = d->szListenPort; - d->szListenIp = ""; // useless + d->szIp = d->szListenIp; + d->szPort = d->szListenPort; + d->szListenIp = ""; // useless d->szListenPort = ""; // useless - d->bActive = true; + d->bActive = true; d->triggerCreationEvent(); - g_pDccBroker->activeVoiceExecute(0,d); - } else { - d->szIp = __tr2qs_ctx("unknown","dcc"); - d->szPort = d->szIp; - d->bActive = false; - d->bSendRequest = !(c->switches()->find('n',"no-ctcp")); + g_pDccBroker->activeVoiceExecute(0, d); + } + else + { + d->szIp = __tr2qs_ctx("unknown", "dcc"); + d->szPort = d->szIp; + d->bActive = false; + d->bSendRequest = !(c->switches()->find('n', "no-ctcp")); d->triggerCreationEvent(); g_pDccBroker->passiveVoiceExecute(d); @@ -1137,65 +1171,69 @@ static bool dcc_kvs_cmd_voice(KviKvsModuleCommandCall * c) return true; } - static bool dcc_kvs_cmd_video(KviKvsModuleCommandCall * c) { QString szTarget; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("target",KVS_PT_NONEMPTYSTRING,0,szTarget) + KVSM_PARAMETER("target", KVS_PT_NONEMPTYSTRING, 0, szTarget) KVSM_PARAMETERS_END(c) #ifdef COMPILE_DISABLE_DCC_VIDEO - c->warning(__tr2qs_ctx("DCC VIDEO support not enabled at compilation time","dcc")); + c->warning(__tr2qs_ctx("DCC VIDEO support not enabled at compilation time", "dcc")); return true; #else DccDescriptor * d = new DccDescriptor(c->window()->console()); - d->szNick = szTarget; // we always specify the nickname - d->szUser = __tr2qs_ctx("unknown","dcc"); // username is always unknown - d->szHost = d->szUser; // host is always unknown + d->szNick = szTarget; // we always specify the nickname + d->szUser = __tr2qs_ctx("unknown", "dcc"); // username is always unknown + d->szHost = d->szUser; // host is always unknown - if(!dcc_kvs_parse_default_parameters(d,c))return false; + if(!dcc_kvs_parse_default_parameters(d, c)) + return false; d->szCodec = "sjpeg"; - if(KviKvsVariant * pCodec = c->switches()->find('g',"codec")) + if(KviKvsVariant * pCodec = c->switches()->find('g', "codec")) { QString szCodec; pCodec->asString(szCodec); if(!kvi_dcc_video_is_valid_codec(szCodec.toUtf8().data())) { - c->warning(__tr2qs_ctx("Invalid codec specified","dcc")); + c->warning(__tr2qs_ctx("Invalid codec specified", "dcc")); d->szCodec = "sjpeg"; - } else { + } + else + { d->szCodec = szCodec; } } - dcc_module_set_dcc_type(d,"VIDEO"); - if(c->switches()->find('c',"connect")) + dcc_module_set_dcc_type(d, "VIDEO"); + if(c->switches()->find('c', "connect")) { - if(!(c->switches()->find('i',"ip") && c->switches()->find('p',"port"))) + if(!(c->switches()->find('i', "ip") && c->switches()->find('p', "port"))) { delete d; - c->error(__tr2qs_ctx("-c requires -i and -p","dcc")); + c->error(__tr2qs_ctx("-c requires -i and -p", "dcc")); return false; } - d->szIp = d->szListenIp; - d->szPort = d->szListenPort; - d->szListenIp = ""; // useless + d->szIp = d->szListenIp; + d->szPort = d->szListenPort; + d->szListenIp = ""; // useless d->szListenPort = ""; // useless - d->bActive = true; + d->bActive = true; d->triggerCreationEvent(); - g_pDccBroker->activeVideoExecute(0,d); - } else { - d->szIp = __tr2qs_ctx("unknown","dcc"); - d->szPort = d->szIp; - d->bActive = false; - d->bSendRequest = !(c->switches()->find('n',"no-ctcp")); + g_pDccBroker->activeVideoExecute(0, d); + } + else + { + d->szIp = __tr2qs_ctx("unknown", "dcc"); + d->szPort = d->szIp; + d->bActive = false; + d->bSendRequest = !(c->switches()->find('n', "no-ctcp")); d->triggerCreationEvent(); g_pDccBroker->passiveVideoExecute(d); @@ -1205,7 +1243,6 @@ static bool dcc_kvs_cmd_video(KviKvsModuleCommandCall * c) #endif } - /* static bool dcc_module_cmd_canvas(KviModule *m,KviCommand *c) { @@ -1324,10 +1361,6 @@ static bool dcc_module_cmd_canvas(KviModule *m,KviCommand *c) } */ - - - - /* @doc: dcc_connection @type: @@ -1586,7 +1619,7 @@ static bool dcc_module_cmd_canvas(KviModule *m,KviCommand *c) [i]XDCC[/i] has exactly the same meaning as [i]DCC[/i] (at least in KVIrc).[br] */ -static DccDescriptor * dcc_kvs_find_dcc_descriptor(const kvs_uint_t &uId,KviKvsModuleRunTimeCall * c,bool bWarn = true) +static DccDescriptor * dcc_kvs_find_dcc_descriptor(const kvs_uint_t & uId, KviKvsModuleRunTimeCall * c, bool bWarn = true) { DccDescriptor * dcc = 0; if(uId == 0) @@ -1596,16 +1629,15 @@ static DccDescriptor * dcc_kvs_find_dcc_descriptor(const kvs_uint_t &uId,KviKvsM dcc = ((DccWindow *)(c->window()))->descriptor(); } if((!dcc) && bWarn) - c->warning(__tr2qs_ctx("The current window has no associated DCC session","dcc")); + c->warning(__tr2qs_ctx("The current window has no associated DCC session", "dcc")); return dcc; } dcc = DccDescriptor::find(uId); if((!dcc) && bWarn) - c->warning(__tr2qs_ctx("The specified parameter is not a valid DCC identifier","dcc")); + c->warning(__tr2qs_ctx("The specified parameter is not a valid DCC identifier", "dcc")); return dcc; } - /* @doc: dcc.abort @type: @@ -1634,10 +1666,10 @@ static bool dcc_kvs_cmd_abort(KviKvsModuleCommandCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c,!c->switches()->find('q',"quiet")); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c, !c->switches()->find('q', "quiet")); if(dcc) { @@ -1673,17 +1705,19 @@ static bool dcc_kvs_cmd_abort(KviKvsModuleCommandCall * c) */ static bool dcc_kvs_cmd_setBandwidthLimit(KviKvsModuleCommandCall * c) { - kvs_uint_t uDccId,uVal; + kvs_uint_t uDccId, uVal; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("limit_value",KVS_PT_UINT,0,uVal) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("limit_value", KVS_PT_UINT, 0, uVal) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c,!c->switches()->find('q',"quiet")); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c, !c->switches()->find('q', "quiet")); if(dcc) { - if (dcc->transfer())dcc->transfer()->setBandwidthLimit(uVal); - else if (!c->switches()->find('q',"quiet"))c->warning(__tr2qs_ctx("This DCC session is not a DCC transfer session","dcc")); + if(dcc->transfer()) + dcc->transfer()->setBandwidthLimit(uVal); + else if(!c->switches()->find('q', "quiet")) + c->warning(__tr2qs_ctx("This DCC session is not a DCC transfer session", "dcc")); } return true; } @@ -1714,16 +1748,16 @@ static bool dcc_kvs_fnc_protocol(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->protocol()); + if(dcc) + c->returnValue()->setString(dcc->protocol()); return true; } - /* @doc: dcc.connectionType @type: @@ -1751,16 +1785,16 @@ static bool dcc_kvs_fnc_connectionType(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->isActive() ? "ACTIVE" : "PASSIVE"); + if(dcc) + c->returnValue()->setString(dcc->isActive() ? "ACTIVE" : "PASSIVE"); return true; } - /* @doc: dcc.isFileTransfer @type: @@ -1787,16 +1821,16 @@ static bool dcc_kvs_fnc_isFileTransfer(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c,false); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c, false); - if(dcc)c->returnValue()->setBoolean(dcc->isFileTransfer()); + if(dcc) + c->returnValue()->setBoolean(dcc->isFileTransfer()); return true; } - /* @doc: dcc.isFileUpload @type: @@ -1823,16 +1857,16 @@ static bool dcc_kvs_fnc_isFileUpload(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setBoolean(dcc->isFileUpload()); + if(dcc) + c->returnValue()->setBoolean(dcc->isFileUpload()); return true; } - /* @doc: dcc.isFileDownload @type: @@ -1859,16 +1893,16 @@ static bool dcc_kvs_fnc_isFileDownload(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setBoolean(dcc->isFileDownload()); + if(dcc) + c->returnValue()->setBoolean(dcc->isFileDownload()); return true; } - /* @doc: dcc.localNick @type: @@ -1894,16 +1928,16 @@ static bool dcc_kvs_fnc_localNick(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->localNick()); + if(dcc) + c->returnValue()->setString(dcc->localNick()); return true; } - /* @doc: dcc.localUser @type: @@ -1929,12 +1963,13 @@ static bool dcc_kvs_fnc_localUser(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->localUser()); + if(dcc) + c->returnValue()->setString(dcc->localUser()); return true; } @@ -1963,16 +1998,16 @@ static bool dcc_kvs_fnc_localHost(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->localHost()); + if(dcc) + c->returnValue()->setString(dcc->localHost()); return true; } - /* @doc: dcc.localIp @type: @@ -1998,16 +2033,16 @@ static bool dcc_kvs_fnc_localIp(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->localIp()); + if(dcc) + c->returnValue()->setString(dcc->localIp()); return true; } - /* @doc: dcc.localPort @type: @@ -2032,16 +2067,16 @@ static bool dcc_kvs_fnc_localPort(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->localPort()); + if(dcc) + c->returnValue()->setString(dcc->localPort()); return true; } - /* @doc: dcc.localFileName @type: @@ -2064,16 +2099,16 @@ static bool dcc_kvs_fnc_localFileName(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->localFileName()); + if(dcc) + c->returnValue()->setString(dcc->localFileName()); return true; } - /* @doc: dcc.localFileSize @type: @@ -2101,16 +2136,16 @@ static bool dcc_kvs_fnc_localFileSize(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->localFileSize().isEmpty() ? QString("0") : dcc->localFileSize()); + if(dcc) + c->returnValue()->setString(dcc->localFileSize().isEmpty() ? QString("0") : dcc->localFileSize()); return true; } - /* @doc: dcc.remoteNick @type: @@ -2136,16 +2171,16 @@ static bool dcc_kvs_fnc_remoteNick(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->remoteNick()); + if(dcc) + c->returnValue()->setString(dcc->remoteNick()); return true; } - /* @doc: dcc.remoteUser @type: @@ -2171,12 +2206,13 @@ static bool dcc_kvs_fnc_remoteUser(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->remoteUser()); + if(dcc) + c->returnValue()->setString(dcc->remoteUser()); return true; } @@ -2205,12 +2241,13 @@ static bool dcc_kvs_fnc_remoteHost(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->remoteHost()); + if(dcc) + c->returnValue()->setString(dcc->remoteHost()); return true; } @@ -2239,16 +2276,16 @@ static bool dcc_kvs_fnc_remoteIp(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->remoteIp()); + if(dcc) + c->returnValue()->setString(dcc->remoteIp()); return true; } - /* @doc: dcc.remotePort @type: @@ -2274,16 +2311,16 @@ static bool dcc_kvs_fnc_remotePort(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->remotePort()); + if(dcc) + c->returnValue()->setString(dcc->remotePort()); return true; } - /* @doc: dcc.remoteFileName @type: @@ -2306,16 +2343,16 @@ static bool dcc_kvs_fnc_remoteFileName(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->remoteFileName()); + if(dcc) + c->returnValue()->setString(dcc->remoteFileName()); return true; } - /* @doc: dcc.remoteFileSize @type: @@ -2343,16 +2380,16 @@ static bool dcc_kvs_fnc_remoteFileSize(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); - if(dcc)c->returnValue()->setString(dcc->remoteFileSize().isEmpty() ? QString("0") : dcc->remoteFileSize()); + if(dcc) + c->returnValue()->setString(dcc->remoteFileSize().isEmpty() ? QString("0") : dcc->remoteFileSize()); return true; } - /* @doc: dcc.ircContext @type: @@ -2381,10 +2418,10 @@ static bool dcc_kvs_fnc_ircContext(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); if(dcc) { @@ -2392,16 +2429,16 @@ static bool dcc_kvs_fnc_ircContext(KviKvsModuleFunctionCall * c) if(pEventWindow && (g_pApp->windowExists(pEventWindow))) { c->returnValue()->setInteger(dcc->console()->context()->id()); - } else { - c->error(__tr2qs_ctx("The IRC context that originated the DCC doesn't exists anymore.","dcc")); + } + else + { + c->error(__tr2qs_ctx("The IRC context that originated the DCC doesn't exists anymore.", "dcc")); return false; } } return true; } - - /* @doc: dcc.transferStatus @type: @@ -2431,10 +2468,10 @@ static bool dcc_kvs_fnc_transferStatus(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); if(dcc) { @@ -2448,7 +2485,6 @@ static bool dcc_kvs_fnc_transferStatus(KviKvsModuleFunctionCall * c) return true; } - /* @doc: dcc.transferredBytes @type: @@ -2476,25 +2512,25 @@ static bool dcc_kvs_fnc_transferredBytes(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); if(dcc) { if(dcc->transfer()) { c->returnValue()->setInteger(dcc->transfer()->transferredBytes()); - } else { + } + else + { c->returnValue()->setInteger(0); } } return true; } - - /* @doc: dcc.averageSpeed @type: @@ -2522,17 +2558,19 @@ static bool dcc_kvs_fnc_averageSpeed(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); if(dcc) { if(dcc->transfer()) { c->returnValue()->setInteger(dcc->transfer()->averageSpeed()); - } else { + } + else + { c->returnValue()->setInteger(0); } } @@ -2564,24 +2602,25 @@ static bool dcc_kvs_fnc_currentSpeed(KviKvsModuleFunctionCall * c) { kvs_uint_t uDccId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) KVSM_PARAMETERS_END(c) - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); if(dcc) { if(dcc->transfer()) { c->returnValue()->setInteger(dcc->transfer()->instantSpeed()); - } else { + } + else + { c->returnValue()->setInteger(0); } } return true; } - /* @doc: dcc.session @type: @@ -2604,7 +2643,7 @@ static bool dcc_kvs_fnc_session(KviKvsModuleFunctionCall * c) { QString szWinId; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("window_id",KVS_PT_STRING,KVS_PF_OPTIONAL,szWinId) + KVSM_PARAMETER("window_id", KVS_PT_STRING, KVS_PF_OPTIONAL, szWinId) KVSM_PARAMETERS_END(c) DccDescriptor * dcc = 0; @@ -2614,9 +2653,11 @@ static bool dcc_kvs_fnc_session(KviKvsModuleFunctionCall * c) dcc = ((DccWindow *)(c->window()))->descriptor(); if(!dcc) { - c->warning(__tr2qs_ctx("The current window has no associated DCC session","dcc")); + c->warning(__tr2qs_ctx("The current window has no associated DCC session", "dcc")); c->returnValue()->setInteger(0); - } else { + } + else + { c->returnValue()->setInteger(dcc->id()); } return true; @@ -2625,7 +2666,7 @@ static bool dcc_kvs_fnc_session(KviKvsModuleFunctionCall * c) KviWindow * pWnd = g_pApp->findWindow(szWinId); if(!pWnd) { - c->warning(__tr2qs_ctx("The specified window identifier is not valid","dcc")); + c->warning(__tr2qs_ctx("The specified window identifier is not valid", "dcc")); c->returnValue()->setInteger(0); return true; } @@ -2634,15 +2675,16 @@ static bool dcc_kvs_fnc_session(KviKvsModuleFunctionCall * c) dcc = ((DccWindow *)pWnd)->descriptor(); if(!dcc) { - c->warning(__tr2qs_ctx("The current window has no associated DCC session","dcc")); + c->warning(__tr2qs_ctx("The current window has no associated DCC session", "dcc")); c->returnValue()->setInteger(0); - } else { + } + else + { c->returnValue()->setInteger(dcc->id()); } return true; } - /* @doc: dcc.sessionList @type: @@ -2667,16 +2709,17 @@ static bool dcc_kvs_fnc_sessionList(KviKvsModuleFunctionCall * c) { QString szFlags; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("filter",KVS_PT_STRING,KVS_PF_OPTIONAL,szFlags) + KVSM_PARAMETER("filter", KVS_PT_STRING, KVS_PF_OPTIONAL, szFlags) KVSM_PARAMETERS_END(c) KviKvsArray * a = new KviKvsArray(); c->returnValue()->setArray(a); - KviPointerHashTable<int,DccDescriptor> * dict = DccDescriptor::descriptorDict(); - if(!dict)return true; + KviPointerHashTable<int, DccDescriptor> * dict = DccDescriptor::descriptorDict(); + if(!dict) + return true; - KviPointerHashTableIterator<int,DccDescriptor> it(*dict); + KviPointerHashTableIterator<int, DccDescriptor> it(*dict); int idx = 0; @@ -2685,21 +2728,21 @@ static bool dcc_kvs_fnc_sessionList(KviKvsModuleFunctionCall * c) // all while(DccDescriptor * dcc = it.current()) { - a->set(idx++,new KviKvsVariant((kvs_int_t)(dcc->id()))); + a->set(idx++, new KviKvsVariant((kvs_int_t)(dcc->id()))); ++it; } - } else { - bool bWantFileUploads = szFlags.contains('u',Qt::CaseInsensitive); - bool bWantFileDownloads = szFlags.contains('d',Qt::CaseInsensitive); - bool bWantChats = szFlags.contains('c',Qt::CaseInsensitive); + } + else + { + bool bWantFileUploads = szFlags.contains('u', Qt::CaseInsensitive); + bool bWantFileDownloads = szFlags.contains('d', Qt::CaseInsensitive); + bool bWantChats = szFlags.contains('c', Qt::CaseInsensitive); while(DccDescriptor * dcc = it.current()) { - if((dcc->isFileUpload() && bWantFileUploads) || - (dcc->isFileDownload() && bWantFileDownloads) || - (dcc->isDccChat() && bWantChats)) + if((dcc->isFileUpload() && bWantFileUploads) || (dcc->isFileDownload() && bWantFileDownloads) || (dcc->isDccChat() && bWantChats)) { - a->set(idx++,new KviKvsVariant((kvs_int_t)(dcc->id()))); + a->set(idx++, new KviKvsVariant((kvs_int_t)(dcc->id()))); } ++it; } @@ -2708,7 +2751,6 @@ static bool dcc_kvs_fnc_sessionList(KviKvsModuleFunctionCall * c) return true; } - /* @doc: dcc.getSSLCertInfo @type: @@ -2772,39 +2814,41 @@ static bool dcc_kvs_fnc_getSSLCertInfo(KviKvsModuleFunctionCall * c) QString szQuery; QString szType; QString szParam1; - bool bRemote=true; + bool bRemote = true; KVSM_PARAMETERS_BEGIN(c) - KVSM_PARAMETER("query",KVS_PT_STRING,0,szQuery) - KVSM_PARAMETER("type",KVS_PT_STRING,KVS_PF_OPTIONAL,szType) - KVSM_PARAMETER("dcc_id",KVS_PT_UINT,KVS_PF_OPTIONAL,uDccId) - KVSM_PARAMETER("param1",KVS_PT_STRING,KVS_PF_OPTIONAL,szParam1) + KVSM_PARAMETER("query", KVS_PT_STRING, 0, szQuery) + KVSM_PARAMETER("type", KVS_PT_STRING, KVS_PF_OPTIONAL, szType) + KVSM_PARAMETER("dcc_id", KVS_PT_UINT, KVS_PF_OPTIONAL, uDccId) + KVSM_PARAMETER("param1", KVS_PT_STRING, KVS_PF_OPTIONAL, szParam1) KVSM_PARAMETERS_END(c) #ifndef COMPILE_SSL_SUPPORT - c->warning(__tr2qs_ctx("This executable was built without SSL support","dcc")); + c->warning(__tr2qs_ctx("This executable was built without SSL support", "dcc")); return true; #else - if(szType.compare("local")==0) + if(szType.compare("local") == 0) + { + bRemote = false; + } + else { - bRemote=false; - } else { // already defaults to true, we only catch the error condition - if(szType.compare("remote")!=0) + if(szType.compare("remote") != 0) { - c->warning(__tr2qs_ctx("You specified a bad string for the parameter \"type\"","dcc")); + c->warning(__tr2qs_ctx("You specified a bad string for the parameter \"type\"", "dcc")); c->returnValue()->setString(""); return true; } } - DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId,c); + DccDescriptor * dcc = dcc_kvs_find_dcc_descriptor(uDccId, c); if(dcc) { if(!dcc->isSSL()) { - c->warning(__tr2qs_ctx("Unable to get SSL information: DCC session is not using SSL","dcc")); + c->warning(__tr2qs_ctx("Unable to get SSL information: DCC session is not using SSL", "dcc")); c->returnValue()->setString(""); return true; } @@ -2817,7 +2861,7 @@ static bool dcc_kvs_fnc_getSSLCertInfo(KviKvsModuleFunctionCall * c) if(!pSlaveThread) { - c->warning(__tr2qs_ctx("Unable to get SSL information: DCC session not initialized yet","dcc")); + c->warning(__tr2qs_ctx("Unable to get SSL information: DCC session not initialized yet", "dcc")); c->returnValue()->setString(""); return true; } @@ -2825,7 +2869,7 @@ static bool dcc_kvs_fnc_getSSLCertInfo(KviKvsModuleFunctionCall * c) KviSSL * pSSL = pSlaveThread->getSSL(); if(!pSSL) { - c->warning(__tr2qs_ctx("Unable to get SSL information: SSL non initialized yet in DCC session","dcc")); + c->warning(__tr2qs_ctx("Unable to get SSL information: SSL non initialized yet in DCC session", "dcc")); c->returnValue()->setString(""); return true; } @@ -2834,7 +2878,7 @@ static bool dcc_kvs_fnc_getSSLCertInfo(KviKvsModuleFunctionCall * c) if(!pCert) { - c->warning(__tr2qs_ctx("Unable to get SSL information: no peer certificate available","dcc")); + c->warning(__tr2qs_ctx("Unable to get SSL information: no peer certificate available", "dcc")); c->returnValue()->setString(""); return true; } @@ -2842,7 +2886,7 @@ static bool dcc_kvs_fnc_getSSLCertInfo(KviKvsModuleFunctionCall * c) if(KviSSLMaster::getSSLCertInfo(pCert, szQuery, szParam1, c->returnValue())) return true; - c->warning(__tr2qs_ctx("Unable to get SSL information: query not recognized","dcc")); + c->warning(__tr2qs_ctx("Unable to get SSL information: query not recognized", "dcc")); c->returnValue()->setString(""); return true; } @@ -2850,7 +2894,6 @@ static bool dcc_kvs_fnc_getSSLCertInfo(KviKvsModuleFunctionCall * c) #endif } - /* @doc: dcc @type: @@ -2909,51 +2952,49 @@ static bool dcc_kvs_fnc_getSSLCertInfo(KviKvsModuleFunctionCall * c) [fnc]$dcc.getSSLCertInfo[/fnc][br] */ - static bool dcc_module_init(KviModule * m) { g_pDccBroker = new DccBroker(); - KVSM_REGISTER_SIMPLE_COMMAND(m,"send",dcc_kvs_cmd_send); - KVSM_REGISTER_SIMPLE_COMMAND(m,"chat",dcc_kvs_cmd_chat); - KVSM_REGISTER_SIMPLE_COMMAND(m,"video",dcc_kvs_cmd_video); - KVSM_REGISTER_SIMPLE_COMMAND(m,"voice",dcc_kvs_cmd_voice); - KVSM_REGISTER_SIMPLE_COMMAND(m,"recv",dcc_kvs_cmd_recv); - KVSM_REGISTER_SIMPLE_COMMAND(m,"rsend",dcc_kvs_cmd_rsend); - KVSM_REGISTER_SIMPLE_COMMAND(m,"get",dcc_kvs_cmd_get); - KVSM_REGISTER_SIMPLE_COMMAND(m,"abort",dcc_kvs_cmd_abort); - KVSM_REGISTER_SIMPLE_COMMAND(m,"setBandwidthLimit",dcc_kvs_cmd_setBandwidthLimit); - + KVSM_REGISTER_SIMPLE_COMMAND(m, "send", dcc_kvs_cmd_send); + KVSM_REGISTER_SIMPLE_COMMAND(m, "chat", dcc_kvs_cmd_chat); + KVSM_REGISTER_SIMPLE_COMMAND(m, "video", dcc_kvs_cmd_video); + KVSM_REGISTER_SIMPLE_COMMAND(m, "voice", dcc_kvs_cmd_voice); + KVSM_REGISTER_SIMPLE_COMMAND(m, "recv", dcc_kvs_cmd_recv); + KVSM_REGISTER_SIMPLE_COMMAND(m, "rsend", dcc_kvs_cmd_rsend); + KVSM_REGISTER_SIMPLE_COMMAND(m, "get", dcc_kvs_cmd_get); + KVSM_REGISTER_SIMPLE_COMMAND(m, "abort", dcc_kvs_cmd_abort); + KVSM_REGISTER_SIMPLE_COMMAND(m, "setBandwidthLimit", dcc_kvs_cmd_setBandwidthLimit); // FIXME: file upload / download state ? - KVSM_REGISTER_FUNCTION(m,"transferStatus",dcc_kvs_fnc_transferStatus); - KVSM_REGISTER_FUNCTION(m,"protocol",dcc_kvs_fnc_protocol); - KVSM_REGISTER_FUNCTION(m,"connectionType",dcc_kvs_fnc_connectionType); - KVSM_REGISTER_FUNCTION(m,"isFileTransfer",dcc_kvs_fnc_isFileTransfer); - KVSM_REGISTER_FUNCTION(m,"isFileUpload",dcc_kvs_fnc_isFileUpload); - KVSM_REGISTER_FUNCTION(m,"isFileDownload",dcc_kvs_fnc_isFileDownload); - KVSM_REGISTER_FUNCTION(m,"localNick",dcc_kvs_fnc_localNick); - KVSM_REGISTER_FUNCTION(m,"localUser",dcc_kvs_fnc_localUser); - KVSM_REGISTER_FUNCTION(m,"localHost",dcc_kvs_fnc_localHost); - KVSM_REGISTER_FUNCTION(m,"localIp",dcc_kvs_fnc_localIp); - KVSM_REGISTER_FUNCTION(m,"localPort",dcc_kvs_fnc_localPort); - KVSM_REGISTER_FUNCTION(m,"localFileName",dcc_kvs_fnc_localFileName); - KVSM_REGISTER_FUNCTION(m,"localFileSize",dcc_kvs_fnc_localFileSize); - KVSM_REGISTER_FUNCTION(m,"remoteNick",dcc_kvs_fnc_remoteNick); - KVSM_REGISTER_FUNCTION(m,"remoteUser",dcc_kvs_fnc_remoteUser); - KVSM_REGISTER_FUNCTION(m,"remoteHost",dcc_kvs_fnc_remoteHost); - KVSM_REGISTER_FUNCTION(m,"remoteIp",dcc_kvs_fnc_remoteIp); - KVSM_REGISTER_FUNCTION(m,"remotePort",dcc_kvs_fnc_remotePort); - KVSM_REGISTER_FUNCTION(m,"remoteFileName",dcc_kvs_fnc_remoteFileName); - KVSM_REGISTER_FUNCTION(m,"remoteFileSize",dcc_kvs_fnc_remoteFileSize); - KVSM_REGISTER_FUNCTION(m,"averageSpeed",dcc_kvs_fnc_averageSpeed); - KVSM_REGISTER_FUNCTION(m,"currentSpeed",dcc_kvs_fnc_currentSpeed); - KVSM_REGISTER_FUNCTION(m,"transferredBytes",dcc_kvs_fnc_transferredBytes); - KVSM_REGISTER_FUNCTION(m,"ircContext",dcc_kvs_fnc_ircContext); - KVSM_REGISTER_FUNCTION(m,"session",dcc_kvs_fnc_session); - KVSM_REGISTER_FUNCTION(m,"sessionList",dcc_kvs_fnc_sessionList); - KVSM_REGISTER_FUNCTION(m,"getSSLCertInfo",dcc_kvs_fnc_getSSLCertInfo); + KVSM_REGISTER_FUNCTION(m, "transferStatus", dcc_kvs_fnc_transferStatus); + KVSM_REGISTER_FUNCTION(m, "protocol", dcc_kvs_fnc_protocol); + KVSM_REGISTER_FUNCTION(m, "connectionType", dcc_kvs_fnc_connectionType); + KVSM_REGISTER_FUNCTION(m, "isFileTransfer", dcc_kvs_fnc_isFileTransfer); + KVSM_REGISTER_FUNCTION(m, "isFileUpload", dcc_kvs_fnc_isFileUpload); + KVSM_REGISTER_FUNCTION(m, "isFileDownload", dcc_kvs_fnc_isFileDownload); + KVSM_REGISTER_FUNCTION(m, "localNick", dcc_kvs_fnc_localNick); + KVSM_REGISTER_FUNCTION(m, "localUser", dcc_kvs_fnc_localUser); + KVSM_REGISTER_FUNCTION(m, "localHost", dcc_kvs_fnc_localHost); + KVSM_REGISTER_FUNCTION(m, "localIp", dcc_kvs_fnc_localIp); + KVSM_REGISTER_FUNCTION(m, "localPort", dcc_kvs_fnc_localPort); + KVSM_REGISTER_FUNCTION(m, "localFileName", dcc_kvs_fnc_localFileName); + KVSM_REGISTER_FUNCTION(m, "localFileSize", dcc_kvs_fnc_localFileSize); + KVSM_REGISTER_FUNCTION(m, "remoteNick", dcc_kvs_fnc_remoteNick); + KVSM_REGISTER_FUNCTION(m, "remoteUser", dcc_kvs_fnc_remoteUser); + KVSM_REGISTER_FUNCTION(m, "remoteHost", dcc_kvs_fnc_remoteHost); + KVSM_REGISTER_FUNCTION(m, "remoteIp", dcc_kvs_fnc_remoteIp); + KVSM_REGISTER_FUNCTION(m, "remotePort", dcc_kvs_fnc_remotePort); + KVSM_REGISTER_FUNCTION(m, "remoteFileName", dcc_kvs_fnc_remoteFileName); + KVSM_REGISTER_FUNCTION(m, "remoteFileSize", dcc_kvs_fnc_remoteFileSize); + KVSM_REGISTER_FUNCTION(m, "averageSpeed", dcc_kvs_fnc_averageSpeed); + KVSM_REGISTER_FUNCTION(m, "currentSpeed", dcc_kvs_fnc_currentSpeed); + KVSM_REGISTER_FUNCTION(m, "transferredBytes", dcc_kvs_fnc_transferredBytes); + KVSM_REGISTER_FUNCTION(m, "ircContext", dcc_kvs_fnc_ircContext); + KVSM_REGISTER_FUNCTION(m, "session", dcc_kvs_fnc_session); + KVSM_REGISTER_FUNCTION(m, "sessionList", dcc_kvs_fnc_sessionList); + KVSM_REGISTER_FUNCTION(m, "getSSLCertInfo", dcc_kvs_fnc_getSSLCertInfo); return true; } @@ -2975,14 +3016,13 @@ static bool dcc_module_can_unload(KviModule *) } KVIRC_MODULE( - "DCC", - "4.0.0", - "Copyright (C) 2000-2004:\n" \ - "Szymon Stefanek (pragma at kvirc dot net)\n", - "DCC extension for KVIrc\n", - dcc_module_init, - dcc_module_can_unload, - 0, - dcc_module_cleanup, - "dcc" -) + "DCC", + "4.0.0", + "Copyright (C) 2000-2004:\n" + "Szymon Stefanek (pragma at kvirc dot net)\n", + "DCC extension for KVIrc\n", + dcc_module_init, + dcc_module_can_unload, + 0, + dcc_module_cleanup, + "dcc") 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); } } |
