diff options
author | Gavin Andresen <gavinandresen@gmail.com> | 2013-07-22 16:50:39 +1000 |
---|---|---|
committer | Gavin Andresen <gavinandresen@gmail.com> | 2013-08-22 16:18:25 +1000 |
commit | a41d5fe01947f2f878c055670986a165af800f9a (patch) | |
tree | 40eeada1ebc180f8e3669a7d164104686dc0c618 /src/qt/paymentserver.h | |
parent | 47d0534368fbf0e3fb2cad7d05d60501d29f62aa (diff) |
Payment Protocol: X509-validated payment requests
Add support for a Payment Protocol to Bitcoin-Qt.
Payment messages are protocol-buffer encoded and communicated over
http(s), so this adds a dependency on the Google protocol buffer
library, and requires Qt with OpenSSL support.
Diffstat (limited to 'src/qt/paymentserver.h')
-rw-r--r-- | src/qt/paymentserver.h | 64 |
1 files changed, 57 insertions, 7 deletions
diff --git a/src/qt/paymentserver.h b/src/qt/paymentserver.h index 1f2fdd4664..7c6b2eabf0 100644 --- a/src/qt/paymentserver.h +++ b/src/qt/paymentserver.h @@ -31,37 +31,87 @@ #include <QObject> #include <QString> +#include "paymentrequestplus.h" +#include "walletmodel.h" + +class CWallet; +class OptionsModel; class QApplication; +class QByteArray; class QLocalServer; +class QNetworkAccessManager; +class QNetworkReply; +class QSslError; +class QUrl; class PaymentServer : public QObject { Q_OBJECT -private: - bool saveURIs; - QLocalServer* uriServer; - public: // Returns true if there were URIs on the command line // which were successfully sent to an already-running // process. - static bool ipcSendCommandLine(); + // Note: if a payment request is given, SelectParams(MAIN/TESTNET) + // will be called so we startup in the right mode. + static bool ipcSendCommandLine(int argc, char *argv[]); - PaymentServer(QApplication* parent); + PaymentServer(QObject* parent, // parent should be QApplication object + 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() { return certStore; } + + // Setup networking (options is used to get proxy settings) + void initNetManager(const OptionsModel& options); + + // Constructor registers this on the parent QApplication to + // receive QEvent::FileOpen events bool eventFilter(QObject *object, QEvent *event); signals: - void receivedURI(QString); + // Fired when a valid payment request is received + void receivedPaymentRequest(SendCoinsRecipient); + + // Fired when a valid PaymentACK is received + void receivedPaymentACK(QString); + + // Fired when an error should be reported to the user + void reportError(QString, QString, unsigned int); public 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); + private slots: void handleURIConnection(); + void netRequestFinished(QNetworkReply*); + void reportSslErrors(QNetworkReply*, const QList<QSslError> &); + +private: + static bool readPaymentRequest(const QString& filename, PaymentRequestPlus& request); + bool processPaymentRequest(PaymentRequestPlus& request, QList<SendCoinsRecipient>& recipients); + void handleURIOrFile(const QString& s); + void fetchRequest(const QUrl& url); + + bool saveURIs; // true during startup + QLocalServer* uriServer; + static X509_STORE* certStore; // Trusted root certificates + static void freeCertStore(); + + QNetworkAccessManager* netManager; // Used to fetch payment requests }; #endif // PAYMENTSERVER_H |