Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
maotama-server
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
maotama-server
Commits
87f3e105
Commit
87f3e105
authored
Sep 29, 2020
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rename some vars
parent
fc1f29bf
Pipeline
#833
passed with stage
in 3 minutes and 59 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
103 additions
and
15 deletions
+103
-15
main.go
main.go
+103
-15
No files found.
main.go
View file @
87f3e105
package
main
import
(
"encoding/binary"
"fmt"
"log"
"net"
...
...
@@ -12,17 +13,104 @@ import (
var
IP
=
os
.
Getenv
(
"ADDRESS"
)
func
transfer
(
local
*
net
.
UDPConn
,
remote
*
net
.
UDPConn
,
remotAddr
*
net
.
UDPAddr
)
{
// funcs from shitama
func
UDPAddrToSockAddr
(
addr
*
net
.
UDPAddr
)
[]
byte
{
buf
:=
make
([]
byte
,
8
)
binary
.
BigEndian
.
PutUint16
(
buf
[
:
2
],
0x200
)
binary
.
BigEndian
.
PutUint16
(
buf
[
2
:
4
],
uint16
(
addr
.
Port
))
copy
(
buf
[
4
:
8
],
addr
.
IP
[
len
(
addr
.
IP
)
-
4
:
])
return
buf
}
func
SockAddrToUDPAddr
(
buf
[]
byte
)
*
net
.
UDPAddr
{
addr
:=
new
(
net
.
UDPAddr
)
addr
.
IP
=
make
([]
byte
,
16
)
addr
.
IP
[
10
]
=
255
addr
.
IP
[
11
]
=
255
copy
(
addr
.
IP
[
len
(
addr
.
IP
)
-
4
:
],
buf
[
4
:
8
])
addr
.
Port
=
int
(
binary
.
BigEndian
.
Uint16
(
buf
[
2
:
4
]))
return
addr
}
func
PackData
(
addr
*
net
.
UDPAddr
,
data
[]
byte
)
[]
byte
{
buf
:=
make
([]
byte
,
len
(
data
)
+
6
)
copy
(
buf
[
:
4
],
addr
.
IP
[
len
(
addr
.
IP
)
-
4
:
])
binary
.
BigEndian
.
PutUint16
(
buf
[
4
:
6
],
uint16
(
addr
.
Port
))
copy
(
buf
[
6
:
],
data
)
return
buf
}
func
UnpackData
(
buf
[]
byte
)
(
addr
*
net
.
UDPAddr
,
data
[]
byte
)
{
addr
=
new
(
net
.
UDPAddr
)
addr
.
IP
=
make
([]
byte
,
16
)
addr
.
IP
[
10
]
=
255
addr
.
IP
[
11
]
=
255
copy
(
addr
.
IP
[
len
(
addr
.
IP
)
-
4
:
],
buf
[
:
4
])
addr
.
Port
=
int
(
binary
.
BigEndian
.
Uint16
(
buf
[
4
:
6
]))
data
=
make
([]
byte
,
len
(
buf
)
-
6
)
copy
(
data
,
buf
[
6
:
])
return
addr
,
data
}
func
UDPAddrToSockAddr2
(
addr
*
net
.
UDPAddr
,
outBuf
[]
byte
)
[]
byte
{
binary
.
BigEndian
.
PutUint16
(
outBuf
[
:
2
],
0x200
)
binary
.
BigEndian
.
PutUint16
(
outBuf
[
2
:
4
],
uint16
(
addr
.
Port
))
copy
(
outBuf
[
4
:
8
],
addr
.
IP
[
len
(
addr
.
IP
)
-
4
:
])
return
outBuf
}
func
PackData2
(
addr
*
net
.
UDPAddr
,
data
[]
byte
,
outBuf
[]
byte
)
[]
byte
{
copy
(
outBuf
[
:
4
],
addr
.
IP
[
len
(
addr
.
IP
)
-
4
:
])
binary
.
BigEndian
.
PutUint16
(
outBuf
[
4
:
6
],
uint16
(
addr
.
Port
))
copy
(
outBuf
[
6
:
],
data
)
return
outBuf
}
func
UnpackData2
(
buf
[]
byte
)
(
addr
*
net
.
UDPAddr
,
data
[]
byte
)
{
addr
=
new
(
net
.
UDPAddr
)
addr
.
IP
=
make
([]
byte
,
16
)
addr
.
IP
[
10
]
=
255
addr
.
IP
[
11
]
=
255
copy
(
addr
.
IP
[
len
(
addr
.
IP
)
-
4
:
],
buf
[
:
4
])
addr
.
Port
=
int
(
binary
.
BigEndian
.
Uint16
(
buf
[
4
:
6
]))
return
addr
,
buf
[
6
:
]
}
func
transferGuestTrafficToHost
(
client
*
net
.
UDPConn
,
server
*
net
.
UDPConn
,
clientAddr
*
net
.
UDPAddr
,
serverAddr
*
net
.
UDPAddr
)
{
buffer
:=
make
([]
byte
,
2048
)
for
{
length
,
_
,
_
:=
local
.
ReadFromUDP
(
buffer
)
remote
.
WriteToUDP
(
buffer
[
:
length
],
remot
Addr
)
for
{
// guest send to host
length
,
_
,
_
:=
client
.
ReadFromUDP
(
buffer
)
server
.
WriteToUDP
(
buffer
[
:
length
],
server
Addr
)
}
}
func
serverTransfer
(
client
*
net
.
UDPConn
,
remote
Addr
*
net
.
UDPAddr
,
channel
chan
[]
byte
)
{
for
{
func
transferHostTrafficToGuest
(
client
*
net
.
UDPConn
,
server
*
net
.
UDPConn
,
clientAddr
*
net
.
UDPAddr
,
server
Addr
*
net
.
UDPAddr
,
channel
chan
[]
byte
)
{
for
{
// host send to guest
message
:=
<-
channel
client
.
WriteToUDP
(
message
,
remote
Addr
)
client
.
WriteToUDP
(
message
,
client
Addr
)
}
}
func
listenUDP
(
ws
*
websocket
.
Conn
)
{
...
...
@@ -31,14 +119,14 @@ func listenUDP(ws *websocket.Conn) {
log
.
Println
(
err
)
return
}
clients
:=
make
(
map
[
string
]
chan
[]
byte
)
serverChannelList
:=
make
(
map
[
string
]
chan
[]
byte
)
reply
:=
fmt
.
Sprintf
(
"LISTEN %s:%d"
,
IP
,
server
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
)
ws
.
Write
([]
byte
(
reply
))
for
{
message
:=
make
([]
byte
,
2048
)
length
,
client
Addr
,
_
:=
server
.
ReadFromUDP
(
message
)
channel
,
ok
:=
clients
[
client
Addr
.
String
()]
length
,
server
Addr
,
_
:=
server
.
ReadFromUDP
(
message
)
channel
,
ok
:=
serverChannelList
[
server
Addr
.
String
()]
if
!
ok
{
client
,
err
:=
net
.
ListenUDP
(
"udp"
,
nil
)
if
err
!=
nil
{
...
...
@@ -47,14 +135,14 @@ func listenUDP(ws *websocket.Conn) {
}
reply
=
fmt
.
Sprintf
(
"CONNECT %s:%d"
,
IP
,
client
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
)
ws
.
Write
([]
byte
(
reply
))
_
,
remote
Addr
,
_
:=
client
.
ReadFromUDP
(
make
([]
byte
,
2048
))
_
,
client
Addr
,
_
:=
client
.
ReadFromUDP
(
make
([]
byte
,
2048
))
reply
=
fmt
.
Sprintf
(
"CONNECTED %s:%d"
,
IP
,
client
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
)
ws
.
Write
([]
byte
(
reply
))
client
.
WriteToUDP
(
message
[
:
length
],
remote
Addr
)
go
transfer
(
client
,
server
,
clientAddr
)
client
.
WriteToUDP
(
message
[
:
length
],
client
Addr
)
go
transfer
GuestTrafficToHost
(
client
,
server
,
clientAddr
,
serverAddr
)
// guest send to host
channel
:=
make
(
chan
[]
byte
)
clients
[
client
Addr
.
String
()]
=
channel
go
serverTransfer
(
client
,
remoteAddr
,
channel
)
serverChannelList
[
server
Addr
.
String
()]
=
channel
go
transferHostTrafficToGuest
(
client
,
server
,
clientAddr
,
serverAddr
,
channel
)
// host send to guest
}
else
{
channel
<-
message
[
:
length
]
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment