aboutsummaryrefslogtreecommitdiff
path: root/src/qt/paymentserver.h
diff options
context:
space:
mode:
authorGavin Andresen <gavinandresen@gmail.com>2013-07-22 16:50:39 +1000
committerGavin Andresen <gavinandresen@gmail.com>2013-08-22 16:18:25 +1000
commita41d5fe01947f2f878c055670986a165af800f9a (patch)
tree40eeada1ebc180f8e3669a7d164104686dc0c618 /src/qt/paymentserver.h
parent47d0534368fbf0e3fb2cad7d05d60501d29f62aa (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.h64
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