void TimeSync::getNTPTime() { QUdpSocket sock; sock.connectToHost("0.pool.ntp.org",123); if(!sock.waitForConnected(1000))return; QByteArray data(48,char(0)); *(reinterpret_cast<qint32 *>(&data.data()[0]))=4194959577; if(sock.write(data)<0||!sock.waitForReadyRead(3000)||sock.bytesAvailable()!=48)return; data=sock.readAll(); quint32 seconds=qToBigEndian(*(reinterpret_cast<quint32 *>(&data.data()[40]))); quint32 fraction=qToBigEndian(*(reinterpret_cast<quint32 *>(&data.data()[44]))); quint32 newTime=QDateTime::fromMSecsSinceEpoch(seconds*1000ll+fraction*1000ll/0x100000000ll-2208988800000ll).toTime_t(); if(newTime<1451606400 || newTime>4000000000){ QThread::msleep(500); emit startSync(); return; } qint32 tempTimeShift=qint64(newTime)-qint64(QDateTime::currentDateTime().toTime_t()); if(timeShift!=0)tempTimeShift=qint32((qint64(timeShift)+qint64(tempTimeShift))/2); if(tempTimeShift>3600 || tempTimeShift<-3600){ static bool showMessage=true; if(showMessage)emit warningMessage(julyTr("TIME_SYNC_ERROR","Your clock is not set. Please close the Qt Bitcoin Trader and set the clock. Changing time at Qt Bitcoin Trader enabled can cause errors and damage the keys.")); showMessage=false; } else timeShift.fetchAndStoreOrdered(tempTimeShift); getNTPTimeRetryCount++; if(getNTPTimeRetryCount<3)emit startSync(); }
void FetchThread::process(QString phost) { QUdpSocket *udpSocket ; udpSocket= new QUdpSocket(0); udpSocket->bind(QHostAddress::LocalHost, 9999); udpSocket->waitForConnected(250); QTcpSocket socket; socket.connectToHost("localhost", 4949); socket.waitForConnected(500); while (socket.waitForReadyRead(250)); QString t_hello = socket.readAll(); qDebug() << "READ: " << t_hello; socket.write(QString("list\n").toStdString().c_str() ); while (socket.waitForReadyRead(250)); QString buf1 = socket.readAll(); qDebug() << "READ: " << buf1; QStringList list_probe = buf1.split(QRegExp("\\s+")); for (int z=0; z< list_probe.size(); z++) { QString probe=list_probe.at(z); QString cmd = QString("fetch ").append(probe).append("\n"); qDebug() << "cmd : " << cmd; socket.write(cmd.toStdString().c_str() ); while (socket.waitForReadyRead(250)); QString buf2 = socket.readAll(); qDebug() << "Rep fetch :" << buf2 << "\n"; QRegularExpression re("(\\w+).(\\w+) ([0-9.]+)\\n"); QRegularExpressionMatchIterator i = re.globalMatch(buf2); re.setPatternOptions(QRegularExpression::MultilineOption); while (i.hasNext()) { QRegularExpressionMatch match = i.next(); QString s_metric = match.captured(1); QString s_value = match.captured(3); QString s_mtr = "monit2influxdb,metric="+probe + "_" + s_metric + ",host=" + phost+ " value=" + s_value + " " + QString::number(1000000* QDateTime::currentMSecsSinceEpoch()); qDebug() << "metric: " << s_mtr.toLower(); udpSocket->writeDatagram(s_mtr.toStdString().c_str(), QHostAddress::LocalHost, 9999); } udpSocket->close(); } }
bool EditorPipe::sendToEditor(QString command) { QUdpSocket socket; // Attempt to connect to the LocalServer socket.connectToHost(QHostAddress::LocalHost, 58487); if(socket.waitForConnected(100)) { qDebug() << "Connected"; QString str = QString(command); QByteArray bytes; bytes = str.toUtf8(); socket.write(bytes); socket.waitForBytesWritten(10000); socket.flush(); socket.disconnectFromHost(); qDebug() << "Bytes sent: " <<command; return true; } else { qDebug() << "sendToEditor(QString command) fail to connect: " << socket.errorString(); return false; } }
int udp_ping(QStringList command) { qDebug() << "udp_ping(" << command.join(" ") << ")" << endl; qDebug() << "udp_ping(" << command.join(" ") << ")" << endl; /** * Check input */ QTextStream errorStream(stderr); if(command.size() != 3 || command.at(0)!="ping" || command.at(1)!="udp" ) { errorStream << "Error: udp_ping(" << command.join(" ") << ") is no valid call (ping udp <ip_address> <port> rzv|max|random|default)" << endl; return 1; } /** * <functionality> */ QByteArray byteArray; /** * CIP for "rzv" */ if(command.at(2)=="rzv") { qDebug() << "rzv" << endl; byteArray.append(QByteArray(42, '\0')); } /** * Sent via TCP */ QUdpSocket *udpSocket; udpSocket = new QUdpSocket(); QTextStream outStream(stdout); QString out; udpSocket->abort(); udpSocket->connectToHost("127.0.0.1", 22366); qDebug() << "waitForConnected!"; if (udpSocket->waitForConnected(5000)) { qDebug() << "Connected!"; } else { errorStream << "Error: udp_ping(" << command.join(" ") << "): No connection available!" << endl; return 1; } qDebug() << QString("BytesWritten: %1").arg(udpSocket->write(byteArray, byteArray.length())); udpSocket->flush(); int numRead = 0, numReadTotal = 0; char buffer[MAXMSG]; forever { numRead = udpSocket->read(buffer, MAXMSG); qDebug() << "read buffer: " << numRead; numReadTotal += numRead; if (numRead <= 0 && !udpSocket->waitForReadyRead(30)) break; } qDebug() << numReadTotal << " bytes red"; if(numReadTotal==-1) { errorStream << "Error: udp_ping(" << command.join(" ") << "): " << udpSocket->errorString() << endl; return 1; } else { for(int i=0; i < numReadTotal; i++) { qDebug() << QString("receipt[%1]: %2\n").arg(i).arg(buffer[i], 8, 2, QLatin1Char('0')) << endl;; } QByteArray receipt(buffer); qDebug() << "receipt.size(): " << receipt.size(); for(int i = 0; i < receipt.size();++i) { qDebug() << QString("receipt[%1]: %2\n").arg(i).arg(receipt.at(i), 8, 2, QLatin1Char('0')) << endl;; } qDebug() << "buffer: " << buffer; } udpSocket->disconnectFromHost(); udpSocket->close(); outStream << out << endl; return 0; }