Skip to content
This repository has been archived by the owner on Feb 25, 2023. It is now read-only.

Commit

Permalink
add: send description&stateCode from Redis to HSM
Browse files Browse the repository at this point in the history
  • Loading branch information
0xB10C committed Dec 5, 2019
1 parent 1b8af86 commit b51899e
Showing 1 changed file with 33 additions and 4 deletions.
37 changes: 33 additions & 4 deletions middleware/src/middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"log"
"os/exec"
"regexp"
"strconv"
"strings"
"time"

Expand Down Expand Up @@ -178,13 +179,11 @@ func (middleware *Middleware) updateCheckLoop() {
}
}

// hsmHeartbeatLoop
func (middleware *Middleware) hsmHeartbeatLoop() {
for {
// TODO(@0xB10C) fetch the `stateCode` and `descriptionCode` from redis keys set byt the supervisor
err := middleware.hsmFirmware.BitBoxBaseHeartbeat(messages.BitBoxBaseHeartbeatRequest_IDLE, messages.BitBoxBaseHeartbeatRequest_EMPTY)
err := middleware.hsmHeartbeat()
if err != nil {
log.Printf("Received an error from the HSM: %s\n", err)
log.Printf("Warning while sending a HSM heartbeat: %s\n", err)
time.Sleep(time.Second)
continue
}
Expand All @@ -193,6 +192,36 @@ func (middleware *Middleware) hsmHeartbeatLoop() {
}
}

func (middleware *Middleware) hsmHeartbeat() error {
stateCode, err := middleware.redisClient.GetInt(redis.BaseStateCode)
if err != nil {
err = middleware.hsmFirmware.BitBoxBaseHeartbeat(messages.BitBoxBaseHeartbeatRequest_ERROR, messages.BitBoxBaseHeartbeatRequest_REDIS_ERROR)
if err != nil {
return fmt.Errorf("could not get the stateCode from Redis: %s", err)
}
}

descriptionCodeString, err := middleware.redisClient.GetTopFromSortedSet(redis.BaseDescriptionCode)
if err != nil {
err = middleware.hsmFirmware.BitBoxBaseHeartbeat(messages.BitBoxBaseHeartbeatRequest_ERROR, messages.BitBoxBaseHeartbeatRequest_REDIS_ERROR)
if err != nil {
return fmt.Errorf("could not get the hightest priority descriptionCode from Redis: %s", err)
}
}

descriptionCode, err := strconv.Atoi(descriptionCodeString)
if err != nil {
return fmt.Errorf("could not convert the descriptionCode from Redis %q to a string: %s", descriptionCodeString, err)
}

err = middleware.hsmFirmware.BitBoxBaseHeartbeat(messages.BitBoxBaseHeartbeatRequest_StateCode(stateCode), messages.BitBoxBaseHeartbeatRequest_DescriptionCode(descriptionCode))
if err != nil {
return fmt.Errorf("received an error from the HSM: %w", err)
}

return nil
}

// Start gives a trigger for the handler to start the rpc event loop
func (middleware *Middleware) Start() <-chan handlers.Event {
if middleware.hsmFirmware != nil {
Expand Down

0 comments on commit b51899e

Please sign in to comment.