⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 warurltype.cpp

📁 ftpserver very good sample
💻 CPP
字号:
#include "StdAfx.h"#include "WarUrlType.h"   // class implemented/////////////////////////////// PUBLIC /////////////////////////////////////////============================= LIFECYCLE ====================================WarUrlType::WarUrlType(){	Reset();}// WarUrlTypeWarUrlType::WarUrlType(const WarUrlType& from){	operator = (from);}// WarUrlTypeWarUrlType::WarUrlType(war_ccstr_t tagName){	std::string tag = tagName;	if (!strchr(tagName, ':'))	{		tag += ":///";	}	Create(tag.c_str());}WarUrlType::~WarUrlType(){}// ~WarUrlType//============================= OPERATORS ====================================WarUrlType& WarUrlType::operator = (const WarUrlType& from){	mTagName = from.mTagName;	mDoHostscan = from.mDoHostscan;    mDoFilePath = from.mDoFilePath;	mStyle = from.mStyle;	return *this;   }// =bool WarUrlType::operator == (war_ccstr_t urlTag){	return stricmp(urlTag, mTagName.c_str()) == 0;}//============================= OPERATIONS ===================================void WarUrlType::Create(war_ccstr_t fullUrl) throw(WarException){    	Reset();		war_ccstr_t p, pp;		if (!fullUrl || !*fullUrl)		WarThrow(WarError(WAR_ERR_INVALID_ARGUMENT), NULL);		for(p = fullUrl; *p; p++)	{		if (*p == ':')		{			size_t len = p - fullUrl;						if (len < 2)				WarThrow(WarError(WAR_ERR_INVALID_URL), NULL);						for(pp = fullUrl; pp < p;)				mTagName += *pp++;			// Lookup			typemap_t::const_iterator P = mDefinedTypes.find(mTagName);			if (P != mDefinedTypes.end())				operator = (*P->second);						if (mDoHostscan				&& (*++p != '/')				&& (*++p != '/'))				WarThrow(WarError(WAR_ERR_INVALID_URL), NULL);						return;		}	}	WarThrow(WarError(WAR_ERR_NOT_AN_URL), NULL);}void WarUrlType::Initialize(){	DefineUrlType("ftp", S_FTP, true, false);	DefineUrlType("ftps", S_FTP, true, false);	DefineUrlType("http", S_HTTP, true, false);	DefineUrlType("https", S_HTTP, true, false);	DefineUrlType("mailto", S_GENERIC, false, false);	DefineUrlType("news", S_GENERIC, false, false);	DefineUrlType("file", S_GENERIC, true, true);}void WarUrlType::Reset(){	mTagName.erase();	mDoHostscan = true;	mDoFilePath = false;	mStyle = S_GENERIC; }void WarUrlType::DefineUrlType(war_ccstr_t urlTag,		ProtocolStyleE urlStyle,		bool isHostscanRequired,		bool isFilepathRequired){	WarUrlType *pnew = new WarUrlType;	pnew->mTagName = urlTag;	pnew->mStyle = urlStyle;	pnew->mDoHostscan = isHostscanRequired;	pnew->mDoFilePath = isFilepathRequired;	if (mDefinedTypes.insert(typemap_t::value_type(		pnew->mTagName, pnew)).second != true)	{		// Already defined		delete pnew;	}}//============================= CALLBACK   ===================================//============================= ACCESS     ===================================//============================= INQUIRY    ===================================const std::string& WarUrlType::GetUrlTag() const throw(WarException){	if (mTagName.empty())		WarThrow(WarError(WAR_ERR_INTERNAL_DATA_NOT_INITIALIZED), NULL);	return mTagName;}const std::string WarUrlType::GetUrlName() constthrow(WarException){	if (mTagName.empty())		WarThrow(WarError(WAR_ERR_INTERNAL_DATA_NOT_INITIALIZED), NULL);	std::string ret_value = mTagName;		if (mDoHostscan)		ret_value += "://";	else		ret_value += ':';		return ret_value;}size_t WarUrlType::GetLenght() throw(WarException){	if (mTagName.empty())		WarThrow(WarError(WAR_ERR_INTERNAL_DATA_NOT_INITIALIZED), NULL);	return mTagName.size() + 1 + (mDoHostscan ? 2 : 0); // <name>://}bool WarUrlType::IsHostscanRequiered() constthrow(WarException){	if (mTagName.empty())		WarThrow(WarError(WAR_ERR_INTERNAL_DATA_NOT_INITIALIZED), NULL);	return mDoHostscan;}bool WarUrlType::IsFilePathRequired() constthrow(WarException){	if (mTagName.empty())		WarThrow(WarError(WAR_ERR_INTERNAL_DATA_NOT_INITIALIZED), NULL);	return mDoFilePath;}WarUrlType::ProtocolStyleE WarUrlType::GetStyle(){	return mStyle;}bool WarUrlType::IsEmpty() const{	return mTagName.empty() == true;}/////////////////////////////// PROTECTED  ////////////////////////////////////////////////////////////////// PRIVATE    ///////////////////////////////////WarUrlType::typemap_t WarUrlType::mDefinedTypes;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -