From 5bbdbf913be3152f60d556e4b20e1ddb2d66d0c0 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Tue, 18 May 2021 18:24:02 +0200 Subject: [PATCH] safcm: move sync.sendRecv to frontend package --- cmd/safcm/sync.go | 26 +++-------------------- cmd/safcm/sync_info.go | 2 +- cmd/safcm/sync_sync.go | 2 +- frontend/conn.go | 47 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 25 deletions(-) create mode 100644 frontend/conn.go diff --git a/cmd/safcm/sync.go b/cmd/safcm/sync.go index f1877cf..2f297c8 100644 --- a/cmd/safcm/sync.go +++ b/cmd/safcm/sync.go @@ -44,6 +44,7 @@ type Sync struct { isTTY bool + loop *frontend.Loop logFunc func(level safcm.LogLevel, escaped bool, msg string) } @@ -119,10 +120,11 @@ func MainSync(args []string) error { allHosts: allHosts, allGroups: allGroups, isTTY: isTTY, + loop: loop, } s.logFunc = func(level safcm.LogLevel, escaped bool, msg string) { - loop.Log(s, level, escaped, msg) + s.loop.Log(s, level, escaped, msg) } hosts = append(hosts, s) } @@ -319,25 +321,3 @@ func (s *Sync) logDebugf(format string, a ...interface{}) { func (s *Sync) logVerbosef(format string, a ...interface{}) { s.log(safcm.LogVerbose, false, fmt.Sprintf(format, a...)) } - -// sendRecv sends a message over conn and waits for the response. Any MsgLog -// messages received before the final (non MsgLog) response are passed to -// s.log. -func (s *Sync) sendRecv(conn *rpc.Conn, msg safcm.Msg) (safcm.Msg, error) { - err := conn.Send(msg) - if err != nil { - return nil, err - } - for { - x, err := conn.Recv() - if err != nil { - return nil, err - } - log, ok := x.(safcm.MsgLog) - if ok { - s.log(log.Level, false, log.Text) - continue - } - return x, nil - } -} diff --git a/cmd/safcm/sync_info.go b/cmd/safcm/sync_info.go index fd48006..91878e8 100644 --- a/cmd/safcm/sync_info.go +++ b/cmd/safcm/sync_info.go @@ -28,7 +28,7 @@ import ( ) func (s *Sync) hostInfo(conn *rpc.Conn) ([]string, error) { - x, err := s.sendRecv(conn, safcm.MsgInfoReq{ + x, err := s.loop.SendRecv(s, conn, safcm.MsgInfoReq{ LogLevel: s.config.LogLevel, DetectGroups: s.config.DetectGroups, }) diff --git a/cmd/safcm/sync_sync.go b/cmd/safcm/sync_sync.go index 7e4d225..bc11043 100644 --- a/cmd/safcm/sync_sync.go +++ b/cmd/safcm/sync_sync.go @@ -35,7 +35,7 @@ func (s *Sync) hostSync(conn *rpc.Conn, detectedGroups []string) error { if err != nil { return err } - x, err := s.sendRecv(conn, req) + x, err := s.loop.SendRecv(s, conn, req) if err != nil { return err } diff --git a/frontend/conn.go b/frontend/conn.go new file mode 100644 index 0000000..10f7c7b --- /dev/null +++ b/frontend/conn.go @@ -0,0 +1,47 @@ +// Frontend: Connection functions for programs using the safcm library + +// Copyright (C) 2021 Simon Ruderich +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +package frontend + +import ( + "ruderich.org/simon/safcm" + "ruderich.org/simon/safcm/rpc" +) + +// SendRecv sends a message for host over conn and waits for the response. Any +// MsgLog messages received before the final (non MsgLog) response are passed +// to l.Log. +func (l *Loop) SendRecv(host Host, conn *rpc.Conn, msg safcm.Msg) ( + safcm.Msg, error) { + + err := conn.Send(msg) + if err != nil { + return nil, err + } + for { + x, err := conn.Recv() + if err != nil { + return nil, err + } + log, ok := x.(safcm.MsgLog) + if ok { + l.Log(host, log.Level, false, log.Text) + continue + } + return x, nil + } +} -- 2.45.2