mirror of https://github.com/bjdgyc/anylink.git
更改dtlssession的存储方式
This commit is contained in:
parent
c744983cbc
commit
f342b12372
|
@ -50,12 +50,12 @@ type ConnSession struct {
|
||||||
PayloadOutCstp chan *Payload // Cstp的数据
|
PayloadOutCstp chan *Payload // Cstp的数据
|
||||||
PayloadOutDtls chan *Payload // Dtls的数据
|
PayloadOutDtls chan *Payload // Dtls的数据
|
||||||
|
|
||||||
mux sync.RWMutex
|
// dSess *DtlsSession
|
||||||
dSess *DtlsSession // Dtls Session
|
dSess *atomic.Value
|
||||||
// DSess *atomic.Value
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type DtlsSession struct {
|
type DtlsSession struct {
|
||||||
|
isActive int32
|
||||||
CSess *ConnSession
|
CSess *ConnSession
|
||||||
CloseChan chan struct{}
|
CloseChan chan struct{}
|
||||||
closeOnce sync.Once
|
closeOnce sync.Once
|
||||||
|
@ -169,6 +169,14 @@ func (s *Session) NewConn() *ConnSession {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 查询group信息
|
||||||
|
group := &dbdata.Group{}
|
||||||
|
err = dbdata.One("Name", s.Group, group)
|
||||||
|
if err != nil {
|
||||||
|
base.Error(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
cSess := &ConnSession{
|
cSess := &ConnSession{
|
||||||
Sess: s,
|
Sess: s,
|
||||||
MacHw: macHw,
|
MacHw: macHw,
|
||||||
|
@ -178,16 +186,17 @@ func (s *Session) NewConn() *ConnSession {
|
||||||
PayloadIn: make(chan *Payload),
|
PayloadIn: make(chan *Payload),
|
||||||
PayloadOutCstp: make(chan *Payload),
|
PayloadOutCstp: make(chan *Payload),
|
||||||
PayloadOutDtls: make(chan *Payload),
|
PayloadOutDtls: make(chan *Payload),
|
||||||
|
dSess: &atomic.Value{},
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询group信息
|
dSess := &DtlsSession{
|
||||||
group := &dbdata.Group{}
|
isActive: -1,
|
||||||
err = dbdata.One("Name", s.Group, group)
|
CSess: cSess,
|
||||||
if err != nil {
|
CloseChan: make(chan struct{}),
|
||||||
base.Error(err)
|
closeOnce: sync.Once{},
|
||||||
cSess.Close()
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
cSess.dSess.Store(dSess)
|
||||||
|
|
||||||
cSess.Group = group
|
cSess.Group = group
|
||||||
if group.Bandwidth > 0 {
|
if group.Bandwidth > 0 {
|
||||||
// 限流设置
|
// 限流设置
|
||||||
|
@ -222,20 +231,20 @@ func (cs *ConnSession) Close() {
|
||||||
|
|
||||||
// 创建dtls链接
|
// 创建dtls链接
|
||||||
func (cs *ConnSession) NewDtlsConn() *DtlsSession {
|
func (cs *ConnSession) NewDtlsConn() *DtlsSession {
|
||||||
cs.mux.Lock()
|
ds := cs.dSess.Load().(*DtlsSession)
|
||||||
defer cs.mux.Unlock()
|
isActive := atomic.LoadInt32(&ds.isActive)
|
||||||
|
if isActive > 0 {
|
||||||
if cs.dSess != nil {
|
|
||||||
// 判断原有连接存在,不进行创建
|
// 判断原有连接存在,不进行创建
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
dSess := &DtlsSession{
|
dSess := &DtlsSession{
|
||||||
|
isActive: 1,
|
||||||
CSess: cs,
|
CSess: cs,
|
||||||
CloseChan: make(chan struct{}),
|
CloseChan: make(chan struct{}),
|
||||||
closeOnce: sync.Once{},
|
closeOnce: sync.Once{},
|
||||||
}
|
}
|
||||||
cs.dSess = dSess
|
cs.dSess.Store(dSess)
|
||||||
return dSess
|
return dSess
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,18 +252,19 @@ func (cs *ConnSession) NewDtlsConn() *DtlsSession {
|
||||||
func (ds *DtlsSession) Close() {
|
func (ds *DtlsSession) Close() {
|
||||||
ds.closeOnce.Do(func() {
|
ds.closeOnce.Do(func() {
|
||||||
base.Info("closeOnce dtls:", ds.CSess.IpAddr)
|
base.Info("closeOnce dtls:", ds.CSess.IpAddr)
|
||||||
ds.CSess.mux.Lock()
|
|
||||||
defer ds.CSess.mux.Unlock()
|
|
||||||
|
|
||||||
|
atomic.StoreInt32(&ds.isActive, -1)
|
||||||
close(ds.CloseChan)
|
close(ds.CloseChan)
|
||||||
ds.CSess.dSess = nil
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cs *ConnSession) GetDtlsSession() *DtlsSession {
|
func (cs *ConnSession) GetDtlsSession() *DtlsSession {
|
||||||
cs.mux.RLock()
|
ds := cs.dSess.Load().(*DtlsSession)
|
||||||
defer cs.mux.RUnlock()
|
isActive := atomic.LoadInt32(&ds.isActive)
|
||||||
return cs.dSess
|
if isActive > 0 {
|
||||||
|
return ds
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
const BandwidthPeriodSec = 2 // 流量速率统计周期(秒)
|
const BandwidthPeriodSec = 2 // 流量速率统计周期(秒)
|
||||||
|
|
Loading…
Reference in New Issue