]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - vss.c
Call sender functions from vss.c rather than from server.c.
[paraslash.git] / vss.c
diff --git a/vss.c b/vss.c
index acac159537171c95560e5582dfef538554f04f23..4024284a990614d193f05ad55ca126f85d612638 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -298,19 +298,15 @@ struct timeval *vss_preselect(fd_set *rfds, fd_set *wfds, int *max_fileno)
        if (!map || vss_next() || vss_paused() || vss_repos())
                for (i = 0; senders[i].name; i++)
                        senders[i].shutdown_clients();
-       if (vss_next()) {
+       if (vss_next())
                vss_eof();
-               goto out;
-       }
-       if (vss_paused()) {
+       else if (vss_paused()) {
                if (mmd->chunks_sent) {
                        gettimeofday(&now, NULL);
                        tv_add(&mmd->afd.afhi.eof_tv, &now, &eof_barrier);
                }
                mmd->chunks_sent = 0;
-               goto out;
-       }
-       if (vss_repos()) {
+       } else if (vss_repos()) {
                gettimeofday(&now, NULL);
                tv_add(&now, &announce_tv, &data_send_barrier);
                tv_add(&mmd->afd.afhi.eof_tv, &now, &eof_barrier);
@@ -318,13 +314,18 @@ struct timeval *vss_preselect(fd_set *rfds, fd_set *wfds, int *max_fileno)
                mmd->current_chunk = mmd->repos_request;
                mmd->new_vss_status_flags &= ~VSS_REPOS;
        }
-out:
+
        if (need_to_request_new_audio_file()) {
                PARA_DEBUG_LOG("ready and playing, but no audio file\n");
                para_fd_set(afs_socket, wfds, max_fileno);
                afsss = AFS_SOCKET_CHECK_FOR_WRITE;
        } else
                para_fd_set(afs_socket, rfds, max_fileno);
+       for (i = 0; senders[i].name; i++) {
+               if (!senders[i].pre_select)
+                       continue;
+               senders[i].pre_select(max_fileno, rfds, wfds);
+       }
        return vss_compute_timeout();
 }
 
@@ -416,18 +417,22 @@ err:
 
 void vss_post_select(fd_set *rfds, fd_set *wfds)
 {
-       int ret;
+       int ret, i;
 
        if (afsss != AFS_SOCKET_CHECK_FOR_WRITE) {
                if (FD_ISSET(afs_socket, rfds))
                        recv_afs_result();
-               return;
+       } else if (FD_ISSET(afs_socket, wfds)) {
+               PARA_NOTICE_LOG("requesting new fd from afs\n");
+               ret = send_buffer(afs_socket, "new");
+               afsss = AFS_SOCKET_AFD_PENDING;
        }
-       if (!FD_ISSET(afs_socket, wfds))
-               return;
-       PARA_NOTICE_LOG("requesting new fd from afs\n");
-       ret = send_buffer(afs_socket, "new");
-       afsss = AFS_SOCKET_AFD_PENDING;
+       for (i = 0; senders[i].name; i++) {
+               if (!senders[i].post_select)
+                       continue;
+               senders[i].post_select(rfds, wfds);
+       }
+       vss_send_chunk();
 }
 
 /**