5 #include <QApplication>
14 #include <QDataStream>
16 #include <QFileOpenEvent>
18 #include <QLocalServer>
19 #include <QLocalSocket>
20 #include <QStringList>
21 #if QT_VERSION < 0x050000
25 using namespace boost;
35 static QString ipcServerName()
37 QString
name(
"BitcoinQt");
42 QString ddir(
GetDataDir(
true).
string().c_str());
43 name.append(QString::number(qHash(ddir)));
53 static QStringList savedPaymentRequests;
65 const QStringList& args = qApp->arguments();
66 for (
int i = 1; i < args.size(); i++)
70 savedPaymentRequests.append(args[i]);
73 foreach (
const QString&
arg, savedPaymentRequests)
75 QLocalSocket* socket =
new QLocalSocket();
76 socket->connectToServer(ipcServerName(), QIODevice::WriteOnly);
81 QDataStream out(&block, QIODevice::WriteOnly);
82 out.setVersion(QDataStream::Qt_4_0);
84 out.device()->seek(0);
89 socket->disconnectFromServer();
99 parent->installEventFilter(
this);
101 QString
name = ipcServerName();
104 QLocalServer::removeServer(name);
109 qDebug() << tr(
"Cannot start feathercoin: click-to-pay handler");
117 if (event->type() == QEvent::FileOpen)
119 QFileOpenEvent* fileEvent =
static_cast<QFileOpenEvent*
>(event);
120 if (!fileEvent->url().isEmpty())
123 savedPaymentRequests.append(fileEvent->url().toString());
135 foreach (
const QString& s, savedPaymentRequests)
137 savedPaymentRequests.clear();
142 QLocalSocket *clientConnection =
uriServer->nextPendingConnection();
144 while (clientConnection->bytesAvailable() < (int)
sizeof(quint32))
145 clientConnection->waitForReadyRead();
147 connect(clientConnection, SIGNAL(disconnected()),
148 clientConnection, SLOT(deleteLater()));
150 QDataStream in(clientConnection);
151 in.setVersion(QDataStream::Qt_4_0);
152 if (clientConnection->bytesAvailable() < (int)
sizeof(quint16)) {
159 savedPaymentRequests.append(message);
const boost::filesystem::path & GetDataDir(bool fNetSpecific)
void receivedURI(QString)
bool eventFilter(QObject *object, QEvent *event)
static bool ipcSendCommandLine()
const int BITCOIN_IPC_CONNECT_TIMEOUT
const QString BITCOIN_IPC_PREFIX("feathercoin:")
void handleURIConnection()
PaymentServer(QApplication *parent)