#include "llviewerprecompiledheaders.h" #include "llagent.h" #include "llfloaterwindlight.h" #include "llinventoryview.h" #include "llviewerobject.h" #include "llviewerstats.h" #include "llviewerwindow.h" #include "llvoavatar.h" #include "llwlparammanager.h" #include "rlvhelper.h" #include "rlvevent.h" #include "rlvhandler.h" // Only defined in llinventorybridge.cpp #if RLV_TARGET < RLV_MAKE_TARGET(1, 23, 0) // Version: 1.22.11 #include "llinventorybridge.h" void confirm_replace_attachment_rez(S32 option, void* user_data); #endif // ============================================================================ // Static variable initialization // RlvCommand::RlvBhvrTable RlvCommand::m_BhvrMap; // ============================================================================ // RlvCommmand // // Checked: 2009-09-10 (RLVa-1.0.3a) | Modified: RLVa-1.0.3a RlvCommand::RlvCommand(const std::string& strCommand) : m_eBehaviour(RLV_BHVR_UNKNOWN), m_fStrict(false), m_eParamType(RLV_TYPE_UNKNOWN) { if ((m_fValid = parseCommand(strCommand, m_strBehaviour, m_strOption, m_strParam))) { S32 nTemp = 0; if ( ("n" == m_strParam) || ("add" == m_strParam) ) m_eParamType = RLV_TYPE_ADD; else if ( ("y" == m_strParam) || ("rem" == m_strParam) ) m_eParamType = RLV_TYPE_REMOVE; else if ("force" == m_strParam) m_eParamType = RLV_TYPE_FORCE; else if (LLStringUtil::convertToS32(m_strParam, nTemp)) // Assume it's a reply command if we can convert to an S32 m_eParamType = RLV_TYPE_REPLY; else if (m_strBehaviour == "clear") // clear is the odd one out so just make it its own type m_eParamType = RLV_TYPE_CLEAR; else { m_eParamType = RLV_TYPE_UNKNOWN; m_fValid = false; } } if (!m_fValid) { m_strBehaviour = m_strOption = m_strParam = ""; return; } // Check if this is the "strict" (aka "secure") variation of a behaviour std::string::size_type idxStrict = m_strBehaviour.find("_sec"); m_fStrict = (std::string::npos != idxStrict) && (idxStrict + 4 == m_strBehaviour.length()); RlvBhvrTable::const_iterator itBhvr = m_BhvrMap.find( (!m_fStrict) ? m_strBehaviour : m_strBehaviour.substr(0, idxStrict)); if ( (itBhvr != m_BhvrMap.end()) && ((!m_fStrict) || (hasStrictVariant(itBhvr->second))) ) m_eBehaviour = itBhvr->second; } bool RlvCommand::parseCommand(const std::string& strCommand, std::string& strBehaviour, std::string& strOption, std::string& strParam) { // (See behaviour notes for the command parsing truth table) // Format: [: