mirror of
https://github.com/librespot-org/librespot.git
synced 2024-12-18 17:11:53 +00:00
Merge pull request #323 from medwards/check_underflow
Server time delta is a signed integer
This commit is contained in:
commit
14721f45fe
2 changed files with 7 additions and 5 deletions
|
@ -399,7 +399,8 @@ impl SpircTask {
|
|||
Ok(dur) => dur,
|
||||
Err(err) => err.duration(),
|
||||
};
|
||||
((dur.as_secs() + self.session.time_delta()) * 1000 + (dur.subsec_nanos() / 1000_000) as u64) as i64
|
||||
((dur.as_secs() as i64 + self.session.time_delta()) * 1000
|
||||
+ (dur.subsec_nanos() / 1000_000) as i64)
|
||||
}
|
||||
|
||||
fn handle_command(&mut self, cmd: SpircCommand) {
|
||||
|
|
|
@ -21,7 +21,7 @@ use mercury::MercuryManager;
|
|||
|
||||
struct SessionData {
|
||||
country: String,
|
||||
time_delta: u64,
|
||||
time_delta: i64,
|
||||
canonical_username: String,
|
||||
invalid: bool,
|
||||
}
|
||||
|
@ -150,7 +150,7 @@ impl Session {
|
|||
self.0.mercury.get(|| MercuryManager::new(self.weak()))
|
||||
}
|
||||
|
||||
pub fn time_delta(&self) -> u64 {
|
||||
pub fn time_delta(&self) -> i64 {
|
||||
self.0.data.read().unwrap().time_delta
|
||||
}
|
||||
|
||||
|
@ -176,11 +176,12 @@ impl Session {
|
|||
fn dispatch(&self, cmd: u8, data: Bytes) {
|
||||
match cmd {
|
||||
0x4 => {
|
||||
let server_timestamp = BigEndian::read_u32(data.as_ref()) as u64;
|
||||
let server_timestamp = BigEndian::read_u32(data.as_ref()) as i64;
|
||||
let timestamp = match SystemTime::now().duration_since(UNIX_EPOCH) {
|
||||
Ok(dur) => dur,
|
||||
Err(err) => err.duration(),
|
||||
}.as_secs() as u64;
|
||||
}
|
||||
.as_secs() as i64;
|
||||
|
||||
self.0.data.write().unwrap().time_delta = server_timestamp - timestamp;
|
||||
|
||||
|
|
Loading…
Reference in a new issue