11 static const QString
XML_HEAD =
"<?xml version=\"1.0\"?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n<SOAP-ENV:Body>\n";
12 static const QString
XML_FOOT =
"</SOAP-ENV:Body>\n</SOAP-ENV:Envelope>\n";
13 static const QString
META_DATA =
"<DIDL-Lite xmlns=\"urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/\""
14 " xmlns:upnp=\"urn:schemas-upnp-org:metadata-1-0/upnp/\""
15 " xmlns:dc=\"http://purl.org/dc/elements/1.1/\""
16 " xmlns:sec=\"http://www.sec.co.kr/\"><item id=\"f-0\" parentID=\"0\" restricted=\"0\">"
17 "<dc:title>%1</dc:title>"
18 "<dc:creator>%2</dc:creator>"
19 "<upnp:class>object.item.%3Item</upnp:class>"
20 "<res protocolInfo=\"http-get:*:%4:DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000\" >"
21 "%5</res></item></DIDL-Lite>";
22 static const QStringList
AVT_NAMES = {
"avtransport",
"AVTransport"};
23 static const QStringList
FRIENS_NAMES = {
"friendlyname",
"friendlyName",
"FriendlyName",
"FriendlyName"};
46 : m_isConnected(false)
56 QStringList data_list;
57 if(str.contains(
"LOCATION:"))
59 data_list = str.remove(
"LOCATION: http://").split(
":");
61 else if(str.contains(
"Location:"))
63 data_list = str.remove(
"Location: http://").split(
":");
65 else if(str.contains(
"location:"))
67 data_list = str.remove(
"location: http://").split(
":");
70 if(data_list.count() >= 2)
73 const QStringList &info_list = data_list[1].split(
TTK_SEPARATOR);
75 if(info_list.count() >= 2)
157 return d->m_serverIP;
163 return d->m_friendlyName;
175 return d->m_isConnected;
183 QString play_url = url;
187 body +=
"<u:SetAVTransportURI xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\">\n";
188 body +=
"<InstanceID>0</InstanceID>\n";
189 body +=
"<CurrentURI>" + play_url +
"</CurrentURI>\n";
190 body +=
"<CurrentURIMetaData>" +
META_DATA.arg(fin.baseName(), fin.owner(),
"audio",
"audio/mp3", play_url) +
"</CurrentURIMetaData>\n";
191 body +=
"</u:SetAVTransportURI>\n";
193 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
"urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI", d->m_serverIP,d->m_serverPort) + body;
203 body +=
"<u:Play xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>"+ QString::number(instance) +
"</InstanceID><Speed>1</Speed></u:Play>\n";
205 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
"urn:schemas-upnp-org:service:AVTransport:1#Play", d->m_serverIP, d->m_serverPort) + body;
214 body +=
"<u:Pause xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>" + QString::number(instance) +
"</InstanceID></u:Pause>\n";
216 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
"urn:schemas-upnp-org:service:AVTransport:1#Pause", d->m_serverIP, d->m_serverPort) + body;
225 body +=
"<u:Stop xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>" + QString::number(instance) +
"</InstanceID></u:Stop>\n";
227 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
"urn:schemas-upnp-org:service:AVTransport:1#Stop", d->m_serverIP, d->m_serverPort) + body;
236 body +=
"<u:RemoveAllTracksFromQueue xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>" + QString::number(instance) +
"</InstanceID></u:RemoveAllTracksFromQueue>\n";
238 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
"urn:schemas-upnp-org:service:AVTransport:1#RemoveAllTracksFromQueue", d->m_serverIP, d->m_serverPort) + body;
244 return QDateTime::fromString(value,
TTK_TIMES_FORMAT).toMSecsSinceEpoch() / 1000;
252 body +=
"<u:GetPositionInfo xmlns:u=\"urn:schemas-upnp-org:service:AVTransport:1\"><InstanceID>" + QString::number(instance) +
"</InstanceID></u:GetPositionInfo>\n";
254 const QString &request =
QDlna::makeRequest(
"POST", d->m_controlURL, body.length(),
"urn:schemas-upnp-org:service:AVTransport:1#GetPositionInfo", d->m_serverIP, d->m_serverPort) + body;
bool isValid(const QString &data)
bool remove(int instance=0) const
QMap< QString, QDlnaService > m_services
bool pause(int instance=0) const
QString makeRequest(const QString &methord, const QString &url, int length, const QString &soapAction, const QString &ip, const QString &port)
QString removeHttpHeader(const QString &data)
The class of the dlna client.
static const QStringList AVT_NAMES
QString tagNameToLower(const QString &data) const
The class of the dlna xml.
QString readTagNameValue(const QString &tagName) const
QString makeSocketGetReply(const QString &ip, const QString &port, const QString &data)
bool play(int instance=0) const
#define TTK_INFO_STREAM(msg)
static const QString XML_FOOT
static qint64 valueToSecond(const QString &value)
bool position(qint64 &position, qint64 &duration, int instance=0) const
The class of the dlna service.
static const QStringList FRIENS_NAMES
void initialize(const QString &data)
The class of the dlna client private.
static const QString XML_HEAD
static const QString META_DATA
bool open(const QString &url) const
QDlnaService readServiceTag(const QString &type, const QString &tagName) const
bool stop(int instance=0) const
#define TTK_INIT_PRIVATE(Class)
The class of the ttk private base.
static constexpr const char * AVTRANSPORT
QDlnaClient(const QString &data)
QString serverName() const
bool fromString(const QString &data)