mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-24 12:41:41 -05:00

-BEGIN VERIFY SCRIPT- regex_string='^(?!//).*(AC_APPLE_UNIVERSAL_BUILD|BOOST_PROCESS_USE_STD_FS|CHAR_EQUALS_INT8|CLIENT_VERSION_BUILD|CLIENT_VERSION_IS_RELEASE|CLIENT_VERSION_MAJOR|CLIENT_VERSION_MINOR|COPYRIGHT_HOLDERS|COPYRIGHT_HOLDERS_FINAL|COPYRIGHT_HOLDERS_SUBSTITUTION|COPYRIGHT_YEAR|ENABLE_ARM_SHANI|ENABLE_AVX2|ENABLE_EXTERNAL_SIGNER|ENABLE_SSE41|ENABLE_TRACING|ENABLE_WALLET|ENABLE_X86_SHANI|ENABLE_ZMQ|HAVE_BOOST|HAVE_BUILTIN_CLZL|HAVE_BUILTIN_CLZLL|HAVE_BYTESWAP_H|HAVE_CLMUL|HAVE_CONSENSUS_LIB|HAVE_CXX20|HAVE_DECL_BE16TOH|HAVE_DECL_BE32TOH|HAVE_DECL_BE64TOH|HAVE_DECL_BSWAP_16|HAVE_DECL_BSWAP_32|HAVE_DECL_BSWAP_64|HAVE_DECL_FORK|HAVE_DECL_FREEIFADDRS|HAVE_DECL_GETIFADDRS|HAVE_DECL_HTOBE16|HAVE_DECL_HTOBE32|HAVE_DECL_HTOBE64|HAVE_DECL_HTOLE16|HAVE_DECL_HTOLE32|HAVE_DECL_HTOLE64|HAVE_DECL_LE16TOH|HAVE_DECL_LE32TOH|HAVE_DECL_LE64TOH|HAVE_DECL_PIPE2|HAVE_DECL_SETSID|HAVE_DECL_STRERROR_R|HAVE_DEFAULT_VISIBILITY_ATTRIBUTE|HAVE_DLFCN_H|HAVE_DLLEXPORT_ATTRIBUTE|HAVE_ENDIAN_H|HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR|HAVE_FDATASYNC|HAVE_GETENTROPY_RAND|HAVE_GETRANDOM|HAVE_GMTIME_R|HAVE_INTTYPES_H|HAVE_LIBADVAPI32|HAVE_LIBCOMCTL32|HAVE_LIBCOMDLG32|HAVE_LIBGDI32|HAVE_LIBIPHLPAPI|HAVE_LIBKERNEL32|HAVE_LIBOLE32|HAVE_LIBOLEAUT32|HAVE_LIBSHELL32|HAVE_LIBSHLWAPI|HAVE_LIBUSER32|HAVE_LIBUUID|HAVE_LIBWINMM|HAVE_LIBWS2_32|HAVE_MALLOC_INFO|HAVE_MALLOPT_ARENA_MAX|HAVE_MINIUPNPC_MINIUPNPC_H|HAVE_MINIUPNPC_UPNPCOMMANDS_H|HAVE_MINIUPNPC_UPNPERRORS_H|HAVE_NATPMP_H|HAVE_O_CLOEXEC|HAVE_POSIX_FALLOCATE|HAVE_PTHREAD|HAVE_PTHREAD_PRIO_INHERIT|HAVE_STDINT_H|HAVE_STDIO_H|HAVE_STDLIB_H|HAVE_STRERROR_R|HAVE_STRINGS_H|HAVE_STRING_H|HAVE_STRONG_GETAUXVAL|HAVE_SYSCTL|HAVE_SYSCTL_ARND|HAVE_SYSTEM|HAVE_SYS_ENDIAN_H|HAVE_SYS_PRCTL_H|HAVE_SYS_RESOURCES_H|HAVE_SYS_SELECT_H|HAVE_SYS_STAT_H|HAVE_SYS_SYSCTL_H|HAVE_SYS_TYPES_H|HAVE_SYS_VMMETER_H|HAVE_THREAD_LOCAL|HAVE_TIMINGSAFE_BCMP|HAVE_UNISTD_H|HAVE_VM_VM_PARAM_H|LT_OBJDIR|PACKAGE_BUGREPORT|PACKAGE_NAME|PACKAGE_STRING|PACKAGE_TARNAME|PACKAGE_URL|PACKAGE_VERSION|PTHREAD_CREATE_JOINABLE|QT_QPA_PLATFORM_ANDROID|QT_QPA_PLATFORM_COCOA|QT_QPA_PLATFORM_MINIMAL|QT_QPA_PLATFORM_WINDOWS|QT_QPA_PLATFORM_XCB|QT_STATICPLUGIN|STDC_HEADERS|STRERROR_R_CHAR_P|USE_ASM|USE_BDB|USE_DBUS|USE_NATPMP|USE_QRCODE|USE_SQLITE|USE_UPNP|_FILE_OFFSET_BITS|_LARGE_FILES)' exclusion_files=":(exclude)src/minisketch :(exclude)src/crc32c :(exclude)src/secp256k1 :(exclude)src/crypto/sha256_arm_shani.cpp :(exclude)src/crypto/sha256_avx2.cpp :(exclude)src/crypto/sha256_sse41.cpp :(exclude)src/crypto/sha256_x86_shani.cpp" git grep --perl-regexp --files-with-matches "$regex_string" -- '*.cpp' $exclusion_files | xargs git grep -L "bitcoin-config.h" | while read -r file; do line_number=$(awk -v my_file="$file" '/\/\/ file COPYING or https?:\/\/www.opensource.org\/licenses\/mit-license.php\./ {line = NR} /^\/\// && NR == line + 1 {while(getline && /^\/\//) line = NR} END {print line+1}' "$file"); sed -i "${line_number}i\\\\n\#if defined(HAVE_CONFIG_H)\\n#include <config/bitcoin-config.h>\\n\#endif" "$file"; done; git grep --perl-regexp --files-with-matches "$regex_string" -- '*.h' $exclusion_files | xargs git grep -L "bitcoin-config.h" | while read -r file; do sed -i "/#define.*_H/a \\\\n\#if defined(HAVE_CONFIG_H)\\n#include <config/bitcoin-config.h>\\n\#endif" "$file"; done; for file in $(git grep --files-with-matches 'bitcoin-config.h' -- '*.cpp' '*.h' $exclusion_files); do if ! grep -q --perl-regexp "$regex_string" $file; then sed -i '/HAVE_CONFIG_H/{N;N;N;d;}' $file; fi; done; -END VERIFY SCRIPT- The first command creates a regular expression for matching all bitcoin-config.h symbols in the following form: ^(?!//).*(AC_APPLE_UNIVERSAL_BUILD|BOOST_PROCESS_USE_STD_FS|...|_LARGE_FILES). It was generated with: ./autogen.sh && printf '^(?!//).*(%s)' $(awk '/^#undef/ {print $2}' src/config/bitcoin-config.h.in | paste -sd "|" -) The second command holds a list of files and directories that should not be processed. These include subtree directories as well as some crypto files that already get their symbols through the makefile. The third command checks for missing bitcoin-config headers in .cpp files and adds the header if it is missing. The fourth command checks for missing bitcoin-config headers in .h files and adds the header if it is missing. The fifth command checks for unneeded bitcoin-config headers in sources files and removes the header if it is unneeded.
107 lines
3.1 KiB
C++
107 lines
3.1 KiB
C++
// Copyright (c) 2011-2020 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_QT_PAYMENTSERVER_H
|
|
#define BITCOIN_QT_PAYMENTSERVER_H
|
|
|
|
// This class handles payment requests from clicking on
|
|
// bitcoin: URIs
|
|
//
|
|
// This is somewhat tricky, because we have to deal with
|
|
// the situation where the user clicks on a link during
|
|
// startup/initialization, when the splash-screen is up
|
|
// but the main window (and the Send Coins tab) is not.
|
|
//
|
|
// So, the strategy is:
|
|
//
|
|
// Create the server, and register the event handler,
|
|
// when the application is created. Save any URIs
|
|
// received at or during startup in a list.
|
|
//
|
|
// When startup is finished and the main window is
|
|
// shown, a signal is sent to slot uiReady(), which
|
|
// emits a receivedURI() signal for any payment
|
|
// requests that happened during startup.
|
|
//
|
|
// After startup, receivedURI() happens as usual.
|
|
//
|
|
// This class has one more feature: a static
|
|
// method that finds URIs passed in the command line
|
|
// and, if a server is running in another process,
|
|
// sends them to the server.
|
|
//
|
|
|
|
#include <qt/sendcoinsrecipient.h>
|
|
|
|
#include <QObject>
|
|
#include <QString>
|
|
|
|
class OptionsModel;
|
|
|
|
namespace interfaces {
|
|
class Node;
|
|
} // namespace interfaces
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
class QApplication;
|
|
class QByteArray;
|
|
class QLocalServer;
|
|
class QUrl;
|
|
QT_END_NAMESPACE
|
|
|
|
extern const QString BITCOIN_IPC_PREFIX;
|
|
|
|
class PaymentServer : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
// Parse URIs on command line
|
|
// Returns false on error
|
|
static void ipcParseCommandLine(int argc, char *argv[]);
|
|
|
|
// Returns true if there were URIs on the command line
|
|
// which were successfully sent to an already-running
|
|
// process.
|
|
// Note: if a payment request is given, SelectParams(MAIN/TESTNET)
|
|
// will be called so we startup in the right mode.
|
|
static bool ipcSendCommandLine();
|
|
|
|
// parent should be QApplication object
|
|
explicit PaymentServer(QObject* parent, bool startLocalServer = true);
|
|
~PaymentServer();
|
|
|
|
// OptionsModel is used for getting proxy settings and display unit
|
|
void setOptionsModel(OptionsModel *optionsModel);
|
|
|
|
Q_SIGNALS:
|
|
// Fired when a valid payment request is received
|
|
void receivedPaymentRequest(SendCoinsRecipient);
|
|
|
|
// Fired when a message should be reported to the user
|
|
void message(const QString &title, const QString &message, unsigned int style);
|
|
|
|
public Q_SLOTS:
|
|
// Signal this when the main window's UI is ready
|
|
// to display payment requests to the user
|
|
void uiReady();
|
|
|
|
// Handle an incoming URI, URI with local file scheme or file
|
|
void handleURIOrFile(const QString& s);
|
|
|
|
private Q_SLOTS:
|
|
void handleURIConnection();
|
|
|
|
protected:
|
|
// Constructor registers this on the parent QApplication to
|
|
// receive QEvent::FileOpen and QEvent:Drop events
|
|
bool eventFilter(QObject *object, QEvent *event) override;
|
|
|
|
private:
|
|
bool saveURIs{true}; // true during startup
|
|
QLocalServer* uriServer{nullptr};
|
|
OptionsModel* optionsModel{nullptr};
|
|
};
|
|
|
|
#endif // BITCOIN_QT_PAYMENTSERVER_H
|