void *oudpreceive_new(t_symbol *s, int argc, t_atom *argv) { t_oudpreceive *x; x = (t_oudpreceive *)object_alloc(oudpreceive_class); if(!x) return NULL; int i, result = 0, portno = 0; x->x_addr_name[0] = '\0'; for (i = 0; i < 5; ++i) { x->x_addrbytes[i].a_type = A_FLOAT; x->x_addrbytes[i].a_w.w_float = 0; } #ifdef DEBUG post("udpreceive_new:argc is %d s is %s", argc, s->s_name); #endif for (i = 0; i < argc ;++i) { if (argv[i].a_type == A_FLOAT) { // float is taken to be a port number #ifdef DEBUG post ("argv[%d] is a float: %f", i, argv[i].a_w.w_float); #endif portno = (int)argv[i].a_w.w_float; } else if (argv[i].a_type == A_SYMBOL) { // symbol is taken to be an ip address (for multicast) #ifdef DEBUG post ("argv[%d] is a symbol: %s", i, argv[i].a_w.w_symbol->s_name); #endif atom_string(&argv[i], x->x_addr_name, 256); } } #ifdef DEBUG post("Setting port %d, address %s", portno, x->addr); #endif x->outlet = outlet_new(&x->ob, NULL); // << output received bundle x->x_addrout = outlet_new(&x->ob, &s_anything); x->x_connectsocket = -1; // no socket result = udpreceive_new_socket(x, x->x_addr_name, portno); // ------- from slip.decode --------- x->icount = 0; x->istate = 0; critical_new(&(x->lock)); return x; }
static void *udpreceive_new(t_symbol *s, int argc, t_atom *argv) { t_udpreceive *x; int result = 0, portno = 0; int i; x = (t_udpreceive *)pd_new(udpreceive_class); /* if something fails we return 0 instead of x. Is this OK? */ if (NULL == x) return x; x->x_addr_name[0] = '\0'; /* convert the bytes in the buffer to floats in a list */ for (i = 0; i < MAX_UDP_RECEIVE; ++i) { x->x_msgoutbuf[i].a_type = A_FLOAT; x->x_msgoutbuf[i].a_w.w_float = 0; } for (i = 0; i < 5; ++i) { x->x_addrbytes[i].a_type = A_FLOAT; x->x_addrbytes[i].a_w.w_float = 0; } #ifdef DEBUG post("udpreceive_new:argc is %d s is %s", argc, s->s_name); #endif for (i = 0; i < argc ;++i) { if (argv[i].a_type == A_FLOAT) { // float is taken to be a port number #ifdef DEBUG post ("argv[%d] is a float: %f", i, argv[i].a_w.w_float); #endif portno = (int)argv[i].a_w.w_float; } else if (argv[i].a_type == A_SYMBOL) { // symbol is taken to be an ip address (for multicast) #ifdef DEBUG post ("argv[%d] is a symbol: %s", i, argv[i].a_w.w_symbol->s_name); #endif atom_string(&argv[i], x->x_addr_name, 256); } } #ifdef DEBUG post("Setting port %d, address %s", portno, x->addr); #endif x->x_msgout = outlet_new(&x->x_obj, &s_anything); x->x_addrout = outlet_new(&x->x_obj, &s_anything); x->x_connectsocket = -1; // no socket result = udpreceive_new_socket(x, x->x_addr_name, portno); return (x); }
static void udpreceive_port(t_udpreceive *x, t_float portno) { int result = udpreceive_new_socket(x, x->x_addr_name, (int)portno); }