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
5a114b60
Commit
5a114b60
authored
Sep 30, 2020
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add error exit
parent
d2dafe18
Pipeline
#835
passed with stage
in 4 minutes and 4 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
36 additions
and
13 deletions
+36
-13
.gitignore
.gitignore
+2
-0
main.go
main.go
+34
-13
No files found.
.gitignore
0 → 100644
View file @
5a114b60
maotama-server
cert
main.go
View file @
5a114b60
...
...
@@ -100,37 +100,57 @@ func UnpackData2(buf []byte) (addr *net.UDPAddr, data []byte) {
}
func
transferHostTrafficToGuest
(
host
*
net
.
UDPConn
,
guest
*
net
.
UDPConn
,
hostAddr
*
net
.
UDPAddr
,
guestAddr
*
net
.
UDPAddr
)
{
func
transferHostTrafficToGuest
(
host
*
net
.
UDPConn
,
guest
*
net
.
UDPConn
,
guestAddr
*
net
.
UDPAddr
)
{
buffer
:=
make
([]
byte
,
2048
)
for
{
length
,
_
,
_
:=
host
.
ReadFromUDP
(
buffer
)
length
,
_
,
err
:=
host
.
ReadFromUDP
(
buffer
)
if
err
!=
nil
{
log
.
Println
(
"Host read error: "
,
err
)
break
}
guest
.
WriteToUDP
(
buffer
[
:
length
],
guestAddr
)
}
}
func
transferGuestTrafficToHost
(
host
*
net
.
UDPConn
,
guest
*
net
.
UDPConn
,
hostAddr
*
net
.
UDPAddr
,
guestAddr
*
net
.
UDPAddr
,
channel
chan
[]
byt
e
)
{
func
transferGuestTrafficToHost
(
host
*
net
.
UDPConn
,
hostAddr
*
net
.
UDPAddr
,
channel
chan
GuestToHostMessag
e
)
{
for
{
message
:=
<-
channel
host
.
WriteToUDP
(
message
,
hostAddr
)
if
message
.
exit
{
break
}
else
{
host
.
WriteToUDP
(
message
.
data
,
hostAddr
)
}
}
}
type
GuestToHostMessage
struct
{
exit
bool
data
[]
byte
}
func
listenUDP
(
ws
*
websocket
.
Conn
)
{
guest
,
err
:=
net
.
ListenUDP
(
"udp"
,
nil
)
if
err
!=
nil
{
log
.
Println
(
err
)
log
.
Println
(
"Guest listen error: "
,
err
)
return
}
guestChannelList
:=
make
(
map
[
string
]
chan
[]
byt
e
)
guestChannelList
:=
make
(
map
[
string
]
chan
GuestToHostMessag
e
)
reply
:=
fmt
.
Sprintf
(
"LISTEN %s:%d"
,
IP
,
guest
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
)
ws
.
Write
([]
byte
(
reply
))
for
{
message
:=
make
([]
byte
,
2048
)
length
,
guestAddr
,
_
:=
guest
.
ReadFromUDP
(
message
)
length
,
guestAddr
,
err
:=
guest
.
ReadFromUDP
(
message
)
channel
,
ok
:=
guestChannelList
[
guestAddr
.
String
()]
if
!
ok
{
if
err
!=
nil
{
log
.
Println
(
"Guest read error: "
,
err
)
if
ok
{
channel
<-
GuestToHostMessage
{
data
:
nil
,
exit
:
true
}
guestChannelList
[
guestAddr
.
String
()]
=
nil
}
}
else
if
!
ok
{
host
,
err
:=
net
.
ListenUDP
(
"udp"
,
nil
)
if
err
!=
nil
{
log
.
Println
(
err
)
log
.
Println
(
"Host listen error: "
,
err
)
return
}
reply
=
fmt
.
Sprintf
(
"CONNECT %s:%d"
,
IP
,
host
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
)
...
...
@@ -139,12 +159,13 @@ func listenUDP(ws *websocket.Conn) {
reply
=
fmt
.
Sprintf
(
"CONNECTED %s:%d"
,
IP
,
host
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
)
ws
.
Write
([]
byte
(
reply
))
host
.
WriteToUDP
(
message
[
:
length
],
hostAddr
)
go
transferHostTrafficToGuest
(
host
,
guest
,
hostAddr
,
guestAddr
)
channel
:=
make
(
chan
[]
byt
e
)
go
transferHostTrafficToGuest
(
host
,
guest
,
guestAddr
)
channel
:=
make
(
chan
GuestToHostMessag
e
)
guestChannelList
[
guestAddr
.
String
()]
=
channel
go
transferGuestTrafficToHost
(
host
,
guest
,
hostAddr
,
gue
stAddr
,
channel
)
go
transferGuestTrafficToHost
(
host
,
ho
stAddr
,
channel
)
}
else
{
channel
<-
message
[
:
length
]
msg
:=
GuestToHostMessage
{
data
:
message
[
:
length
],
exit
:
false
}
channel
<-
msg
}
}
...
...
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