github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/third/kmgRadius/Acct.go (about) 1 package kmgRadius 2 3 import ( 4 "fmt" 5 6 . "github.com/bronze1man/kmg/kmgErr" 7 "github.com/bronze1man/kmg/kmgLog" 8 ) 9 10 func (p *server) radiusAccountingRequest(request *Packet) *Packet { 11 //对于strongswan服务器,如果golang处理时间太长,strongswan服务器会坏掉,目前的解决方案是全异步处理,以便快速返回结果. 12 go p.asyncAccountingRequest(request) 13 14 npac := request.Reply() 15 npac.Code = CodeAccountingResponse 16 return npac 17 } 18 19 func (p *server) asyncAccountingRequest(request *Packet) { 20 acctReq := AcctRequest{ 21 SessionId: request.GetAcctSessionId(), 22 Username: request.GetUsername(), 23 SessionTime: request.GetAcctSessionTime(), 24 InputBytes: request.GetAcctTotalInputOctets(), 25 OutputBytes: request.GetAcctTotalOutputOctets(), 26 NasPort: request.GetNASPort(), 27 } 28 switch request.GetAcctStatusType() { 29 case AcctStatusTypeEnumStart: 30 kmgLog.Log("Radius", "Acct Start", request.ToStringMap()) 31 p.handler.AcctStart(acctReq) 32 case AcctStatusTypeEnumInterimUpdate: 33 p.handler.AcctUpdate(acctReq) 34 case AcctStatusTypeEnumStop: 35 kmgLog.Log("Radius", "Acct Stop", request.ToStringMap()) 36 37 p.handler.AcctStop(acctReq) 38 default: 39 LogError(fmt.Errorf("radius.AccountingRequest AcctStatusType unknow %d", request.GetAcctStatusType())) 40 } 41 }