@cryptotaxi247 / kubo / commits / 2a5b3eaa7

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,