added some dhcp4 packet functions and generic byte reading functions
This commit is contained in:
15
cmd/main.go
15
cmd/main.go
@ -12,6 +12,7 @@ func main() {
|
||||
var logger *AppLogger
|
||||
var addr *net.UDPAddr
|
||||
var addr2 *net.UDPAddr
|
||||
var addr3 *net.UDPAddr
|
||||
var err error
|
||||
|
||||
// addr, err = net.ResolveUDPAddr("udp4", "0.0.0.0:10000")
|
||||
@ -27,7 +28,13 @@ func main() {
|
||||
os.Exit(-1)
|
||||
}
|
||||
|
||||
logger = NewAppLogger("client", os.Stderr, haza.LOG_ALL)
|
||||
addr3, err = net.ResolveUDPAddr("udp4", "192.168.1.189:10000")
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to resolve address - %s\n", err.Error())
|
||||
os.Exit(-1)
|
||||
}
|
||||
|
||||
logger = NewAppLogger("server", os.Stderr, haza.LOG_ALL)
|
||||
|
||||
ds, err = haza.NewDhcpServer(context.Background(), "haza-dhcpd", logger)
|
||||
if err != nil {
|
||||
@ -49,8 +56,14 @@ if err != nil {
|
||||
fmt.Printf("Failed to add listgener for %v - %s\n", addr2, err.Error())
|
||||
goto oops
|
||||
}
|
||||
err = ds.AddListener4("enp1s0", addr3)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to add listgener for %v - %s\n", addr3, err.Error())
|
||||
goto oops
|
||||
}
|
||||
|
||||
ds.StartService(nil)
|
||||
ds.StartExtService(&signal_handler{svc:ds}, nil)
|
||||
ds.WaitForTermination()
|
||||
os.Exit(0)
|
||||
|
||||
|
69
cmd/signal.go
Normal file
69
cmd/signal.go
Normal file
@ -0,0 +1,69 @@
|
||||
package main
|
||||
|
||||
import "haza"
|
||||
import "sync"
|
||||
import "os"
|
||||
import "os/signal"
|
||||
import "syscall"
|
||||
|
||||
type signal_handler struct {
|
||||
svc haza.Service
|
||||
}
|
||||
|
||||
func (sh *signal_handler) RunTask(wg *sync.WaitGroup) {
|
||||
var sighup_chan chan os.Signal
|
||||
var sigterm_chan chan os.Signal
|
||||
var sig os.Signal
|
||||
|
||||
if wg != nil {
|
||||
defer wg.Done()
|
||||
}
|
||||
|
||||
sighup_chan = make(chan os.Signal, 1)
|
||||
sigterm_chan = make(chan os.Signal, 1)
|
||||
|
||||
signal.Notify(sighup_chan, syscall.SIGHUP)
|
||||
signal.Notify(sigterm_chan, syscall.SIGTERM, os.Interrupt)
|
||||
|
||||
chan_loop:
|
||||
for {
|
||||
select {
|
||||
case <-sighup_chan:
|
||||
sh.svc.FixServices()
|
||||
|
||||
case sig = <-sigterm_chan:
|
||||
sh.svc.StopServices()
|
||||
sh.svc.WriteLog ("", haza.LOG_INFO, "Received %s signal", sig)
|
||||
break chan_loop
|
||||
}
|
||||
}
|
||||
|
||||
//signal.Reset(syscall.SIGHUP)
|
||||
//signal.Reset(syscall.SIGTERM)
|
||||
signal.Stop(sighup_chan)
|
||||
signal.Stop(sigterm_chan)
|
||||
}
|
||||
|
||||
func (sh *signal_handler) StartService(data interface{}) {
|
||||
// this isn't actually used standalone..
|
||||
// if we are to implement it, it must use the wait group for signal handler itself
|
||||
// however, this service is run through another service.
|
||||
// sh.wg.Add(1)
|
||||
// go sh.RunTask(&sh.wg)
|
||||
}
|
||||
|
||||
func (sh *signal_handler) StopServices() {
|
||||
syscall.Kill(syscall.Getpid(), syscall.SIGTERM) // TODO: find a better to terminate the signal handler...
|
||||
}
|
||||
|
||||
func (sh *signal_handler) FixServices() {
|
||||
}
|
||||
|
||||
func (sh *signal_handler) WaitForTermination() {
|
||||
// not implemented. see the comment in StartServices()
|
||||
// sh.wg.Wait()
|
||||
}
|
||||
|
||||
func (sh *signal_handler) WriteLog(id string, level haza.LogLevel, fmt string, args ...interface{}) {
|
||||
sh.svc.WriteLog(id, level, fmt, args...)
|
||||
}
|
Reference in New Issue
Block a user