Converting Software Image Hash to hex string
Returning image version based on the first 14 bytes of the image file. D

Change-Id: I5ea94be5e841cd1a845e7d523cf0e3666983d4aa
diff --git a/internal/common/omci/get.go b/internal/common/omci/get.go
index 73e53ac..e50c47a 100644
--- a/internal/common/omci/get.go
+++ b/internal/common/omci/get.go
@@ -45,7 +45,9 @@
 	return msgObj, nil
 }
 
-func CreateGetResponse(omciPkt gopacket.Packet, omciMsg *omci.OMCI, onuSn *openolt.SerialNumber, mds uint8, activeImageEntityId uint16, committedImageEntityId uint16, onuDown bool) ([]byte, error) {
+func CreateGetResponse(omciPkt gopacket.Packet, omciMsg *omci.OMCI, onuSn *openolt.SerialNumber, mds uint8,
+	activeImageEntityId uint16, committedImageEntityId uint16, standbyImageVersion string, activeImageVersion string,
+	committedImageVersion string, onuDown bool) ([]byte, error) {
 
 	msgObj, err := ParseGetRequest(omciPkt)
 
@@ -66,7 +68,8 @@
 	case me.OnuGClassID:
 		response = createOnugResponse(msgObj.AttributeMask, msgObj.EntityInstance, onuSn)
 	case me.SoftwareImageClassID:
-		response = createSoftwareImageResponse(msgObj.AttributeMask, msgObj.EntityInstance, activeImageEntityId, committedImageEntityId)
+		response = createSoftwareImageResponse(msgObj.AttributeMask, msgObj.EntityInstance,
+			activeImageEntityId, committedImageEntityId, standbyImageVersion, activeImageVersion, committedImageVersion)
 	case me.IpHostConfigDataClassID:
 		response = createIpHostResponse(msgObj.AttributeMask, msgObj.EntityInstance)
 	case me.UniGClassID:
@@ -200,20 +203,35 @@
 	//}
 }
 
-func createSoftwareImageResponse(attributeMask uint16, entityInstance uint16, activeImageEntityId uint16, committedImageEntityId uint16) *omci.GetResponse {
+func createSoftwareImageResponse(attributeMask uint16, entityInstance uint16, activeImageEntityId uint16,
+	committedImageEntityId uint16, standbyImageVersion string, activeImageVersion string, committedImageVersion string) *omci.GetResponse {
 
 	omciLogger.WithFields(log.Fields{
 		"EntityInstance": entityInstance,
+		"AttributeMask":  attributeMask,
 	}).Trace("received-get-software-image-request")
 
 	// Only one image can be active and committed
 	committed := 0
 	active := 0
+	version := standbyImageVersion
 	if entityInstance == activeImageEntityId {
 		active = 1
+		version = activeImageVersion
 	}
 	if entityInstance == committedImageEntityId {
 		committed = 1
+		version = committedImageVersion
+	}
+
+	imageHash, err := hex.DecodeString(hex.EncodeToString([]byte(version)))
+	if err != nil {
+		omciLogger.WithFields(log.Fields{
+			"entityId":  entityInstance,
+			"active":    active,
+			"committed": committed,
+			"err":       err,
+		}).Error("cannot-generate-image-hash")
 	}
 
 	// NOTE that we need send the response for the correct ME Instance or the adapter won't process it
@@ -224,12 +242,12 @@
 		},
 		Attributes: me.AttributeValueMap{
 			"ManagedEntityId": 0,
-			"Version":         ToOctets("00000000000001", 14),
+			"Version":         ToOctets(version, 14),
 			"IsCommitted":     committed,
 			"IsActive":        active,
 			"IsValid":         1,
-			"ProductCode":     ToOctets("product-code", 25),
-			"ImageHash":       ToOctets("broadband-sim", 16),
+			"ProductCode":     ToOctets("BBSIM-ONU", 25),
+			"ImageHash":       imageHash,
 		},
 		Result:        me.Success,
 		AttributeMask: attributeMask,