mirror of https://github.com/cbeuw/Cloak
Fix #54
This commit is contained in:
parent
2dcb105005
commit
4861efbc50
|
|
@ -99,15 +99,20 @@ func (sb *switchboard) send(data []byte, connId *uint32) (n int, err error) {
|
||||||
if atomic.LoadUint32(&sb.broken) == 1 || len(sb.conns) == 0 {
|
if atomic.LoadUint32(&sb.broken) == 1 || len(sb.conns) == 0 {
|
||||||
return 0, errBrokenSwitchboard
|
return 0, errBrokenSwitchboard
|
||||||
}
|
}
|
||||||
newConnId := rand.Intn(len(sb.conns))
|
|
||||||
conn, ok = sb.conns[uint32(newConnId)]
|
r := rand.Intn(len(sb.conns))
|
||||||
if !ok {
|
var c int
|
||||||
return 0, errBrokenSwitchboard
|
for newConnId := range sb.conns {
|
||||||
} else {
|
if r == c {
|
||||||
|
connId = &newConnId
|
||||||
|
conn, _ = sb.conns[newConnId]
|
||||||
n, err = conn.Write(data)
|
n, err = conn.Write(data)
|
||||||
sb.AddTx(int64(n))
|
sb.AddTx(int64(n))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
c++
|
||||||
|
}
|
||||||
|
return 0, errBrokenSwitchboard
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -120,8 +125,16 @@ func (sb *switchboard) assignRandomConn() (uint32, error) {
|
||||||
if atomic.LoadUint32(&sb.broken) == 1 || len(sb.conns) == 0 {
|
if atomic.LoadUint32(&sb.broken) == 1 || len(sb.conns) == 0 {
|
||||||
return 0, errBrokenSwitchboard
|
return 0, errBrokenSwitchboard
|
||||||
}
|
}
|
||||||
connId := rand.Intn(len(sb.conns))
|
|
||||||
return uint32(connId), nil
|
r := rand.Intn(len(sb.conns))
|
||||||
|
var c int
|
||||||
|
for connId := range sb.conns {
|
||||||
|
if r == c {
|
||||||
|
return connId, nil
|
||||||
|
}
|
||||||
|
c++
|
||||||
|
}
|
||||||
|
return 0, errBrokenSwitchboard
|
||||||
}
|
}
|
||||||
|
|
||||||
// actively triggered by session.Close()
|
// actively triggered by session.Close()
|
||||||
|
|
@ -145,7 +158,7 @@ func (sb *switchboard) deplex(connId uint32, conn net.Conn) {
|
||||||
sb.rxWait(n)
|
sb.rxWait(n)
|
||||||
sb.Valve.AddRx(int64(n))
|
sb.Valve.AddRx(int64(n))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Tracef("a connection for session %v has closed: %v", sb.session.id, err)
|
log.Debugf("a connection for session %v has closed: %v", sb.session.id, err)
|
||||||
go conn.Close()
|
go conn.Close()
|
||||||
sb.removeConn(connId)
|
sb.removeConn(connId)
|
||||||
return
|
return
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue