00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef LO_LOWLEVEL_H
00018 #define LO_LOWLEVEL_H
00019
00020 #include "lo/lo_osc_types.h"
00021
00027 #ifdef __cplusplus
00028 extern "C" {
00029 #endif
00030
00031 #include <stdarg.h>
00032 #ifdef _MSC_VER
00033 #define ssize_t SSIZE_T
00034 #define uint32_t unsigned __int32
00035 #else
00036 #include <stdint.h>
00037 #endif
00038
00039 #include "lo/lo_types.h"
00040 #include "lo/lo_errors.h"
00041
00055 typedef long double lo_hires;
00056
00057
00058
00059
00067 int lo_send_message(lo_address targ, const char *path, lo_message msg);
00068
00082 int lo_send_message_from(lo_address targ, lo_server serv,
00083 const char *path, lo_message msg);
00084
00091 int lo_send_bundle(lo_address targ, lo_bundle b);
00092
00104 int lo_send_bundle_from(lo_address targ, lo_server serv, lo_bundle b);
00105
00109 lo_message lo_message_new();
00110
00115 void lo_message_free(lo_message m);
00116
00130 int lo_message_add(lo_message m, const char *types, ...);
00131
00133 int lo_message_add_internal(lo_message m, const char *file, const int line,
00134 const char *types, ...);
00135
00154 int lo_message_add_varargs(lo_message m, const char *types, va_list ap);
00155
00157 int lo_message_add_varargs_internal(lo_message m, const char *types, va_list ap,
00158 const char *file, const int line);
00159
00170 int lo_message_add_int32(lo_message m, int32_t a);
00171
00178 int lo_message_add_float(lo_message m, float a);
00179
00186 int lo_message_add_string(lo_message m, const char *a);
00187
00194 int lo_message_add_blob(lo_message m, lo_blob a);
00195
00202 int lo_message_add_int64(lo_message m, int64_t a);
00203
00210 int lo_message_add_timetag(lo_message m, lo_timetag a);
00211
00218 int lo_message_add_double(lo_message m, double a);
00219
00226 int lo_message_add_symbol(lo_message m, const char *a);
00227
00234 int lo_message_add_char(lo_message m, char a);
00235
00242 int lo_message_add_midi(lo_message m, uint8_t a[4]);
00243
00250 int lo_message_add_true(lo_message m);
00251
00258 int lo_message_add_false(lo_message m);
00259
00266 int lo_message_add_nil(lo_message m);
00267
00274 int lo_message_add_infinitum(lo_message m);
00275
00281 lo_address lo_message_get_source(lo_message m);
00282
00289 lo_timetag lo_message_get_timestamp(lo_message m);
00290
00296 char *lo_message_get_types(lo_message m);
00297
00303 int lo_message_get_argc(lo_message m);
00304
00310 lo_arg **lo_message_get_argv(lo_message m);
00311
00318 size_t lo_message_length(lo_message m, const char *path);
00319
00334 void *lo_message_serialise(lo_message m, const char *path, void *to,
00335 size_t *size);
00336
00350 lo_message lo_message_deserialise(void *data, size_t size, int *result);
00351
00367 int lo_server_dispatch_data(lo_server s, void *data, size_t size);
00368
00375 const char *lo_address_get_hostname(lo_address a);
00376
00383 const char *lo_address_get_port(lo_address a);
00384
00390 int lo_address_get_protocol(lo_address a);
00391
00397 char *lo_address_get_url(lo_address a);
00398
00409 void lo_address_set_ttl(lo_address t, int ttl);
00410
00417 int lo_address_get_ttl(lo_address t);
00418
00429 lo_bundle lo_bundle_new(lo_timetag tt);
00430
00439 int lo_bundle_add_message(lo_bundle b, const char *path, lo_message m);
00440
00448 size_t lo_bundle_length(lo_bundle b);
00449
00463 void *lo_bundle_serialise(lo_bundle b, void *to, size_t *size);
00464
00470 void lo_bundle_free(lo_bundle b);
00471
00477 void lo_bundle_free_messages(lo_bundle b);
00478
00485 int lo_is_numerical_type(lo_type a);
00486
00493 int lo_is_string_type(lo_type a);
00494
00511 int lo_coerce(lo_type type_to, lo_arg *to, lo_type type_from, lo_arg *from);
00512
00517 lo_hires lo_hires_val(lo_type type, lo_arg *p);
00518
00535 lo_server lo_server_new(const char *port, lo_err_handler err_h);
00536
00553 lo_server lo_server_new_with_proto(const char *port, int proto,
00554 lo_err_handler err_h);
00555
00568 lo_server lo_server_new_multicast(const char *group, const char *port,
00569 lo_err_handler err_h);
00570
00574 void lo_server_free(lo_server s);
00575
00587 int lo_server_wait(lo_server s, int timeout);
00588
00600 int lo_server_recv_noblock(lo_server s, int timeout);
00601
00608 int lo_server_recv(lo_server s);
00609
00624 lo_method lo_server_add_method(lo_server s, const char *path,
00625 const char *typespec, lo_method_handler h,
00626 void *user_data);
00627
00636 void lo_server_del_method(lo_server s, const char *path,
00637 const char *typespec);
00638
00651 int lo_server_get_socket_fd(lo_server s);
00652
00659 int lo_server_get_port(lo_server s);
00660
00666 int lo_server_get_protocol(lo_server s);
00667
00673 char *lo_server_get_url(lo_server s);
00674
00679 int lo_server_events_pending(lo_server s);
00680
00686 double lo_server_next_event_delay(lo_server s);
00687
00696 char *lo_url_get_protocol(const char *url);
00697
00709 int lo_url_get_protocol_id(const char *url);
00710
00716 char *lo_url_get_hostname(const char *url);
00717
00723 char *lo_url_get_port(const char *url);
00724
00730 char *lo_url_get_path(const char *url);
00731
00732
00733
00740 int lo_strsize(const char *s);
00741
00748 uint32_t lo_blobsize(lo_blob b);
00749
00756 int lo_pattern_match(const char *str, const char *p);
00757
00759 int lo_send_internal(lo_address t, const char *file, const int line,
00760 const char *path, const char *types, ...);
00762 int lo_send_timestamped_internal(lo_address t, const char *file, const int line,
00763 lo_timetag ts, const char *path, const char *types, ...);
00765 int lo_send_from_internal(lo_address targ, lo_server from, const char *file,
00766 const int line, const lo_timetag ts,
00767 const char *path, const char *types, ...);
00768
00769
00774 double lo_timetag_diff(lo_timetag a, lo_timetag b);
00775
00781 void lo_timetag_now(lo_timetag *t);
00782
00786 size_t lo_arg_size(lo_type type, void *data);
00787
00797 char *lo_get_path(void *data, ssize_t size);
00798
00806 void lo_arg_host_endian(lo_type type, void *data);
00807
00815 void lo_arg_network_endian(lo_type type, void *data);
00816
00819
00820
00830 void lo_bundle_pp(lo_bundle b);
00831
00833 void lo_message_pp(lo_message m);
00834
00840 void lo_arg_pp(lo_type type, void *data);
00841
00843 void lo_server_pp(lo_server s);
00844
00846 void lo_method_pp(lo_method m);
00847
00850 void lo_method_pp_prefix(lo_method m, const char *p);
00851
00853 void lo_server_thread_pp(lo_server_thread st);
00856 #ifdef __cplusplus
00857 }
00858 #endif
00859
00860 #endif