389    const auto &getRequest = [&]( 
const auto &exp ) -> 
decltype(
_activeItems)::iterator {
 
  391        ERR << 
"Ignoring invalid request!" << std::endl;
 
  396        if ( ! elem._request )
 
  398        return exp->requestId() == elem._request->provideMessage().requestId();
 
  402        ERR << 
"Ignoring unknown request ID: " << exp->requestId() << std::endl;
 
  409    const auto &sendErrorToWorker = [&]( 
const uint32_t reqId, 
const MessageCodes code, 
const std::string &reason, 
bool transient = false ) {
 
  412        ERR << 
"Failed to send Error message to worker process." << std::endl;
 
  432        const auto &reqIter = getRequest( provMsg );
 
  434          if (  provMsg->code() == ProvideMessage::Code::ProvideFinished && fileNeedsCleanup ) {
 
  436            if ( !
_parent.isInCache(locFName) ) {
 
  437              MIL << 
"Received a ProvideFinished message for a non existant request. Since this worker reported to create file artifacts, the file is cleaned up." << std::endl;
 
  444        auto &req = *reqIter;
 
  445        auto &reqRef =req._request;
 
  447        const auto code = provMsg->code();
 
  449        if ( code >= ProvideMessage::Code::FirstInformalCode && code <= ProvideMessage::Code::LastInformalCode ) {
 
  452          if ( reqRef && reqRef->owner() )
 
  453            reqRef->owner()->informalMessage ( *
this, reqRef, *provMsg );
 
  456        } 
else if ( code >= ProvideMessage::Code::FirstSuccessCode && code <= ProvideMessage::Code::LastSuccessCode ) {
 
  464          if ( code == ProvideMessage::Code::ProvideFinished ) {
 
  470            std::optional<zypp::ManagedFile> dataRef;
 
  472            if ( !reqIter->isFileRequest() ) {
 
  473              ERR << 
"Invalid message for request ID: " << reqIter->_request->provideMessage().requestId() << std::endl;
 
  479            bool isCheckExistsOnly = isCheckExistsOnlyVal.valid() ? isCheckExistsOnlyVal.asBool() : 
false;
 
  482            if ( doesDownload && !isCheckExistsOnly ) {
 
  485                dataRef = 
_parent.addToFileCache ( locFName );
 
  487                  MIL << 
"CACHE MISS, file " << locFName << 
" was already removed, queueing again" << std::endl;
 
  488                  if ( reqRef->owner() )
 
  489                    reqRef->owner()->cacheMiss( reqRef );
 
  490                  reqRef->provideMessage().setRequestId( 
InvalidId );
 
  498                dataRef = 
_parent.addToFileCache ( locFName );
 
  503                  reqRef->setCurrentQueue(
nullptr);
 
  504                  auto resp = 
ProvideMessage::createErrorResponse ( provMsg->requestId(), ProvideMessage::Code::InternalError, 
"File vanished between downloading and adding it to cache." );
 
  505                  if ( reqRef->owner() )
 
  506                    reqRef->owner()->finishReq( *
this, reqRef, resp );
 
  515          reqRef->setCurrentQueue(
nullptr);
 
  516          if ( reqRef->owner() )
 
  517            reqRef->owner()->finishReq( *
this, reqRef, *provMsg );
 
  522        } 
else if ( code >= ProvideMessage::Code::FirstClientErrCode && code <= ProvideMessage::Code::LastSrvErrCode ) {
 
  531          reqRef->setCurrentQueue(
nullptr);
 
  533          if ( reqRef->owner() )
 
  534            reqRef->owner()->finishReq( *
this, reqRef, *provMsg );
 
  540        } 
else if ( code >= ProvideMessage::Code::FirstRedirCode && code <= ProvideMessage::Code::LastRedirCode ) {
 
  550          reqRef->setCurrentQueue(
nullptr);
 
  551          if ( reqRef->owner() )
 
  552            reqRef->owner()->finishReq( *
this, reqRef, *provMsg );
 
  557        } 
else if ( code >= ProvideMessage::Code::FirstControllerCode && code <= ProvideMessage::Code::LastControllerCode ) {
 
  559          ERR << 
"Received Controller message from worker, this is a fatal error. Cancelling all requests!" << std::endl;
 
  563        } 
else if ( code >= ProvideMessage::Code::FirstWorkerCode && code <= ProvideMessage::Code::LastWorkerCode ) {
 
  565          if ( code == ProvideMessage::Code::AuthDataRequest ) {
 
  566            if ( !reqIter->isFileRequest() && !reqIter->isAttachRequest() ) {
 
  567              ERR << 
"Invalid message for request ID: " << reqRef->provideMessage().requestId() << std::endl;
 
  574              if ( !sendErrorToWorker( reqRef->provideMessage().requestId(), ProvideMessage::Code::NoAuthData, 
"Item was cancelled") )
 
  580            if ( !reqRef->owner() ) {
 
  581              if ( !sendErrorToWorker( reqRef->provideMessage().requestId(), ProvideMessage::Code::NoAuthData, 
"Request has no owner" ) )
 
  586            if ( !reqRef->activeUrl() ) {
 
  587              if ( !sendErrorToWorker( reqRef->provideMessage().requestId(), ProvideMessage::Code::NoAuthData, 
"Item has no active URL, this is a bug." ) )
 
  595              std::map<std::string, std::string> extraVals;
 
  596              for( 
const auto &hdr : provMsg->headers() ) {
 
  602                if ( !hdr.second.isString() ) {
 
  603                  WAR << 
"Ignoring non string value for " << hdr.first << std::endl;
 
  607                extraVals[hdr.first] = hdr.second.asString();
 
  612                if ( !sendErrorToWorker( reqRef->provideMessage().requestId(), ProvideMessage::Code::NoAuthData, 
"No auth given by user." ) )
 
  617              auto r = 
ProvideMessage::createAuthInfo ( reqRef->provideMessage().requestId(), authOpt->username(), authOpt->password(), authOpt->lastDatabaseUpdate(), authOpt->extraValues() );
 
  619                ERR << 
"Failed to send AuthorizationInfo to worker process." << std::endl;
 
  627              if ( !sendErrorToWorker( reqRef->provideMessage().requestId(), ProvideMessage::Code::NoAuthData, e.
asString() ) )
 
  632          } 
else if ( code == ProvideMessage::Code::MediaChangeRequest ) {
 
  634            if ( !reqIter->isAttachRequest() ) {
 
  635              ERR << 
"Invalid message for request ID: " << reqIter->_request->provideMessage().requestId() << std::endl;
 
  642              if ( !sendErrorToWorker( reqRef->provideMessage().requestId(), ProvideMessage::Code::MediaChangeAbort, 
"Item was cancelled" ) )
 
  647            MIL << 
"Worker sent a MediaChangeRequest, asking the user to insert the correct medium" << std::endl;
 
  650            std::vector<std::string> freeDevs;
 
  652              freeDevs.push_back( val.asString() );
 
  655            std::optional<std::string> desc;
 
  657            if ( descVal.valid () && descVal.isString() )
 
  658              desc = descVal.asString();
 
  660            auto res = 
_parent._sigMediaChange.emit(
 
  671                MIL << 
"Sending back a MediaChanged message, retrying to find medium " << std::endl;
 
  674                  ERR << 
"Failed to send MediaChanged to worker process." << std::endl;
 
  681                MIL << 
"Sending back a MediaChangeFailure message, request will fail " << std::endl;
 
  682                if ( !sendErrorToWorker( reqRef->provideMessage().requestId(), ProvideMessage::Code::MediaChangeAbort, 
"Cancelled by User" ) )
 
  687                MIL << 
"Sending back a MediaChangeFailure message, request will fail " << std::endl;
 
  688                if ( !sendErrorToWorker( reqRef->provideMessage().requestId(), ProvideMessage::Code::MediaChangeSkip, 
"Skipped by User" ) )
 
  695            ERR << 
"Unsupported worker request: "<<code<<
", this is a fatal error!" << std::endl;
 
  702          ERR << 
"Received unsupported message " << msg->command() << 
" with code " << code << 
" ignoring! " << std::endl;
 
  706        ERR << 
"Received unsupported message " << msg->command() << 
"ignoring" << std::endl;