liftIO $ sendmessage $
ERROR "NOTIFYCHANGE unsupported for a special remote"
go
- Just _ -> giveup "protocol error"
+ Just _ -> giveup "protocol error M"
Nothing -> return ()
getnextmessageorend =
store
Just (VALIDITY Invalid) ->
return ()
- _ -> giveup "protocol error"
+ _ -> giveup "protocol error N"
else store
- _ -> giveup "protocol error"
+ _ -> giveup "protocol error O"
proxyget offset af k = withproxytmpfile k $ \tmpfile -> do
-- Don't verify the content from the remote,
receivemessage >>= \case
Just SUCCESS -> return ()
Just FAILURE -> return ()
- Just _ -> giveup "protocol error"
+ Just _ -> giveup "protocol error P"
Nothing -> return ()
Right () -> runner next
ReceiveMessage next ->
let protoerr = return $ Left $
- ProtoFailureMessage "protocol error"
+ ProtoFailureMessage "protocol error 1"
gotmessage m = do
liftIO $ debugMessage conn "P2P <" m
runner (next (Just m))
liftIO (atomically (takeTMVar mv)) >>= \case
Left b -> runner (next b)
Right _ -> return $ Left $
- ProtoFailureMessage "protocol error"
+ ProtoFailureMessage "protocol error 2"
CheckAuthToken _u t next -> do
let authed = connCheckAuth conn t
runner (next authed)
to $ net $ sendMessage message
protoerr = do
- _ <- client $ net $ sendMessage (ERROR "protocol error")
- giveup "protocol error"
+ _ <- client $ net $ sendMessage (ERROR "protocol error X")
+ giveup "protocol error M"
handleREMOVE [] _ _ =
-- When no places are provided to remove from,
else FAILURE_PLUS us
handleGET remoteside message = getresponse (runRemoteSide remoteside) message $
- withDATA (relayGET remoteside)
+ withDATA (relayGET remoteside) $ \case
+ ERROR err -> protoerrhandler proxynextclientmessage $
+ client $ net $ sendMessage (ERROR err)
+ _ -> protoerr
handlePUT (remoteside:[]) k message
| Remote.uuid (remote remoteside) == remoteuuid =
client $ net $ sendMessage resp
PUT_FROM _ ->
getresponse client resp $
- withDATA (relayPUT remoteside k)
+ withDATA
+ (relayPUT remoteside k)
+ (const protoerr)
_ -> protoerr
handlePUT [] _ _ =
protoerrhandler proxynextclientmessage $
handlePUT remotesides k message =
handlePutMulti remotesides k message
- withDATA a message@(DATA len) = a len message
- withDATA _ _ = protoerr
+ withDATA a _ message@(DATA len) = a len message
+ withDATA _ a message = a message
relayGET remoteside len = relayDATAStart client $
relayDATACore len (runRemoteSide remoteside) client $
let l' = rights (rights l)
let minoffset = minimum (map snd l')
getresponse client (PUT_FROM (Offset minoffset)) $
- withDATA (relayPUTMulti minoffset l' k)
+ withDATA (relayPUTMulti minoffset l' k)
+ (const protoerr)
relayPUTMulti minoffset remotes k (Len datalen) _ = do
let totallen = datalen + minoffset
needs some disk. And it could minimize to eg, the last 2 or so.
The design doc has some more thoughts about this.
-* If GET from a proxied special remote sends an ERROR with a message
- from the special remote, currently the user sees "protocol error".
-
* Streaming download from proxied special remotes. See design.
* Check annex.diskreserve when proxying for special remotes.