Skip to content

Commit

Permalink
Move the tshark fields extracting code to pkg too
Browse files Browse the repository at this point in the history
  • Loading branch information
gcla committed Jul 9, 2022
1 parent 3b8f1ca commit 8add110
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 34 deletions.
3 changes: 2 additions & 1 deletion cmd/termshark/termshark.go
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/gcla/termshark/v2/pkg/capinfo"
"github.com/gcla/termshark/v2/pkg/confwatcher"
"github.com/gcla/termshark/v2/pkg/convs"
"github.com/gcla/termshark/v2/pkg/fields"
"github.com/gcla/termshark/v2/pkg/pcap"
"github.com/gcla/termshark/v2/pkg/shark"
"github.com/gcla/termshark/v2/pkg/streams"
Expand Down Expand Up @@ -611,7 +612,7 @@ func cmain() int {
// If the last tshark we used isn't the same as the current one, then remove the cached fields
// data structure so it can be regenerated.
if tsharkBin != profiles.ConfString("main.last-used-tshark", "") {
termshark.DeleteCachedFields()
fields.DeleteCachedFields()
}

// Write out the last-used tshark path. We do this to make the above fields cache be consistent
Expand Down
15 changes: 8 additions & 7 deletions fields.go → pkg/fields/fields.go
Expand Up @@ -2,7 +2,7 @@
// code is governed by the MIT license that can be found in the LICENSE
// file.

package termshark
package fields

import (
"bufio"
Expand All @@ -13,6 +13,7 @@ import (
"strings"
"sync"

"github.com/gcla/termshark/v2"
log "github.com/sirupsen/logrus"
)

Expand Down Expand Up @@ -160,25 +161,25 @@ type IPrefixCompleter interface {
Completions(prefix string, cb IPrefixCompleterCallback)
}

func NewFields() *TSharkFields {
func New() *TSharkFields {
return &TSharkFields{}
}

func DeleteCachedFields() error {
return os.Remove(CacheFile("tsharkfieldsv3.gob.gz"))
return os.Remove(termshark.CacheFile("tsharkfieldsv3.gob.gz"))
}

// Can be run asynchronously.
// This ought to use interfaces to make it testable.
func (w *TSharkFields) Init() error {
newer, err := FileNewerThan(CacheFile("tsharkfieldsv3.gob.gz"), DirOfPathCommandUnsafe(TSharkBin()))
newer, err := termshark.FileNewerThan(termshark.CacheFile("tsharkfieldsv3.gob.gz"), termshark.DirOfPathCommandUnsafe(termshark.TSharkBin()))
if err == nil && newer {
f := &FieldsAndProtos{
Fields: make(map[string]interface{}),
Protocols: make(map[string]struct{}),
}

err = ReadGob(CacheFile("tsharkfieldsv3.gob.gz"), f)
err = termshark.ReadGob(termshark.CacheFile("tsharkfieldsv3.gob.gz"), f)
if err == nil {
w.ser = f
log.Infof("Read cached tshark fields.")
Expand All @@ -193,7 +194,7 @@ func (w *TSharkFields) Init() error {
return err
}

err = WriteGob(CacheFile("tsharkfieldsv3.gob.gz"), w.ser)
err = termshark.WriteGob(termshark.CacheFile("tsharkfieldsv3.gob.gz"), w.ser)
if err != nil {
return err
}
Expand All @@ -202,7 +203,7 @@ func (w *TSharkFields) Init() error {
}

func (w *TSharkFields) InitNoCache() error {
cmd := exec.Command(TSharkBin(), []string{"-G", "fields"}...)
cmd := exec.Command(termshark.TSharkBin(), []string{"-G", "fields"}...)

out, err := cmd.StdoutPipe()
if err != nil {
Expand Down
4 changes: 2 additions & 2 deletions fields_test.go → pkg/fields/fields_test.go
@@ -1,7 +1,7 @@
// Copyright 2019-2022 Graham Clark. All rights reserved. Use of this source code is governed by the MIT license
// that can be found in the LICENSE file.

package termshark
package fields

import (
"testing"
Expand All @@ -13,7 +13,7 @@ import (

func TestFields1(t *testing.T) {

fields := NewFields()
fields := New()
err := fields.InitNoCache()
assert.NoError(t, err)

Expand Down
23 changes: 12 additions & 11 deletions ui/ui.go
Expand Up @@ -47,11 +47,12 @@ import (
"github.com/gcla/gowid/widgets/vpadding"
"github.com/gcla/termshark/v2"
"github.com/gcla/termshark/v2/configs/profiles"
"github.com/gcla/termshark/v2/pkg/fields"
"github.com/gcla/termshark/v2/pkg/pcap"
"github.com/gcla/termshark/v2/pkg/pdmltree"
"github.com/gcla/termshark/v2/pkg/psmlmodel"
"github.com/gcla/termshark/v2/pkg/system"
"github.com/gcla/termshark/v2/pkg/shark"
"github.com/gcla/termshark/v2/pkg/system"
"github.com/gcla/termshark/v2/pkg/theme"
"github.com/gcla/termshark/v2/ui/menuutil"
"github.com/gcla/termshark/v2/ui/tableutil"
Expand Down Expand Up @@ -239,7 +240,7 @@ var lastJumpPos int
var NoGlobalJump termshark.GlobalJumpPos // leave as default, like a placeholder

var Loader *pcap.PacketLoader
var FieldCompleter *termshark.TSharkFields // share this - safe once constructed
var FieldCompleter *fields.TSharkFields // share this - safe once constructed

var WriteToSelected bool // true if the user provided the -w flag
var WriteToDeleted bool // true if the user deleted the temporary pcap before quitting
Expand Down Expand Up @@ -366,11 +367,11 @@ func makePdmlFilterMenu(filter string, val string) *menu.Widget {
// are needed.
if ok {
switch field.Type {
case termshark.FT_STRING:
case fields.FT_STRING:
needQuotes = true
case termshark.FT_STRINGZ:
case fields.FT_STRINGZ:
needQuotes = true
case termshark.FT_STRINGZPAD:
case fields.FT_STRINGZPAD:
needQuotes = true
}
}
Expand Down Expand Up @@ -3135,10 +3136,10 @@ func UpdateRecentMenu(app gowid.IApp) {

type savedCompleterCallback struct {
prefix string
comp termshark.IPrefixCompleterCallback
comp fields.IPrefixCompleterCallback
}

var _ termshark.IPrefixCompleterCallback = (*savedCompleterCallback)(nil)
var _ fields.IPrefixCompleterCallback = (*savedCompleterCallback)(nil)

func (s *savedCompleterCallback) Call(orig []string) {
if s.prefix == "" {
Expand All @@ -3153,12 +3154,12 @@ func (s *savedCompleterCallback) Call(orig []string) {
}

type savedCompleter struct {
def termshark.IPrefixCompleter
def fields.IPrefixCompleter
}

var _ termshark.IPrefixCompleter = (*savedCompleter)(nil)
var _ fields.IPrefixCompleter = (*savedCompleter)(nil)

func (s savedCompleter) Completions(prefix string, cb termshark.IPrefixCompleterCallback) {
func (s savedCompleter) Completions(prefix string, cb fields.IPrefixCompleterCallback) {
ncomp := &savedCompleterCallback{
prefix: prefix,
comp: cb,
Expand Down Expand Up @@ -3783,7 +3784,7 @@ func Build(tty string) (*gowid.App, error) {
)

// For completing filter expressions
FieldCompleter = termshark.NewFields()
FieldCompleter = fields.New()
FieldCompleter.Init()

FilterWidget = filter.New("filter", filter.Options{
Expand Down
15 changes: 8 additions & 7 deletions widgets/filter/filter.go
Expand Up @@ -33,6 +33,7 @@ import (
"github.com/gcla/gowid/widgets/styled"
"github.com/gcla/gowid/widgets/text"
"github.com/gcla/termshark/v2"
"github.com/gcla/termshark/v2/pkg/fields"
"github.com/gcla/termshark/v2/widgets/appkeys"
"github.com/gdamore/tcell/v2"
)
Expand Down Expand Up @@ -64,10 +65,10 @@ type Widget struct {
edCtx context.Context
edCancelFn context.CancelFunc
edCtxLock sync.Mutex
fields termshark.IPrefixCompleter // provides completions, given a prefix
completionsList *list.Widget // the filter widget replaces the list walker when new completions are generated
completionsActivator *activatorWidget // used to disable focus going to drop down
completions []string // the current set of completions, used when rendering
fields fields.IPrefixCompleter // provides completions, given a prefix
completionsList *list.Widget // the filter widget replaces the list walker when new completions are generated
completionsActivator *activatorWidget // used to disable focus going to drop down
completions []string // the current set of completions, used when rendering
runthisfilterchan chan *filtStruct
filterchangedchan chan *filtStruct
quitchan chan struct{}
Expand Down Expand Up @@ -95,7 +96,7 @@ const (
)

type Options struct {
Completer termshark.IPrefixCompleter
Completer fields.IPrefixCompleter
MenuOpener menu.IOpener
Position Pos
Validator IValidator
Expand Down Expand Up @@ -451,13 +452,13 @@ type fnCallback struct {
fn func([]string, gowid.IApp)
}

var _ termshark.IPrefixCompleterCallback = fnCallback{}
var _ fields.IPrefixCompleterCallback = fnCallback{}

func (f fnCallback) Call(res []string) {
f.fn(res, f.app)
}

func makeCompletions(comp termshark.IPrefixCompleter, txt string, max int, app gowid.IApp, fn func([]string, gowid.IApp)) {
func makeCompletions(comp fields.IPrefixCompleter, txt string, max int, app gowid.IApp, fn func([]string, gowid.IApp)) {
if comp != nil {
cb := fnCallback{
app: app,
Expand Down
12 changes: 6 additions & 6 deletions widgets/search/search.go
Expand Up @@ -26,8 +26,8 @@ import (
"github.com/gcla/gowid/widgets/null"
"github.com/gcla/gowid/widgets/styled"
"github.com/gcla/gowid/widgets/text"
"github.com/gcla/termshark/v2"
"github.com/gcla/termshark/v2/configs/profiles"
"github.com/gcla/termshark/v2/pkg/fields"
"github.com/gcla/termshark/v2/ui/menuutil"
"github.com/gcla/termshark/v2/widgets/filter"
"github.com/gcla/termshark/v2/widgets/ifwidget"
Expand Down Expand Up @@ -247,7 +247,7 @@ type Widget struct {
filterHolder *holder.Widget
filt *filter.Widget
menuOpener menu.IOpener
completer termshark.IPrefixCompleter
completer fields.IPrefixCompleter
cols *columns.Widget
findBtn *disable.Widget
searchTargetBtn *button.Widget
Expand Down Expand Up @@ -338,7 +338,7 @@ func New(alg IAlgorithm,
searchPktDetails func() ICallbacks,
searchByFilter func() ICallbacks,
men menu.IOpener,
comp termshark.IPrefixCompleter,
comp fields.IPrefixCompleter,
errHandler IErrorHandler) *Widget {

res := &Widget{
Expand Down Expand Up @@ -535,8 +535,8 @@ func (w *Widget) invokeSearch(app gowid.IApp) {
w.alg.SearchPackets(searchTerm, w.currentAlg, app)
}

func (w *Widget) getCompleter() termshark.IPrefixCompleter {
var completer termshark.IPrefixCompleter
func (w *Widget) getCompleter() fields.IPrefixCompleter {
var completer fields.IPrefixCompleter
s2 := getSearchType()
switch s2 {
case "filter":
Expand All @@ -550,7 +550,7 @@ func (w *Widget) focusOnFilter(app gowid.IApp) {
w.cols.SetFocus(app, 6)
}

func (w *Widget) setFilter(validator filter.IValidator, completer termshark.IPrefixCompleter, app gowid.IApp) {
func (w *Widget) setFilter(validator filter.IValidator, completer fields.IPrefixCompleter, app gowid.IApp) {
filt := filter.New("searchfilter", filter.Options{
MenuOpener: w.menuOpener,
Completer: completer,
Expand Down

0 comments on commit 8add110

Please sign in to comment.