aboutsummaryrefslogtreecommitdiffstats
path: root/echld/echld-util.c
diff options
context:
space:
mode:
authorLuis Ontanon <luis.ontanon@gmail.com>2013-06-22 20:26:13 +0000
committerLuis Ontanon <luis.ontanon@gmail.com>2013-06-22 20:26:13 +0000
commitf25a68221c5c4c15bfffd7e10b36791abf56f6ab (patch)
treec9666ab9f7d18860b41fe8ef75c07cb50eb0e7d3 /echld/echld-util.c
parent87eb22f4648fd5283d2c91c2046c0aa90b7b469b (diff)
Not yet running but almost there with the dummy
svn path=/trunk/; revision=50114
Diffstat (limited to 'echld/echld-util.c')
-rw-r--r--echld/echld-util.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/echld/echld-util.c b/echld/echld-util.c
new file mode 100644
index 0000000000..bc29ac3b6b
--- /dev/null
+++ b/echld/echld-util.c
@@ -0,0 +1,74 @@
+/* echld-util.c
+ * utility for echld
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * Copyright (c) 2013 by Luis Ontanon <luis@ontanon.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * 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.
+ */
+
+#include "../config.h"
+
+#include "echld-int.h"
+#include "echld-util.h"
+
+struct _ping {
+ struct timeval tv;
+ echld_ping_cb_t cb;
+ void* cb_data;
+};
+
+static long timevaldiff(struct timeval *starttime, struct timeval *finishtime) {
+ long msec;
+ msec=(finishtime->tv_sec-starttime->tv_sec)*1000;
+ msec+=(finishtime->tv_usec-starttime->tv_usec)/1000;
+ return msec;
+}
+
+static gboolean pong(echld_msg_type_t type, GByteArray* ba _U_, void* data) {
+ struct _ping* p = (struct _ping*)data;
+ struct timeval t;
+ long ret = -1;
+ gettimeofday(&t,NULL);
+
+ switch (type) {
+ case ECHLD_PONG:
+ ret = timevaldiff(&(p->tv),&t);
+ default:
+ ret = -1;
+ }
+
+ if (p->cb) p->cb(ret, p->cb_data);
+
+ return TRUE;
+}
+
+
+echld_state_t echld_ping(int chld_id, echld_ping_cb_t pcb, void* cb_data) {
+ struct _ping* p = g_new0(struct _ping,1);
+
+ p->cb = pcb;
+ p->cb_data = cb_data;
+ gettimeofday(&(p->tv),NULL);
+
+ return echld_reqh(chld_id, 0, ECHLD_PING, NULL, pong, p);
+}
+
+