summaryrefslogtreecommitdiffhomepage
path: root/ProtocolBuffers.hs
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2017-05-05 11:02:58 -0400
committerJoey Hess <joeyh@joeyh.name>2017-05-05 11:03:48 -0400
commitbe53d40694e59f9ef48d8a8106004623bddc703b (patch)
tree9699d7385da6c9276272812d91cb1f913884bb49 /ProtocolBuffers.hs
parentb8a8b10ab8f2e593d55b7b1ab0d57817939decc0 (diff)
downloaddebug-me-be53d40694e59f9ef48d8a8106004623bddc703b.tar.gz
add protocol version
This is distinct from the wire protocol version used in the websocket framing of messages. Versioning the high level protocol will let later features be added. The user controls the protocol version, since they send the first several messages. Developers that connect need to avoid using features from newer protocol versions. So, developers and servers will need to support the most recent version, while the user can have an old version of debug-me and it will continue to work. This commit changes the protocol buffer encoding, and is the last such free change. All changes past this point will need to be versioned. This commit was sponsored by Jochen Bartl on Patreon.
Diffstat (limited to 'ProtocolBuffers.hs')
-rw-r--r--ProtocolBuffers.hs55
1 files changed, 30 insertions, 25 deletions
diff --git a/ProtocolBuffers.hs b/ProtocolBuffers.hs
index 42d3e0b..e87a156 100644
--- a/ProtocolBuffers.hs
+++ b/ProtocolBuffers.hs
@@ -65,65 +65,67 @@ data ControlActionP
, enteredLastAcceptedP :: Optional 12 (Message HashP)
}
| SessionKeyP
- { sessionKeyP :: Required 13 (Message (PerhapsSignedP PublicKeyP)) }
+ { sessionKeyP :: Required 13 (Message (PerhapsSignedP PublicKeyP))
+ , protocolVersionP :: Required 14 (Value B.ByteString)
+ }
| SessionKeyAcceptedP
- { sessionKeyAcceptedP :: Required 14 (Message PublicKeyP) }
+ { sessionKeyAcceptedP :: Required 15 (Message PublicKeyP) }
| SessionKeyRejectedP
- { sessionKeyRejectedP :: Required 15 (Message PublicKeyP) }
+ { sessionKeyRejectedP :: Required 16 (Message PublicKeyP) }
| ChatMessageP
- { chatMessageSenderName :: Required 16 (Value B.ByteString)
- , chatMessage :: Required 17 (Value B.ByteString)
+ { chatMessageSenderName :: Required 17 (Value B.ByteString)
+ , chatMessage :: Required 18 (Value B.ByteString)
}
deriving (Generic)
data SignatureP
= Ed25519SignatureP
- { ed25519SignatureP :: Required 18 (Value B.ByteString) }
+ { ed25519SignatureP :: Required 19 (Value B.ByteString) }
| OtherSignatureP
- { otherSignatureP :: Required 19 (Value B.ByteString) }
+ { otherSignatureP :: Required 20 (Value B.ByteString) }
deriving (Generic)
data PublicKeyP = PublicKeyP
- { mkPublicKeyP :: Required 20 (Value B.ByteString) }
+ { mkPublicKeyP :: Required 21 (Value B.ByteString) }
deriving (Generic)
data PerhapsSignedP a
= GpgSignedP
- { gpgSignedValP :: Required 21 (Message a)
- , gpgSigP :: Required 22 (Message GpgSigP)
- , gpgKeyExportP :: Required 23 (Message GpgKeyExportP)
+ { gpgSignedValP :: Required 22 (Message a)
+ , gpgSigP :: Required 23 (Message GpgSigP)
+ , gpgKeyExportP :: Required 24 (Message GpgKeyExportP)
}
| UnSignedP
- { mkUnSignedP :: Required 24 (Message a )
+ { mkUnSignedP :: Required 25 (Message a )
}
deriving (Generic)
data GpgSigP = GpgSigP
- { mkGpgSigP :: Required 25 (Value B.ByteString) }
+ { mkGpgSigP :: Required 26 (Value B.ByteString) }
deriving (Generic)
data GpgKeyExportP = GpgKeyExportP
- { mkGpgKeyExportP :: Required 26 (Value B.ByteString) }
+ { mkGpgKeyExportP :: Required 27 (Value B.ByteString) }
deriving (Generic)
data ElapsedTimeP = ElapsedTimeP
- { mkElapsedTimeP :: Required 27 (Value Double) }
+ { mkElapsedTimeP :: Required 28 (Value Double) }
deriving (Generic)
data AnyMessageP
- = UserP { mkUserP :: Required 28 (Message (MessageP SeenP)) }
- | DeveloperP { mkDeveloperP :: Required 29 (Message (MessageP EnteredP)) }
+ = UserP { mkUserP :: Required 29 (Message (MessageP SeenP)) }
+ | DeveloperP { mkDeveloperP :: Required 30 (Message (MessageP EnteredP)) }
deriving (Generic)
data HashP = HashP
- { hashMethodP :: Required 30 (Message HashMethodP)
- , hashValueP :: Required 31 (Value B.ByteString)
+ { hashMethodP :: Required 31 (Message HashMethodP)
+ , hashValueP :: Required 32 (Value B.ByteString)
}
deriving (Generic)
data HashMethodP
- = SHA512P { mkSHA512P :: Required 32 (Value Bool) }
- | SHA3P { mkSHA3P :: Required 33 (Value Bool) }
+ = SHA512P { mkSHA512P :: Required 33 (Value Bool) }
+ | SHA3P { mkSHA3P :: Required 34 (Value Bool) }
deriving (Generic)
-- | Conversion between protocol buffer messages and debug-me's main Types.
@@ -190,8 +192,10 @@ instance ProtocolBuffer ControlActionP T.ControlAction where
{ enteredRejectedP = putField $ toProtocolBuffer $ T.enteredRejected t
, enteredLastAcceptedP = putField $ toProtocolBuffer <$> T.enteredLastAccepted t
}
- toProtocolBuffer (T.SessionKey t) = SessionKeyP
- { sessionKeyP = putField $ toProtocolBuffer t }
+ toProtocolBuffer (T.SessionKey t v) = SessionKeyP
+ { sessionKeyP = putField $ toProtocolBuffer t
+ , protocolVersionP = putField $ val v
+ }
toProtocolBuffer (T.SessionKeyAccepted t) = SessionKeyAcceptedP
{ sessionKeyAcceptedP = putField $ toProtocolBuffer t }
toProtocolBuffer (T.SessionKeyRejected t) = SessionKeyRejectedP
@@ -204,8 +208,9 @@ instance ProtocolBuffer ControlActionP T.ControlAction where
{ T.enteredRejected = fromProtocolBuffer $ getField $ enteredRejectedP p
, T.enteredLastAccepted = fromProtocolBuffer <$> getField (enteredLastAcceptedP p)
}
- fromProtocolBuffer p@(SessionKeyP {}) = T.SessionKey $
- fromProtocolBuffer $ getField $ sessionKeyP p
+ fromProtocolBuffer p@(SessionKeyP {}) = T.SessionKey
+ (fromProtocolBuffer $ getField $ sessionKeyP p)
+ (Val $ getField $ protocolVersionP p)
fromProtocolBuffer p@(SessionKeyAcceptedP {}) = T.SessionKeyAccepted $
fromProtocolBuffer $ getField $ sessionKeyAcceptedP p
fromProtocolBuffer p@(SessionKeyRejectedP {}) = T.SessionKeyRejected $