1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
/* iemnet
* copyright (c) 2010 IOhannes m zmlnig, IEM
*/
#define DEBUGLEVEL
#include "iemnet.h"
#include <stdlib.h>
void iemnet__addrout(t_outlet*status_outlet, t_outlet*address_outlet,
long address, unsigned short port) {
static t_atom addr[5];
static int firsttime=1;
if(firsttime) {
int i=0;
for(i=0; i<5; i++)SETFLOAT(addr+i, 0);
firsttime=0;
}
addr[0].a_w.w_float = (address & 0xFF000000)>>24;
addr[1].a_w.w_float = (address & 0x0FF0000)>>16;
addr[2].a_w.w_float = (address & 0x0FF00)>>8;
addr[3].a_w.w_float = (address & 0x0FF);
addr[4].a_w.w_float = port;
if(status_outlet )outlet_anything(status_outlet , gensym("address"), 5, addr);
if(address_outlet)outlet_list (address_outlet, gensym("list" ), 5, addr);
}
void iemnet__numconnout(t_outlet*status_outlet, t_outlet*numcon_outlet, int numconnections) {
t_atom atom[1];
SETFLOAT(atom, numconnections);
if(status_outlet)outlet_anything(status_outlet , gensym("connections"), 1, atom);
if(numcon_outlet)outlet_float (numcon_outlet, numconnections);
}
void iemnet__socketout(t_outlet*status_outlet, t_outlet*socket_outlet, int socketfd) {
t_atom atom[1];
SETFLOAT(atom, socketfd);
if(status_outlet)outlet_anything(status_outlet , gensym("socket"), 1, atom);
if(socket_outlet)outlet_float (socket_outlet, socketfd);
}
void iemnet__streamout(t_outlet*outlet, int argc, t_atom*argv, int stream) {
if(NULL==outlet)return;
if(stream) {
while(argc-->0) {
outlet_list(outlet, gensym("list"), 1, argv);
argv++;
}
} else {
outlet_list(outlet, gensym("list"), argc, argv);
}
}
typedef struct _names {
t_symbol*name;
struct _names*next;
} t_iemnet_names;
static t_iemnet_names*namelist=0;
static int iemnet__nametaken(const char*namestring) {
t_symbol*name=gensym(namestring);
t_iemnet_names*curname=namelist;
t_iemnet_names*lastname=curname;
while(curname) {
if(name==(curname->name)) {
return 1;
}
lastname=curname;
curname=curname->next;
}
// new name!
curname=(t_iemnet_names*)malloc(sizeof(t_iemnet_names));
curname->name=name;
curname->next=0;
if(lastname)
lastname->next=curname;
else
namelist=curname;
return 0;
}
int iemnet__register(const char*name) {
if(iemnet__nametaken(name))return 0;
post("iemnet - networking with Pd: [%s]", name);
#ifdef LIBRARY_VERSION
post(" version "LIBRARY_VERSION"");
#endif
post(" compiled on "__DATE__" at " __TIME__"");
post(" copyright (c) 2010 IOhannes m zmoelnig, IEM");
post(" based on mrpeach/net, based on maxlib");
return 1;
}
#ifdef _MSC_VER
void tcpclient_setup(void);
void tcpreceive_setup(void);
void tcpsend_setup(void);
void tcpserver_setup(void);
void udpclient_setup(void);
void udpreceive_setup(void);
void udpsend_setup(void);
void udpserver_setup(void);
#endif
int debuglevel=0;
void iemnet_debuglevel(void*x, t_float f) {
debuglevel=(int)f;
}
IEMNET_EXTERN void iemnet_setup(void) {
#ifdef _MSC_VER
tcpclient_setup();
tcpreceive_setup();
tcpsend_setup();
tcpserver_setup();
udpclient_setup();
udpreceive_setup();
udpsend_setup();
udpserver_setup();
#endif
}
|