You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
5.8 KiB
225 lines
5.8 KiB
//=============================================================================
|
|
//
|
|
// 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;
|
|
}
|