93 lines
1.8 KiB
Go
93 lines
1.8 KiB
Go
package vm
|
|
|
|
import (
|
|
"NanoKVM-Server/proto"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
const (
|
|
AvahiDaemonPid = "/run/avahi-daemon/pid"
|
|
AvahiDaemonScript = "/etc/init.d/S50avahi-daemon"
|
|
AvahiDaemonBackupScript = "/kvmapp/system/init.d/S50avahi-daemon"
|
|
)
|
|
|
|
func (s *Service) GetMdnsState(c *gin.Context) {
|
|
var rsp proto.Response
|
|
|
|
pid := getAvahiDaemonPid()
|
|
|
|
rsp.OkRspWithData(c, &proto.GetMdnsStateRsp{
|
|
Enabled: pid != "",
|
|
})
|
|
}
|
|
|
|
func (s *Service) EnableMdns(c *gin.Context) {
|
|
var rsp proto.Response
|
|
|
|
pid := getAvahiDaemonPid()
|
|
if pid != "" {
|
|
rsp.OkRsp(c)
|
|
return
|
|
}
|
|
|
|
commands := []string{
|
|
fmt.Sprintf("cp -f %s %s", AvahiDaemonBackupScript, AvahiDaemonScript),
|
|
fmt.Sprintf("%s start", AvahiDaemonScript),
|
|
}
|
|
|
|
command := strings.Join(commands, " && ")
|
|
err := exec.Command("sh", "-c", command).Run()
|
|
if err != nil {
|
|
log.Errorf("failed to start avahi-daemon: %s", err)
|
|
rsp.ErrRsp(c, -1, "failed to enable mdns")
|
|
return
|
|
}
|
|
|
|
rsp.OkRsp(c)
|
|
log.Debugf("avahi-daemon started")
|
|
}
|
|
|
|
func (s *Service) DisableMdns(c *gin.Context) {
|
|
var rsp proto.Response
|
|
|
|
pid := getAvahiDaemonPid()
|
|
if pid == "" {
|
|
rsp.OkRsp(c)
|
|
return
|
|
}
|
|
|
|
command := fmt.Sprintf("kill -9 %s", pid)
|
|
err := exec.Command("sh", "-c", command).Run()
|
|
if err != nil {
|
|
log.Errorf("failed to stop avahi-daemon: %s", err)
|
|
rsp.ErrRsp(c, -1, "failed to disable mdns")
|
|
return
|
|
}
|
|
|
|
_ = os.Remove(AvahiDaemonPid)
|
|
_ = os.Remove(AvahiDaemonScript)
|
|
|
|
rsp.OkRsp(c)
|
|
log.Debugf("avahi-daemon stopped")
|
|
}
|
|
|
|
func getAvahiDaemonPid() string {
|
|
if _, err := os.Stat(AvahiDaemonPid); err != nil {
|
|
return ""
|
|
}
|
|
|
|
content, err := os.ReadFile(AvahiDaemonPid)
|
|
if err != nil {
|
|
log.Errorf("failed to read mdns pid: %s", err)
|
|
return ""
|
|
}
|
|
|
|
return strings.ReplaceAll(string(content), "\n", "")
|
|
}
|