diff options
-rw-r--r-- | net/tcpclient-help.pd | 210 | ||||
-rw-r--r-- | net/tcpclient.c | 37 |
2 files changed, 131 insertions, 116 deletions
diff --git a/net/tcpclient-help.pd b/net/tcpclient-help.pd index 807c1ae..1803d01 100644 --- a/net/tcpclient-help.pd +++ b/net/tcpclient-help.pd @@ -1,102 +1,108 @@ -#N canvas 184 7 1096 649 12;
-#X msg -112 56 disconnect;
-#X obj 219 439 unpack 0 0 0 0;
-#X floatatom 219 462 3 0 0 0 - - -;
-#X floatatom 250 462 3 0 0 0 - - -;
-#X floatatom 282 462 3 0 0 0 - - -;
-#X floatatom 314 462 3 0 0 0 - - -;
-#X text 179 461 from;
-#X msg -175 -7 connect 132.205.142.12 80;
-#X obj 199 387 tcpclient;
-#X obj 239 413 tgl 15 0 empty empty connected 18 7 0 8 -24198 -241291
--1 0 1;
-#X msg -88 80 dump \$1;
-#X obj -140 65 tgl 15 0 empty empty empty 0 -6 0 8 -4034 -257985 -1
-0 1;
-#X msg 11 179 receive;
-#X msg 35 203 recv;
-#X text -59 -58 connect with an IP address and port number;
-#X msg -200 -32 connect www.concordia.ca 80;
-#X text -17 79 print received messages to main window in hexdump format
-;
-#X text 270 386 tcpclient opens a tcp socket to send and receive bytes
-on;
-#X text -217 305 See also:;
-#X obj -212 329 netclient;
-#X msg -225 -57 connect 127.0.0.1 9997;
-#X obj -212 352 tcpreceive;
-#X text -214 374 can receive messages from tcpclient;
-#X text -136 328 is what tcpclient is based on;
-#X text 250 513 Received messages are output as a list of bytes;
-#X text 271 542 Attempting to print long messages output can hang pd!
-;
-#X text 77 176 get any received data (not useful unless you need it
-faster than once per 20ms);
-#X text 220 225 semicolon-terminated string for netserver or netreceive
-;
-#X msg 59 227 send 49 127 128 51 59;
-#X obj -84 352 tcpserver;
-#X text -118 351 and;
-#X text 347 -55 tcpclient can connect to a server and send and receive
-messages as lists of bytes. Any integer value between 0 and 255 can
-be transmitted or received.;
-#X msg -63 105 send ../doc/5.reference/test.txt;
-#X obj -15 129 openpanel;
-#X msg -15 153 send \$1;
-#X obj -101 114 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198
--241291 -1;
-#X text 172 105 send a file;
-#X text 62 128 ...any file;
-#X msg 99 251 71 69 84 32 104 116 116 112 58 47 47 47 105 110 100 101
-120 46 104 116 109 108 13 10;
-#X text 529 257 'send' prefix is optional;
-#X obj 199 514 spigot;
-#X obj 238 491 tgl 15 0 empty empty enable_print 18 7 0 8 -24198 -241291
--1 0 1;
-#X obj 199 543 print >>>;
-#X msg -136 16 send 71 69 84 32 104 116 116 112 58 47 47 47 105 110
-100 101 120 46 112 104 112 13 10;
-#X text 272 24 GET http:///index.phpCRLF;
-#X floatatom 374 433 9 0 0 0 - - -;
-#X text 173 291 set send-buffer size;
-#X obj 374 407 route sent buf;
-#X floatatom 421 457 9 0 0 0 - - -;
-#X text 491 456 Size of the send buffer;
-#X text 448 432 Number of bytes sent (may still be in buffer);
-#X msg 147 315 buf;
-#X text 177 314 get send-buffer size;
-#X msg 123 291 buf 10;
-#X msg 172 340 timeout 100;
-#X text 260 339 set send timeout in microseconds (default is 1000)
-;
-#X text -208 540 2009/04/08 Martin Peach;
-#X connect 0 0 8 0;
-#X connect 1 0 2 0;
-#X connect 1 1 3 0;
-#X connect 1 2 4 0;
-#X connect 1 3 5 0;
-#X connect 7 0 8 0;
-#X connect 8 0 40 0;
-#X connect 8 1 1 0;
-#X connect 8 2 9 0;
-#X connect 8 3 47 0;
-#X connect 10 0 8 0;
-#X connect 11 0 10 0;
-#X connect 12 0 8 0;
-#X connect 13 0 8 0;
-#X connect 15 0 8 0;
-#X connect 20 0 8 0;
-#X connect 28 0 8 0;
-#X connect 32 0 8 0;
-#X connect 33 0 34 0;
-#X connect 34 0 8 0;
-#X connect 35 0 33 0;
-#X connect 38 0 8 0;
-#X connect 40 0 42 0;
-#X connect 41 0 40 1;
-#X connect 43 0 8 0;
-#X connect 47 0 45 0;
-#X connect 47 1 48 0;
-#X connect 51 0 8 0;
-#X connect 53 0 8 0;
-#X connect 54 0 8 0;
+#N canvas 184 70 1096 649 12; +#X msg -112 56 disconnect; +#X obj 219 439 unpack 0 0 0 0; +#X floatatom 219 462 3 0 0 0 - - -; +#X floatatom 250 462 3 0 0 0 - - -; +#X floatatom 282 462 3 0 0 0 - - -; +#X floatatom 314 462 3 0 0 0 - - -; +#X text 179 461 from; +#X msg -175 -7 connect 132.205.142.12 80; +#X obj 199 387 tcpclient; +#X obj 239 413 tgl 15 0 empty empty connected 18 7 0 8 -24198 -241291 +-1 0 1; +#X msg -88 80 dump \$1; +#X obj -140 65 tgl 15 0 empty empty empty 0 -6 0 8 -4034 -257985 -1 +1 1; +#X msg 11 179 receive; +#X msg 35 203 recv; +#X text -59 -58 connect with an IP address and port number; +#X msg -200 -32 connect www.concordia.ca 80; +#X text -17 79 print received messages to main window in hexdump format +; +#X text 270 386 tcpclient opens a tcp socket to send and receive bytes +on; +#X text -217 305 See also:; +#X obj -212 329 netclient; +#X msg -225 -57 connect 127.0.0.1 9997; +#X obj -212 352 tcpreceive; +#X text -214 374 can receive messages from tcpclient; +#X text -136 328 is what tcpclient is based on; +#X text 250 513 Received messages are output as a list of bytes; +#X text 77 176 get any received data (not useful unless you need it +faster than once per 20ms); +#X text 220 225 semicolon-terminated string for netserver or netreceive +; +#X msg 59 227 send 49 127 128 51 59; +#X obj -84 352 tcpserver; +#X text -118 351 and; +#X text 347 -55 tcpclient can connect to a server and send and receive +messages as lists of bytes. Any integer value between 0 and 255 can +be transmitted or received.; +#X msg -63 105 send ../doc/5.reference/test.txt; +#X obj -15 129 openpanel; +#X msg -15 153 send \$1; +#X obj -101 114 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198 +-241291 -1; +#X text 172 105 send a file; +#X text 62 128 ...any file; +#X msg 99 251 71 69 84 32 104 116 116 112 58 47 47 47 105 110 100 101 +120 46 104 116 109 108 13 10; +#X text 529 257 'send' prefix is optional; +#X obj 199 514 spigot; +#X obj 238 491 tgl 15 0 empty empty enable_print 18 7 0 8 -24198 -241291 +-1 0 1; +#X obj 199 543 print >>>; +#X text 272 24 GET http:///index.phpCRLF; +#X floatatom 374 433 9 0 0 0 - - -; +#X text 173 291 set send-buffer size; +#X obj 374 407 route sent buf; +#X floatatom 421 457 9 0 0 0 - - -; +#X text 491 456 Size of the send buffer; +#X text 448 432 Number of bytes sent (may still be in buffer); +#X msg 147 315 buf; +#X text 177 314 get send-buffer size; +#X msg 123 291 buf 10; +#X msg 170 338 timeout 100; +#X text 258 337 set send timeout in microseconds (default is 1000) +; +#X msg 194 362 verbosity \$1; +#X obj 139 347 tgl 15 1 empty empty empty 0 -6 0 8 -4034 -257985 -1 +0 1; +#X text 289 362 print connection status messages to main window (default) +; +#X msg -136 16 send 71 69 84 32 104 116 116 112 58 47 47 47 105 110 +100 101 120 46 112 104 112 13 10 13 10; +#X text -208 540 2010/03/01 Martin Peach; +#X text 271 542 Attempting to print long messages can hang Pd!; +#X connect 0 0 8 0; +#X connect 1 0 2 0; +#X connect 1 1 3 0; +#X connect 1 2 4 0; +#X connect 1 3 5 0; +#X connect 7 0 8 0; +#X connect 8 0 39 0; +#X connect 8 1 1 0; +#X connect 8 2 9 0; +#X connect 8 3 45 0; +#X connect 10 0 8 0; +#X connect 11 0 10 0; +#X connect 12 0 8 0; +#X connect 13 0 8 0; +#X connect 15 0 8 0; +#X connect 20 0 8 0; +#X connect 27 0 8 0; +#X connect 31 0 8 0; +#X connect 32 0 33 0; +#X connect 33 0 8 0; +#X connect 34 0 32 0; +#X connect 37 0 8 0; +#X connect 39 0 41 0; +#X connect 40 0 39 1; +#X connect 45 0 43 0; +#X connect 45 1 46 0; +#X connect 49 0 8 0; +#X connect 51 0 8 0; +#X connect 52 0 8 0; +#X connect 54 0 8 0; +#X connect 55 0 54 0; +#X connect 57 0 8 0; diff --git a/net/tcpclient.c b/net/tcpclient.c index 614d2ab..93fbb91 100644 --- a/net/tcpclient.c +++ b/net/tcpclient.c @@ -67,6 +67,7 @@ typedef struct _tcpclient t_outlet *x_connectout; t_outlet *x_statusout; int x_dump; // 1 = hexdump received bytes + int x_verbosity; // 1 = post connection state changes to main window int x_fd; // the socket int x_fdbuf; // the socket's buffer size t_int x_timeout_us; /* send timeout in microseconds */ @@ -83,8 +84,9 @@ typedef struct _tcpclient } t_tcpclient; static void tcpclient_timeout(t_tcpclient *x, t_float timeout); +static void tcpclient_verbosity(t_tcpclient *x, t_float verbosity); static void tcpclient_dump(t_tcpclient *x, t_float dump); -static void tcp_client_hexdump(unsigned char *buf, long len); +static void tcp_client_hexdump(t_tcpclient *x, long len); static void tcpclient_tick(t_tcpclient *x); static void *tcpclient_child_connect(void *w); static void tcpclient_connect(t_tcpclient *x, t_symbol *hostname, t_floatarg fportno); @@ -119,15 +121,20 @@ static void tcpclient_dump(t_tcpclient *x, t_float dump) x->x_dump = (dump == 0)?0:1; } -static void tcp_client_hexdump(unsigned char *buf, long len) +static void tcpclient_verbosity(t_tcpclient *x, t_float verbosity) +{ + x->x_verbosity = (verbosity == 0)?0:1; /* only two states so far */ +} + +static void tcp_client_hexdump(t_tcpclient *x, long len) { #define BYTES_PER_LINE 16 - char hexStr[(3*BYTES_PER_LINE)+1]; - char ascStr[BYTES_PER_LINE+1]; - long i, j, k = 0L; -#ifdef DEBUG - post("tcp_client_hexdump %d", len); -#endif + char hexStr[(3*BYTES_PER_LINE)+1]; + char ascStr[BYTES_PER_LINE+1]; + long i, j, k = 0L; + unsigned char *buf = x->x_msginbuf; + + if (x->x_verbosity) post("%s_hexdump %d:", objName, len); while (k < len) { for (i = j = 0; i < BYTES_PER_LINE; ++i, ++k, j+=3) @@ -188,7 +195,7 @@ static void *tcpclient_child_connect(void *w) /* assign client port number */ server.sin_port = htons((u_short)x->x_port); - post("%s: connecting socket %d to port %d", objName, sockfd, x->x_port); + if (x->x_verbosity) post("%s: connecting socket %d to port %d", objName, sockfd, x->x_port); /* try to connect */ if (connect(sockfd, (struct sockaddr *) &server, sizeof (server)) < 0) { @@ -226,7 +233,7 @@ static void tcpclient_disconnect(t_tcpclient *x) x->x_fd = -1; x->x_connectstate = 0; outlet_float(x->x_connectout, 0); - post("%s: disconnected", objName); + if (x->x_verbosity) post("%s: disconnected", objName); } else post("%s: not connected", objName); } @@ -296,7 +303,7 @@ static void tcpclient_send(t_tcpclient *x, t_symbol *s, int argc, t_atom *argv) } fclose(fptr); fptr = NULL; - post("%s_send: read \"%s\" length %d byte%s", objName, fpath, j, ((d==1)?"":"s")); + if (x->x_verbosity) post("%s_send: read \"%s\" length %d byte%s", objName, fpath, j, ((d==1)?"":"s")); } else { @@ -397,7 +404,7 @@ static void tcpclient_buf_size(t_tcpclient *x, t_symbol *s, int argc, t_atom *ar } buf_size = atom_getfloatarg(0, argc, argv); x->x_fdbuf = tcpclient_set_socket_send_buf_size(x, (int)buf_size); - post("%s_buf_size: set to %d", objName, x->x_fdbuf); + if (x->x_verbosity) post("%s_buf_size: set to %d", objName, x->x_fdbuf); return; } x->x_fdbuf = tcpclient_get_socket_send_buf_size(x); @@ -441,7 +448,7 @@ static void tcpclient_rcv(t_tcpclient *x) x->x_msginbuf[ret] = 0; post("%s: received %d bytes ", objName, ret); #endif - if (x->x_dump)tcp_client_hexdump(x->x_msginbuf, ret); + if (x->x_dump)tcp_client_hexdump(x, ret); for (i = 0; i < ret; ++i) { /* convert the bytes in the buffer to floats in a list */ @@ -466,7 +473,7 @@ static void tcpclient_rcv(t_tcpclient *x) } else { - post("%s: connection closed for socket %d\n", objName, sockfd); + if (x->x_verbosity) post("%s: connection closed for socket %d\n", objName, sockfd); tcpclient_disconnect(x); } } @@ -493,6 +500,7 @@ static void *tcpclient_new(t_floatarg udpflag) x->x_statusout = outlet_new(&x->x_obj, &s_anything);/* last outlet for everything else */ x->x_clock = clock_new(x, (t_method)tcpclient_tick); x->x_poll = clock_new(x, (t_method)tcpclient_poll); + x->x_verbosity = 1; /* default post status changes to main window */ x->x_fd = -1; /* convert the bytes in the buffer to floats in a list */ for (i = 0; i < MAX_UDP_RECEIVE; ++i) @@ -535,6 +543,7 @@ void tcpclient_setup(void) class_addmethod(tcpclient_class, (t_method)tcpclient_buf_size, gensym("buf"), A_GIMME, 0); class_addmethod(tcpclient_class, (t_method)tcpclient_rcv, gensym("receive"), 0); class_addmethod(tcpclient_class, (t_method)tcpclient_rcv, gensym("rcv"), 0); + class_addmethod(tcpclient_class, (t_method)tcpclient_verbosity, gensym("verbosity"), A_FLOAT, 0); class_addmethod(tcpclient_class, (t_method)tcpclient_dump, gensym("dump"), A_FLOAT, 0); class_addmethod(tcpclient_class, (t_method)tcpclient_timeout, gensym("timeout"), A_FLOAT, 0); class_addlist(tcpclient_class, (t_method)tcpclient_send); |