mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
send full ntp data symmetrically from server to client.
This commit is contained in:
@@ -86,6 +86,12 @@ uint32_t byteutils_get_int_be(unsigned char* b, int offset) {
|
|||||||
uint64_t byteutils_get_long_be(unsigned char* b, int offset) {
|
uint64_t byteutils_get_long_be(unsigned char* b, int offset) {
|
||||||
return ntohll(byteutils_get_long(b, offset));
|
return ntohll(byteutils_get_long(b, offset));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Writes a big endian unsigned 64 bit integer to the buffer at position offset
|
||||||
|
*/
|
||||||
|
void byteutils_put_long_be(unsigned char* b, int offset, uint64_t value) {
|
||||||
|
*((uint64_t*)(b + offset)) = htonll(value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads a float from the buffer at position offset
|
* Reads a float from the buffer at position offset
|
||||||
|
|||||||
@@ -28,5 +28,6 @@ float byteutils_get_float(unsigned char* b, int offset);
|
|||||||
|
|
||||||
uint64_t byteutils_get_ntp_timestamp(unsigned char *b, int offset);
|
uint64_t byteutils_get_ntp_timestamp(unsigned char *b, int offset);
|
||||||
void byteutils_put_ntp_timestamp(unsigned char *b, int offset, uint64_t us_since_1970);
|
void byteutils_put_ntp_timestamp(unsigned char *b, int offset, uint64_t us_since_1970);
|
||||||
|
void byteutils_put_long_be(unsigned char* b, int offset, uint64_t value);
|
||||||
|
|
||||||
#endif //AIRPLAYSERVER_BYTEUTILS_H
|
#endif //AIRPLAYSERVER_BYTEUTILS_H
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ raop_ntp_thread(void *arg)
|
|||||||
raop_ntp_data_t data_sorted[RAOP_NTP_DATA_COUNT];
|
raop_ntp_data_t data_sorted[RAOP_NTP_DATA_COUNT];
|
||||||
const unsigned two_pow_n[RAOP_NTP_DATA_COUNT] = {2, 4, 8, 16, 32, 64, 128, 256};
|
const unsigned two_pow_n[RAOP_NTP_DATA_COUNT] = {2, 4, 8, 16, 32, 64, 128, 256};
|
||||||
bool logger_debug = (logger_get_level(raop_ntp->logger) >= LOGGER_DEBUG);
|
bool logger_debug = (logger_get_level(raop_ntp->logger) >= LOGGER_DEBUG);
|
||||||
|
uint64_t recv_time = 0, client_ref_time = 0;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
MUTEX_LOCK(raop_ntp->run_mutex);
|
MUTEX_LOCK(raop_ntp->run_mutex);
|
||||||
@@ -302,6 +303,10 @@ raop_ntp_thread(void *arg)
|
|||||||
// Send request
|
// Send request
|
||||||
uint64_t send_time = raop_ntp_get_local_time();
|
uint64_t send_time = raop_ntp_get_local_time();
|
||||||
byteutils_put_ntp_timestamp(request, 24, send_time);
|
byteutils_put_ntp_timestamp(request, 24, send_time);
|
||||||
|
if (recv_time) {
|
||||||
|
byteutils_put_long_be(request, 8, client_ref_time);
|
||||||
|
byteutils_put_ntp_timestamp(request, 16, recv_time);
|
||||||
|
}
|
||||||
int send_len = sendto(raop_ntp->tsock, (char *)request, sizeof(request), 0,
|
int send_len = sendto(raop_ntp->tsock, (char *)request, sizeof(request), 0,
|
||||||
(struct sockaddr *) &raop_ntp->remote_saddr, raop_ntp->remote_saddr_len);
|
(struct sockaddr *) &raop_ntp->remote_saddr, raop_ntp->remote_saddr_len);
|
||||||
if (logger_debug) {
|
if (logger_debug) {
|
||||||
@@ -322,11 +327,13 @@ raop_ntp_thread(void *arg)
|
|||||||
ntp_timestamp_to_time(send_time, time, sizeof(time));
|
ntp_timestamp_to_time(send_time, time, sizeof(time));
|
||||||
logger_log(raop_ntp->logger, LOGGER_DEBUG , "raop_ntp receive timeout (request sent %s)", time);
|
logger_log(raop_ntp->logger, LOGGER_DEBUG , "raop_ntp receive timeout (request sent %s)", time);
|
||||||
} else {
|
} else {
|
||||||
|
recv_time = raop_ntp_get_local_time();
|
||||||
|
client_ref_time = byteutils_get_long_be(response, 24);
|
||||||
if (!raop_ntp->client_time_received) {
|
if (!raop_ntp->client_time_received) {
|
||||||
raop_ntp->client_time_received = true;
|
raop_ntp->client_time_received = true;
|
||||||
}
|
}
|
||||||
//local time of the server when the NTP response packet returns
|
//local time of the server when the NTP response packet returns
|
||||||
int64_t t3 = (int64_t) raop_ntp_get_local_time();
|
int64_t t3 = (int64_t) recv_time;
|
||||||
|
|
||||||
// Local time of the server when the NTP request packet leaves the server
|
// Local time of the server when the NTP request packet leaves the server
|
||||||
int64_t t0 = (int64_t) byteutils_get_ntp_timestamp(response, 8);
|
int64_t t0 = (int64_t) byteutils_get_ntp_timestamp(response, 8);
|
||||||
|
|||||||
Reference in New Issue
Block a user