bool ServerPool::bind(QList<QHostAddress> addrs, quint16 port, bool requireall) { m_port = port; QList<QHostAddress>::const_iterator it; for (it = addrs.begin(); it != addrs.end(); ++it) { QUdpSocket *socket = new QUdpSocket(this); connect(socket, SIGNAL(readyRead()), this, SLOT(newUdpDatagram())); if (socket->bind(*it, port)) { LOG(VB_GENERAL, LOG_INFO, QString("Binding to UDP %1:%2") .arg(PRETTYIP(it)).arg(port)); m_udpSockets.append(socket); } else if (requireall) { LOG(VB_GENERAL, LOG_ERR, QString("Failed binding to UDP %1:%2") .arg(PRETTYIP(it)).arg(port)); close(); socket->disconnect(); socket->deleteLater(); return false; } else { LOG(VB_GENERAL, LOG_WARNING, QString("Failed binding to UDP %1:%2") .arg(PRETTYIP(it)).arg(port)); socket->disconnect(); socket->deleteLater(); } } if (m_udpSockets.size() == 0) return false; m_listening = true; return true; }
void UdpRelay::onClientDisconnected() { QUdpSocket *client = qobject_cast<QUdpSocket *>(sender()); if (!client) { emit info("Fatal. A false object calling onClientDisconnected."); return; } cache.remove(cache.key(client)); client->deleteLater(); emit debug("[UDP] A client connection is disconnected and destroyed."); }
bool Myth::SendMessage( const QString &sMessage, const QString &sAddress, int udpPort, int Timeout) { bool bResult = false; if (sMessage.isEmpty()) return bResult; if (Timeout < 0 || Timeout > 999) Timeout = 0; QString xmlMessage = "<mythmessage version=\"1\">\n" " <text>" + sMessage + "</text>\n" " <timeout>" + QString::number(Timeout) + "</timeout>\n" "</mythmessage>"; QHostAddress address = QHostAddress::Broadcast; unsigned short port = 6948; if (!sAddress.isEmpty()) address.setAddress(sAddress); if (udpPort != 0) port = udpPort; QUdpSocket *sock = new QUdpSocket(); QByteArray utf8 = xmlMessage.toUtf8(); int size = utf8.length(); if (sock->writeDatagram(utf8.constData(), size, address, port) < 0) { LOG(VB_GENERAL, LOG_ERR, QString("Failed to send UDP/XML packet (Message: %1 " "Address: %2 Port: %3") .arg(sMessage).arg(sAddress).arg(port)); } else { LOG(VB_GENERAL, LOG_DEBUG, QString("UDP/XML packet sent! (Message: %1 Address: %2 Port: %3") .arg(sMessage) .arg(address.toString().toLocal8Bit().constData()).arg(port)); bResult = true; } sock->deleteLater(); return bResult; }
static int SendMessage(const MythUtilCommandLineParser &cmdline) { QHostAddress address = QHostAddress::Broadcast; unsigned short port = 6948; QString message = kMessage; if (cmdline.toBool("udpport")) port = (unsigned short)cmdline.toUInt("udpport"); if (cmdline.toBool("bcastaddr")) address.setAddress(cmdline.toString("bcastaddr")); QMap<QString,QString>::const_iterator i; QMap<QString,QString> extras = cmdline.GetExtra(); for (i = extras.begin(); i != extras.end(); ++i) { QString name = i.key(); QString value = i.value(); name.replace("--", ""); cerr << "name: " << name.toLocal8Bit().constData() << " -- value: " << value.toLocal8Bit().constData() << endl; name.append("%"); name.prepend("%"); message.replace(name, value); } cout << "output:\n" << message.toLocal8Bit().constData() << endl; QUdpSocket *sock = new QUdpSocket(); QByteArray utf8 = message.toUtf8(); int result = GENERIC_EXIT_OK; if (sock->writeDatagram(utf8, address, port) < 0) { cout << "Failed to send UDP/XML packet" << endl; result = GENERIC_EXIT_NOT_OK; } else { cout << "Sent UDP/XML packet to IP " << address.toString().toLocal8Bit().constData() << " and port: " << port << endl; } sock->deleteLater(); return result; }
void ServerPool::close(void) { QTcpServer *server; while (!m_tcpServers.isEmpty()) { server = m_tcpServers.takeLast(); server->disconnect(); server->close(); server->deleteLater(); } QUdpSocket *socket; while (!m_udpSockets.isEmpty()) { socket = m_udpSockets.takeLast(); socket->disconnect(); socket->close(); socket->deleteLater(); } m_listening = false; }
bool Myth::SendNotification( bool bError, const QString &Type, const QString &sMessage, const QString &sOrigin, const QString &sDecription, const QString &sImage, const QString &sExtra, const QString &sProgressText, float fProgress, int Duration, bool bFullscreen, uint Visibility, uint Priority, const QString &sAddress, int udpPort ) { bool bResult = false; if (sMessage.isEmpty()) return bResult; if (Duration < 0 || Duration > 999) Duration = -1; QString xmlMessage = "<mythnotification version=\"1\">\n" " <text>" + sMessage + "</text>\n" " <origin>" + (sOrigin.isNull() ? tr("MythServices") : sOrigin) + "</origin>\n" " <description>" + sDecription + "</description>\n" " <timeout>" + QString::number(Duration) + "</timeout>\n" " <image>" + sImage + "</image>\n" " <extra>" + sExtra + "</extra>\n" " <progress_text>" + sProgressText + "</progress_text>\n" " <progress>" + QString::number(fProgress) + "</progress>\n" " <fullscreen>" + (bFullscreen ? "true" : "false") + "</fullscreen>\n" " <visibility>" + QString::number(Visibility) + "</visibility>\n" " <priority>" + QString::number(Priority) + "</priority>\n" " <type>" + (bError ? "error" : Type) + "</type>\n" "</mythnotification>"; QHostAddress address = QHostAddress::Broadcast; unsigned short port = 6948; if (!sAddress.isEmpty()) address.setAddress(sAddress); if (udpPort != 0) port = udpPort; QUdpSocket *sock = new QUdpSocket(); QByteArray utf8 = xmlMessage.toUtf8(); int size = utf8.length(); if (sock->writeDatagram(utf8.constData(), size, address, port) < 0) { LOG(VB_GENERAL, LOG_ERR, QString("Failed to send UDP/XML packet (Notification: %1 " "Address: %2 Port: %3") .arg(sMessage).arg(sAddress).arg(port)); } else { LOG(VB_GENERAL, LOG_DEBUG, QString("UDP/XML packet sent! (Notification: %1 Address: %2 Port: %3") .arg(sMessage) .arg(address.toString().toLocal8Bit().constData()).arg(port)); bResult = true; } sock->deleteLater(); return bResult; }
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QCoreApplication::setApplicationName("mythmessage"); QHostAddress address = QHostAddress::Broadcast; unsigned short port = 6948; QString message = kMessage; bool verbose = false; MythMessageCommandLineParser cmdline; if (!cmdline.Parse(argc, argv)) { cmdline.PrintHelp(); return GENERIC_EXIT_INVALID_CMDLINE; } if (cmdline.toBool("showhelp")) { cmdline.PrintHelp(); return GENERIC_EXIT_OK; } if (cmdline.toBool("showversion")) { cmdline.PrintVersion(); return GENERIC_EXIT_OK; } if (cmdline.toBool("printtemplate")) { cerr << kMessage.toLocal8Bit().constData() << endl; return GENERIC_EXIT_OK; } if (cmdline.toBool("verbose")) verbose = true; if (cmdline.toBool("port")) port = (unsigned short)cmdline.toUInt("port"); if (cmdline.toBool("addr")) address.setAddress(cmdline.toString("addr")); QMap<QString,QString>::const_iterator i; QMap<QString,QString> extras = cmdline.GetExtra(); for (i = extras.begin(); i != extras.end(); ++i) { QString name = i.key(); QString value = i.value(); name.replace("--", ""); if (verbose) cerr << "name: " << name.toLocal8Bit().constData() << " -- value: " << value.toLocal8Bit().constData() << endl; name.append("%"); name.prepend("%"); message.replace(name, value); } if (verbose) cout << "output:\n" << message.toLocal8Bit().constData() << endl; QUdpSocket *sock = new QUdpSocket(); QByteArray utf8 = message.toUtf8(); if (sock->writeDatagram(utf8, address, port) < 0) { cout << "Failed to send UDP/XML packet" << endl; } else { cout << "Sent UDP/XML packet to IP " << address.toString().toLocal8Bit().constData() << " and port: " << port << endl; } sock->deleteLater(); return GENERIC_EXIT_OK; }
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QHostAddress address = QHostAddress::Broadcast; unsigned short port = 6948; QString message = kMessage; bool verbose = false; if (a.argc() == 0) { printHelp(); return GENERIC_EXIT_OK; } for (int argpos = 1; argpos < a.argc(); ++argpos) { QString arg = a.argv()[argpos]; if (arg.startsWith("-h") || arg.startsWith("--help")) { printHelp(); return GENERIC_EXIT_OK; } } for (int argpos = 1; argpos < a.argc(); ++argpos) { QString arg = a.argv()[argpos]; if (arg.startsWith("--help") || arg.startsWith("--template")) continue; if (arg.startsWith("--verbose")) { verbose = true; continue; } if (arg.startsWith("--udpport")) { port = arg.section("=", 1).toUShort(); if (port == 0) port = 6948; continue; } if (arg.startsWith("--bcastaddr")) { QString newaddr = arg.section("=", 1); if (!newaddr.isEmpty()) address.setAddress(newaddr); continue; } QString name = arg.section("=", 0, 0); name.replace("--", ""); QString value = QString::fromLocal8Bit( arg.section("=", 1).toLocal8Bit()); if (verbose) { QByteArray tmp_name = name.toLocal8Bit(); QByteArray tmp_value = value.toLocal8Bit(); cerr << "name: " << tmp_name.constData() << " -- value: " << tmp_value.constData() << endl; } name.append("%"); name.prepend("%"); message.replace(name, value); } if (verbose) { QByteArray tmp_message = message.toLocal8Bit(); cout << "output:\n" << tmp_message.constData() << endl; } QUdpSocket *sock = new QUdpSocket(); QByteArray utf8 = message.toUtf8(); int size = utf8.length(); if (sock->writeDatagram(utf8.constData(), size, address, port) < 0) { VERBOSE(VB_IMPORTANT, "Failed to send UDP/XML packet"); } else { cout << "Sent UDP/XML packet to IP " << address.toString().toLocal8Bit().constData() << " and port: " << port << endl; } sock->deleteLater(); return GENERIC_EXIT_OK; }