Tracker: add UDP tracker error response parsing
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 28 Feb 2016 12:02:05 +0000 (17:32 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 28 Feb 2016 12:02:05 +0000 (17:32 +0530)
src/FuncTorrent/Tracker.hs

index 224a30e6ba603a7e617b69d42b2c00f534bc4f95..dd66c12dac0dc7ff6cc40c679241995648ef0b86 100644 (file)
@@ -78,6 +78,7 @@ data UDPRequest = ConnectReq Integer
 data UDPResponse = ConnectResp Integer Integer -- transaction_id connection_id
                  | AnnounceResp Integer Integer Integer Integer [(IP, Port)] -- transaction_id interval leechers seeders [(ip, port)]
                  | ScrapeResp Integer Integer Integer Integer
+                 | ErrorResp Integer String
                  deriving (Show, Eq)
 
 actionToInteger :: Action -> Integer
@@ -137,6 +138,10 @@ instance Binary UDPResponse where
         _ <- getWord32be
         _ <- getWord32be
         return $ ScrapeResp tid 0 0 0
+      3 -> do -- error response
+        tid <- fromIntegral <$> getWord32be
+        bs  <- getByteString 4
+        return $ ErrorResp tid $ unpack bs
       _ -> error ("unknown response action type: " ++ show a)
 
 getIPPortPairs :: Get [(IP, Port)]