api_return QueueApi::handleGetBundle(ApiRequest& aRequest) { auto b = getBundle(aRequest); auto j = Serializer::serializeItem(b, bundlePropertyHandler); aRequest.setResponseBody(j); return websocketpp::http::status_code::ok; }
JSModulesUnbundle::Module RAMBundleRegistry::getModule( uint32_t bundleId, uint32_t moduleId) { if (m_bundles.find(bundleId) == m_bundles.end()) { if (!m_factory) { throw std::runtime_error( "You need to register factory function in order to " "support multiple RAM bundles." ); } auto bundlePath = m_bundlePaths.find(bundleId); if (bundlePath == m_bundlePaths.end()) { throw std::runtime_error( "In order to fetch RAM bundle from the registry, its file " "path needs to be registered first." ); } m_bundles.emplace(bundleId, m_factory(bundlePath->second)); } auto module = getBundle(bundleId)->getModule(moduleId); if (bundleId == MAIN_BUNDLE_ID) { return module; } return { folly::to<std::string>("seg-", bundleId, '_', std::move(module.name)), std::move(module.code), }; }
api_return QueueApi::handleRemoveBundle(ApiRequest& aRequest) { auto removeFinished = JsonUtil::getOptionalFieldDefault<bool>("remove_finished", aRequest.getRequestBody(), false); auto b = getBundle(aRequest); QueueManager::getInstance()->removeBundle(b, removeFinished); return websocketpp::http::status_code::ok; }
api_return QueueApi::handleUpdateBundle(ApiRequest& aRequest) { auto b = getBundle(aRequest); const auto& reqJson = aRequest.getRequestBody(); // Priority if (reqJson.find("priority") != reqJson.end()) { QueueManager::getInstance()->setBundlePriority(b, Deserializer::deserializePriority(reqJson, false)); } return websocketpp::http::status_code::ok; }
api_return QueueApi::handleShareBundle(ApiRequest& aRequest) { auto b = getBundle(aRequest); if (!b->isFinished()) { aRequest.setResponseErrorStr("This action can only be performed for finished bundles"); return websocketpp::http::status_code::bad_request; } auto skipScan = JsonUtil::getOptionalFieldDefault<bool>("skip_scan", aRequest.getRequestBody(), false); QueueManager::getInstance()->shareBundle(b, skipScan); return websocketpp::http::status_code::ok; }
api_return QueueApi::handleRemoveBundleSource(ApiRequest& aRequest) { auto b = getBundle(aRequest); auto user = Deserializer::getUser(aRequest.getStringParam(2), false); auto removed = QueueManager::getInstance()->removeBundleSource(b, user, QueueItem::Source::FLAG_REMOVED); aRequest.setResponseBody({ { "count", removed }, }); return websocketpp::http::status_code::ok; }
api_return QueueApi::handleSearchBundle(ApiRequest& aRequest) { auto b = getBundle(aRequest); auto searches = QueueManager::getInstance()->searchBundleAlternates(b, true); if (searches == 0) { aRequest.setResponseErrorStr("No files to search for"); return websocketpp::http::status_code::bad_request; } aRequest.setResponseBody({ { "sent", searches }, }); return websocketpp::http::status_code::ok; }
api_return QueueApi::handleGetBundleSources(ApiRequest& aRequest) { auto b = getBundle(aRequest); auto sources = QueueManager::getInstance()->getBundleSources(b); auto ret = json::array(); for (const auto& s : sources) { ret.push_back({ { "user", Serializer::serializeHintedUser(s.getUser()) }, { "last_speed", s.getUser().user->getSpeed() }, { "files", s.files }, { "size", s.size }, }); } aRequest.setResponseBody(ret); return websocketpp::http::status_code::ok; }
api_return QueueApi::handleUpdateBundle(ApiRequest& aRequest) { auto b = getBundle(aRequest); const auto& reqJson = aRequest.getRequestBody(); // Priority if (reqJson.find("priority") != reqJson.end()) { QueueManager::getInstance()->setBundlePriority(b, Deserializer::deserializePriority(reqJson, false)); } if (reqJson.find("auto_priority") != reqJson.end()) { auto autoPrio = JsonUtil::getField<bool>("auto_priority", reqJson); if (autoPrio != b->getAutoPriority()) { QueueManager::getInstance()->toggleBundleAutoPriority(b); } } return websocketpp::http::status_code::ok; }
Extension::Validity Extension::validate() { // Skips the validation if already done. if( m_validity != UnknownValidity ) { return m_validity; } // Retrieves the extension point. Runtime * rntm( Runtime::getDefault() ); ::boost::shared_ptr< ExtensionPoint > point( rntm->findExtensionPoint(m_point) ); // Checks that the point exists. if( !point ) { throw RuntimeException(m_point + " : invalid point reference."); } // Validates the extension. ::boost::shared_ptr< io::Validator > validator( point->getExtensionValidator() ); OSLM_ASSERT("Sorry, validator creation failed for point "<<point->getIdentifier(), validator ); // Check extension XML Node <extension id="xxx" implements="yyy" >...</extension> validator->clearErrorLog(); if( validator->validate( m_xmlNode ) == true ) { m_validity = Valid; } else { m_validity = Invalid; const std::string identifier = m_id.empty() ? "anonymous" : m_id; OSLM_ERROR("In bundle " << getBundle()->getIdentifier() << ". " << identifier << ": invalid extension XML element node does not respect schema. Verification error log is : " << std::endl << validator->getErrorLog() ); } return m_validity; }
std::string BundleEvent::getMessage() const { switch (getAction()) { case BUNDLE_DELETED: return "bundle " + getBundle().toString() + " deleted"; case BUNDLE_CUSTODY_ACCEPTED: return "custody accepted for " + getBundle().toString(); case BUNDLE_FORWARDED: return "bundle " + getBundle().toString() + " forwarded"; case BUNDLE_DELIVERED: return "bundle " + getBundle().toString() + " delivered"; case BUNDLE_RECEIVED: return "bundle " + getBundle().toString() + " received"; case BUNDLE_STORED: return "bundle " + getBundle().toString() + " stored"; default: break; } return "unkown"; }
api_return QueueApi::handleSearchBundle(ApiRequest& aRequest) { auto b = getBundle(aRequest); QueueManager::getInstance()->searchBundleAlternates(b, true); return websocketpp::http::status_code::ok; }