summaryrefslogtreecommitdiff
path: root/src/Network/BitTorrent
diff options
context:
space:
mode:
authorDaniel Gröber <dxld@darkboxed.org>2013-12-22 22:04:41 +0000
committerDaniel Gröber <dxld@darkboxed.org>2013-12-22 22:04:41 +0000
commitff6e18a0ff146bd84c5d68b6e0a1a73cc12af7bf (patch)
tree22c16554312d4fc8d7fb43605f02b644e52f25df /src/Network/BitTorrent
parentfd795d45ea816aaa24adc7ac7185514d8407cae0 (diff)
Add Monoid instance for ExtendedHandshake
Diffstat (limited to 'src/Network/BitTorrent')
-rw-r--r--src/Network/BitTorrent/Exchange/Message.hs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/Network/BitTorrent/Exchange/Message.hs b/src/Network/BitTorrent/Exchange/Message.hs
index b7567e60..8d0c62f4 100644
--- a/src/Network/BitTorrent/Exchange/Message.hs
+++ b/src/Network/BitTorrent/Exchange/Message.hs
@@ -677,6 +677,24 @@ defaultQueueLength = 1
677instance Default ExtendedHandshake where 677instance Default ExtendedHandshake where
678 def = ExtendedHandshake def def def def def def def def 678 def = ExtendedHandshake def def def def def def def def
679 679
680instance Monoid ExtendedHandshake where
681 mempty = def { ehsCaps = mempty }
682 mappend old new =
683 ExtendedHandshake {
684 ehsCaps = ehsCaps old <> ehsCaps new,
685 ehsIPv4 = ehsIPv4 old `mergeOld` ehsIPv4 new,
686 ehsIPv6 = ehsIPv6 old `mergeOld` ehsIPv6 new,
687 ehsMetadataSize = ehsMetadataSize old `mergeNew` ehsMetadataSize new,
688 ehsPort = ehsPort old `mergeOld` ehsPort new,
689 ehsQueueLength = ehsQueueLength old `mergeNew` ehsQueueLength new,
690 ehsVersion = ehsVersion old `mergeOld` ehsVersion new,
691 ehsYourIp = ehsYourIp old `mergeOld` ehsYourIp new
692 }
693 where
694 mergeOld old new = old <|> new
695 mergeNew old new = new <|> old
696
697
680instance BEncode ExtendedHandshake where 698instance BEncode ExtendedHandshake where
681 toBEncode ExtendedHandshake {..} = toDict $ 699 toBEncode ExtendedHandshake {..} = toDict $
682 "ipv4" .=? (S.encode <$> ehsIPv4) 700 "ipv4" .=? (S.encode <$> ehsIPv4)