TTKMusicPlayer  4.1.3.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
qdlna.cpp
Go to the documentation of this file.
1 #include "qdlna.h"
2 
3 #include <QSysInfo>
4 #include <QTcpSocket>
5 #include <QStringList>
6 
7 namespace QDlna
8 {
9 QString makeSocketGetReply(const QString &ip, const QString &port, const QString &data)
10 {
11  QTcpSocket sock;
12  sock.connectToHost(ip, port.toUShort());
13  constexpr int timeout = 5000 / 2;
14 
15  if(sock.waitForConnected(timeout))
16  {
17  sock.write(data.toLatin1());
18  }
19  else
20  {
21  return "Couldn't connect";
22  }
23 
24  if(!sock.waitForBytesWritten(timeout))
25  {
26  return "Couldn't write";
27  }
28 
29  if(sock.waitForReadyRead(timeout))
30  {
31  return QString::fromUtf8(sock.readAll());
32  }
33  else
34  {
35  return "Couldn't get an answer";
36  }
37 }
38 
39 QString makeRequest(const QString &methord, const QString &url, int length, const QString &soapAction, const QString &ip, const QString &port)
40 {
41  //Make a request that is sent out to the DLNA server on the LAN using TCP
42  QString request = methord.toUpper() + " /" + url + " HTTP/1.1" + "\n";
43  request += "Cache-Control: no-cache\n";
44  request += "Connection: Close\n";
45  request += "Pragma: no-cache\n";
46  request += "Host: " + ip + ":" + port + "\n";
47  request += "User-Agent: Microsoft-Windows/6.3 UPnP/1.0 Microsoft-DLNA DLNADOC/1.50\n";
48  request += "FriendlyName.DLNA.ORG: ";
49 #if TTK_QT_VERSION_CHECK(5,6,0)
50  request += QSysInfo::machineHostName();
51 #else
52  request += "Greedysky";
53 #endif
54  request += "\n";
55 
56  if(length > 0)
57  {
58  request += "Content-Length: " + QString::number(length) + "\n";
59  request += "Content-Type: text/xml; charset=\"utf-8\"\n";
60  }
61 
62  if(soapAction.length() > 0)
63  {
64  request += "SOAPAction: \"" + soapAction + "\"\n";
65  }
66  request += "\n";
67  return request;
68 }
69 
70 QString removeHttpHeader(const QString &data)
71 {
72  const QStringList &data_list = data.split("\r\n\r\n");
73  return (data_list.count() >= 2) ? data_list[1] : QString();
74 }
75 
76 bool isValid(const QString &data)
77 {
78  return getResponseCode(data) == 200;
79 }
80 
81 int getResponseCode(const QString &data)
82 {
83  const QStringList &data_list = data.split(TTK_SPACE);
84  if(data_list.count() >= 2)
85  {
86  bool ok = false;
87  const int code = data_list[1].toInt(&ok);
88  if(ok)
89  {
90  return code;
91  }
92  }
93  return -1;
94 }
95 }
int getResponseCode(const QString &data)
Definition: qdlna.cpp:81
bool isValid(const QString &data)
Definition: qdlna.cpp:76
QString makeRequest(const QString &methord, const QString &url, int length, const QString &soapAction, const QString &ip, const QString &port)
Definition: qdlna.cpp:39
QString removeHttpHeader(const QString &data)
Definition: qdlna.cpp:70
QString makeSocketGetReply(const QString &ip, const QString &port, const QString &data)
Definition: qdlna.cpp:9
Definition: inftrees.h:24
The namespace of the dlna helper.
Definition: qdlna.cpp:7
#define TTK_SPACE
Definition: ttkglobal.h:195