obexapp print stream statistics after transfer

Iain Hibbert plunky at rya-online.net
Tue Oct 19 17:23:54 UTC 2010


Hi,

the attached patch implements a statistics report after a stream transfer
in client mode, eg

% obexapp -a phone -C ftrn -f -n put image.jpg
146753 bytes streamed in 13 seconds (11288 bytes/sec)

regards,
iain
-------------- next part --------------
--- client.c.orig	2010-01-08 18:31:22.000000000 +0000
+++ client.c	2010-10-19 18:14:38.000000000 +0100
@@ -50,6 +50,7 @@
 #include "client.h"
 #include "event.h"
 #include "log.h"
+#include "stream.h"
 #include "util.h"
 
 /*
@@ -769,6 +770,8 @@ obexapp_client_request_put(obex_t *handl
 			log_err("%s(): Could not add HDR_BODY", __func__);
 			goto done;
 		}
+
+		obexapp_stream_stats_reset(context);
 		break;
 
 	case OBEXAPP_PUT_CREATE_EMPTY:
@@ -803,8 +806,12 @@ obexapp_client_request_put(obex_t *handl
 
 	if (context->rsp != OBEX_RSP_SUCCESS)
 		error = -1;
-	else
+	else {
 		error = 0;
+		if (opcode == OBEXAPP_PUT)
+			obexapp_stream_stats_print(context);
+	}
+
 done:
 	if (object != NULL) {
 		OBEX_ObjectDelete(handle, object);
@@ -909,6 +916,7 @@ obexapp_client_request_get(obex_t *handl
 			goto done;
 		}
 
+		obexapp_stream_stats_reset(context);
 		OBEX_ObjectReadStream(handle, object, NULL);
 		break;
 
@@ -990,6 +998,8 @@ obexapp_client_request_get(obex_t *handl
 					"%s (%d)", __func__,
 					context->temp, local, strerror(errno),
 					errno);
+			else
+				obexapp_stream_stats_print(context);
 			break;
 		}
 	} else
--- obexapp.h.orig	2009-08-20 22:57:18.000000000 +0100
+++ obexapp.h	2010-10-19 17:55:21.000000000 +0100
@@ -110,6 +110,8 @@ struct context
 	/* stream file descriptor and buffer */
 	int			 sfd;
 	uint8_t			*sbuffer;
+	size_t			 stotal;
+	time_t			 stime;
 
 	int			 mtu;            /* OBEX MTU */
 
--- stream.c.orig	2009-04-10 00:16:31.000000000 +0100
+++ stream.c	2010-10-19 18:09:02.000000000 +0100
@@ -79,6 +79,8 @@ obexapp_stream_write(obex_t *handle, obe
 
 		close(context->sfd);
 		context->sfd = -1;
+	} else {
+		context->stotal += length;
 	}
 } /* obexapp_stream_write */
 
@@ -224,6 +226,26 @@ obexapp_stream_read(obex_t *handle, obex
 		return;
 	}
 
+	context->stotal += length;
 	log_debug("%s(): Wrote %d bytes of stream data", __func__, length);
 } /* obexapp_stream_read */
 
+void
+obexapp_stream_stats_reset(context_t *context)
+{
+	context->stotal = 0;
+	context->stime = time(NULL);
+}
+
+void
+obexapp_stream_stats_print(context_t *context)
+{
+	int tm;
+
+	tm = (int)(time(NULL) - context->stime);
+	printf("%zu bytes streamed in %d second%s",
+	    context->stotal, tm, (tm == 1 ? "" : "s"));
+	if (tm > 1)
+		printf(" (%zu bytes/sec)", context->stotal / tm);
+	printf("\n");
+}
--- stream.h.orig	2007-02-22 20:35:01.000000000 +0000
+++ stream.h	2010-10-19 18:01:45.000000000 +0100
@@ -35,5 +35,8 @@
 obexapp_event_handler_t	obexapp_stream_write;
 obexapp_event_handler_t	obexapp_stream_read;
 
+void obexapp_stream_stats_reset(context_t *);
+void obexapp_stream_stats_print(context_t *);
+
 #endif /* _STREAM_H_ */
 


More information about the freebsd-bluetooth mailing list