proxy local timestamps in single proxy case as well as cluster case
This is less efficient, but it guarantees that the timestamps that the client is sending are local timestamps, which turns out to be necessary for the HTTP PTP protocol server.
This commit is contained in:
parent
518248f009
commit
81e11efda1
1 changed files with 3 additions and 13 deletions
16
P2P/Proxy.hs
16
P2P/Proxy.hs
|
@ -349,18 +349,8 @@ proxy proxydone proxymethods proxystate servermode (ClientSide clientrunst clien
|
||||||
_ <- client $ net $ sendMessage (ERROR "protocol error X")
|
_ <- client $ net $ sendMessage (ERROR "protocol error X")
|
||||||
giveup "protocol error M"
|
giveup "protocol error M"
|
||||||
|
|
||||||
-- When there is a single remote, reply with its timestamp,
|
-- Reply with our local timestamp, and do timestamp translation
|
||||||
-- to avoid needing timestamp translation.
|
-- when sending REMOVE-BEFORE.
|
||||||
handleGETTIMESTAMP (remoteside:[]) = do
|
|
||||||
liftIO $ atomically $ do
|
|
||||||
writeTVar (proxyRemoteLatestTimestamps proxystate)
|
|
||||||
mempty
|
|
||||||
writeTVar (proxyRemoteLatestLocalTimestamp proxystate)
|
|
||||||
Nothing
|
|
||||||
proxyresponse remoteside GETTIMESTAMP
|
|
||||||
(const proxynextclientmessage)
|
|
||||||
-- When there are multiple remotes, reply with our local timestamp,
|
|
||||||
-- and do timestamp translation when sending REMOVE-FROM.
|
|
||||||
handleGETTIMESTAMP remotesides = do
|
handleGETTIMESTAMP remotesides = do
|
||||||
-- Order of getting timestamps matters.
|
-- Order of getting timestamps matters.
|
||||||
-- Getting the local time after the time of the remotes
|
-- Getting the local time after the time of the remotes
|
||||||
|
@ -385,11 +375,11 @@ proxy proxydone proxymethods proxystate servermode (ClientSide clientrunst clien
|
||||||
Just (remoteSideId r, ts)
|
Just (remoteSideId r, ts)
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
|
|
||||||
proxyTimestamp ts _ _ Nothing = ts -- not proxying timestamps
|
|
||||||
proxyTimestamp ts r tsm (Just correspondinglocaltime) =
|
proxyTimestamp ts r tsm (Just correspondinglocaltime) =
|
||||||
case M.lookup (remoteSideId r) tsm of
|
case M.lookup (remoteSideId r) tsm of
|
||||||
Just oldts -> oldts + (ts - correspondinglocaltime)
|
Just oldts -> oldts + (ts - correspondinglocaltime)
|
||||||
Nothing -> ts -- not reached
|
Nothing -> ts -- not reached
|
||||||
|
proxyTimestamp ts _ _ Nothing = ts -- not proxying timestamps
|
||||||
|
|
||||||
handleREMOVE [] _ _ =
|
handleREMOVE [] _ _ =
|
||||||
-- When no places are provided to remove from,
|
-- When no places are provided to remove from,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue