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