finish get API
authorJoey Hess <joeyh@joeyh.name>
Mon, 8 Jul 2024 17:26:02 +0000 (13:26 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 8 Jul 2024 17:27:50 +0000 (13:27 -0400)
P2P/Http.hs
doc/design/p2p_protocol_over_http/draft1.mdwn

index 2cc8f452a5d9fb41c7e6a161f0c5dff3dcacfbf0..ac68198ad81f1176d150db18cd9f60f3b45ffed1 100644 (file)
@@ -38,14 +38,10 @@ import Control.Concurrent.STM
 import GHC.Generics
 
 type P2PHttpAPI
-       = "git-annex" :> "v3" :> "key" :> CaptureKey
-               :> GetAPI '[DataLengthHeader]
-       :<|> "git-annex" :> "v2" :> "key" :> CaptureKey
-               :> GetAPI '[DataLengthHeader]
-       :<|> "git-annex" :> "v1" :> "key" :> CaptureKey
-               :> GetAPI '[DataLengthHeader]
-       :<|> "git-annex" :> "v0" :> "key" :> CaptureKey
-               :> GetAPI '[]
+       = "git-annex" :> "v3" :> "key" :> CaptureKey :> GetAPI
+       :<|> "git-annex" :> "v2" :> "key" :> CaptureKey :> GetAPI
+       :<|> "git-annex" :> "v1" :> "key" :> CaptureKey :> GetAPI
+       :<|> "git-annex" :> "v0" :> "key" :> CaptureKey :> GetAPI
        :<|> "git-annex" :> "v3" :> "checkpresent" :> CheckPresentAPI
        :<|> "git-annex" :> "v2" :> "checkpresent" :> CheckPresentAPI
        :<|> "git-annex" :> "v1" :> "checkpresent" :> CheckPresentAPI
@@ -78,7 +74,7 @@ type P2PHttpAPI
        :<|> "git-annex" :> "v2" :> "keeplocked" :> KeepLockedAPI
        :<|> "git-annex" :> "v1" :> "keeplocked" :> KeepLockedAPI
        :<|> "git-annex" :> "v0" :> "keeplocked" :> KeepLockedAPI
-       :<|> "git-annex" :> "key" :> CaptureKey :> GetAPI '[]
+       :<|> "git-annex" :> "key" :> CaptureKey :> GetGenericAPI
 
 p2pHttpAPI :: Proxy P2PHttpAPI
 p2pHttpAPI = Proxy
@@ -91,7 +87,7 @@ serveP2pHttp
        = serveGet
        :<|> serveGet
        :<|> serveGet
-       :<|> serveGet0
+       :<|> serveGet
        :<|> serveCheckPresent
        :<|> serveCheckPresent
        :<|> serveCheckPresent
@@ -117,16 +113,21 @@ serveP2pHttp
        :<|> serveKeepLocked
        :<|> serveKeepLocked
        :<|> serveKeepLocked
-       :<|> serveGet0
+       :<|> serveGetGeneric
+
+type GetGenericAPI = StreamGet NoFraming OctetStream (SourceIO B.ByteString)
 
-type GetAPI headers
+serveGetGeneric :: B64Key -> Handler (S.SourceT IO B.ByteString)
+serveGetGeneric = undefined
+
+type GetAPI
        = ClientUUID Optional
        :> ServerUUID Optional
        :> BypassUUIDs
        :> AssociatedFileParam
        :> OffsetParam
        :> StreamGet NoFraming OctetStream
-               (Headers headers (SourceIO B.ByteString))
+               (Headers '[DataLengthHeader] (SourceIO B.ByteString))
 
 serveGet
        :: B64Key
@@ -138,16 +139,6 @@ serveGet
        -> Handler (Headers '[DataLengthHeader] (S.SourceT IO B.ByteString))
 serveGet = undefined
 
-serveGet0
-       :: B64Key
-       -> Maybe (B64UUID ClientSide)
-       -> Maybe (B64UUID ServerSide)
-       -> [B64UUID Bypass]
-       -> Maybe B64FilePath
-       -> Maybe Offset
-       -> Handler (Headers '[] (S.SourceT IO B.ByteString))
-serveGet0 = undefined
-
 clientGet
        :: P2P.ProtocolVersion
        -> B64Key
@@ -157,14 +148,14 @@ clientGet
        -> Maybe B64FilePath
        -> Maybe Offset
        -> ClientM (Headers '[DataLengthHeader] (S.SourceT IO B.ByteString))
-clientGet (P2P.ProtocolVersion ver) k cu su bypass af o = case ver of
-       3 -> v3 k cu su bypass af o
-       2 -> v2 k cu su bypass af o
-       1 -> error "XXX" -- TODO v1  
-       0 -> error "XXX" -- TODO v0
+clientGet (P2P.ProtocolVersion ver) = case ver of
+       3 -> v3
+       2 -> v2
+       1 -> v1
+       0 -> v0
        _ -> error "unsupported protocol version"
   where
-       _ :<|> v3 :<|> v2 :<|> v1 :<|> v0 :<|> _ = client p2pHttpAPI
+       v3 :<|> v2 :<|> v1 :<|> v0 :<|> _ = client p2pHttpAPI
 
 type CheckPresentAPI
        = KeyParam
index 5e889d7587a28180d5c403c1a2c44eddb83039e4..c0096e2e440c43f35adf9cc3a450818b586060a9 100644 (file)
@@ -79,9 +79,6 @@ It is not part of the P2P protocol per se, but is provided to let
 other clients than git-annex easily download the content of keys from the
 http server.
 
-This behaves almost the same as `GET /git-annex/v0/key/$key`, although its
-behavior may change in later versions.
-
 When the key is not present on the server, this returns a 404 Not Found.
 
 ### GET /git-annex/v3/key/$key
@@ -145,7 +142,7 @@ Identical to v3.
 
 ### GET /git-annex/v0/key/$key
 
-Same as v3, except there is no X-git-annex-data-length header.
+Same as v3, except the X-git-annex-data-length header is not used.
 Additional checking client-side will be required to validate the data.
 
 ### POST /git-annex/v3/checkpresent