bool disableWrapper(const String& scheme) { String lscheme = f_strtolower(scheme); if (lscheme.same(s_file)) { // Zend quietly succeeds, but does nothing return true; } bool ret = false; // Unregister request-specific wrappers entirely if (s_request_wrappers->m_wrappers.find(lscheme) != s_request_wrappers->m_wrappers.end()) { s_request_wrappers->m_wrappers.erase(lscheme); ret = true; } // Disable builtin wrapper if it exists if (s_wrappers.find(lscheme.data()) == s_wrappers.end()) { // No builtin to disable return ret; } if (s_request_wrappers->m_disabled.find(lscheme) != s_request_wrappers->m_disabled.end()) { // Already disabled return ret; } // Disable it s_request_wrappers->m_disabled.insert(lscheme); return true; }
Wrapper* getWrapper(CStrRef scheme) { String lscheme = StringUtil::ToLower(scheme); auto it = s_wrappers.find(lscheme.data()); if (it != s_wrappers.end()) { return it->second; } return nullptr; }
Array enumWrappers() { Array ret = Array::Create(); // Enum global wrappers which are not disabled for (auto it = s_wrappers.begin(); it != s_wrappers.end(); ++it) { if (s_request_wrappers->m_disabled.find(it->first) == s_request_wrappers->m_disabled.end()) { ret.append(it->first); } } // Enum request local wrappers for (auto it = s_request_wrappers->m_wrappers.begin(); it != s_request_wrappers->m_wrappers.end(); ++it) { ret.append(it->first); } return ret; }
bool registerRequestWrapper(CStrRef scheme, std::unique_ptr<Wrapper> wrapper) { String lscheme = StringUtil::ToLower(scheme); // Global, non-disabled wrapper if ((s_wrappers.find(lscheme.data()) != s_wrappers.end()) && (s_request_wrappers->m_disabled.find(lscheme) == s_request_wrappers->m_disabled.end())) { return false; } // A wrapper has already been registered for that scheme if (s_request_wrappers->m_wrappers.find(lscheme) != s_request_wrappers->m_wrappers.end()) { return false; } s_request_wrappers->m_wrappers[lscheme] = std::move(wrapper); return true; }
Wrapper* getWrapper(const String& scheme) { String lscheme = f_strtolower(scheme); // Request local wrapper? { auto it = s_request_wrappers->m_wrappers.find(lscheme); if (it != s_request_wrappers->m_wrappers.end()) { return it->second.get(); } } // Global, non-disabled wrapper? { auto it = s_wrappers.find(lscheme.data()); if ((it != s_wrappers.end()) && (s_request_wrappers->m_disabled.find(lscheme) == s_request_wrappers->m_disabled.end())) { return it->second; } } return nullptr; }
bool registerWrapper(const std::string &scheme, Wrapper *wrapper) { assert(s_wrappers.find(scheme) == s_wrappers.end()); s_wrappers[scheme] = wrapper; return true; }