Skip to content
Snippets Groups Projects
Commit 80e9d9ca authored by Martin Stiemerling's avatar Martin Stiemerling :speech_balloon:
Browse files

can be powered on and off

parent fac33b3a
Branches
Tags
1 merge request!9First working draft version
...@@ -69,7 +69,8 @@ func (kms *EKMS) AddQuantumElement(kmsUDPAddrr string) *QuantumElement { ...@@ -69,7 +69,8 @@ func (kms *EKMS) AddQuantumElement(kmsUDPAddrr string) *QuantumElement {
//Get an emulated Quantumlayer //Get an emulated Quantumlayer
ql := quantumlayer.NewQuantumlayerEmuPRNG() ql := quantumlayer.NewQuantumlayerEmuPRNG()
ql.PowerOn(kmsUDPAddrr) ql.Configure(kmsUDPAddrr)
ql.PowerOn()
ksl := kmsKeyStore{ ksl := kmsKeyStore{
keyStore: make(map[string]kmsKSElement), keyStore: make(map[string]kmsKSElement),
......
...@@ -29,11 +29,13 @@ type QuantumPayloadElement struct { ...@@ -29,11 +29,13 @@ type QuantumPayloadElement struct {
} }
type QuantumlayerEmuPRNG struct { type QuantumlayerEmuPRNG struct {
configured bool
poweron bool poweron bool
incomingRandNums chan QuantumPayloadElement incomingRandNums chan QuantumPayloadElement
outgoingRandNums chan QuantumPayloadElement outgoingRandNums chan QuantumPayloadElement
peerNumbers *NumberStore peerNumbers *NumberStore
myNumbers *NumberStore myNumbers *NumberStore
localQLAddress string
udpSrvConn *net.UDPConn udpSrvConn *net.UDPConn
qlPeer string qlPeer string
qlPeerCancel context.CancelFunc qlPeerCancel context.CancelFunc
...@@ -43,6 +45,7 @@ type QuantumlayerEmuPRNG struct { ...@@ -43,6 +45,7 @@ type QuantumlayerEmuPRNG struct {
func NewQuantumlayerEmuPRNG() (newql *QuantumlayerEmuPRNG) { func NewQuantumlayerEmuPRNG() (newql *QuantumlayerEmuPRNG) {
return &QuantumlayerEmuPRNG{ return &QuantumlayerEmuPRNG{
configured: false,
poweron: false, poweron: false,
incomingRandNums: make(chan QuantumPayloadElement), incomingRandNums: make(chan QuantumPayloadElement),
outgoingRandNums: make(chan QuantumPayloadElement), outgoingRandNums: make(chan QuantumPayloadElement),
...@@ -52,31 +55,41 @@ func NewQuantumlayerEmuPRNG() (newql *QuantumlayerEmuPRNG) { ...@@ -52,31 +55,41 @@ func NewQuantumlayerEmuPRNG() (newql *QuantumlayerEmuPRNG) {
} }
} }
// Power on the quantum layer, i.e., open up the communication ports for the // Configure the quantum emulation, but do not start if yet
// other quantum module func (qlemuprng *QuantumlayerEmuPRNG) Configure(localQLAddress ...string) {
func (qlemuprng *QuantumlayerEmuPRNG) PowerOn(localQLAddress ...string) {
qlemuprng.poweron = false
log.Println("QuantumlayerEmuPRNG is powering on...charging.")
// Start receiving numberstores // Start receiving numberstores
go qlemuprng.peerNumbers.receiveNumbers(qlemuprng.incomingRandNums) go qlemuprng.peerNumbers.receiveNumbers(qlemuprng.incomingRandNums)
go qlemuprng.myNumbers.receiveNumbers(qlemuprng.outgoingRandNums) go qlemuprng.myNumbers.receiveNumbers(qlemuprng.outgoingRandNums)
// Determine if a local UDP address should be used or not
if len(localQLAddress) == 0 {
// No input
qlemuprng.localQLAddress = ":0"
} else {
qlemuprng.localQLAddress = localQLAddress[0]
}
qlemuprng.configured = true
}
// Power on the quantum layer, i.e., open up the communication ports for the
// other quantum module
func (qlemuprng *QuantumlayerEmuPRNG) PowerOn() {
if qlemuprng.configured == false {
// nothing do here move on
log.Printf("Sorry, the quantum layer is not configured for action. You've missed Configure()")
return
}
qlemuprng.poweron = false
log.Println("QuantumlayerEmuPRNG is powering on...charging.")
// serve UDP incoming // serve UDP incoming
go func() { go func() {
// Get UDP server part going... // Get UDP server part going...
// Determine if a local UDP address should be used or not log.Printf("localQLAddress is %s", qlemuprng.localQLAddress)
var udpAddrString string
if len(localQLAddress) == 0 {
// No input
udpAddrString = ":0"
} else {
udpAddrString = localQLAddress[0]
}
log.Printf("localQLAddress is %s", localQLAddress[0])
// This reads random numbers from other Quantum end // This reads random numbers from other Quantum end
udpSrvPort, err := net.ResolveUDPAddr("udp", udpAddrString) udpSrvPort, err := net.ResolveUDPAddr("udp", qlemuprng.localQLAddress)
if err != nil { if err != nil {
log.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err) log.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
return return
...@@ -158,23 +171,25 @@ func (qlemuprng *QuantumlayerEmuPRNG) AddPeer(addr net.UDPAddr) { ...@@ -158,23 +171,25 @@ func (qlemuprng *QuantumlayerEmuPRNG) AddPeer(addr net.UDPAddr) {
case <-ctx.Done(): case <-ctx.Done():
return return
default: default:
// retrieve a new back of random numbers if qlemuprng.poweron == true {
newNumberBatch := qlemuprng.GenerateRandomNumbers() // retrieve a new back of random numbers
// TODO: Replace this by some generic encapsulation reader and not just JSON newNumberBatch := qlemuprng.GenerateRandomNumbers()
//Get JSON for transmission ready // TODO: Replace this by some generic encapsulation reader and not just JSON
qpe := QuantumPayloadElement{time.Now().UnixNano(), len(newNumberBatch), &newNumberBatch} //Get JSON for transmission ready
qpe := QuantumPayloadElement{time.Now().UnixNano(), len(newNumberBatch), &newNumberBatch}
// XXX/TODO: error must be handled
jsonPayload, err := json.Marshal(qpe) // XXX/TODO: error must be handled
if err != nil { jsonPayload, err := json.Marshal(qpe)
log.Printf("json.Marshal error %s", err) if err != nil {
} log.Printf("json.Marshal error %s", err)
}
_, _, err = qlemuprng.udpSrvConn.WriteMsgUDPAddrPort(jsonPayload, nil, addr.AddrPort()) _, _, err = qlemuprng.udpSrvConn.WriteMsgUDPAddrPort(jsonPayload, nil, addr.AddrPort())
if err != nil { if err != nil {
log.Fatalf("WriteMsgUDPAddrPort failed: %s", err) log.Fatalf("WriteMsgUDPAddrPort failed: %s", err)
}
qlemuprng.outgoingRandNums <- qpe
} }
qlemuprng.outgoingRandNums <- qpe
time.Sleep(5 * time.Second) time.Sleep(5 * time.Second)
} }
} }
......
...@@ -11,7 +11,8 @@ type QuantumLayerBulkKey struct { ...@@ -11,7 +11,8 @@ type QuantumLayerBulkKey struct {
} }
type QuantumLayer interface { type QuantumLayer interface {
PowerOn(...string) // switch on the quantum layer element Configure(...string) // configure the interface, e.g., used IP/Port config if emulated
PowerOn() // switch on the quantum layer element
PowerOff() // switch off the quantum layer element PowerOff() // switch off the quantum layer element
AddPeer() // Adds a Quantum Layer Peer to the peer list AddPeer() // Adds a Quantum Layer Peer to the peer list
RemovePeer() // Remmoves a Quantum Layer Peer to the peer list RemovePeer() // Remmoves a Quantum Layer Peer to the peer list
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment