22 #include <openssl/x509_vfy.h>
24 #include <QApplication>
26 #include <QDataStream>
30 #include <QFileOpenEvent>
33 #include <QLocalServer>
34 #include <QLocalSocket>
35 #include <QStringList>
47 static QString ipcServerName()
49 QString
name(
"PRCYQt");
54 QString ddir(QString::fromStdString(
GetDataDir(
true).
string()));
55 name.append(QString::number(qHash(ddir)));
65 static QList<QString> savedPaymentRequests;
78 for (
int i = 1; i < argc; i++) {
80 if (arg.startsWith(
"-"))
89 savedPaymentRequests.append(arg);
113 bool fResult =
false;
114 Q_FOREACH (
const QString&
r, savedPaymentRequests) {
115 QLocalSocket* socket =
new QLocalSocket();
116 socket->connectToServer(ipcServerName(), QIODevice::WriteOnly);
124 QDataStream out(&block, QIODevice::WriteOnly);
125 out.setVersion(QDataStream::Qt_4_0);
127 out.device()->seek(0);
129 socket->write(block);
132 socket->disconnectFromServer();
151 parent->installEventFilter(
this);
153 QString
name = ipcServerName();
156 QLocalServer::removeServer(
name);
158 if (startLocalServer) {
163 QMessageBox::critical(0, tr(
"Payment request error"),
164 tr(
"Cannot start prcycoin: click-to-pay handler"));
181 if (event->type() == QEvent::FileOpen) {
182 QFileOpenEvent* fileEvent =
static_cast<QFileOpenEvent*
>(event);
183 if (!fileEvent->file().isEmpty())
185 else if (!fileEvent->url().isEmpty())
191 return QObject::eventFilter(
object, event);
197 Q_FOREACH (
const QString& s, savedPaymentRequests) {
200 savedPaymentRequests.clear();
206 savedPaymentRequests.append(s);
212 QUrlQuery uri((QUrl(s)));
219 Q_EMIT
message(tr(
"URI handling"), tr(
"Invalid payment address %1").arg(recipient.
address),
224 Q_EMIT
message(tr(
"URI handling"),
225 tr(
"URI cannot be parsed! This can be caused by an invalid PRCY address or malformed URI parameters."),
235 QLocalSocket* clientConnection =
uriServer->nextPendingConnection();
237 while (clientConnection->bytesAvailable() < (
int)
sizeof(quint32))
238 clientConnection->waitForReadyRead();
240 connect(clientConnection, SIGNAL(disconnected()),
241 clientConnection, SLOT(deleteLater()));
243 QDataStream in(clientConnection);
244 in.setVersion(QDataStream::Qt_4_0);
245 if (clientConnection->bytesAvailable() < (
int)
sizeof(quint16)) {