Server time delta is a signed integer

Fixes #322
This commit is contained in:
Michael Edwards 2019-03-25 20:27:30 +01:00
parent e9b159e9d9
commit 9b4ede086a
2 changed files with 7 additions and 5 deletions

View file

@ -399,7 +399,8 @@ impl SpircTask {
Ok(dur) => dur, Ok(dur) => dur,
Err(err) => err.duration(), 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) { fn handle_command(&mut self, cmd: SpircCommand) {

View file

@ -21,7 +21,7 @@ use mercury::MercuryManager;
struct SessionData { struct SessionData {
country: String, country: String,
time_delta: u64, time_delta: i64,
canonical_username: String, canonical_username: String,
invalid: bool, invalid: bool,
} }
@ -150,7 +150,7 @@ impl Session {
self.0.mercury.get(|| MercuryManager::new(self.weak())) 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 self.0.data.read().unwrap().time_delta
} }
@ -176,11 +176,12 @@ impl Session {
fn dispatch(&self, cmd: u8, data: Bytes) { fn dispatch(&self, cmd: u8, data: Bytes) {
match cmd { match cmd {
0x4 => { 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) { let timestamp = match SystemTime::now().duration_since(UNIX_EPOCH) {
Ok(dur) => dur, Ok(dur) => dur,
Err(err) => err.duration(), Err(err) => err.duration(),
}.as_secs() as u64; }
.as_secs() as i64;
self.0.data.write().unwrap().time_delta = server_timestamp - timestamp; self.0.data.write().unwrap().time_delta = server_timestamp - timestamp;