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
c688449c
Commit
c688449c
authored
Sep 30, 2020
by
nanahira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
timeout improves
parent
6a32eb42
Pipeline
#837
passed with stage
in 4 minutes and 1 second
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
31 additions
and
17 deletions
+31
-17
main.go
main.go
+31
-17
No files found.
main.go
View file @
c688449c
...
...
@@ -106,26 +106,38 @@ func transferHostTrafficToGuest(host *net.UDPConn, guest *net.UDPConn, guestAddr
for
{
derr
:=
host
.
SetReadDeadline
(
time
.
Now
()
.
Add
(
2
*
time
.
Minute
))
if
derr
!=
nil
{
log
.
Println
(
"
Guest deadline error: "
,
derr
)
return
log
.
Println
(
"
Host deadline error: "
,
guestAddr
.
String
()
,
derr
)
break
}
length
,
_
,
err
:=
host
.
ReadFromUDP
(
buffer
)
if
err
!=
nil
{
log
.
Println
(
"Host read error: "
,
err
)
log
.
Println
(
"Host read error: "
,
guestAddr
.
String
(),
err
)
break
}
guest
.
WriteToUDP
(
buffer
[
:
length
],
guestAddr
)
}
}
func
transferGuestTrafficToHost
(
host
*
net
.
UDPConn
,
hostAddr
*
net
.
UDPAddr
,
channel
chan
GuestToHostMessage
)
{
func
transferGuestTrafficToHost
(
host
*
net
.
UDPConn
,
hostAddr
*
net
.
UDPAddr
,
guestAddr
*
net
.
UDPAddr
,
channel
chan
GuestToHostMessage
,
plist
*
(
map
[
string
]
chan
GuestToHostMessage
)
)
{
for
{
message
:=
<-
channel
if
message
.
exit
{
exit
:=
false
select
{
case
message
:=
<-
channel
:
if
message
.
exit
{
exit
=
true
break
}
else
{
host
.
WriteToUDP
(
message
.
data
,
hostAddr
)
}
case
<-
time
.
After
(
time
.
Duration
(
2
)
*
time
.
Minute
)
:
log
.
Println
(
"Guest timeout: "
,
guestAddr
.
String
(),
hostAddr
.
String
())
exit
=
true
break
}
if
exit
{
break
}
else
{
host
.
WriteToUDP
(
message
.
data
,
hostAddr
)
}
}
(
*
plist
)[
guestAddr
.
String
()]
=
nil
}
type
GuestToHostMessage
struct
{
...
...
@@ -145,20 +157,22 @@ func listenUDP(ws *websocket.Conn) {
ws
.
Write
([]
byte
(
reply
))
for
{
message
:=
make
([]
byte
,
2048
)
derr
:=
guest
.
SetReadDeadline
(
time
.
Now
()
.
Add
(
2
*
time
.
Minute
))
/*
derr := guest.SetReadDeadline(time.Now().Add(2 * time.Minute))
if derr != nil {
log.Println("Guest deadline error: ", derr)
return
}
}
*/
length
,
guestAddr
,
err
:=
guest
.
ReadFromUDP
(
message
)
channel
,
ok
:=
guestChannelList
[
guestAddr
.
String
()]
if
err
!=
nil
{
log
.
Println
(
"Guest read error: "
,
err
)
if
ok
{
/*
if ok {
channel <- GuestToHostMessage{data: nil, exit: true}
guestChannelList[guestAddr.String()] = nil
}
}
else
if
!
ok
{
}*/
continue
}
channel
,
ok
:=
guestChannelList
[
guestAddr
.
String
()]
if
!
ok
{
host
,
err
:=
net
.
ListenUDP
(
"udp"
,
nil
)
if
err
!=
nil
{
log
.
Println
(
"Host listen error: "
,
err
)
...
...
@@ -168,12 +182,12 @@ func listenUDP(ws *websocket.Conn) {
ws
.
Write
([]
byte
(
reply
))
derr
:=
host
.
SetReadDeadline
(
time
.
Now
()
.
Add
(
2
*
time
.
Minute
))
if
derr
!=
nil
{
log
.
Println
(
"Knock deadline error: "
,
derr
)
log
.
Println
(
"Knock deadline error: "
,
host
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
,
derr
)
return
}
_
,
hostAddr
,
kerr
:=
host
.
ReadFromUDP
(
make
([]
byte
,
2048
))
if
kerr
!=
nil
{
log
.
Println
(
"Host knock error: "
,
kerr
)
log
.
Println
(
"Host knock error: "
,
host
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
,
kerr
)
return
}
reply
=
fmt
.
Sprintf
(
"CONNECTED %s:%d"
,
IP
,
host
.
LocalAddr
()
.
(
*
net
.
UDPAddr
)
.
Port
)
...
...
@@ -182,7 +196,7 @@ func listenUDP(ws *websocket.Conn) {
go
transferHostTrafficToGuest
(
host
,
guest
,
guestAddr
)
channel
:=
make
(
chan
GuestToHostMessage
)
guestChannelList
[
guestAddr
.
String
()]
=
channel
go
transferGuestTrafficToHost
(
host
,
hostAddr
,
channel
)
go
transferGuestTrafficToHost
(
host
,
hostAddr
,
guestAddr
,
channel
,
&
guestChannelList
)
}
else
{
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