00001 #ifndef LO_TYPES_H 00002 #define LO_TYPES_H 00003 00004 #ifdef HAVE_CONFIG_H 00005 #include "config.h" 00006 #endif 00007 00008 #ifdef HAVE_SYS_SOCKET_H 00009 #include <sys/socket.h> 00010 #endif 00011 00012 #ifdef HAVE_POLL 00013 #include <poll.h> 00014 #endif 00015 00016 #ifdef WIN32 00017 #include <winsock2.h> 00018 #include <ws2tcpip.h> 00019 #else 00020 #include <netdb.h> 00021 #endif 00022 00023 #ifdef _MSC_VER 00024 typedef SSIZE_T ssize_t; 00025 typedef unsigned __int64 uint64_t; 00026 typedef unsigned __int32 uint32_t; 00027 typedef __int64 int64_t; 00028 typedef __int32 int32_t; 00029 #endif 00030 00031 #include <pthread.h> 00032 00033 #include "lo/lo_osc_types.h" 00034 00035 typedef void (*lo_err_handler)(int num, const char *msg, const char *path); 00036 00037 struct _lo_method; 00038 00039 typedef struct _lo_address { 00040 char *host; 00041 int socket; 00042 char *port; 00043 int protocol; 00044 struct addrinfo *ai; 00045 int errnum; 00046 const char *errstr; 00047 int ttl; 00048 } *lo_address; 00049 00050 typedef struct _lo_blob { 00051 uint32_t size; 00052 char *data; 00053 } *lo_blob; 00054 00055 typedef struct _lo_message { 00056 char *types; 00057 size_t typelen; 00058 size_t typesize; 00059 void *data; 00060 size_t datalen; 00061 size_t datasize; 00062 lo_address source; 00063 lo_arg **argv; 00064 /* timestamp from bundle (LO_TT_IMMEDIATE for unbundled messages) */ 00065 lo_timetag ts; 00066 } *lo_message; 00067 00068 typedef int (*lo_method_handler)(const char *path, const char *types, 00069 lo_arg **argv, int argc, struct _lo_message 00070 *msg, void *user_data); 00071 00072 typedef struct _lo_method { 00073 const char *path; 00074 const char *typespec; 00075 lo_method_handler handler; 00076 char *user_data; 00077 struct _lo_method *next; 00078 } *lo_method; 00079 00080 typedef struct _lo_server { 00081 struct addrinfo *ai; 00082 lo_method first; 00083 lo_err_handler err_h; 00084 int port; 00085 char *hostname; 00086 char *path; 00087 int protocol; 00088 void *queued; 00089 struct sockaddr_storage addr; 00090 socklen_t addr_len; 00091 int sockets_len; 00092 int sockets_alloc; 00093 #ifdef HAVE_POLL 00094 struct pollfd *sockets; 00095 #else 00096 struct { int fd; } *sockets; 00097 #endif 00098 } *lo_server; 00099 00100 typedef struct _lo_server_thread { 00101 lo_server s; 00102 pthread_t thread; 00103 volatile int active; 00104 volatile int done; 00105 } *lo_server_thread; 00106 00107 typedef struct _lo_bundle { 00108 size_t size; 00109 size_t len; 00110 lo_timetag ts; 00111 lo_message *msgs; 00112 char **paths; 00113 } *lo_bundle; 00114 00115 typedef struct _lo_strlist { 00116 char *str; 00117 struct _lo_strlist *next; 00118 } lo_strlist; 00119 00120 typedef union { 00121 int32_t i; 00122 float f; 00123 char c; 00124 uint32_t nl; 00125 } lo_pcast32; 00126 00127 typedef union { 00128 int64_t i; 00129 double f; 00130 uint64_t nl; 00131 lo_timetag tt; 00132 } lo_pcast64; 00133 00134 extern struct lo_cs { 00135 int udp; 00136 int tcp; 00137 } lo_client_sockets; 00138 00139 #endif
1.4.5-20051010