Skip to content

Commit b6c9d41

Browse files
authored
Merge pull request #9 from keyvchan/generic
refactor: message passing
2 parents 0b80ffe + ab57598 commit b6c9d41

File tree

17 files changed

+351
-236
lines changed

17 files changed

+351
-236
lines changed

client/client.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ package client
33
import (
44
"log"
55

6-
"github.com/keyvchan/NetAssist/internal"
6+
"github.com/keyvchan/NetAssist/pkg/flags"
7+
"github.com/keyvchan/NetAssist/pkg/utils"
78
"github.com/keyvchan/NetAssist/protocol"
89
)
910

11+
// Req is the entry point for the client
1012
func Req() {
11-
types := internal.GetArg(2)
13+
types := flags.GetArg(2)
1214
log.Println("Req:", types)
1315
switch types {
1416
case "tcp":
@@ -20,9 +22,9 @@ func Req() {
2022
case "unixgram":
2123
protocol.UnixgramClient()
2224
case "unixpacket":
23-
internal.Unimplemented("unixpacket")
25+
utils.Unimplemented("unixpacket")
2426
case "ip":
25-
internal.Unimplemented("ip")
27+
utils.Unimplemented("ip")
2628
default:
2729
log.Fatal("unknown protocol", types)
2830
}

internal/read.go

-94
This file was deleted.

internal/utils.go

-9
This file was deleted.

internal/write.go

-34
This file was deleted.

main.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import (
44
"log"
55

66
"github.com/keyvchan/NetAssist/client"
7-
"github.com/keyvchan/NetAssist/internal"
7+
"github.com/keyvchan/NetAssist/pkg/flags"
88
"github.com/keyvchan/NetAssist/server"
99
)
1010

1111
func main() {
12-
internal.SetArgs()
13-
types := internal.GetArg(1)
12+
flags.SetArgs()
13+
types := flags.GetArg(1)
1414
switch types {
1515
case "server":
1616
server.Serve()

pkg/connection/file.go

+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package connection
2+
3+
import (
4+
"bufio"
5+
"bytes"
6+
"encoding/hex"
7+
"errors"
8+
"fmt"
9+
"log"
10+
"os"
11+
12+
"github.com/keyvchan/NetAssist/pkg/flags"
13+
"github.com/keyvchan/NetAssist/pkg/message"
14+
)
15+
16+
// File represents a abstraced file connection.
17+
type File struct {
18+
Path string
19+
File *os.File
20+
}
21+
22+
// pre-initialize the file connection
23+
var Stdin = File{
24+
Path: "/dev/stdin",
25+
File: os.Stdin,
26+
}
27+
28+
var Stdout = File{
29+
Path: "/dev/stdout",
30+
File: os.Stdout,
31+
}
32+
33+
// implements ReadMessage
34+
func (f File) ReadMessage() message.Message {
35+
switch f.Path {
36+
case "/dev/stdin":
37+
return ReadStdin(f.File)
38+
39+
default:
40+
return message.Message{}
41+
}
42+
}
43+
44+
func ReadStdin(stdin *os.File) message.Message {
45+
input_binary := flags.GetArg(4)
46+
scanner := bufio.NewScanner(stdin)
47+
if scanner.Scan() {
48+
49+
buf := []byte{}
50+
if input_binary == "--binary" {
51+
byte_slices := bytes.Split(scanner.Bytes(), []byte(" "))
52+
for _, byte_slice := range byte_slices {
53+
new_byte := make([]byte, 1024)
54+
n, err := hex.Decode(new_byte, byte_slice)
55+
if err != nil {
56+
// hex parse error, ignore this byte
57+
log.Println(err)
58+
continue
59+
}
60+
buf = append(buf, new_byte[:n]...)
61+
}
62+
63+
} else {
64+
buf = scanner.Bytes()
65+
}
66+
// split by space
67+
68+
return message.Message{
69+
Content: buf,
70+
Addr: nil,
71+
}
72+
} else {
73+
log.Fatal(errors.New("failed to read from stdin"))
74+
}
75+
return message.Message{}
76+
}
77+
78+
func (f File) WriteMessage(msg message.Message) {
79+
switch f.Path {
80+
case "/dev/stdout":
81+
WriteStdout(f.File, msg)
82+
default:
83+
return
84+
}
85+
}
86+
87+
func WriteStdout(writter interface{}, message message.Message) {
88+
89+
// write to stdout
90+
input_binary := flags.GetArg(4)
91+
fmt.Println(message.Addr)
92+
93+
if input_binary == "--binary" {
94+
for i := 0; i < len(message.Content); i++ {
95+
fmt.Printf("%02x ", message.Content[i])
96+
}
97+
fmt.Print("\n")
98+
} else {
99+
fmt.Println(string(message.Content))
100+
}
101+
}

pkg/connection/packet.go

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package connection
2+
3+
import (
4+
"errors"
5+
"log"
6+
"net"
7+
8+
"github.com/keyvchan/NetAssist/pkg/message"
9+
)
10+
11+
type Packet struct {
12+
Type string
13+
net.PacketConn
14+
}
15+
16+
func (s Packet) ReadMessage() message.Message {
17+
return ReadPacketConn(s.PacketConn)
18+
}
19+
20+
func ReadPacketConn(reader net.PacketConn) message.Message {
21+
buf := make([]byte, 1024)
22+
n, addr, err := reader.ReadFrom(buf)
23+
if err != nil {
24+
log.Fatal(errors.New("error reading from packet"))
25+
}
26+
return message.Message{
27+
Content: buf[:n],
28+
Addr: addr,
29+
}
30+
31+
}
32+
33+
// implements WriteMessage
34+
func (s Packet) WriteMessage(msg message.Message) {
35+
WritePacketConn(s.PacketConn, msg)
36+
}
37+
38+
func WritePacketConn(conn net.PacketConn, message message.Message) {
39+
_, err := conn.WriteTo(message.Content, message.Addr)
40+
if err != nil {
41+
log.Fatal(err)
42+
}
43+
}

pkg/connection/stream.go

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package connection
2+
3+
import (
4+
"errors"
5+
"io"
6+
"log"
7+
"net"
8+
9+
"github.com/keyvchan/NetAssist/pkg/message"
10+
)
11+
12+
type Stream struct {
13+
Type string
14+
net.Conn
15+
}
16+
17+
// implements ReadMessage for both type
18+
func (s Stream) ReadMessage() message.Message {
19+
return ReadConn(s.Conn)
20+
}
21+
22+
var ClosedConn = new(chan net.Conn)
23+
24+
func ReadConn(conn interface{}) message.Message {
25+
// type checking
26+
connn, ok := conn.(net.Conn)
27+
if !ok {
28+
log.Fatal("Wrong type")
29+
}
30+
buf := make([]byte, 1024)
31+
// input_binary := GetArg(4)
32+
n, err := connn.Read(buf)
33+
if errors.Is(err, io.EOF) {
34+
log.Println("Connection closed")
35+
// remove from channel
36+
*ClosedConn <- connn
37+
return message.Message{}
38+
}
39+
if err != nil {
40+
log.Println(err)
41+
return message.Message{}
42+
}
43+
message := message.Message{
44+
Addr: connn.RemoteAddr(),
45+
Content: buf[:n],
46+
}
47+
return message
48+
}
49+
50+
// implements WriteMessage
51+
func (s Stream) WriteMessage(msg message.Message) {
52+
WriteConn(s.Conn, msg)
53+
}
54+
55+
func WriteConn(conn net.Conn, message message.Message) {
56+
_, err := conn.Write(message.Content)
57+
if err != nil {
58+
log.Fatal(err)
59+
}
60+
}

0 commit comments

Comments
 (0)