]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - vss.c
server.c: Introduce server_select().
[paraslash.git] / vss.c
diff --git a/vss.c b/vss.c
index a59c00f819d1f7284edd64e04bfb7a045fa452ee..e21a1ff4fd13a715fc465c2c2758f72961856aa3 100644 (file)
--- a/vss.c
+++ b/vss.c
@@ -36,7 +36,33 @@ static struct timeval eof_barrier;
 static struct timeval autoplay_barrier;
 
 extern struct misc_meta_data *mmd;
-extern struct sender senders[];
+
+extern void dccp_send_init(struct sender *);
+extern void http_send_init(struct sender *);
+extern void ortp_send_init(struct sender *);
+
+/** the list of supported senders */
+struct sender senders[] = {
+       {
+               .name = "http",
+               .init = http_send_init,
+       },
+       {
+               .name = "dccp",
+               .init = dccp_send_init,
+       },
+#ifdef HAVE_ORTP
+       {
+               .name = "ortp",
+               .init = ortp_send_init,
+       },
+#endif
+       {
+               .name = NULL,
+       }
+};
+
+
 
 static char *map;
 
@@ -138,6 +164,7 @@ void vss_init(void)
        }
        free(hn);
        free(home);
+       mmd->sender_cmd_data.cmd_num = -1;
        if (conf.autoplay_given) {
                struct timeval now, tmp;
                mmd->vss_status_flags |= VSS_PLAYING;
@@ -490,6 +517,14 @@ void vss_post_select(fd_set *rfds, fd_set *wfds)
 {
        int ret, i;
 
+       if (mmd->sender_cmd_data.cmd_num >= 0) {
+               int num = mmd->sender_cmd_data.cmd_num,
+                       s = mmd->sender_cmd_data.sender_num;
+
+               if (senders[s].client_cmds[num])
+                       senders[s].client_cmds[num](&mmd->sender_cmd_data);
+               mmd->sender_cmd_data.cmd_num = -1;
+       }
        if (afsss != AFS_SOCKET_CHECK_FOR_WRITE) {
                if (FD_ISSET(afs_socket, rfds))
                        recv_afs_result();