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.
kvirc/src/modules/dcc/descriptor.cpp

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)
{
tqDebug("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;
}