Skip to content

Commit 70c08e5

Browse files
committed
Restructuring files for SOLID, pruning init
1 parent bd2a85b commit 70c08e5

File tree

7 files changed

+89
-69
lines changed

7 files changed

+89
-69
lines changed

.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"cSpell.words": [
3+
"goform"
4+
]
5+
}

drivers/common.go renamed to drivers/common/common.go

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
package drivers
1+
package common
22

33
import (
44
"fmt"
55
"log/slog"
6-
"net/http"
7-
"time"
86

97
"github.com/brokenCursor/usb-modem-cli/config"
108
"github.com/brokenCursor/usb-modem-cli/logging"
9+
"github.com/spf13/viper"
1110
)
1211

1312
// Modem interfaces
@@ -48,41 +47,37 @@ type (
4847
)
4948

5049
var (
51-
drivers map[string]func(host string) BaseModem = map[string]func(host string) BaseModem{}
52-
httpClient *http.Client
53-
54-
logger *slog.Logger
55-
dLogger *slog.Logger
50+
drivers map[string]func(host string) BaseModem = map[string]func(host string) BaseModem{}
51+
driverConfig *viper.Viper
52+
logger *slog.Logger
5653
)
5754

5855
func init() {
5956
logger = logging.GetGeneralLogger()
60-
// TODO: fix per-driver logging while keeping the dependency three sane-ish
61-
dLogger = logging.GetDriverLogger("common")
62-
63-
driverConfig := config.Sub("driver")
64-
// logger.Debug("ttl", driverConfig.GetDuration("cmd_ttl")*time.Second)
65-
httpClient = &http.Client{Timeout: driverConfig.GetDuration("cmd_ttl") * time.Second}
57+
driverConfig = config.Sub("driver")
6658
}
6759

68-
func isRegistered(name string) bool {
60+
func IsRegistered(name string) bool {
6961
// Check if driver has already been registered
7062
_, ok := drivers[name]
7163
return ok
7264
}
7365

74-
func registerDriver(name string, generator func(ip string) BaseModem) {
66+
func RegisterDriver(name string, generator func(ip string) BaseModem) (*viper.Viper, *slog.Logger) {
7567
// Check if driver has already been registered
76-
if isRegistered(name) {
68+
if IsRegistered(name) {
7769
panic(fmt.Sprintf("attempted to register %s twice", name))
7870
}
7971

8072
// Register the driver
8173
drivers[name] = generator
74+
logger.With("name", name).Debug("driver registered")
75+
76+
return driverConfig, logging.GetDriverLogger(name)
8277
}
8378

8479
func GetModemDriver(model string, host string) (BaseModem, error) {
85-
if !isRegistered(model) {
80+
if !IsRegistered(model) {
8681
return nil, ErrUnknownModel
8782
}
8883

drivers/errors.go renamed to drivers/common/errors.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package drivers
1+
package common
22

33
import (
44
"errors"

drivers/dummy.go renamed to drivers/dummy/main.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
package drivers
1+
package dummy
2+
3+
import (
4+
"log/slog"
5+
6+
"github.com/brokenCursor/usb-modem-cli/drivers/common"
7+
)
28

39
// DO NOT USE DIRECTLY
410
type (
@@ -7,12 +13,16 @@ type (
713
}
814
)
915

16+
var (
17+
logger *slog.Logger
18+
)
19+
1020
func init() {
11-
registerDriver("dummy", newDummy)
12-
dLogger.With("driver", "dummy").Debug("dummy driver registered")
21+
_, logger = common.RegisterDriver("dummy", newDummy)
1322
}
1423

15-
func newDummy(host string) BaseModem {
24+
func newDummy(host string) common.BaseModem {
25+
logger.With("driver", "dummy").Debug("dummy driver registered")
1626
return &dummy{host: host}
1727
}
1828

drivers/8810ft.go renamed to drivers/zte8810ft/main.go

Lines changed: 49 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
1-
package drivers
1+
package zte8810ft
22

33
import (
44
"encoding/json"
55
"fmt"
66
"io"
7+
"log/slog"
78
"net/http"
89
"net/url"
910
"strconv"
1011
"strings"
1112
"time"
1213

14+
"github.com/brokenCursor/usb-modem-cli/drivers/common"
15+
"github.com/spf13/viper"
1316
"github.com/warthog618/sms/encoding/gsm7"
1417
)
1518

@@ -29,12 +32,22 @@ type (
2932
}
3033
)
3134

35+
var (
36+
httpClient *http.Client
37+
logger *slog.Logger
38+
config *viper.Viper
39+
)
40+
3241
func init() {
33-
registerDriver("ZTE 8810FT", newZTE8810FT)
34-
// dLogger.Debug("driver registered")
42+
fmt.Println("here")
43+
config, logger = common.RegisterDriver("ZTE 8810FT", newZTE8810FT)
3544
}
3645

37-
func newZTE8810FT(host string) BaseModem {
46+
func newZTE8810FT(host string) common.BaseModem {
47+
if httpClient == nil {
48+
httpClient = &http.Client{Timeout: config.GetDuration("cmd_ttl") * time.Second}
49+
}
50+
3851
return &zte8810ft{host: host, basePath: "/goform/goform_set_cmd_process"}
3952
}
4053

@@ -53,8 +66,8 @@ func (m *zte8810ft) getNewRequest(method string, url *url.URL, headers http.Head
5366
}
5467
}
5568

56-
func (m *zte8810ft) SetHost(ip string) error {
57-
m.host = ip
69+
func (m *zte8810ft) SetHost(host string) error {
70+
m.host = host
5871
return nil
5972
}
6073

@@ -75,32 +88,32 @@ func (m *zte8810ft) ConnectCell() error {
7588
u.RawQuery = query.Encode()
7689
request := m.getNewRequest("GET", u, http.Header{})
7790

78-
dLogger.With("driver", "8810FT").Debug("request", request.URL.String(), nil)
91+
logger.Debug("request", request.URL.String(), nil)
7992

8093
resp, err := httpClient.Do(request)
8194

8295
// Process errors
8396
switch {
8497
case err != nil:
85-
return ActionError{Action: "connect", Err: err}
98+
return common.ActionError{Action: "connect", Err: err}
8699
case resp.StatusCode != 200:
87-
return ActionError{Action: "connect", Err: fmt.Errorf("response status %d", resp.StatusCode)}
100+
return common.ActionError{Action: "connect", Err: fmt.Errorf("response status %d", resp.StatusCode)}
88101
}
89102

90103
// Read the response
91104
defer resp.Body.Close()
92105
body, err := io.ReadAll(resp.Body)
93106
if err != nil {
94-
return ErrUnknown
107+
return common.ErrUnknown
95108
}
96109

97110
result := new(result)
98111
if err := json.Unmarshal(body, result); err != nil {
99-
return ActionError{Action: "connect", Err: UnmarshalError{RawData: &body, Err: err}}
112+
return common.ActionError{Action: "connect", Err: common.UnmarshalError{RawData: &body, Err: err}}
100113
}
101114

102115
if result.Result != "success" {
103-
return ActionError{Action: "connect", Err: fmt.Errorf("result: %s", result.Result)}
116+
return common.ActionError{Action: "connect", Err: fmt.Errorf("result: %s", result.Result)}
104117
}
105118

106119
return nil
@@ -115,37 +128,37 @@ func (m *zte8810ft) DisconnectCell() error {
115128
u.RawQuery = query.Encode()
116129
request := m.getNewRequest("GET", u, http.Header{})
117130

118-
dLogger.With("driver", "8810FT").Debug("request", request.URL.String(), nil)
131+
logger.Debug("request", request.URL.String(), nil)
119132

120133
resp, err := httpClient.Do(request)
121134
// Process errors
122135
switch {
123136
case err != nil:
124-
return ActionError{Action: "disconnect", Err: err}
137+
return common.ActionError{Action: "disconnect", Err: err}
125138
case resp.StatusCode != 200:
126-
return ActionError{Action: "disconnect", Err: fmt.Errorf("response status %d", resp.StatusCode)}
139+
return common.ActionError{Action: "disconnect", Err: fmt.Errorf("response status %d", resp.StatusCode)}
127140
}
128141

129142
// Read the response
130143
defer resp.Body.Close()
131144
body, err := io.ReadAll(resp.Body)
132145
if err != nil {
133-
return ErrUnknown
146+
return common.ErrUnknown
134147
}
135148

136149
result := new(result)
137150
if err := json.Unmarshal(body, result); err != nil {
138-
return ActionError{Action: "disconnect", Err: UnmarshalError{RawData: &body, Err: err}}
151+
return common.ActionError{Action: "disconnect", Err: common.UnmarshalError{RawData: &body, Err: err}}
139152
}
140153

141154
if result.Result != "success" {
142-
return ActionError{Action: "disconnect", Err: fmt.Errorf("result: %s", result.Result)}
155+
return common.ActionError{Action: "disconnect", Err: fmt.Errorf("result: %s", result.Result)}
143156
}
144157

145158
return nil
146159
}
147160

148-
func (m *zte8810ft) GetCellConnStatus() (*LinkStatus, error) {
161+
func (m *zte8810ft) GetCellConnStatus() (*common.LinkStatus, error) {
149162
// Build URL
150163
u := m.getBaseURL("/goform/goform_get_cmd_process")
151164
query := u.Query()
@@ -159,43 +172,43 @@ func (m *zte8810ft) GetCellConnStatus() (*LinkStatus, error) {
159172

160173
request := m.getNewRequest("GET", u, http.Header{})
161174

162-
dLogger.With("driver", "8810FT").Debug("request", request.URL.String(), nil)
175+
logger.Debug("request", request.URL.String(), nil)
163176

164177
resp, err := httpClient.Do(request)
165178

166179
// Process errors
167180
switch {
168181
case err != nil:
169-
return nil, ActionError{Action: "status", Err: err}
182+
return nil, common.ActionError{Action: "status", Err: err}
170183
case resp.StatusCode != 200:
171-
return nil, ActionError{Action: "status", Err: fmt.Errorf("response status %d", resp.StatusCode)}
184+
return nil, common.ActionError{Action: "status", Err: fmt.Errorf("response status %d", resp.StatusCode)}
172185
}
173186

174187
// Read the response
175188
defer resp.Body.Close()
176189
body, err := io.ReadAll(resp.Body)
177190
if err != nil {
178-
return nil, ErrUnknown
191+
return nil, common.ErrUnknown
179192
}
180193

181194
result := new(pppConnected)
182195
if err := json.Unmarshal(body, result); err != nil {
183-
return nil, ActionError{Action: "status", Err: UnmarshalError{RawData: &body, Err: err}}
196+
return nil, common.ActionError{Action: "status", Err: common.UnmarshalError{RawData: &body, Err: err}}
184197
}
185198

186199
// Process the result
187200
switch result.Connected {
188201
case "ppp_connected":
189-
return &LinkStatus{State: 3}, nil
202+
return &common.LinkStatus{State: 3}, nil
190203
case "ppp_connecting":
191-
return &LinkStatus{State: 2}, nil
204+
return &common.LinkStatus{State: 2}, nil
192205
case "ppp_disconnecting":
193-
return &LinkStatus{State: 1}, nil
206+
return &common.LinkStatus{State: 1}, nil
194207
case "ppp_disconnected":
195-
return &LinkStatus{State: 0}, nil
208+
return &common.LinkStatus{State: 0}, nil
196209
default:
197210
// Unknown link status occurred
198-
return nil, ErrUnknown
211+
return nil, common.ErrUnknown
199212
}
200213
}
201214

@@ -209,7 +222,7 @@ func (m *zte8810ft) SendSMS(phone string, message string) error {
209222

210223
}
211224
if err != nil {
212-
return ActionError{"sms send", err}
225+
return common.ActionError{"sms send", err}
213226
}
214227

215228
// Format into proprietary two byte format: 1122 (0074)
@@ -244,32 +257,32 @@ func (m *zte8810ft) SendSMS(phone string, message string) error {
244257
stringReadCloser := io.NopCloser(stringReader)
245258
request.Body = stringReadCloser
246259

247-
dLogger.With("driver", "8810FT").Debug("url", request.URL.String(), "body", encoded, nil)
260+
logger.Debug("url", request.URL.String(), "body", encoded, nil)
248261

249262
resp, err := httpClient.Do(request)
250263

251264
// Process errors
252265
switch {
253266
case err != nil:
254-
return ActionError{Action: "sms send", Err: err}
267+
return common.ActionError{Action: "sms send", Err: err}
255268
case resp.StatusCode != 200:
256-
return ActionError{Action: "sms send", Err: fmt.Errorf("response status %d", resp.StatusCode)}
269+
return common.ActionError{Action: "sms send", Err: fmt.Errorf("response status %d", resp.StatusCode)}
257270
}
258271

259272
// Read the response
260273
defer resp.Body.Close()
261274
body, err := io.ReadAll(resp.Body)
262275
if err != nil {
263-
return ErrUnknown
276+
return common.ErrUnknown
264277
}
265278

266279
result := new(result)
267280
if err := json.Unmarshal(body, result); err != nil {
268-
return ActionError{Action: "sms send", Err: UnmarshalError{RawData: &body, Err: err}}
281+
return common.ActionError{Action: "sms send", Err: common.UnmarshalError{RawData: &body, Err: err}}
269282
}
270283

271284
if result.Result != "success" {
272-
return ActionError{Action: "sms send", Err: fmt.Errorf("result: %s", result.Result)}
285+
return common.ActionError{Action: "sms send", Err: fmt.Errorf("result: %s", result.Result)}
273286
}
274287

275288
return nil

errors.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package main
33
import (
44
"fmt"
55

6-
"github.com/brokenCursor/usb-modem-cli/drivers"
6+
"github.com/brokenCursor/usb-modem-cli/drivers/common"
77
)
88

99
type DriverSupportError struct {
10-
Driver drivers.BaseModem
10+
Driver common.BaseModem
1111
Function string
1212
}
1313

0 commit comments

Comments
 (0)