compare versions for compatibility
Henry committed
Oct 16, 2014 at 12:09 UTC
2a5b3eaa710b7ec7c9c52cefed0d222d6800e9dc
2 files changed
+18
-4
net/swarm/conn.go
+7
-1
@@ -164,6 +164,7 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error {
164
var remoteVersion, myVersion *version.SemVer
165
myVersion = version.Current()
166
167
+ // BUG(cryptix): do we need to use a NetMessage here?
168
myVersionMsg, err := msg.FromObject(s.local, myVersion)
169
if err != nil {
170
return fmt.Errorf("connVersionExchange: could not prepare local version: %q", err)
@@ -215,7 +216,12 @@ func (s *Swarm) connVersionExchange(remote *conn.Conn) error {
216
}
217
}
218
218
- return errors.New("not yet")
219
+ if !version.Compatible(myVersion, remoteVersion) {
220
+ remote.Close()
221
+ return errors.New("protocol missmatch")
222
+ }
223
+
224
+ return nil
225
}
226
227
// Handles the unwrapping + sending of messages to the right connection.
net/version/version.go
+11
-3
@@ -2,7 +2,7 @@ package version
2
3
import semver "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/coreos/go-semver/semver"
4
5
-var currentVersion = semver.Version{
5
+var currentVersion = &semver.Version{
6
Major: 0,
7
Minor: 1,
8
Patch: 0,
@@ -13,8 +13,16 @@ func Current() *SemVer {
13
return toPBSemVer(currentVersion)
14
}
15
16
+// Compatible checks wether two versions are compatible
17
+func Compatible(a, b *SemVer) bool {
18
+ aConv := fromPBSemVer(a)
19
+ bConv := fromPBSemVer(b)
20
+ return aConv.LessThan(*bConv)
21
+}
22
+
23
// toPBSemVar converts a coreos/semver to our protobuf SemVer
17
-func toPBSemVer(in semver.Version) (out *SemVer) {
24
+func toPBSemVer(in *semver.Version) (out *SemVer) {
25
+
26
return &SemVer{
27
Major: &in.Major,
28
Minor: &in.Minor,
@@ -23,7 +31,7 @@ func toPBSemVer(in semver.Version) (out *SemVer) {
31
}
32
33
// toPBSemVar converts our protobuf SemVer to a coreos/semver
26
-func fromPBSemVer(in SemVer) *semver.Version {
34
+func fromPBSemVer(in *SemVer) *semver.Version {
35
return &semver.Version{
36
Major: *in.Major,
37
Minor: *in.Minor,