summaryrefslogtreecommitdiffstats
path: root/src/modules/dcc/descriptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/dcc/descriptor.cpp')
-rw-r--r--src/modules/dcc/descriptor.cpp224
1 files changed, 224 insertions, 0 deletions
diff --git a/src/modules/dcc/descriptor.cpp b/src/modules/dcc/descriptor.cpp
new file mode 100644
index 00000000..b21b0561
--- /dev/null
+++ b/src/modules/dcc/descriptor.cpp
@@ -0,0 +1,224 @@
+//=============================================================================
+//
+// File : src/modules/dcc/descriptor.cpp
+// Creation date : Tue Jul 23 01:11:54 2002 GMT by Szymon Stefanek
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 2002 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//=============================================================================
+
+#include "descriptor.h"
+
+#include "kvi_locale.h"
+#include "kvi_kvs_eventtriggers.h"
+
+#include "kvi_window.h"
+#include "kvi_app.h"
+
+#include "send.h"
+#include "window.h"
+
+
+static unsigned int g_uNextDescriptorId = 1; // we use 0 as an invalid descriptor id
+static KviPointerHashTable<int,KviDccDescriptor> * g_pDescriptorDict = 0;
+
+KviPointerHashTable<int,KviDccDescriptor> * KviDccDescriptor::descriptorDict()
+{
+ return g_pDescriptorDict;
+}
+
+/*
+KviDccDescriptor::KviDccDescriptor(const KviDccDescriptor & src)
+{
+ copyFrom(src);
+}
+*/
+
+KviDccDescriptor::KviDccDescriptor(KviConsole * pConsole)
+{
+ m_pConsole = pConsole;
+ m_pDccWindow = 0;
+ m_pDccTransfer = 0;
+
+ m_uId = g_uNextDescriptorId;
+ g_uNextDescriptorId++;
+
+ m_szId.setNum(m_uId);
+
+ if(!g_pDescriptorDict)
+ {
+ g_pDescriptorDict = new KviPointerHashTable<int,KviDccDescriptor>;
+ g_pDescriptorDict->setAutoDelete(false);
+ }
+ g_pDescriptorDict->replace((long)m_uId,this);
+
+ szNick = __tr_ctx("unknown","dcc");
+ szUser = szNick;
+ szHost = szNick;
+
+ szLocalNick = szNick;
+ szLocalUser = szNick;
+ szLocalHost = szNick;
+
+ szIp = szNick;
+ szPort = szNick;
+
+
+ bSendRequest = true;
+ bDoTimeout = true;
+ bIsTdcc = false;
+ bOverrideMinimize = false;
+ bShowMinimized = false;
+ bAutoAccept = false;
+#ifdef COMPILE_SSL_SUPPORT
+ bIsSSL = false;
+#endif
+ bRecvFile = false;
+ bResume = false;
+ bNoAcks = false;
+ bIsIncomingAvatar = false;
+
+ iSampleRate = 0;
+
+
+ m_bCreationEventTriggered = false;
+}
+
+KviDccDescriptor::~KviDccDescriptor()
+{
+ if(m_bCreationEventTriggered)
+ {
+ KviWindow * pEventWindow = m_pConsole;
+ if(!pEventWindow)pEventWindow = g_pApp->activeConsole(); // any console
+ else {
+ if(!(g_pApp->windowExists(pEventWindow)))pEventWindow = g_pApp->activeConsole();
+ }
+
+ if(pEventWindow)
+ {
+ // recheck it again...
+ if(g_pApp->windowExists(pEventWindow))
+ {
+ KVS_TRIGGER_EVENT_1(KviEvent_OnDCCSessionDestroyed,pEventWindow,m_szId);
+ }
+ }
+ }
+
+ if(g_pDescriptorDict)
+ {
+ g_pDescriptorDict->remove((long)m_uId);
+ if(g_pDescriptorDict->count() < 1)
+ {
+ delete g_pDescriptorDict;
+ g_pDescriptorDict = 0;
+ }
+ }
+
+}
+
+void KviDccDescriptor::triggerCreationEvent()
+{
+ if(m_bCreationEventTriggered)
+ {
+ debug("Ops.. trying to trigger OnDccSessionCreated twice");
+ return;
+ }
+ m_bCreationEventTriggered = true;
+ KviWindow * pEventWindow = m_pConsole;
+ if(!pEventWindow)pEventWindow = g_pApp->activeConsole(); // any console
+ if(pEventWindow)
+ {
+ KVS_TRIGGER_EVENT_1(KviEvent_OnDCCSessionCreated,pEventWindow,m_szId);
+ }
+}
+
+
+KviDccDescriptor * KviDccDescriptor::find(unsigned int uId)
+{
+ if(!g_pDescriptorDict)return 0;
+ return g_pDescriptorDict->find((long)uId);
+}
+
+/*
+void KviDccDescriptor::copyFrom(const KviDccDescriptor &src)
+{
+ m_pDccWindow = src.m_pDccWindow;
+ m_pDccTransfer = src.m_pDccTransfer;
+ m_uId = src.m_uId;
+ 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;
+#ifdef COMPILE_SSL_SUPPORT
+ bIsSSL = src.bIsSSL;
+#endif
+}
+*/
+
+bool KviDccDescriptor::isFileUpload()
+{
+ if(szType.upper()=="SEND")return true;
+ if(szType.upper()=="TSEND")return true;
+#ifdef COMPILE_SSL_SUPPORT
+ if(szType.upper()=="SSEND")return true;
+#endif
+ return false;
+}
+
+bool KviDccDescriptor::isFileDownload()
+{
+ if(szType.upper()=="RECV")return true;
+ if(szType.upper()=="TRECV")return true;
+#ifdef COMPILE_SSL_SUPPORT
+ if(szType.upper()=="SRECV")return true;
+#endif
+ return false;
+}
+
+bool KviDccDescriptor::isDccChat()
+{
+ if(szType.upper()=="CHAT")return true;
+#ifdef COMPILE_SSL_SUPPORT
+ if(szType.upper()=="SCHAT")return true;
+#endif
+ return false;
+}