Index: libroar/Makefile
===================================================================
--- libroar/Makefile	(revision 4314)
+++ libroar/Makefile	(revision 4341)
@@ -8,5 +8,5 @@
 VIO_BRIDGE=vio_bio.o vio_stdio.o
 VIO=$(VIO_META) $(VIO_BRIDGE) vio_cmd.o vio_magic.o vio_pipe.o vio_socket.o vio_winsock.o vio_stack.o vio_jumbo.o vio_proto.o vio_dstr.o vio_tantalos.o vio_rtp.o vio_buffer.o vio_buffer_store.o
-OBJS=libroar.o config.o debug.o error.o basic.o stream.o client.o simple.o auth.o socket.o ctl.o buffer.o meta.o file.o acl.o cdrom.o pinentry.o sshaskpass.o $(VIO) stack.o slp.o nnode.o roardl.o roarx11.o beep.o proto.o env.o keyval.o vs.o ltm.o notify.o notify_proxy.o
+OBJS=libroar.o config.o debug.o error.o basic.o stream.o client.o simple.o auth.o socket.o ctl.o buffer.o meta.o file.o acl.o cdrom.o pinentry.o sshaskpass.o $(VIO) stack.o slp.o nnode.o roardl.o roarx11.o beep.o proto.o env.o keyval.o vs.o ltm.o notify.o notify_proxy.o asyncctl.o
 
 #DEFINES        = -DDEBUG
Index: libroar/asyncctl.c
===================================================================
--- libroar/asyncctl.c	(revision 4341)
+++ libroar/asyncctl.c	(revision 4341)
@@ -0,0 +1,117 @@
+//asyncctl.c:
+
+/*
+ *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2010
+ *
+ *  This file is part of libroar a part of RoarAudio,
+ *  a cross-platform sound system for both, home and professional use.
+ *  See README for details.
+ *
+ *  This file is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 3
+ *  as published by the Free Software Foundation.
+ *
+ *  libroar is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this software; see the file COPYING.  If not, write to
+ *  the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ *  Boston, MA 02110-1301, USA.
+ *
+ *  NOTE for everyone want's to change something and send patches:
+ *  read README and HACKING! There a addition information on
+ *  the license of this document you need to read before you send
+ *  any patches.
+ *
+ *  NOTE for uses of non-GPL (LGPL,...) software using libesd, libartsc
+ *  or libpulse*:
+ *  The libs libroaresd, libroararts and libroarpulse link this lib
+ *  and are therefore GPL. Because of this it may be illigal to use
+ *  them with any software that uses libesd, libartsc or libpulse*.
+ */
+
+#include "libroar.h"
+
+int roar_wait (struct roar_connection * con, struct roar_event * triggered, struct roar_event * events, size_t num) {
+ struct roar_message m;
+ uint16_t * u16 = (uint16_t *) m.data;
+ void * vp = m.data;
+ size_t i, len_left, len_have, tmp;
+
+ if ( con == NULL || triggered == NULL )
+  return -1;
+
+ memset(triggered, 0, sizeof(struct roar_event));
+
+ if ( num == 0 )
+  return 0;
+
+ if ( events == NULL )
+  return -1;
+
+ memset(&m, 0, sizeof(m));
+
+ m.cmd = ROAR_CMD_WAIT;
+ m.stream = -1;
+
+ u16[0] = ROAR_HOST2NET16(0); // version
+ u16[1] = ROAR_HOST2NET16(0); // flags
+
+ vp += 4; // we have 4 byte header (version + flags)
+
+ len_left = sizeof(m.data) - 4;
+ len_have = 4;
+
+ for (i = 0; i < num; i++) {
+  tmp = len_left;
+  if ( roar_event_to_blob(&(events[i]), vp, &tmp) == -1 )
+   return -1;
+
+  len_left -= tmp;
+  len_have += tmp;
+  vp       += tmp;
+ }
+
+ m.datalen = len_have;
+
+ if ( roar_req(con, &m, NULL) != 0 )
+  return -1;
+
+ if ( m.cmd != ROAR_CMD_OK )
+  return -1;
+
+ u16[0] = ROAR_NET2HOST16(u16[0]);
+ u16[1] = ROAR_NET2HOST16(u16[1]);
+
+ // check if we have a complet header:
+ if ( m.datalen < 2 )
+  return -1;
+
+ // check if we have a unsupported version or flags:
+ if ( u16[0] != 0 || u16[1] != 0 )
+  return -1;
+
+ vp  = (void*)m.data;
+ vp += 4;
+ len_have = tmp = m.datalen - 4;
+
+ if ( roar_event_from_blob(triggered, vp, &tmp) != 0 )
+  return -1;
+
+ // test if we have a length match:
+ if ( len_have != tmp )
+  return -1;
+
+ // we now have an event.
+
+ // we maybe have some data, need to reset this as it is of a local buffer:
+ triggered->arg2 = NULL;
+ triggered->arg2_len = 0;
+
+ return 0;
+}
+
+//ll
