void FFF_shut_down(void){ if (g_fff_thread.isRunning()){ Request *request = new Request(-1, CompileOptions("", "", 0, false)); request->please_stop = true; g_queue.put(request); g_fff_thread.wait(); } }
/* Checks if the rule starts with command and compiles it. * Returns a pointer to the next (first) term or NULL in a case of compilation error. */ char* FeedFilter::Rule::CompileCommand(char* szRule) { if (!strncasecmp(szRule, "A:", 2) || !strncasecmp(szRule, "Accept:", 7) || !strncasecmp(szRule, "A(", 2) || !strncasecmp(szRule, "Accept(", 7)) { m_eCommand = frAccept; szRule += szRule[1] == ':' || szRule[1] == '(' ? 2 : 7; } else if (!strncasecmp(szRule, "O(", 2) || !strncasecmp(szRule, "Options(", 8)) { m_eCommand = frOptions; szRule += szRule[1] == ':' || szRule[1] == '(' ? 2 : 8; } else if (!strncasecmp(szRule, "R:", 2) || !strncasecmp(szRule, "Reject:", 7)) { m_eCommand = frReject; szRule += szRule[1] == ':' || szRule[1] == '(' ? 2 : 7; } else if (!strncasecmp(szRule, "Q:", 2) || !strncasecmp(szRule, "Require:", 8)) { m_eCommand = frRequire; szRule += szRule[1] == ':' || szRule[1] == '(' ? 2 : 8; } else if (*szRule == '#') { m_eCommand = frComment; return szRule; } else { // not a command return szRule; } if ((m_eCommand == frAccept || m_eCommand == frOptions) && szRule[-1] == '(') { szRule = CompileOptions(szRule); } return szRule; }