mirror of
https://github.com/dashpay/dash.git
synced 2024-12-29 05:49:11 +01:00
91d99fcd3f
* Merge #8996: Network activity toggle19f46f1
Qt: New network_disabled icon (Luke Dashjr)54cf997
RPC/Net: Use boolean consistently for networkactive, and remove from getinfo (Luke Dashjr)b2b33d9
Overhaul network activity toggle (Jonas Schnelli)32efa79
Qt: Add GUI feedback and control of network activity state. (Jon Lund Steffensen)e38993b
RPC: Add "togglenetwork" method to toggle network activity temporarily (Jon Lund Steffensen)7c9a98a
Allow network activity to be temporarily suspended. (Jon Lund Steffensen) * Revert on-click behavior of network status icon to showing peers list Stay with the way Dash handled clicking on the status icon * Add theme support for network disabled icon * Merge #8874: Multiple Selection for peer and ban tables1077577
Fix auto-deselection of peers (Andrew Chow)addfdeb
Multiple Selection for peer and ban tables (Andrew Chow) * Merge #9190: qt: Plug many memory leaksed998ea
qt: Avoid OpenSSL certstore-related memory leak (Wladimir J. van der Laan)5204598
qt: Avoid shutdownwindow-related memory leak (Wladimir J. van der Laan)e4f126a
qt: Avoid splash-screen related memory leak (Wladimir J. van der Laan)693384e
qt: Prevent thread/memory leak on exiting RPCConsole (Wladimir J. van der Laan)47db075
qt: Plug many memory leaks (Wladimir J. van der Laan) * Merge #9218: qt: Show progress overlay when clicking spinner icon042f9fa
qt: Show progress overlay when clicking spinner icon (Wladimir J. van der Laan)827d9a3
qt: Replace NetworkToggleStatusBarControl with generic ClickableLabel (Wladimir J. van der Laan) * Merge #9266: Bugfix: Qt/RPCConsole: Put column enum in the right placesdf17fe0
Bugfix: Qt/RPCConsole: Put column enum in the right places (Luke Dashjr) * Merge #9255: qt: layoutAboutToChange signal is called layoutAboutToBeChangedf36349e
qt: Remove on_toggleNetworkActiveButton_clicked from RPCConsole (Wladimir J. van der Laan)297cc20
qt: layoutAboutToChange signal is called layoutAboutToBeChanged (Wladimir J. van der Laan) * Use UniValue until bitcoin PR #8788 is backported Network active toggle was already based on "[RPC] Give RPC commands more information about the RPC request" We need to use the old UniValue style until that one is backported * Merge #8906: [qt] sync-overlay: Don't show progress twicefafeec3
[qt] sync-overlay: Don't show progress twice (MarcoFalke) * Merge #8985: Use pindexBestHeader instead of setBlockIndexCandidates for NotifyHeaderTip()3154d6e
[Qt] use NotifyHeaderTip's height and date for the progress update (Jonas Schnelli)0a261b6
Use pindexBestHeader instead of setBlockIndexCandidates for NotifyHeaderTip() (Jonas Schnelli) * Merge #9280: [Qt] Show ModalOverlay by pressing the progress bar, allow hiding89a3723
[Qt] Show ModalOverlay by pressing the progress bar, disabled show() in sync mode (Jonas Schnelli) * Merge #9461: [Qt] Improve progress display during headers-sync and peer-finding40ec7c7
[Qt] Improve progress display during headers-sync and peer-finding (Jonas Schnelli) * Merge #9588: qt: Use nPowTargetSpacing constantfa4d478
qt: Use nPowTargetSpacing constant (MarcoFalke) * Hide modal overlay forever when syncing has catched up Don't allow to open it again by clicking on the progress bar and spinner icon. Currently the overlay does not show meaningful information about masternode sync and it gives the impression of being stuck after the block chain sync is done. * Don't include chainparams.h in sendcoinsdialog.cpp This was just a remainder of a backported PR which meant to change some calculation in this file which does not apply to Dash. * Also check for fNetworkActive in ConnectNode * Merge #9528: [qt] Rename formateNiceTimeOffset(qint64) to formatNiceTimeOffset(qint64)988d300
[qt] Rename formateNiceTimeOffset(qint64) to formatNiceTimeOffset(qint64) (practicalswift) * Merge #11237: qt: Fixing division by zero in time remainingc8d38abd6
Refactor tipUpdate as per style guide (MeshCollider)3b69a08c5
Fix division by zero in time remaining (MeshCollider) Pull request description: Fixes https://github.com/bitcoin/bitcoin/issues/10291, https://github.com/bitcoin/bitcoin/issues/11265 progressDelta may be 0 (or even negative according to 11265), this checks for that and prints unknown if it is, because we cannot calculate an estimate for the time remaining (would be infinite or negative). Tree-SHA512: bc5708e5ed6e4670d008219558c5fbb25709bd99a32c98ec39bb74f94a0b7fa058f3d03389ccdd39e6723e6b5b48e34b13ceee7c051c2db631e51d8ec3e1d68c
149 lines
4.9 KiB
C++
149 lines
4.9 KiB
C++
// Copyright (c) 2011-2015 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
|
|
// dash: 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 receivedURL() signal for any payment
|
|
// requests that happened during startup.
|
|
//
|
|
// After startup, receivedURL() 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 "paymentrequestplus.h"
|
|
#include "walletmodel.h"
|
|
|
|
#include <QObject>
|
|
#include <QString>
|
|
|
|
class OptionsModel;
|
|
|
|
class CWallet;
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
class QApplication;
|
|
class QByteArray;
|
|
class QLocalServer;
|
|
class QNetworkAccessManager;
|
|
class QNetworkReply;
|
|
class QSslError;
|
|
class QUrl;
|
|
QT_END_NAMESPACE
|
|
|
|
// BIP70 max payment request size in bytes (DoS protection)
|
|
extern const qint64 BIP70_MAX_PAYMENTREQUEST_SIZE;
|
|
|
|
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
|
|
PaymentServer(QObject* parent, bool startLocalServer = true);
|
|
~PaymentServer();
|
|
|
|
// Load root certificate authorities. Pass NULL (default)
|
|
// to read from the file specified in the -rootcertificates setting,
|
|
// or, if that's not set, to use the system default root certificates.
|
|
// If you pass in a store, you should not X509_STORE_free it: it will be
|
|
// freed either at exit or when another set of CAs are loaded.
|
|
static void LoadRootCAs(X509_STORE* store = NULL);
|
|
|
|
// Return certificate store
|
|
static X509_STORE* getCertStore();
|
|
|
|
// OptionsModel is used for getting proxy settings and display unit
|
|
void setOptionsModel(OptionsModel *optionsModel);
|
|
|
|
// Verify that the payment request network matches the client network
|
|
static bool verifyNetwork(const payments::PaymentDetails& requestDetails);
|
|
// Verify if the payment request is expired
|
|
static bool verifyExpired(const payments::PaymentDetails& requestDetails);
|
|
// Verify the payment request size is valid as per BIP70
|
|
static bool verifySize(qint64 requestSize);
|
|
// Verify the payment request amount is valid
|
|
static bool verifyAmount(const CAmount& requestAmount);
|
|
|
|
Q_SIGNALS:
|
|
// Fired when a valid payment request is received
|
|
void receivedPaymentRequest(SendCoinsRecipient);
|
|
|
|
// Fired when a valid PaymentACK is received
|
|
void receivedPaymentACK(const QString &paymentACKMsg);
|
|
|
|
// 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();
|
|
|
|
// Submit Payment message to a merchant, get back PaymentACK:
|
|
void fetchPaymentACK(CWallet* wallet, SendCoinsRecipient recipient, QByteArray transaction);
|
|
|
|
// Handle an incoming URI, URI with local file scheme or file
|
|
void handleURIOrFile(const QString& s);
|
|
|
|
private Q_SLOTS:
|
|
void handleURIConnection();
|
|
void netRequestFinished(QNetworkReply*);
|
|
void reportSslErrors(QNetworkReply*, const QList<QSslError> &);
|
|
void handlePaymentACK(const QString& paymentACKMsg);
|
|
|
|
protected:
|
|
// Constructor registers this on the parent QApplication to
|
|
// receive QEvent::FileOpen and QEvent:Drop events
|
|
bool eventFilter(QObject *object, QEvent *event);
|
|
|
|
private:
|
|
static bool readPaymentRequestFromFile(const QString& filename, PaymentRequestPlus& request);
|
|
bool processPaymentRequest(const PaymentRequestPlus& request, SendCoinsRecipient& recipient);
|
|
void fetchRequest(const QUrl& url);
|
|
|
|
// Setup networking
|
|
void initNetManager();
|
|
|
|
bool saveURIs; // true during startup
|
|
QLocalServer* uriServer;
|
|
|
|
QNetworkAccessManager* netManager; // Used to fetch payment requests
|
|
|
|
OptionsModel *optionsModel;
|
|
};
|
|
|
|
#endif // BITCOIN_QT_PAYMENTSERVER_H
|