diff --git a/engine/stun.go b/engine/stun.go index d6074db..c0b0f31 100644 --- a/engine/stun.go +++ b/engine/stun.go @@ -12,11 +12,20 @@ import ( ) func (s *Engine) stunProxyDownloadClient() error { + + return s.StartStunProxy("") +} + + +func (s *Engine) StartStunProxy(name string) error { downloaders := s.db.GetAllDonloadClients() for _, d := range downloaders { if !d.Enable { continue } + if name != "" && d.Name != name { + continue + } if d.Implementation != downloadclients.ImplementationQbittorrent { //TODO only support qbittorrent for now continue @@ -41,4 +50,4 @@ func (s *Engine) stunProxyDownloadClient() error { } return nil -} +} \ No newline at end of file diff --git a/server/setting.go b/server/setting.go index 5e9fd97..9e9327f 100644 --- a/server/setting.go +++ b/server/setting.go @@ -236,6 +236,12 @@ func (s *Server) AddDownloadClient(c *gin.Context) (interface{}, error) { }); err != nil { return nil, errors.Wrap(err, "save downloader") } + if in.UseNatTraversal { + if err := s.core.StartStunProxy(in.Name); err!= nil { + return nil, errors.Wrap(err, "start stun proxy") + } + } + return nil, nil }