Skip to content

Commit 8cb35a4

Browse files
committed
refactor: write message
1 parent 8872c0e commit 8cb35a4

File tree

13 files changed

+113
-129
lines changed

13 files changed

+113
-129
lines changed

client/client.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package client
33
import (
44
"log"
55

6-
"github.com/keyvchan/NetAssist/internal"
76
"github.com/keyvchan/NetAssist/pkg/flags"
7+
"github.com/keyvchan/NetAssist/pkg/utils"
88
"github.com/keyvchan/NetAssist/protocol"
99
)
1010

@@ -21,9 +21,9 @@ func Req() {
2121
case "unixgram":
2222
protocol.UnixgramClient()
2323
case "unixpacket":
24-
internal.Unimplemented("unixpacket")
24+
utils.Unimplemented("unixpacket")
2525
case "ip":
26-
internal.Unimplemented("ip")
26+
utils.Unimplemented("ip")
2727
default:
2828
log.Fatal("unknown protocol", types)
2929
}

internal/globals.go

-1
This file was deleted.

internal/read.go

-1
This file was deleted.

internal/utils.go

-9
This file was deleted.

internal/write.go

-37
This file was deleted.

pkg/connection/file.go

+26
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"bytes"
66
"encoding/hex"
77
"errors"
8+
"fmt"
89
"log"
910
"os"
1011

@@ -71,3 +72,28 @@ func ReadStdin(stdin *os.File) message.Message {
7172
}
7273
return message.Message{}
7374
}
75+
76+
func (f File) WriteMessage(msg message.Message) {
77+
switch f.Path {
78+
case "/dev/stdout":
79+
WriteStdout(f.File, msg)
80+
default:
81+
return
82+
}
83+
}
84+
85+
func WriteStdout(writter interface{}, message message.Message) {
86+
87+
// write to stdout
88+
input_binary := flags.GetArg(4)
89+
fmt.Println(message.Addr)
90+
91+
if input_binary == "--binary" {
92+
for i := 0; i < len(message.Content); i++ {
93+
fmt.Printf("%02x ", message.Content[i])
94+
}
95+
fmt.Print("\n")
96+
} else {
97+
fmt.Println(string(message.Content))
98+
}
99+
}

pkg/connection/packet.go

+17-10
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,27 @@ func (s Packet) ReadMessage() message.Message {
1616
return ReadPacketConn(s.PacketConn)
1717
}
1818

19-
func ReadPacketConn(reader interface{}) message.Message {
20-
conn, ok := reader.(net.PacketConn)
21-
if !ok {
22-
log.Fatal("Wrong type")
23-
}
24-
25-
buf := []byte{}
26-
_, _, err := conn.ReadFrom(buf)
19+
func ReadPacketConn(reader net.PacketConn) message.Message {
20+
buf := make([]byte, 1024)
21+
n, addr, err := reader.ReadFrom(buf)
2722
if err != nil {
2823
log.Fatal(err)
2924
}
3025
return message.Message{
31-
Content: buf,
32-
Addr: nil,
26+
Content: buf[:n],
27+
Addr: addr,
3328
}
3429

3530
}
31+
32+
// implements WriteMessage
33+
func (s Packet) WriteMessage(msg message.Message) {
34+
WritePacketConn(s.PacketConn, msg)
35+
}
36+
37+
func WritePacketConn(conn net.PacketConn, message message.Message) {
38+
_, err := conn.WriteTo(message.Content, message.Addr)
39+
if err != nil {
40+
log.Fatal(err)
41+
}
42+
}

pkg/connection/stream.go

+12
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,15 @@ func ReadConn(conn interface{}) message.Message {
4646
}
4747
return message
4848
}
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+
}

pkg/message/passing.go

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package message
2+
3+
import (
4+
"log"
5+
)
6+
7+
// Read reads a message from the given reader
8+
func Read(message_chan chan Message, reader Reader) {
9+
10+
for {
11+
buf := reader.ReadMessage()
12+
if buf.Content != nil {
13+
message_chan <- buf
14+
} else {
15+
log.Fatal("Could not read from conn")
16+
}
17+
}
18+
19+
}
20+
21+
func Write(message_chan chan Message, writer Writer) {
22+
for {
23+
// receive message from message_chan
24+
buf := <-message_chan
25+
writer.WriteMessage(buf)
26+
}
27+
}

pkg/utils/utils.go

+3-41
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,10 @@
11
package utils
22

33
import (
4+
"errors"
45
"log"
5-
"net"
6-
"os"
7-
8-
"github.com/keyvchan/NetAssist/internal"
9-
"github.com/keyvchan/NetAssist/pkg/message"
106
)
117

12-
// ReadMessage reads a message from the given reader
13-
func ReadMessage(message_chan chan message.Message, reader message.Reader) {
14-
// var source_func func(interface{}) internal.Message
15-
// switch reader.(type) {
16-
// case net.Conn:
17-
// source_func = internal.ReadConn
18-
// case *os.File:
19-
// source_func = internal.ReadStdin
20-
// case net.PacketConn:
21-
// source_func = internal.ReadPacketConn
22-
// }
23-
24-
for {
25-
buf := reader.ReadMessage()
26-
if buf.Content != nil {
27-
message_chan <- buf
28-
} else {
29-
log.Fatal("Could not read from conn")
30-
}
31-
}
32-
33-
}
34-
35-
func WriteMessage(message_chan chan message.Message, writer interface{}) {
36-
var dest_func func(interface{}, message.Message)
37-
switch writer.(type) {
38-
case net.Conn:
39-
dest_func = internal.WriteConn
40-
case *os.File:
41-
dest_func = internal.WriteStdout
42-
}
43-
for {
44-
// receive message from message_chan
45-
buf := <-message_chan
46-
dest_func(writer, buf)
47-
}
8+
func Unimplemented(message string) {
9+
log.Fatal(errors.New("unimplemented: " + message))
4810
}

protocol/tcp.go

+12-12
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"github.com/keyvchan/NetAssist/pkg/connection"
99
"github.com/keyvchan/NetAssist/pkg/flags"
1010
"github.com/keyvchan/NetAssist/pkg/message"
11-
"github.com/keyvchan/NetAssist/pkg/utils"
1211
)
1312

1413
func TCPServer() {
@@ -31,8 +30,8 @@ func TCPServer() {
3130
}
3231

3332
// create a goroutine to read user input
34-
go utils.ReadMessage(stdin_read, stdin)
35-
go utils.WriteMessage(conn_read, os.Stdout)
33+
go message.Read(stdin_read, stdin)
34+
go message.Write(conn_read, connection.Stdout)
3635

3736
// create a goroutines cleanup closed conn
3837
go conn_cleanup(*connection.ClosedConn, connections)
@@ -55,7 +54,7 @@ func accept_conn(read_chan chan message.Message, listener net.Listener, connecti
5554
Type: "tcp",
5655
Conn: conn,
5756
}
58-
go utils.ReadMessage(read_chan, tcp_client)
57+
go message.Read(read_chan, tcp_client)
5958
}
6059

6160
}
@@ -68,20 +67,21 @@ func TCPClient() {
6867
}
6968
defer conn.Close()
7069

70+
tcp_client := connection.Stream{
71+
Type: "tcp",
72+
Conn: conn,
73+
}
74+
7175
// create a chennel to communicate between the read and write goroutines
7276
stdin_read := make(chan message.Message)
73-
go utils.ReadMessage(stdin_read, connection.Stdin)
74-
go utils.WriteMessage(stdin_read, conn)
77+
go message.Read(stdin_read, connection.Stdin)
78+
go message.Write(stdin_read, tcp_client)
7579

7680
quit := make(chan bool)
7781
conn_read := make(chan message.Message)
7882

79-
tcp_client := connection.Stream{
80-
Type: "tcp",
81-
Conn: conn,
82-
}
83-
go utils.ReadMessage(conn_read, tcp_client)
84-
go utils.WriteMessage(conn_read, os.Stdout)
83+
go message.Read(conn_read, tcp_client)
84+
go message.Write(conn_read, connection.Stdout)
8585
go func() {
8686
conn := <-*connection.ClosedConn
8787
conn.Close()

protocol/udp.go

+10-12
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@ package protocol
33
import (
44
"log"
55
"net"
6-
"os"
76

87
"github.com/keyvchan/NetAssist/pkg/connection"
98
"github.com/keyvchan/NetAssist/pkg/flags"
109
"github.com/keyvchan/NetAssist/pkg/message"
11-
"github.com/keyvchan/NetAssist/pkg/utils"
1210
)
1311

1412
func UDPServer() {
@@ -20,15 +18,15 @@ func UDPServer() {
2018
stdin_read_chan := make(chan message.Message)
2119
conn_read_chan := make(chan message.Message)
2220

23-
udp_client_conn := connection.Packet{
21+
udp_server_conn := connection.Packet{
2422
Type: "udp",
2523
PacketConn: conn,
2624
}
2725

28-
go utils.ReadMessage(stdin_read_chan, connection.Stdin)
29-
go utils.ReadMessage(conn_read_chan, udp_client_conn)
30-
go utils.WriteMessage(conn_read_chan, os.Stdout)
31-
go utils.WriteMessage(stdin_read_chan, conn)
26+
go message.Read(stdin_read_chan, connection.Stdin)
27+
go message.Read(conn_read_chan, udp_server_conn)
28+
go message.Write(conn_read_chan, connection.Stdout)
29+
go message.Write(stdin_read_chan, udp_server_conn)
3230
select {}
3331
}
3432

@@ -43,15 +41,15 @@ func UDPClient() {
4341
stdin_read_chan := make(chan message.Message)
4442
conn_read_chan := make(chan message.Message)
4543
// we don't need to close udp socket
46-
udp_server_conn := connection.Stream{
44+
udp_client_conn := connection.Stream{
4745
Type: "udp",
4846
Conn: conn,
4947
}
5048

51-
go utils.ReadMessage(stdin_read_chan, connection.Stdin)
52-
go utils.ReadMessage(conn_read_chan, udp_server_conn)
53-
go utils.WriteMessage(conn_read_chan, os.Stdout)
54-
go utils.WriteMessage(stdin_read_chan, conn)
49+
go message.Read(stdin_read_chan, connection.Stdin)
50+
go message.Read(conn_read_chan, udp_client_conn)
51+
go message.Write(conn_read_chan, connection.Stdout)
52+
go message.Write(stdin_read_chan, udp_client_conn)
5553

5654
select {}
5755
}

server/server.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package server
33
import (
44
"log"
55

6-
"github.com/keyvchan/NetAssist/internal"
76
"github.com/keyvchan/NetAssist/pkg/flags"
7+
"github.com/keyvchan/NetAssist/pkg/utils"
88
"github.com/keyvchan/NetAssist/protocol"
99
)
1010

@@ -21,9 +21,9 @@ func Serve() {
2121
case "unixgram":
2222
protocol.UnixgramServer()
2323
case "unixpacket":
24-
internal.Unimplemented("unixpacket")
24+
utils.Unimplemented("unixpacket")
2525
case "ip":
26-
internal.Unimplemented("ip")
26+
utils.Unimplemented("ip")
2727
default:
2828
log.Fatal("unknow protocol: ", types)
2929
}

0 commit comments

Comments
 (0)