Added a "-force" mode to the charset module,

so it's useful for even more people.


git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1994 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
cflakes
2010-05-16 20:28:34 +00:00
parent 034fa573ee
commit 50c4acf86d
+30 -14
View File
@@ -21,6 +21,8 @@ class CCharsetMod : public CModule
private:
VCString m_vsClientCharsets;
VCString m_vsServerCharsets;
bool m_bForce; // don't check whether the input string is already a
// valid string in the target charset. Instead, always apply conversion.
size_t GetConversionLength(iconv_t& ic, const CString& sData)
{
@@ -129,17 +131,20 @@ private:
{
CString sDataCopy(sData);
// check whether sData already is encoded with the right charset:
iconv_t icTest = iconv_open(sTo.c_str(), sTo.c_str());
if(icTest != (iconv_t)-1)
if(!m_bForce)
{
size_t uTest = GetConversionLength(icTest, sData);
iconv_close(icTest);
if(uTest != (size_t)-1 && uTest != (size_t)-2)
// check whether sData already is encoded with the right charset:
iconv_t icTest = iconv_open(sTo.c_str(), sTo.c_str());
if(icTest != (iconv_t)-1)
{
DEBUG("charset: [" + sData.Escape_n(CString::EURL) + "] is valid [" + sTo + "] already.");
return true;
size_t uTest = GetConversionLength(icTest, sData);
iconv_close(icTest);
if(uTest != (size_t)-1 && uTest != (size_t)-2)
{
DEBUG("charset: [" + sData.Escape_n(CString::EURL) + "] is valid [" + sTo + "] already.");
return true;
}
}
}
@@ -166,13 +171,24 @@ private:
}
public:
MODCONSTRUCTOR(CCharsetMod) {}
MODCONSTRUCTOR(CCharsetMod)
{
m_bForce = false;
}
bool OnLoad(const CString& sArgs, CString& sMessage)
{
if(sArgs.Token(1).empty() || !sArgs.Token(2).empty())
size_t uIndex = 0;
if(sArgs.Token(0).Equals("-force"))
{
sMessage = "This module needs two charset lists as arguments: "
m_bForce = true;
++uIndex;
}
if(sArgs.Token(uIndex + 1).empty() || !sArgs.Token(uIndex + 2).empty())
{
sMessage = "This module needs two charset lists as arguments: [-force] "
"<client_charset1[,client_charset2[,...]]> "
"<server_charset1[,server_charset2[,...]]>";
return false;
@@ -181,8 +197,8 @@ public:
}
VCString vsFrom, vsTo;
sArgs.Token(0).Split(",", vsFrom);
sArgs.Token(1).Split(",", vsTo);
sArgs.Token(uIndex).Split(",", vsFrom);
sArgs.Token(uIndex + 1).Split(",", vsTo);
// probe conversions:
for(VCString::const_iterator itf = vsFrom.begin(); itf != vsFrom.end(); itf++)