mirror of
https://github.com/Qv2ray/Qv2ray.git
synced 2025-05-21 11:20:49 +08:00
****: stop supporting ICMPing on macOS
This commit is contained in:
parent
eab84e40b4
commit
7885966cba
@ -1 +1 @@
|
|||||||
5487
|
5488
|
||||||
|
@ -100,38 +100,37 @@ namespace Qv2ray::components::latency::icmping
|
|||||||
return { 0, "EPING_SOCK:" + QObject::tr("Socket creation failed") };
|
return { 0, "EPING_SOCK:" + QObject::tr("Socket creation failed") };
|
||||||
|
|
||||||
// resolve hostname
|
// resolve hostname
|
||||||
hostent *hname = gethostbyname(address.toStdString().c_str());
|
hostent *resolvedAddress = gethostbyname(address.toStdString().c_str());
|
||||||
if (!hname)
|
if (!resolvedAddress)
|
||||||
return { 0, "EPING_HOST: " + QObject::tr("Unresolvable hostname") };
|
return { 0, "EPING_HOST: " + QObject::tr("Unresolvable hostname") };
|
||||||
|
|
||||||
// set IP address to ping
|
// set IP address to ping
|
||||||
sockaddr_in addr_ping, *addr;
|
sockaddr_in targetAddress;
|
||||||
memset(&addr_ping, 0, sizeof(addr_ping));
|
memset(&targetAddress, 0, sizeof(targetAddress));
|
||||||
addr_ping.sin_family = hname->h_addrtype;
|
targetAddress.sin_family = resolvedAddress->h_addrtype;
|
||||||
addr_ping.sin_port = 0;
|
targetAddress.sin_port = 0;
|
||||||
memcpy(&addr_ping.sin_addr, hname->h_addr, hname->h_length);
|
memcpy(&targetAddress.sin_addr, resolvedAddress->h_addr, resolvedAddress->h_length);
|
||||||
addr = &addr_ping;
|
|
||||||
|
|
||||||
// prepare echo request packet
|
// prepare echo request packet
|
||||||
icmp req;
|
icmp _icmp_request;
|
||||||
memset(&req, 0, sizeof(req));
|
memset(&_icmp_request, 0, sizeof(_icmp_request));
|
||||||
req.icmp_type = ICMP_ECHO;
|
_icmp_request.icmp_type = ICMP_ECHO;
|
||||||
req.icmp_hun.ih_idseq.icd_id = 0; // SOCK_DGRAM & 0 => id will be set by kernel
|
_icmp_request.icmp_hun.ih_idseq.icd_id = 0; // SOCK_DGRAM & 0 => id will be set by kernel
|
||||||
unsigned short sent_seq;
|
unsigned short sent_seq;
|
||||||
req.icmp_hun.ih_idseq.icd_seq = sent_seq = seq++;
|
_icmp_request.icmp_hun.ih_idseq.icd_seq = sent_seq = seq++;
|
||||||
req.icmp_cksum = ping_checksum(reinterpret_cast<char *>(&req), sizeof(req));
|
_icmp_request.icmp_cksum = ping_checksum(reinterpret_cast<char *>(&_icmp_request), sizeof(_icmp_request));
|
||||||
|
|
||||||
// send echo request
|
// send echo request
|
||||||
gettimeofday(&start, NULL);
|
gettimeofday(&start, NULL);
|
||||||
if (sendto(socketId, &req, sizeof(icmp), 0, (struct sockaddr *) addr, sizeof(*addr)) <= 0)
|
if (sendto(socketId, &_icmp_request, sizeof(icmp), 0, (struct sockaddr *) &targetAddress, sizeof(targetAddress)) <= 0)
|
||||||
return { 0, "EPING_SEND: " + QObject::tr("Sending echo request failed") };
|
return { 0, "EPING_SEND: " + QObject::tr("Sending echo request failed") };
|
||||||
|
|
||||||
// receive response (if any)
|
// receive response (if any)
|
||||||
sockaddr_in r_addr;
|
sockaddr_in remove_addr;
|
||||||
slen = sizeof(r_addr);
|
slen = sizeof(remove_addr);
|
||||||
int rlen;
|
int rlen;
|
||||||
icmp resp;
|
icmp resp;
|
||||||
while ((rlen = recvfrom(socketId, &resp, sizeof(icmp), 0, (struct sockaddr *) &r_addr, &slen)) > 0)
|
while ((rlen = recvfrom(socketId, &resp, sizeof(icmp), 0, (struct sockaddr *) &remove_addr, &slen)) > 0)
|
||||||
{
|
{
|
||||||
gettimeofday(&end, NULL);
|
gettimeofday(&end, NULL);
|
||||||
|
|
||||||
|
@ -1012,6 +1012,7 @@ void PreferencesWindow::on_qvProxyCustomProxy_clicked()
|
|||||||
SET_PROXY_UI_ENABLE(true);
|
SET_PROXY_UI_ENABLE(true);
|
||||||
qvProxyNoProxy->setChecked(false);
|
qvProxyNoProxy->setChecked(false);
|
||||||
qvProxySystemProxy->setChecked(false);
|
qvProxySystemProxy->setChecked(false);
|
||||||
|
qvProxyCustomProxy->setChecked(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreferencesWindow::on_qvProxySystemProxy_clicked()
|
void PreferencesWindow::on_qvProxySystemProxy_clicked()
|
||||||
@ -1020,6 +1021,7 @@ void PreferencesWindow::on_qvProxySystemProxy_clicked()
|
|||||||
SET_PROXY_UI_ENABLE(false);
|
SET_PROXY_UI_ENABLE(false);
|
||||||
qvProxyNoProxy->setChecked(false);
|
qvProxyNoProxy->setChecked(false);
|
||||||
qvProxyCustomProxy->setChecked(false);
|
qvProxyCustomProxy->setChecked(false);
|
||||||
|
qvProxySystemProxy->setChecked(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreferencesWindow::on_qvProxyNoProxy_clicked()
|
void PreferencesWindow::on_qvProxyNoProxy_clicked()
|
||||||
@ -1028,6 +1030,7 @@ void PreferencesWindow::on_qvProxyNoProxy_clicked()
|
|||||||
SET_PROXY_UI_ENABLE(false);
|
SET_PROXY_UI_ENABLE(false);
|
||||||
qvProxySystemProxy->setChecked(false);
|
qvProxySystemProxy->setChecked(false);
|
||||||
qvProxyCustomProxy->setChecked(false);
|
qvProxyCustomProxy->setChecked(false);
|
||||||
|
qvProxyNoProxy->setChecked(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreferencesWindow::on_DnsFreedomCb_stateChanged(int arg1)
|
void PreferencesWindow::on_DnsFreedomCb_stateChanged(int arg1)
|
||||||
@ -1117,11 +1120,20 @@ void PreferencesWindow::on_latencyTCPingRB_clicked()
|
|||||||
LOADINGCHECK
|
LOADINGCHECK
|
||||||
CurrentConfig.networkConfig.latencyTestingMethod = TCPING;
|
CurrentConfig.networkConfig.latencyTestingMethod = TCPING;
|
||||||
latencyICMPingRB->setChecked(false);
|
latencyICMPingRB->setChecked(false);
|
||||||
|
latencyTCPingRB->setChecked(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreferencesWindow::on_latencyICMPingRB_clicked()
|
void PreferencesWindow::on_latencyICMPingRB_clicked()
|
||||||
{
|
{
|
||||||
LOADINGCHECK
|
LOADINGCHECK
|
||||||
|
#ifdef Q_OS_MAC
|
||||||
|
#warning No ICMPing support on macOS
|
||||||
|
CurrentConfig.networkConfig.latencyTestingMethod = TCPING;
|
||||||
|
latencyICMPingRB->setChecked(false);
|
||||||
|
latencyTCPingRB->setChecked(true);
|
||||||
|
#else
|
||||||
CurrentConfig.networkConfig.latencyTestingMethod = ICMPING;
|
CurrentConfig.networkConfig.latencyTestingMethod = ICMPING;
|
||||||
|
latencyICMPingRB->setChecked(true);
|
||||||
latencyTCPingRB->setChecked(false);
|
latencyTCPingRB->setChecked(false);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user