commit ed8ed546fc59c825a7d435d0e9841664bdf32aa2
parent 4188c62878f3bc0a90430cd3aa6bbdf1788f0323
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Mon, 25 Dec 2023 12:51:44 +0900
delete rauth
Diffstat:
| M | server.go | | | 46 | +++++++++++----------------------------------- | 
1 file changed, 11 insertions(+), 35 deletions(-)
diff --git a/server.go b/server.go
@@ -227,20 +227,17 @@ func sVersion(ctx context.Context, s *Server, c <-chan *Req) {
 				Msize:   msize,
 				Version: version,
 			}
-			r.Srv.setMSize(r.Ofcall.(*RVersion).Msize)
-			r.Srv.respChan <- r
+			s.setMSize(r.Ofcall.(*RVersion).Msize)
+			s.respChan <- r
 		}
 	}
 }
 
 // sAuth serves Tauth message.
 func sAuth(ctx context.Context, s *Server, c <-chan *Req) {
-	rc := make(chan *Req)
-	defer close(rc)
-	go rAuth(ctx, rc)
 	var authc chan<- *Req
 	if s.Auth != nil {
-		authc = s.Auth(ctx, rc)
+		authc = s.Auth(ctx, s.respChan)
 		defer close(authc)
 	}
 	for {
@@ -251,41 +248,20 @@ func sAuth(ctx context.Context, s *Server, c <-chan *Req) {
 			if !ok {
 				return
 			}
+			if authc == nil {
+				setError(r, fmt.Errorf("authentication not required"))
+				s.respChan <- r
+				continue
+			}
 			ifcall := r.Ifcall.(*TAuth)
 			var err error
 			r.Afid, err = s.fPool.add(ifcall.Afid)
 			if err != nil {
-				r.err = ErrDupFid
-				rc <- r
+				setError(r, ErrDupFid)
+				s.respChan <- r
 				continue
 			}
-			if authc != nil {
-				authc <- r
-			} else {
-				r.err = fmt.Errorf("authentication not required")
-				rc <- r
-				continue
-			}
-		}
-	}
-}
-
-// rAuth checks if err is nil, and if not, it deletes the
-// allocated fid from fPool.
-func rAuth(ctx context.Context, c <-chan *Req) {
-	for {
-		select {
-		case <-ctx.Done():
-			return
-		case r, ok := <-c:
-			if !ok {
-				return
-			}
-			if r.err != nil {
-				r.Srv.fPool.delete(r.Ifcall.(*TAuth).Afid)
-				setError(r, r.err)
-			}
-			r.Srv.respChan <- r
+			authc <- r // TODO: I think Req.listenErr should be exported.
 		}
 	}
 }