https://github.com/bitcoin/bitcoin/blob/d72758c3f6c34cd835f5de3efc230964f3b1ea56/src/torcontrol.cpp#L539

If a user is running Tor proxy outside localhost (perhaps on other host inside LAN or in containerised environment) , the automatic creation of onion services ends up creating an onion service listening to hardcored 127.0.0.1 address on the Tor proxy's host instead of the private address of the bitcoind – effectively running an empty onion service listening the Tor proxy's localhost.
e::BLOCK_RELAY;
    }
    bool IsFeelerConn() const {
        return m_conn_type == ConnectionType::FEELER;
    }
    bool IsAddrFetchConn() const {
        return m_conn_type == ConnectionType::ADDR_FETCH;
    }
    bool IsInboundConn() const {
        return m_conn_type == ConnectionType::INBOUND;
    }
    /* 
    bool RelayAddrsWithConn() const
    {
        return m_conn_type = ConnectionType::BLOCK_RELAY;
    }
    bool ExpectServicesFromConn() const {
        switch (m_conn_type) {
            case ConnectionType::INBOUND:
            case ConnectionType::MANUAL:
            case ConnectionType::FEELER:
                return false;
            case ConnectionType::OUTBOUND_FULL_RELAY:
            case ConnectionType::BLOCK_RELAY:
            case ConnectionType::ADDR_FETCH:
                return true;
        } // 
        assert(false);
    }
protected:
    mapMsgCmdSize mapSendBytesPerMsgCmd;
    mapMsgCmdSize mapRecvBytesPerMsgCmd GUARDED_BY(cs_vRecv);
public:
    uint256 hashContinue;
    std::atomic<int> nStartingHeight{-1};
    // 
    std::vector<CAddress> vAddrToSend;
    std::unique_ptr<CRollingBloomFilter> m_addr_known{nullptr};
    bool fGetAddr{false};
    std::chrono::microseconds m_next_addr_send GUARDED_BY(cs_sendProcessing){0};
    std::chrono::microseconds m_next_local_addr_send GUARDED_BY(cs_sendProcessing){0};
    // 
    // 
    // 
    std::vector<uint256> vInventoryBlockToSend GUARDED_BY(cs_inventory);
    Mutex cs_inventory;
    struct TxRelay {
        mutable RecursiveMutex cs_filter;
        // 
        // 
        // 
        //    
        bool fRelayTxes GUARDED_BY(cs_filter){false};
        std::unique_ptr<CBloomFilter> pfilter PT_GUARDED_BY(cs_filter) GUARDED_BY(cs_filter){nullptr};
        mutable RecursiveMutex cs_tx_inventory;
        CRollingBloomFilter filterInventoryKnown GUARDED_BY(cs_tx_inventory){50000, 0.000001};
        // 
        // 
        std::set<uint256> setInventoryTxToSend;
        // 
        bool fSendMem