aboutsummaryrefslogtreecommitdiff
path: root/udpsend.c
diff options
context:
space:
mode:
Diffstat (limited to 'udpsend.c')
-rw-r--r--udpsend.c87
1 files changed, 42 insertions, 45 deletions
diff --git a/udpsend.c b/udpsend.c
index 7def6cf..620f7c0 100644
--- a/udpsend.c
+++ b/udpsend.c
@@ -1,5 +1,5 @@
/* udpsend.c
- * copyright (c) 2010 IOhannes m zmölnig, IEM
+ * copyright (c) 2010 IOhannes m zmölnig, IEM
* copyright (c) 2006-2010 Martin Peach
* copyright (c) Miller Puckette
*/
@@ -18,9 +18,8 @@
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
-/* along with this program; if not, write to the Free Software */
-/* Foundation, Inc., */
-/* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
+/* along with this program; if not, see */
+/* http://www.gnu.org/licenses/ */
/* */
#define DEBUGLEVEL 1
@@ -32,44 +31,42 @@ static const char objName[] = "udpsend";
static t_class *udpsend_class;
-typedef struct _udpsend
-{
+typedef struct _udpsend {
t_object x_obj;
t_iemnet_sender*x_sender;
} t_udpsend;
static void udpsend_connect(t_udpsend *x, t_symbol *hostname,
- t_floatarg fportno)
+ t_floatarg fportno)
{
struct sockaddr_in server;
int sockfd;
int portno = fportno;
int broadcast = 1;/* nonzero is true */
+ memset(&server, 0, sizeof(server));
- if (x->x_sender)
- {
- error("[%s] already connected", objName);
- return;
- }
+ if (x->x_sender) {
+ error("[%s] already connected", objName);
+ return;
+ }
/* create a socket */
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
DEBUG("send socket %d\n", sockfd);
- if (sockfd < 0)
- {
- sys_sockerror("[udpsend] socket");
- return;
- }
+ if (sockfd < 0) {
+ sys_sockerror("[udpsend] socket");
+ return;
+ }
/* Based on zmoelnig's patch 2221504:
Enable sending of broadcast messages (if hostname is a broadcast address)*/
#ifdef SO_BROADCAST
- if( 0 != setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (const void *)&broadcast, sizeof(broadcast)))
- {
- error("[%s] couldn't switch to broadcast mode", objName);
- }
+ if( 0 != setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST,
+ (const void *)&broadcast, sizeof(broadcast))) {
+ error("[%s] couldn't switch to broadcast mode", objName);
+ }
#endif /* SO_BROADCAST */
-
+
/* connect socket using hostname provided in command line */
server.sin_family = AF_INET;
@@ -82,20 +79,19 @@ static void udpsend_connect(t_udpsend *x, t_symbol *hostname,
} else {
struct addrinfo * res;
for (res = addr; res != NULL; res = res->ai_next) {
- struct sockaddr_in *sa = (struct sockaddr_in *) res->ai_addr;
- int len = res->ai_addrlen;
- // memcpy((char *)&server.sin_addr, (char *)res->ai_addr, hp->h_length);
- // LATER check how to do that...
+ struct sockaddr_in *sa = (struct sockaddr_in *) res->ai_addr;
+ int len = res->ai_addrlen;
+ // memcpy((char *)&server.sin_addr, (char *)res->ai_addr, hp->h_length);
+ // LATER check how to do that...
}
}
freeaddrinfo(addr);
#else
struct hostent *hp = gethostbyname(hostname->s_name);
- if (hp == 0)
- {
- error("[%s] bad host '%s'?", objName, hostname->s_name);
- return;
- }
+ if (hp == 0) {
+ error("[%s] bad host '%s'?", objName, hostname->s_name);
+ return;
+ }
memcpy((char *)&server.sin_addr, (char *)hp->h_addr, hp->h_length);
#endif
} while(0);
@@ -105,20 +101,19 @@ static void udpsend_connect(t_udpsend *x, t_symbol *hostname,
DEBUG("connecting to port %d", portno);
/* try to connect. */
- if (connect(sockfd, (struct sockaddr *) &server, sizeof (server)) < 0)
- {
- sys_sockerror("[udpsend] connecting stream socket");
- sys_closesocket(sockfd);
- return;
- }
- x->x_sender=iemnet__sender_create(sockfd);
+ if (connect(sockfd, (struct sockaddr *) &server, sizeof (server)) < 0) {
+ sys_sockerror("[udpsend] connecting stream socket");
+ iemnet__closesocket(sockfd);
+ return;
+ }
+ x->x_sender=iemnet__sender_create(sockfd, NULL, NULL, 0);
outlet_float(x->x_obj.ob_outlet, 1);
}
static void udpsend_disconnect(t_udpsend *x)
{
if(x->x_sender) {
- iemnet__sender_destroy(x->x_sender);
+ iemnet__sender_destroy(x->x_sender, 0);
x->x_sender=NULL;
outlet_float(x->x_obj.ob_outlet, 0);
}
@@ -150,18 +145,20 @@ static void *udpsend_new(void)
IEMNET_EXTERN void udpsend_setup(void)
{
- if(!iemnet__register(objName))return;
+ if(!iemnet__register(objName)) {
+ return;
+ }
udpsend_class = class_new(gensym(objName), (t_newmethod)udpsend_new,
- (t_method)udpsend_free,
- sizeof(t_udpsend), 0, 0);
+ (t_method)udpsend_free,
+ sizeof(t_udpsend), 0, 0);
class_addmethod(udpsend_class, (t_method)udpsend_connect,
- gensym("connect"), A_SYMBOL, A_FLOAT, 0);
+ gensym("connect"), A_SYMBOL, A_FLOAT, 0);
class_addmethod(udpsend_class, (t_method)udpsend_disconnect,
- gensym("disconnect"), 0);
+ gensym("disconnect"), 0);
class_addmethod(udpsend_class, (t_method)udpsend_send, gensym("send"),
- A_GIMME, 0);
+ A_GIMME, 0);
class_addlist(udpsend_class, (t_method)udpsend_send);
DEBUGMETHOD(udpsend_class);
}