func (ctf *ConnectionThrottleFilter) OnSessionOpened(s *netlib.Session) bool { if !ctf.isConnectionOk(s) { s.Close() return false } return true }
func (af *AuthenticationFilter) OnPacketReceived(s *netlib.Session, packetid int, packet interface{}) bool { if s.GetAttribute(SessionAttributeAuth) == nil { if auth, ok := packet.(*protocol.SSPacketAuth); ok { h := md5.New() rawText := fmt.Sprintf("%v;%v", auth.GetTimestamp(), s.GetSessionConfig().AuthKey) logger.Tracef("AuthenticationFilter rawtext=%v IsInnerLink(%v)", rawText, s.GetSessionConfig().IsInnerLink) h.Write([]byte(rawText)) expectKey := hex.EncodeToString(h.Sum(nil)) if expectKey != auth.GetAuthKey() { if af.SessionAuthHandler != nil { af.SessionAuthHandler(s, false) } s.Close() logger.Tracef("AuthenticationFilter AuthKey error[expect:%v get:%v]", expectKey, auth.GetAuthKey()) return false } s.SetAttribute(SessionAttributeAuth, true) if af.SessionAuthHandler != nil { af.SessionAuthHandler(s, true) } return false } else { s.Close() logger.Warn("AuthenticationFilter packet not expect") return false } } return true }
func (sfcb *SessionHandlerClientBalance) OnSessionOpened(s *netlib.Session) { logger.Trace("SessionHandlerClientBalance.OnSessionOpened") services := srvlib.ServiceMgr.GetServices(srvlib.ClientServiceType) if services != nil { /*清理掉线的gate*/ for k, _ := range sfcb.gates { if _, has := services[k]; !has { delete(sfcb.gates, k) } } /*补充新上线的gate*/ for k, v := range services { if _, has := sfcb.gates[k]; !has { sfcb.gates[k] = &gateService{ServiceInfo: v, active: true} } } } /*查找最小负载的gate*/ var mls *libproto.ServiceInfo var min = 100000 for _, v := range sfcb.gates { if v.active && v.load < min { mls = v.ServiceInfo } } pack := &protocol.SCGateInfo{} if mls != nil { pack.SrvType = proto.Int32(mls.GetSrvType()) pack.SrvId = proto.Int32(mls.GetSrvId()) pack.AuthKey = proto.String(mls.GetAuthKey()) pack.Ip = proto.String(mls.GetIp()) pack.Port = proto.Int32(mls.GetPort()) } proto.SetDefaults(pack) s.Send(pack) time.AfterFunc(time.Second*5, func() { s.Close() }) }
func (blf *BlackListFilter) blockSession(s *netlib.Session) { s.Close() }