00001
00002 #include <iostream>
00003
00004
00005 #include <QHostAddress>
00006 #include <QUdpSocket>
00007 #include <QString>
00008 #include <QFile>
00009
00010
00011 #include "compat.h"
00012 #include "exitcodes.h"
00013 #include "mythlogging.h"
00014
00015
00016 #include "messageutils.h"
00017
00018 const QString kMessage =
00019 "<mythmessage version=\"1\">\n"
00020 " <text>%message_text%</text>\n"
00021 " <timeout>%timeout%</timeout>\n"
00022 "</mythmessage>";
00023
00024 static int PrintTemplate(const MythUtilCommandLineParser &cmdline)
00025 {
00026 cerr << kMessage.toLocal8Bit().constData() << endl;
00027 return GENERIC_EXIT_OK;
00028 }
00029
00030 static int SendMessage(const MythUtilCommandLineParser &cmdline)
00031 {
00032 QHostAddress address = QHostAddress::Broadcast;
00033 unsigned short port = 6948;
00034
00035 QString message = kMessage;
00036
00037 if (cmdline.toBool("udpport"))
00038 port = (unsigned short)cmdline.toUInt("udpport");
00039 if (cmdline.toBool("bcastaddr"))
00040 address.setAddress(cmdline.toString("bcastaddr"));
00041
00042 QMap<QString,QString>::const_iterator i;
00043 QMap<QString,QString> extras = cmdline.GetExtra();
00044 for (i = extras.begin(); i != extras.end(); ++i)
00045 {
00046 QString name = i.key();
00047 QString value = i.value();
00048
00049 name.replace("--", "");
00050 cerr << "name: " << name.toLocal8Bit().constData()
00051 << " -- value: " << value.toLocal8Bit().constData() << endl;
00052
00053 name.append("%");
00054 name.prepend("%");
00055 message.replace(name, value);
00056 }
00057
00058 cout << "output:\n" << message.toLocal8Bit().constData() << endl;
00059
00060 QUdpSocket *sock = new QUdpSocket();
00061 QByteArray utf8 = message.toUtf8();
00062
00063 int result = GENERIC_EXIT_OK;
00064 if (sock->writeDatagram(utf8, address, port) < 0)
00065 {
00066 cout << "Failed to send UDP/XML packet" << endl;
00067 result = GENERIC_EXIT_NOT_OK;
00068 }
00069 else
00070 {
00071 cout << "Sent UDP/XML packet to IP "
00072 << address.toString().toLocal8Bit().constData()
00073 << " and port: " << port << endl;
00074 }
00075
00076 sock->deleteLater();
00077
00078 return result;
00079 }
00080
00081 void registerMessageUtils(UtilMap &utilMap)
00082 {
00083 utilMap["message"] = &SendMessage;
00084 utilMap["printtemplate"] = &PrintTemplate;
00085 }
00086
00087