lo_types_internal.h

Go to the documentation of this file.
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

Generated on Sat Oct 17 14:12:32 2009 for CSL by  doxygen 1.4.5-20051010