On Tue, May 03, 2011 at 04:38:48AM +1000, cal wrote: > On 03/05/11 00:45, Julien Claassen wrote: > >[ ... ] > >Only slight problem there is, that one has to write the documentation oneself and I > > believe, that the other commands have to have some kind of server/responder developer > > involvement as well. But let's start small. > > I've been looking at this aspect in yoshimi. Small is good for now. > > cheers. Yes that is a problem. I wrote a simple patch for oscsend that starts a server, and prints out the reply it gets. I've tested this with ardour and dssi plugins, and they don't seem to respond to any of the possible queries like #type-signature or #documentation. It would be nice to have at least one program patched, (or make a program that does nothing, but responds to everything descently), so we have a test case... greetings, lieven P.S. This patch does not filter messages yet, because I first wanted to see what applications are responding to. It seems that the applications I tested don't even reply #error messages, when a query cannot be replied to. So that's probably all up to de developers... diff --git a/src/tools/oscsend.c b/src/tools/oscsend.c index 61ee1ee..66f3a5c 100644 --- a/src/tools/oscsend.c +++ b/src/tools/oscsend.c @@ -231,6 +231,26 @@ lo_message create_message(char **argv) return NULL; } +void error_handler(int num, const char *msg, const char *where) +{ + fprintf(stderr, "errno:%i\nmsg:%s\nwhere:%s\n", num, msg, where); +} + +int query_print_reply(const char *path, const char *types, lo_arg **argv, int argc, lo_message msg, void *user_data) +{ + fprintf(stdout, "path: %s\n", path); + fprintf(stdout, "types: %s\n", types); + fprintf(stdout, "argv[0]: "); + lo_arg_pp(types[0], argv[0]); + fprintf(stdout, "\n"); + fprintf(stdout, "argv[1]-argv[argc]: "); + unsigned int i; + for(i = 1; i < argc; i++){ + lo_arg_pp(types[i], argv[i]); + } + fprintf(stdout, "\n"); +} + int main(int argc, char **argv) { lo_address target; @@ -251,14 +271,21 @@ int main(int argc, char **argv) exit(1); } - target = lo_address_new(argv[1], argv[2]); - if (target == NULL) { - fprintf(stderr, "Failed to open %s:%s\n", argv[1], argv[2]); + if (argv[3] == NULL) { + fprintf(stderr, "No path is given.\n"); exit(1); } - if (argv[3] == NULL) { - fprintf(stderr, "No path is given.\n"); + lo_server_thread server_thread = lo_server_thread_new(NULL, error_handler); + lo_method method = lo_server_thread_add_method(server_thread, NULL, NULL, query_print_reply, NULL); + lo_server server = lo_server_thread_get_server(server_thread); + + if(lo_server_thread_start(server_thread) != 0) + fprintf(stderr, "Could not start server thread."); + + target = lo_address_new(argv[1], argv[2]); + if (target == NULL) { + fprintf(stderr, "Failed to open %s:%s\n", argv[1], argv[2]); exit(1); } @@ -277,5 +304,9 @@ int main(int argc, char **argv) exit(1); } + if(lo_server_wait(server, 20)){ + lo_server_recv(server); + } + return 0; } _______________________________________________ Linux-audio-user mailing list Linux-audio-user@xxxxxxxxxxxxxxxxxxxx http://lists.linuxaudio.org/listinfo/linux-audio-user