|
|
|
//
|
|
|
|
// File : kvi_url.cpp
|
|
|
|
// Creation date : Sat Aug 17 14:09:18 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.
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#define __KVILIB__
|
|
|
|
|
|
|
|
|
|
|
|
#include "kvi_url.h"
|
|
|
|
|
|
|
|
KviUrl::KviUrl()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
KviUrl::KviUrl(const KviUrl & u)
|
|
|
|
{
|
|
|
|
*this = u;
|
|
|
|
}
|
|
|
|
|
|
|
|
KviUrl::KviUrl(const char * szUrl)
|
|
|
|
{
|
|
|
|
m_szUrl = szUrl;
|
|
|
|
parse();
|
|
|
|
}
|
|
|
|
|
|
|
|
KviUrl::KviUrl(const TQString &szUrl)
|
|
|
|
{
|
|
|
|
m_szUrl = szUrl;
|
|
|
|
parse();
|
|
|
|
}
|
|
|
|
|
|
|
|
KviUrl::~KviUrl()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void KviUrl::parse()
|
|
|
|
{
|
|
|
|
m_szProtocol = "";
|
|
|
|
m_szHost = "";
|
|
|
|
m_szPath = "";
|
|
|
|
m_szUser = "";
|
|
|
|
m_szPass = "";
|
|
|
|
|
|
|
|
m_szUrl.stripWhiteSpace();
|
|
|
|
|
|
|
|
KviStr u = m_szUrl;
|
|
|
|
|
|
|
|
// proto
|
|
|
|
|
|
|
|
kvi_u32_t uDefaultPort = 80;
|
|
|
|
|
|
|
|
int i = u.findFirstIdx(":/");
|
|
|
|
if(i != -1)
|
|
|
|
{
|
|
|
|
// there is a protocol path
|
|
|
|
m_szProtocol = u.left(i);
|
|
|
|
u.cutLeft(i + 2);
|
|
|
|
u.stripLeft('/');
|
|
|
|
u.stripWhiteSpace();
|
|
|
|
|
|
|
|
// fix the default ports
|
|
|
|
if(kvi_strEqualCI(m_szProtocol,"https"))uDefaultPort = 443;
|
|
|
|
else if(kvi_strEqualCI(m_szProtocol,"ftp"))uDefaultPort = 21;
|
|
|
|
} else {
|
|
|
|
// no proto... assume http
|
|
|
|
u.stripLeft('/');
|
|
|
|
m_szProtocol = "http";
|
|
|
|
}
|
|
|
|
|
|
|
|
m_uPort = uDefaultPort;
|
|
|
|
|
|
|
|
// user and pass
|
|
|
|
|
|
|
|
i = u.findFirstIdx('@');
|
|
|
|
|
|
|
|
if(i != -1)
|
|
|
|
{
|
|
|
|
KviStr szUserPass = u.left(i);
|
|
|
|
szUserPass.stripWhiteSpace();
|
|
|
|
u.cutLeft(i + 1);
|
|
|
|
|
|
|
|
i = szUserPass.findFirstIdx(':');
|
|
|
|
if(i != -1)
|
|
|
|
{
|
|
|
|
m_szUser = szUserPass.left(i);
|
|
|
|
szUserPass.cutLeft(i + 1);
|
|
|
|
m_szPass = szUserPass;
|
|
|
|
m_szPass.stripWhiteSpace();
|
|
|
|
} else {
|
|
|
|
m_szUser = szUserPass;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// host
|
|
|
|
|
|
|
|
i = u.findFirstIdx('/');
|
|
|
|
if(i != -1)
|
|
|
|
{
|
|
|
|
KviStr h = u.left(i);
|
|
|
|
u.cutLeft(i + 1);
|
|
|
|
i = h.findFirstIdx(':');
|
|
|
|
if(i != -1)
|
|
|
|
{
|
|
|
|
// has a port part
|
|
|
|
m_szHost = h.left(i);
|
|
|
|
h.cutLeft(i + 1);
|
|
|
|
h.stripWhiteSpace();
|
|
|
|
bool bOk;
|
|
|
|
m_uPort = h.toUInt(&bOk);
|
|
|
|
if(!bOk)m_uPort = uDefaultPort;
|
|
|
|
} else {
|
|
|
|
// no port : assume default
|
|
|
|
m_szHost = h;
|
|
|
|
}
|
|
|
|
m_szPath = u;
|
|
|
|
} else {
|
|
|
|
m_szHost = u;
|
|
|
|
}
|
|
|
|
|
|
|
|
m_szHost.stripWhiteSpace();
|
|
|
|
m_szPath.stripWhiteSpace();
|
|
|
|
if(!m_szPath.firstCharIs('/'))m_szPath.prepend('/');
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
KviUrl & KviUrl::operator=(const char * szUrl)
|
|
|
|
{
|
|
|
|
m_szUrl = szUrl;
|
|
|
|
parse();
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
KviUrl & KviUrl::operator=(const KviUrl &u)
|
|
|
|
{
|
|
|
|
m_szUrl = u.m_szUrl;
|
|
|
|
m_szProtocol = u.m_szProtocol;
|
|
|
|
m_szHost = u.m_szHost;
|
|
|
|
m_szPath = u.m_szPath;
|
|
|
|
m_szUser = u.m_szUser;
|
|
|
|
m_szPass = u.m_szPass;
|
|
|
|
m_uPort = u.m_uPort;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
|