mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 02:59:01 -04:00
Add max line length value to modestacker, so that it can clamp the max length of a composed line to a given size. Defaults to 350 which should be safe with fmode and mode with a server name
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6609 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
3797671382
commit
ad8705d3f0
@ -185,12 +185,20 @@ namespace irc
|
||||
/** Return zero or more elements which form the
|
||||
* mode line. This will be clamped to a max of
|
||||
* MAXMODES+1 items (MAXMODES mode parameters and
|
||||
* one mode sequence string).
|
||||
* one mode sequence string), and max_line_size
|
||||
* characters. As specified below, this function
|
||||
* should be called in a loop until it returns zero,
|
||||
* indicating there are no more modes to return.
|
||||
* @param result The deque to populate. This will
|
||||
* be cleared before it is used.
|
||||
* @return The number of elements in the deque
|
||||
* @param max_line_size The maximum size of the line
|
||||
* to build, in characters, seperate to MAXMODES.
|
||||
* @return The number of elements in the deque.
|
||||
* The function should be called repeatedly until it
|
||||
* returns 0, in case there are multiple lines of
|
||||
* mode changes to be obtained.
|
||||
*/
|
||||
int GetStackedLine(std::deque<std::string> &result);
|
||||
int GetStackedLine(std::deque<std::string> &result, int max_line_size = 360);
|
||||
};
|
||||
|
||||
/** irc::tokenstream reads a string formatted as per RFC1459 and RFC2812.
|
||||
|
@ -335,19 +335,37 @@ void irc::modestacker::PushMinus()
|
||||
this->Push('-',"");
|
||||
}
|
||||
|
||||
int irc::modestacker::GetStackedLine(std::deque<std::string> &result)
|
||||
int irc::modestacker::GetStackedLine(std::deque<std::string> &result, int max_line_size)
|
||||
{
|
||||
if (sequence.empty())
|
||||
{
|
||||
result.clear();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int n = 0;
|
||||
int size = 1; /* Account for initial +/- char */
|
||||
int nextsize = 0;
|
||||
result.clear();
|
||||
result.push_back(adding ? "+" : "-");
|
||||
|
||||
while (!sequence[0].empty() && (sequence.size() > 1) && (result.size() < MAXMODES+1))
|
||||
if (sequence.size() > 1)
|
||||
nextsize = sequence[1].length();
|
||||
|
||||
while (!sequence[0].empty() && (sequence.size() > 1) && (result.size() < MAXMODES+1) && ((size+nextsize) < max_line_size))
|
||||
{
|
||||
result[0] += *(sequence[0].begin());
|
||||
if (!sequence[1].empty())
|
||||
{
|
||||
result.push_back(sequence[1]);
|
||||
size += sequence[1].length() + 2; /* Account for mode character and whitespace */
|
||||
}
|
||||
sequence[0].erase(sequence[0].begin());
|
||||
sequence.erase(sequence.begin() + 1);
|
||||
|
||||
if (sequence.size() > 1)
|
||||
nextsize = sequence[1].length();
|
||||
|
||||
n++;
|
||||
}
|
||||
|
||||
|
@ -81,19 +81,23 @@ class ModuleWaitPong : public Module
|
||||
{
|
||||
if(command == "PONG")
|
||||
{
|
||||
ServerInstance->Log(DEBUG,"PONG command");
|
||||
char* pingrpl;
|
||||
user->GetExt(extenstr, pingrpl);
|
||||
|
||||
if(pingrpl)
|
||||
{
|
||||
ServerInstance->Log(DEBUG,"PONG command - has extend");
|
||||
if(strcmp(pingrpl, parameters[0]) == 0)
|
||||
{
|
||||
ServerInstance->Log(DEBUG,"PONG command - pong matches ping ");
|
||||
DELETE(pingrpl);
|
||||
user->Shrink(extenstr);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ServerInstance->Log(DEBUG,"PONG command - pong doesnt match ping");
|
||||
if(killonbadreply)
|
||||
userrec::QuitUser(ServerInstance, user, "Incorrect ping reply for registration");
|
||||
return 1;
|
||||
@ -101,11 +105,13 @@ class ModuleWaitPong : public Module
|
||||
}
|
||||
}
|
||||
|
||||
ServerInstance->Log(DEBUG,"PONG command - fall through");
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual bool OnCheckReady(userrec* user)
|
||||
{
|
||||
ServerInstance->Log(DEBUG,"PONG command - oncheckready");
|
||||
char* pingrpl;
|
||||
return (!user->GetExt(extenstr, pingrpl));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user