Skip to content

Commit fb7ada1

Browse files
committed
windows compatibility
1 parent 7156819 commit fb7ada1

File tree

5 files changed

+48
-21
lines changed

5 files changed

+48
-21
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
*.exe
33
/gtun
44
*.sh
5+
*.zip
6+
/gole-*

Makefile

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@ $(OUT): $(SOURCES)
1212

1313
.PHONY: clean
1414
clean:
15-
-rm $(OUT)
16-
-rm ./client ./server
17-
-rm ./gtun
18-
-rm *.exe
19-
-rm gole_darwin_amd64
20-
-rm gole-linux-386 gole-linux-amd64 gole-linux-arm gole-linux-arm64
21-
-rm gole-linux-mips gole-linux-mipsle
22-
-rm gole-windows-386.exe gole-windows-amd64.exe
23-
-rm *.zip
15+
@-rm -f $(OUT)
16+
@-rm -f ./client ./server
17+
@-rm -f ./gtun
18+
@-rm -f *.exe
19+
@-rm -f gole_darwin_amd64
20+
@-rm -f gole-linux-386 gole-linux-amd64
21+
@-rm -f gole-linux-arm gole-linux-arm64
22+
@-rm -f gole-linux-mips gole-linux-mipsle
23+
@-rm -f gole-windows-386.exe gole-windows-amd64.exe
24+
@-rm -f *.zip
2425

2526
.PHONY: release
2627
release:
@@ -31,10 +32,11 @@ release:
3132
GOOS=linux GOARCH=386 go build $(LDFLAGS) -o gole-linux-386 $(SOURCES)
3233
GOOS=linux GOARCH=amd64 go build $(LDFLAGS) -o gole-linux-amd64 $(SOURCES)
3334
GOOS=linux GOARCH=arm go build $(LDFLAGS) -o gole-linux-arm $(SOURCES)
35+
GOOS=linux GOARCH=arm64 go build $(LDFLAGS) -o gole-linux-arm64 $(SOURCES)
3436
GOOS=linux GOARCH=mips go build $(LDFLAGS) -o gole-linux-mips $(SOURCES)
3537
GOOS=linux GOARCH=mipsle go build $(LDFLAGS) -o gole-linux-mipsle $(SOURCES)
36-
zip gole-linux-$(DATE).zip gole-linux-386 gole-linux-amd64 gole-linux-mips gole-linux-mipsle
37-
rm gole-linux-386 gole-linux-amd64 gole-linux-mips gole-linux-mipsle
38+
zip gole-linux-$(DATE).zip gole-linux-386 gole-linux-amd64 gole-linux-mips gole-linux-mipsle gole-linux-arm gole-linux-arm64
39+
rm gole-linux-386 gole-linux-amd64 gole-linux-mips gole-linux-mipsle gole-linux-arm gole-linux-arm64
3840

3941
GOOS=windows GOARCH=386 go build $(LDFLAGS) -o gole-windows-386.exe $(SOURCES)
4042
GOOS=windows GOARCH=amd64 go build $(LDFLAGS) -o gole-windows-amd64.exe $(SOURCES)

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ require (
1414
github.com/xtaci/smux v1.5.15
1515
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
1616
golang.org/x/net v0.0.0-20210119194325-5f4716e94777
17+
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68
1718
)

s5/s5_linux.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,20 @@ import "time"
88
func CreateDialer(bind net.Addr, fwmark int, dscp int) *net.Dialer {
99

1010
// callback from dialer creation
11-
var controlCallback = func(network, address string, c syscall.RawConn) error {
11+
var ctrlCallback = func(network, address string, c syscall.RawConn) error {
1212
return c.Control(func(fd uintptr) {
13-
f := int(fd)
14-
// log.Printf("open %s socket (fd=%d)", network, f)
15-
err := syscall.SetsockoptInt(f, syscall.SOL_SOCKET, syscall.SO_MARK, fwmark)
16-
if err != nil {
17-
fmt.Println("set fwmark failed:", err)
13+
var err error
14+
if fwmark != 0 {
15+
err = syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_MARK, fwmark)
16+
if err != nil {
17+
fmt.Println("set fwmark failed:", err)
18+
}
19+
}
20+
if dscp != 0 {
21+
err = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_IP, syscall.IP_TOS, dscp << 2)
22+
if err != nil {
23+
fmt.Println("set dscp failed:", err)
24+
}
1825
}
1926
})
2027
}
@@ -24,9 +31,7 @@ func CreateDialer(bind net.Addr, fwmark int, dscp int) *net.Dialer {
2431
Timeout: time.Duration(time.Second*30),
2532
}
2633

27-
if fwmark != 0 {
28-
dialer.Control = controlCallback
29-
}
34+
dialer.Control = ctrlCallback
3035

3136
return dialer
3237
}

s5/s5_windows.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,32 @@ package s5
22

33
import "net"
44
import "time"
5+
import "syscall"
6+
import "fmt"
7+
import "golang.org/x/sys/windows"
58

69
func CreateDialer(bind net.Addr, fwmark int, dscp int) *net.Dialer {
710

11+
// callback from dialer creation
12+
var ctrlCallback = func(network, address string, c syscall.RawConn) error {
13+
return c.Control(func(fd uintptr) {
14+
var err error
15+
// do not support SO_MARK
16+
if dscp != 0 {
17+
err = syscall.SetsockoptInt(syscall.Handle(fd), windows.IPPROTO_IP, windows.IP_TOS, dscp << 2)
18+
if err != nil {
19+
fmt.Println("set dscp failed:", err)
20+
}
21+
}
22+
})
23+
}
24+
825
dialer := &net.Dialer{
926
LocalAddr: bind,
1027
Timeout: time.Duration(time.Second*30),
1128
}
1229

13-
// TODO: Set fwmark,dscp on Windows
30+
dialer.Control = ctrlCallback
1431

1532
return dialer
1633
}

0 commit comments

Comments
 (0)