You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2016/05/09 15:36:54 UTC

[2/2] incubator-mynewt-newt git commit: connserial; verify messages with CRC.

connserial; verify messages with CRC.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/commit/3960627b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/tree/3960627b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/diff/3960627b

Branch: refs/heads/develop
Commit: 3960627ba85ca68198445d38126376edc35d8ace
Parents: 51d5ad1
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Fri May 6 13:55:17 2016 -0700
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Mon May 9 08:30:46 2016 -0700

----------------------------------------------------------------------
 newtmgr/transport/conn.go       |  8 ++++++++
 newtmgr/transport/connserial.go | 15 ++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/3960627b/newtmgr/transport/conn.go
----------------------------------------------------------------------
diff --git a/newtmgr/transport/conn.go b/newtmgr/transport/conn.go
index b7935ff..a774b38 100644
--- a/newtmgr/transport/conn.go
+++ b/newtmgr/transport/conn.go
@@ -59,6 +59,14 @@ func (pkt *Packet) GetBytes() []byte {
 	return pkt.buffer.Bytes()
 }
 
+func (pkt *Packet) TrimEnd(count int) {
+
+	if pkt.buffer.Len() < count {
+		count = pkt.buffer.Len()
+	}
+	pkt.buffer.Truncate(pkt.buffer.Len() - count)
+}
+
 func NewConn(cp config.NewtmgrConnProfile) (Conn, error) {
 	// Based on ConnProfile, instantiate the right type of conn object, that
 	// implements the conn interface.

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/3960627b/newtmgr/transport/connserial.go
----------------------------------------------------------------------
diff --git a/newtmgr/transport/connserial.go b/newtmgr/transport/connserial.go
index 5e90f80..b221e77 100644
--- a/newtmgr/transport/connserial.go
+++ b/newtmgr/transport/connserial.go
@@ -26,6 +26,7 @@ import (
 	"fmt"
 
 	log "github.com/Sirupsen/logrus"
+	"github.com/joaojeronimo/go-crc16"
 	"github.com/tarm/serial"
 
 	"mynewt.apache.org/newt/newtmgr/config"
@@ -106,6 +107,14 @@ func (cs *ConnSerial) ReadPacket() (*Packet, error) {
 
 		full := cs.currentPacket.AddBytes(data)
 		if full {
+			if crc16.Crc16(cs.currentPacket.GetBytes()) != 0 {
+				return nil, util.NewNewtError("CRC error")
+			}
+
+			/*
+			 * Trim away the 2 bytes of CRC
+			 */
+			cs.currentPacket.TrimEnd(2)
 			pkt := cs.currentPacket
 			cs.currentPacket = nil
 			return pkt, nil
@@ -122,10 +131,14 @@ func (cs *ConnSerial) writeData(bytes []byte) {
 
 func (cs *ConnSerial) WritePacket(pkt *Packet) error {
 	data := pkt.GetBytes()
-	dLen := uint16(len(data))
 
 	pktData := make([]byte, 2)
 
+	crc := crc16.Crc16(data)
+	binary.BigEndian.PutUint16(pktData, crc)
+	data = append(data, pktData...)
+
+	dLen := uint16(len(data))
 	binary.BigEndian.PutUint16(pktData, dLen)
 	pktData = append(pktData, data...)