Skip to content
Snippets Groups Projects
Commit 2cd943a8 authored by Malte Bauch's avatar Malte Bauch
Browse files

Change PowerOn logic

parent 42b50d01
No related branches found
No related tags found
1 merge request!9First working draft version
...@@ -80,66 +80,69 @@ func (qlemuprng *QuantumlayerEmuPRNG) PowerOn() { ...@@ -80,66 +80,69 @@ func (qlemuprng *QuantumlayerEmuPRNG) PowerOn() {
log.Printf("Sorry, the quantum layer is not configured for action. You've missed Configure()") log.Printf("Sorry, the quantum layer is not configured for action. You've missed Configure()")
return return
} }
qlemuprng.poweron = false //qlemuprng.poweron = false
log.Println("QuantumlayerEmuPRNG is powering on...charging.") log.Println("QuantumlayerEmuPRNG is powering on...charging.")
// serve UDP incoming // serve UDP incoming
go func() { if qlemuprng.udpSrvConn == nil {
// Get UDP server part going... go func() {
log.Printf("localQLAddress is %s", qlemuprng.localQLAddress) // Get UDP server part going...
log.Printf("localQLAddress is %s", qlemuprng.localQLAddress)
// This reads random numbers from other Quantum end
udpSrvPort, err := net.ResolveUDPAddr("udp", qlemuprng.localQLAddress)
if err != nil {
log.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
return
}
qlemuprng.udpSrvConn, err = net.ListenUDP("udp", udpSrvPort)
if err != nil {
log.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
return
}
defer qlemuprng.udpSrvConn.Close()
// Retrieve local UDP address and store it for further actions.
qlemuprng.qlLocalPort = qlemuprng.udpSrvConn.LocalAddr().(*net.UDPAddr)
// Ready, set, go! // This reads random numbers from other Quantum end
qlemuprng.poweron = true udpSrvPort, err := net.ResolveUDPAddr("udp", qlemuprng.localQLAddress)
if err != nil {
log.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
return
}
log.Printf("QuantumlayerEmuPRNG: started server, waiting for incoming rands on port %s \n", qlemuprng.udpSrvConn.LocalAddr().(*net.UDPAddr).String()) qlemuprng.udpSrvConn, err = net.ListenUDP("udp", udpSrvPort)
inBuffer := make([]byte, 1500)
for {
// Buffer for reading from "Quantum link"
n, addr, err := qlemuprng.udpSrvConn.ReadFromUDP(inBuffer)
if err != nil { if err != nil {
log.Printf("QuantumlayerEmuPRNG: Could not read from UDP: %s", err) log.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
} else { return
log.Printf("QuantumlayerEmuPRNG: read %d bytes from %s\n", n, addr) }
defer qlemuprng.udpSrvConn.Close()
// Check if sender of datagram is qlPeer
// Warning this is not checking the validity of the sender, i.e., spoofing is possible // Retrieve local UDP address and store it for further actions.
if addr.String() == qlemuprng.qlPeer { qlemuprng.qlLocalPort = qlemuprng.udpSrvConn.LocalAddr().(*net.UDPAddr)
log.Printf("QuantumlayerEmuPRNG: Peer %s listed", addr)
//dumb the received data into the channel and carry on log.Printf("QuantumlayerEmuPRNG: started server, waiting for incoming rands on port %s \n", qlemuprng.udpSrvConn.LocalAddr().(*net.UDPAddr).String())
// TODO/XXX: no vetting for anything inBuffer := make([]byte, 1500)
// Unmarshall out of JSON for {
var inQBuffer QuantumPayloadElement // Buffer for reading from "Quantum link"
unmarshallErr := json.Unmarshal(inBuffer[0:n], &inQBuffer) n, addr, err := qlemuprng.udpSrvConn.ReadFromUDP(inBuffer)
if unmarshallErr == nil { if err != nil {
qlemuprng.incomingRandNums <- inQBuffer log.Printf("QuantumlayerEmuPRNG: Could not read from UDP: %s", err)
}
} else { } else {
log.Printf("QuantumlayerEmuPRNG: Peer %s NOT listed", addr) log.Printf("QuantumlayerEmuPRNG: read %d bytes from %s\n", n, addr)
// Check if sender of datagram is qlPeer
// Warning this is not checking the validity of the sender, i.e., spoofing is possible
if addr.String() == qlemuprng.qlPeer {
log.Printf("QuantumlayerEmuPRNG: Peer %s listed", addr)
//dumb the received data into the channel and carry on
// TODO/XXX: no vetting for anything
// Unmarshall out of JSON
var inQBuffer QuantumPayloadElement
unmarshallErr := json.Unmarshal(inBuffer[0:n], &inQBuffer)
if unmarshallErr == nil {
qlemuprng.incomingRandNums <- inQBuffer
}
} else {
log.Printf("QuantumlayerEmuPRNG: Peer %s NOT listed", addr)
}
} }
} }
} }()
}() }
// Wait for listening UDP socket in the above go-routine to get ready // Wait for listening UDP socket in the above go-routine to get ready
for qlemuprng.poweron != true { for qlemuprng.udpSrvConn == nil {
} }
// Ready, set, go!
qlemuprng.poweron = true
log.Println("QuantumlayerEmuPRNG is charged and powered on.") log.Println("QuantumlayerEmuPRNG is charged and powered on.")
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment