更新与前板的使用串口连接
This commit is contained in:
@@ -106,14 +106,14 @@ QString ClientHandler::getCurrentFuncItemData() const
|
||||
{
|
||||
QString data = currentFuncItem.value("val").toString();
|
||||
qDebug() << "Getting current funcItem val:" << data;
|
||||
return data; // 返回当前项的 "data" 字段
|
||||
return data; // 返回当前项的 "val" 字段
|
||||
}
|
||||
|
||||
QString ClientHandler::getCurrentItemLable() const
|
||||
{
|
||||
QString lable = currentItem.value("lable").toString();
|
||||
qDebug() << "Getting current item lable:" << lable;
|
||||
return lable; // 返回当前项的 "data" 字段
|
||||
return lable; // 返回当前项的 "lable" 字段
|
||||
}
|
||||
|
||||
QString ClientHandler::getCurrentFuncItemLable() const
|
||||
@@ -475,8 +475,6 @@ void ClientHandler::sendDevInfoJsonItem(const QJsonObject& jsonItem, int itemInd
|
||||
else {
|
||||
emit sendDataToSomeClient(controlClientId, itemData.toUtf8());
|
||||
}
|
||||
|
||||
|
||||
if (jsonItem.contains("timeout")) {
|
||||
int timeout = jsonItem.value("timeout").toInt();
|
||||
if (timeout > 0) {
|
||||
@@ -553,7 +551,7 @@ void ClientHandler::sendNextItem(QJsonArray& currentOneClickedItem)
|
||||
}
|
||||
}
|
||||
else if (isManualSend) {
|
||||
emit allItemsProcessed(getClientAddress(), itemsProcessedCount);
|
||||
emit allItemsProcessed(isBackBoardOrAllBoard, getClientAddress(), itemsProcessedCount);
|
||||
// 处理完毕后重置标记
|
||||
isManualSend = false;
|
||||
isClickedSend = false;
|
||||
@@ -582,7 +580,6 @@ void ClientHandler::RNDISClient3Data(QByteArray& data) {
|
||||
}
|
||||
|
||||
void ClientHandler::RNDISClient4Data(QByteArray& data) {
|
||||
//qDebug() << " RNDISClient4Data size:" << data.size();
|
||||
//qDebug() << " RNDISClient4Data size:" << data.size();
|
||||
isRecvVideoData = false;
|
||||
isStartVideo = false;
|
||||
@@ -679,10 +676,10 @@ void ClientHandler::onPicRecvFinished()
|
||||
void ClientHandler::onDataReceived()
|
||||
{
|
||||
//qDebug() << "isRecvVideoData:" << isRecvVideoData;
|
||||
//qDebug() << "isPowerOnSend:" << isPowerOnSend;
|
||||
//qDebug() << "isClickedSend:" << isClickedSend;
|
||||
//qDebug() << "isSingleSend:" << isSingleSend;
|
||||
//qDebug() << "isRecvImgData:" << isRecvImgData;
|
||||
//qDebug() << "isPowerOnSend: " << isPowerOnSend;
|
||||
//qDebug() << "isClickedSend: " << isClickedSend;
|
||||
//qDebug() << "isSingleSend: " << isSingleSend;
|
||||
//qDebug() << "isRecvImgData: " << isRecvImgData;
|
||||
if (!isRecvVideoData &&
|
||||
(isRecvImgData || isPowerOnSend || isClickedSend || (isSingleSend && (currentItemIndex < currentJson.size())))) {
|
||||
QByteArray allData;
|
||||
@@ -726,7 +723,7 @@ void ClientHandler::onDataReceived()
|
||||
}
|
||||
else {
|
||||
qDebug() << "All items processed in onDataReceived.";
|
||||
emit allItemsProcessed(getClientAddress(), currentBackBoardIndex);
|
||||
emit allItemsProcessed(isBackBoardOrAllBoard, getClientAddress(), currentBackBoardIndex);
|
||||
isPowerOnSend = false;
|
||||
}
|
||||
}
|
||||
@@ -736,7 +733,7 @@ void ClientHandler::onDataReceived()
|
||||
}
|
||||
else {
|
||||
qDebug() << "All items processed in onDataReceived.";
|
||||
emit allItemsProcessed(getClientAddress(), currentFrontBoardIndex);
|
||||
emit allItemsProcessed(isBackBoardOrAllBoard, getClientAddress(), currentFrontBoardIndex);
|
||||
isPowerOnSend = false;
|
||||
}
|
||||
}
|
||||
@@ -748,7 +745,7 @@ void ClientHandler::onDataReceived()
|
||||
}
|
||||
}
|
||||
else if(isClickedSend) {
|
||||
emit allItemsProcessed(getClientAddress(), itemsProcessedCount);
|
||||
emit allItemsProcessed(isBackBoardOrAllBoard, getClientAddress(), itemsProcessedCount);
|
||||
isClickedSend = false;
|
||||
//resetCurrentItemIndex();
|
||||
}
|
||||
@@ -850,7 +847,7 @@ void ClientHandler::onTimeout()
|
||||
{
|
||||
{
|
||||
QMutexLocker locker(&mutex);
|
||||
emit statusUpdated(getClientAddress(), false, currentJson, currentJsonItem);
|
||||
emit statusUpdated(isBackBoardOrAllBoard, getClientAddress(), false, currentJson, currentJsonItem);
|
||||
//qDebug() << "isSingleSend:" << isSingleSend << "isPowerOnSend:" << isPowerOnSend;
|
||||
if (!isSingleSend && !isPowerOnSend) {
|
||||
currentItemIndex ++;
|
||||
@@ -866,7 +863,7 @@ void ClientHandler::onTimeout()
|
||||
sendNextItem(currentJson);
|
||||
}
|
||||
else if (currentItemIndex >= backBoardOneClickTest.size()) {
|
||||
emit allItemsProcessed(getClientAddress(), itemsProcessedCount);
|
||||
emit allItemsProcessed(isBackBoardOrAllBoard, getClientAddress(), itemsProcessedCount);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -874,7 +871,7 @@ void ClientHandler::onTimeout()
|
||||
sendNextItem(currentJson);
|
||||
}
|
||||
else if (currentItemIndex >= frontBoardOneClickTest.size()) {
|
||||
emit allItemsProcessed(getClientAddress(), itemsProcessedCount);
|
||||
emit allItemsProcessed(isBackBoardOrAllBoard, getClientAddress(), itemsProcessedCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -884,7 +881,7 @@ void ClientHandler::onTimeout()
|
||||
sendDevInfoItem();
|
||||
}
|
||||
else {
|
||||
emit allItemsProcessed(getClientAddress(), currentBackBoardIndex);
|
||||
emit allItemsProcessed(isBackBoardOrAllBoard, getClientAddress(), currentBackBoardIndex);
|
||||
currentFrontBoardIndex = 0;
|
||||
currentBackBoardIndex = 0;
|
||||
isPowerOnSend = false;
|
||||
@@ -895,7 +892,7 @@ void ClientHandler::onTimeout()
|
||||
sendDevInfoItem();
|
||||
}
|
||||
else {
|
||||
emit allItemsProcessed(getClientAddress(), currentFrontBoardIndex);
|
||||
emit allItemsProcessed(isBackBoardOrAllBoard, getClientAddress(), currentFrontBoardIndex);
|
||||
currentFrontBoardIndex = 0;
|
||||
currentBackBoardIndex = 0;
|
||||
isPowerOnSend = false;
|
||||
|
||||
@@ -112,12 +112,12 @@ signals:
|
||||
// 数据发送信号
|
||||
void sendData(const QByteArray& data, int isBoardType);
|
||||
// 状态更新信号
|
||||
void statusUpdated(const QString& client, bool success, const QJsonArray& jsonArray, int itemJsonIndex);
|
||||
void statusUpdated(int boardTpye, const QString& client, bool success, const QJsonArray& jsonArray, int itemJsonIndex);
|
||||
void HandleInvalidOperate(const QString& text);
|
||||
// 客户端断开连接信号
|
||||
void clientDisconnected(ClientHandler* handler);
|
||||
// json文件配置项发送完毕
|
||||
void allItemsProcessed(const QString& client, int itemsProcessedCount);
|
||||
void allItemsProcessed(int boardTpye, const QString& client, int itemsProcessedCount);
|
||||
// 通知主线程启动定时器
|
||||
void startTimeout(int timeout);
|
||||
void selectClientDisconnected(int client_Id);
|
||||
|
||||
@@ -23,7 +23,7 @@ public:
|
||||
|
||||
QPushButton* deleteButton = new QPushButton("删除用户", this);
|
||||
layout->addWidget(deleteButton);
|
||||
|
||||
qDebug() << "------------- DelUserWindow";
|
||||
connect(deleteButton, &QPushButton::clicked, this, &DelUserWindow::onDeleteButtonClicked);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,12 +4,13 @@
|
||||
|
||||
#include "mdns.h"
|
||||
|
||||
// 添加一个类来运行 mDNS 服务
|
||||
// 运行 mDNS 服务
|
||||
class MdnsServiceThread : public QThread {
|
||||
Q_OBJECT
|
||||
public:
|
||||
MdnsServiceThread(const QString& hostname, const QString& serviceName, int servicePort, QObject* parent = nullptr)
|
||||
MdnsServiceThread(const QString& hostname, const QString& serviceName, int servicePort, char* select_ip, QObject* parent = nullptr)
|
||||
: QThread(parent),
|
||||
m_select_ip(select_ip),
|
||||
m_hostname(hostname),
|
||||
m_serviceName(serviceName),
|
||||
m_servicePort(servicePort) {}
|
||||
@@ -26,8 +27,9 @@ protected:
|
||||
extern volatile sig_atomic_t running; // 使用全局变量控制运行状态
|
||||
running = 1;
|
||||
|
||||
// 调用阻塞的 service_mdns 方法
|
||||
int result = service_mdns(m_hostname.toStdString().c_str(), m_serviceName.toStdString().c_str(), m_servicePort);
|
||||
//int result = service_mdns(m_hostname.toStdString().c_str(), m_serviceName.toStdString().c_str(), m_servicePort, "192.168.1.170");
|
||||
//int result = service_mdns(m_hostname.toStdString().c_str(), m_serviceName.toStdString().c_str(), m_servicePort, "172.17.128.1");
|
||||
int result = service_mdns(m_hostname.toStdString().c_str(), m_serviceName.toStdString().c_str(), m_servicePort, m_select_ip);
|
||||
if (result < 0) {
|
||||
qDebug() << "Failed to start mDNS service";
|
||||
}
|
||||
@@ -37,6 +39,7 @@ protected:
|
||||
}
|
||||
|
||||
private:
|
||||
char* m_select_ip;
|
||||
QString m_hostname;
|
||||
QString m_serviceName;
|
||||
int m_servicePort;
|
||||
|
||||
@@ -530,7 +530,7 @@ open_client_sockets(int* sockets, int max_sockets, int port) {
|
||||
char buffer[128];
|
||||
mdns_string_t addr = ipv4_address_to_string(buffer, sizeof(buffer), saddr,
|
||||
sizeof(struct sockaddr_in));
|
||||
printf("Local IPv4 address: %.*s\n", MDNS_STRING_FORMAT(addr));
|
||||
printf("---Local IPv4 address: %.*s\n", MDNS_STRING_FORMAT(addr));
|
||||
}
|
||||
}
|
||||
} else if (unicast->Address.lpSockaddr->sa_family == AF_INET6) {
|
||||
@@ -665,6 +665,7 @@ open_client_sockets(int* sockets, int max_sockets, int port) {
|
||||
return num_sockets;
|
||||
}
|
||||
|
||||
/*
|
||||
// Open sockets to listen to incoming mDNS queries on port 5353
|
||||
static int
|
||||
open_service_sockets(int* sockets, int max_sockets) {
|
||||
@@ -720,6 +721,101 @@ open_service_sockets(int* sockets, int max_sockets) {
|
||||
|
||||
return num_sockets;
|
||||
}
|
||||
*/
|
||||
|
||||
static int open_service_sockets(int* sockets, int max_sockets, const char* local_ip) {
|
||||
int num_sockets = 0;
|
||||
|
||||
if (local_ip) {
|
||||
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD> local_ip<69><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3B6A8B5>õ<EFBFBD>ַ
|
||||
struct sockaddr_in sock_addr_ipv4;
|
||||
struct sockaddr_in6 sock_addr_ipv6;
|
||||
memset(&sock_addr_ipv4, 0, sizeof(sock_addr_ipv4));
|
||||
memset(&sock_addr_ipv6, 0, sizeof(sock_addr_ipv6));
|
||||
|
||||
if (inet_pton(AF_INET, local_ip, &sock_addr_ipv4.sin_addr)) {
|
||||
sock_addr_ipv4.sin_family = AF_INET;
|
||||
sock_addr_ipv4.sin_port = htons(MDNS_PORT);
|
||||
#ifdef __APPLE__
|
||||
sock_addr_ipv4.sin_len = sizeof(struct sockaddr_in);
|
||||
#endif
|
||||
int sock = mdns_socket_open_ipv4(&sock_addr_ipv4);
|
||||
if (sock >= 0) {
|
||||
sockets[num_sockets++] = sock;
|
||||
printf("Bound to specific IPv4 address: %s\n", local_ip);
|
||||
}
|
||||
else {
|
||||
printf("Failed to bind to IPv4 address: %s\n", local_ip);
|
||||
}
|
||||
}
|
||||
else if (inet_pton(AF_INET6, local_ip, &sock_addr_ipv6.sin6_addr)) {
|
||||
sock_addr_ipv6.sin6_family = AF_INET6;
|
||||
sock_addr_ipv6.sin6_port = htons(MDNS_PORT);
|
||||
#ifdef __APPLE__
|
||||
sock_addr_ipv6.sin6_len = sizeof(struct sockaddr_in6);
|
||||
#endif
|
||||
int sock = mdns_socket_open_ipv6(&sock_addr_ipv6);
|
||||
if (sock >= 0) {
|
||||
sockets[num_sockets++] = sock;
|
||||
printf("Bound to specific IPv6 address: %s\n", local_ip);
|
||||
}
|
||||
else {
|
||||
printf("Failed to bind to IPv6 address: %s\n", local_ip);
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("Invalid local IP address: %s\n", local_ip);
|
||||
}
|
||||
}
|
||||
|
||||
if (num_sockets == 0) {
|
||||
// <20><><EFBFBD><EFBFBD>δָ<CEB4><D6B8> local_ip<69><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3B6A8B5><EFBFBD><EFBFBD>нӿ<D0BD>
|
||||
if (num_sockets < max_sockets) {
|
||||
struct sockaddr_in sock_addr;
|
||||
memset(&sock_addr, 0, sizeof(sock_addr));
|
||||
sock_addr.sin_family = AF_INET;
|
||||
#ifdef _WIN32
|
||||
sock_addr.sin_addr = in4addr_any;
|
||||
#else
|
||||
sock_addr.sin_addr.s_addr = INADDR_ANY;
|
||||
#endif
|
||||
sock_addr.sin_port = htons(MDNS_PORT);
|
||||
#ifdef __APPLE__
|
||||
sock_addr.sin_len = sizeof(struct sockaddr_in);
|
||||
#endif
|
||||
int sock = mdns_socket_open_ipv4(&sock_addr);
|
||||
if (sock >= 0) {
|
||||
sockets[num_sockets++] = sock;
|
||||
printf("IPv4 socket opened successfully on port %d\n", MDNS_PORT);
|
||||
}
|
||||
else {
|
||||
printf("Failed to open IPv4 socket on port %d\n", MDNS_PORT);
|
||||
}
|
||||
}
|
||||
|
||||
if (num_sockets < max_sockets) {
|
||||
struct sockaddr_in6 sock_addr;
|
||||
memset(&sock_addr, 0, sizeof(sock_addr));
|
||||
sock_addr.sin6_family = AF_INET6;
|
||||
sock_addr.sin6_addr = in6addr_any;
|
||||
sock_addr.sin6_port = htons(MDNS_PORT);
|
||||
#ifdef __APPLE__
|
||||
sock_addr.sin6_len = sizeof(struct sockaddr_in6);
|
||||
#endif
|
||||
int sock = mdns_socket_open_ipv6(&sock_addr);
|
||||
if (sock >= 0) {
|
||||
sockets[num_sockets++] = sock;
|
||||
printf("IPv6 socket opened successfully on port %d\n", MDNS_PORT);
|
||||
}
|
||||
else {
|
||||
printf("Failed to open IPv6 socket on port %d\n", MDNS_PORT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return num_sockets;
|
||||
}
|
||||
|
||||
|
||||
// Send a DNS-SD query
|
||||
static int
|
||||
@@ -862,10 +958,12 @@ send_mdns_query(mdns_query_t* query, size_t count, void* user_data) {
|
||||
}
|
||||
|
||||
// Provide a mDNS service, answering incoming DNS-SD and mDNS queries
|
||||
/*
|
||||
int
|
||||
service_mdns(const char* hostname, const char* service_name, int service_port) {
|
||||
service_mdns(const char* hostname, const char* service_name, int service_port, const char* local_ip) {
|
||||
int sockets[32];
|
||||
int num_sockets = open_service_sockets(sockets, sizeof(sockets) / sizeof(sockets[0]));
|
||||
//int num_sockets = open_service_sockets(sockets, sizeof(sockets) / sizeof(sockets[0]));
|
||||
int num_sockets = open_service_sockets(sockets, sizeof(sockets) / sizeof(sockets[0]), local_ip);
|
||||
if (num_sockets <= 0) {
|
||||
printf("Failed to open any client sockets\n");
|
||||
return -1;
|
||||
@@ -1037,6 +1135,183 @@ service_mdns(const char* hostname, const char* service_name, int service_port) {
|
||||
mdns_socket_close(sockets[isock]);
|
||||
printf("Closed socket%s\n", num_sockets ? "s" : "");
|
||||
|
||||
return 0;
|
||||
}*/
|
||||
|
||||
int service_mdns(const char* hostname, const char* service_name, int service_port, const char* local_ip) {
|
||||
int sockets[32];
|
||||
int num_sockets = open_service_sockets(sockets, sizeof(sockets) / sizeof(sockets[0]), local_ip);
|
||||
if (num_sockets <= 0) {
|
||||
printf("Failed to open any client sockets\n");
|
||||
return -1;
|
||||
}
|
||||
printf("Opened %d socket%s for mDNS service\n", num_sockets, num_sockets ? "s" : "");
|
||||
|
||||
size_t service_name_length = strlen(service_name);
|
||||
if (!service_name_length) {
|
||||
printf("Invalid service name\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
char* service_name_buffer = malloc(service_name_length + 2);
|
||||
memcpy(service_name_buffer, service_name, service_name_length);
|
||||
if (service_name_buffer[service_name_length - 1] != '.')
|
||||
service_name_buffer[service_name_length++] = '.';
|
||||
service_name_buffer[service_name_length] = 0;
|
||||
service_name = service_name_buffer;
|
||||
|
||||
printf("Service mDNS: %s:%d\n", service_name, service_port);
|
||||
printf("Hostname: %s\n", hostname);
|
||||
|
||||
size_t capacity = 2048;
|
||||
void* buffer = malloc(capacity);
|
||||
|
||||
mdns_string_t service_string = (mdns_string_t){service_name, strlen(service_name)};
|
||||
mdns_string_t hostname_string = (mdns_string_t){hostname, strlen(hostname)};
|
||||
|
||||
char service_instance_buffer[256] = {0};
|
||||
snprintf(service_instance_buffer, sizeof(service_instance_buffer) - 1, "%.*s.%.*s",
|
||||
MDNS_STRING_FORMAT(hostname_string), MDNS_STRING_FORMAT(service_string));
|
||||
mdns_string_t service_instance_string =
|
||||
(mdns_string_t){service_instance_buffer, strlen(service_instance_buffer)};
|
||||
|
||||
char qualified_hostname_buffer[256] = {0};
|
||||
snprintf(qualified_hostname_buffer, sizeof(qualified_hostname_buffer) - 1, "%.*s.local.",
|
||||
MDNS_STRING_FORMAT(hostname_string));
|
||||
mdns_string_t hostname_qualified_string =
|
||||
(mdns_string_t){qualified_hostname_buffer, strlen(qualified_hostname_buffer)};
|
||||
|
||||
service_t service = {0};
|
||||
service.service = service_string;
|
||||
service.hostname = hostname_string;
|
||||
service.service_instance = service_instance_string;
|
||||
service.hostname_qualified = hostname_qualified_string;
|
||||
service.port = service_port;
|
||||
|
||||
if (local_ip) {
|
||||
struct sockaddr_in addr_ipv4;
|
||||
memset(&addr_ipv4, 0, sizeof(addr_ipv4));
|
||||
addr_ipv4.sin_family = AF_INET;
|
||||
if (inet_pton(AF_INET, local_ip, &addr_ipv4.sin_addr) <= 0) {
|
||||
printf("Invalid local IP address: %s\n", local_ip);
|
||||
free(service_name_buffer);
|
||||
free(buffer);
|
||||
return -1;
|
||||
}
|
||||
service.address_ipv4 = addr_ipv4;
|
||||
} else {
|
||||
service.address_ipv4 = service_address_ipv4;
|
||||
}
|
||||
|
||||
// Setup mDNS records
|
||||
service.record_ptr = (mdns_record_t){
|
||||
.name = service.service,
|
||||
.type = MDNS_RECORDTYPE_PTR,
|
||||
.data.ptr.name = service.service_instance,
|
||||
.rclass = 0,
|
||||
.ttl = 120
|
||||
};
|
||||
|
||||
service.record_srv = (mdns_record_t){
|
||||
.name = service.service_instance,
|
||||
.type = MDNS_RECORDTYPE_SRV,
|
||||
.data.srv.name = service.hostname_qualified,
|
||||
.data.srv.port = service.port,
|
||||
.data.srv.priority = 0,
|
||||
.data.srv.weight = 0,
|
||||
.rclass = 0,
|
||||
.ttl = 120
|
||||
};
|
||||
|
||||
service.record_a = (mdns_record_t){
|
||||
.name = service.hostname_qualified,
|
||||
.type = MDNS_RECORDTYPE_A,
|
||||
.data.a.addr = service.address_ipv4,
|
||||
.rclass = 0,
|
||||
.ttl = 120
|
||||
};
|
||||
|
||||
service.record_aaaa = (mdns_record_t){
|
||||
.name = service.hostname_qualified,
|
||||
.type = MDNS_RECORDTYPE_AAAA,
|
||||
.data.aaaa.addr = service.address_ipv6,
|
||||
.rclass = 0,
|
||||
.ttl = 120
|
||||
};
|
||||
|
||||
service.txt_record[0] = (mdns_record_t){
|
||||
.name = service.service_instance,
|
||||
.type = MDNS_RECORDTYPE_TXT,
|
||||
.data.txt.key = {MDNS_STRING_CONST("test")},
|
||||
.data.txt.value = {MDNS_STRING_CONST("1")},
|
||||
.rclass = 0,
|
||||
.ttl = 120
|
||||
};
|
||||
|
||||
service.txt_record[1] = (mdns_record_t){
|
||||
.name = service.service_instance,
|
||||
.type = MDNS_RECORDTYPE_TXT,
|
||||
.data.txt.key = {MDNS_STRING_CONST("other")},
|
||||
.data.txt.value = {MDNS_STRING_CONST("value")},
|
||||
.rclass = 0,
|
||||
.ttl = 120
|
||||
};
|
||||
|
||||
printf("Sending announce\n");
|
||||
mdns_record_t additional[5] = {0};
|
||||
size_t additional_count = 0;
|
||||
additional[additional_count++] = service.record_srv;
|
||||
additional[additional_count++] = service.record_a;
|
||||
additional[additional_count++] = service.txt_record[0];
|
||||
additional[additional_count++] = service.txt_record[1];
|
||||
|
||||
for (int isock = 0; isock < num_sockets; ++isock)
|
||||
mdns_announce_multicast(sockets[isock], buffer, capacity, service.record_ptr, 0, 0, additional, additional_count);
|
||||
|
||||
// Service loop
|
||||
while (running) {
|
||||
int nfds = 0;
|
||||
fd_set readfs;
|
||||
FD_ZERO(&readfs);
|
||||
for (int isock = 0; isock < num_sockets; ++isock) {
|
||||
if (sockets[isock] >= nfds)
|
||||
nfds = sockets[isock] + 1;
|
||||
FD_SET(sockets[isock], &readfs);
|
||||
}
|
||||
|
||||
struct timeval timeout;
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_usec = 100000;
|
||||
|
||||
if (select(nfds, &readfs, 0, 0, &timeout) >= 0) {
|
||||
for (int isock = 0; isock < num_sockets; ++isock) {
|
||||
if (FD_ISSET(sockets[isock], &readfs)) {
|
||||
mdns_socket_listen(sockets[isock], buffer, capacity, service_callback, &service);
|
||||
}
|
||||
FD_SET(sockets[isock], &readfs);
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
printf("Sending goodbye\n");
|
||||
additional_count = 0;
|
||||
additional[additional_count++] = service.record_srv;
|
||||
additional[additional_count++] = service.record_a;
|
||||
additional[additional_count++] = service.txt_record[0];
|
||||
additional[additional_count++] = service.txt_record[1];
|
||||
|
||||
for (int isock = 0; isock < num_sockets; ++isock)
|
||||
mdns_goodbye_multicast(sockets[isock], buffer, capacity, service.record_ptr, 0, 0, additional, additional_count);
|
||||
|
||||
free(buffer);
|
||||
free(service_name_buffer);
|
||||
|
||||
for (int isock = 0; isock < num_sockets; ++isock)
|
||||
mdns_socket_close(sockets[isock]);
|
||||
printf("Closed socket%s\n", num_sockets > 1 ? "s" : "");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1045,7 +1320,7 @@ service_mdns(const char* hostname, const char* service_name, int service_port) {
|
||||
static int
|
||||
dump_mdns(void) {
|
||||
int sockets[32];
|
||||
int num_sockets = open_service_sockets(sockets, sizeof(sockets) / sizeof(sockets[0]));
|
||||
int num_sockets = open_service_sockets(sockets, sizeof(sockets) / sizeof(sockets[0]), "192.168.1.170");
|
||||
if (num_sockets <= 0) {
|
||||
printf("Failed to open any client sockets\n");
|
||||
return -1;
|
||||
|
||||
@@ -177,7 +177,7 @@ struct mdns_query_t {
|
||||
};
|
||||
|
||||
int
|
||||
service_mdns(const char* hostname, const char* service_name, int service_port);
|
||||
service_mdns(const char* hostname, const char* service_name, int service_port, const char* local_ip);
|
||||
|
||||
// mDNS/DNS-SD public API
|
||||
|
||||
|
||||
Reference in New Issue
Block a user