aboutsummaryrefslogtreecommitdiffstats
path: root/echld/echld-util.c
diff options
context:
space:
mode:
authorLuis Ontanon <luis.ontanon@gmail.com>2013-07-01 01:49:34 +0000
committerLuis Ontanon <luis.ontanon@gmail.com>2013-07-01 01:49:34 +0000
commitbaee2e21f7020c77f41001bd759f8d41063eba3f (patch)
treed192ec49151c48a6862b1694b0aefba14fb8b158 /echld/echld-util.c
parente03edbf713c9af37b452e1c3f1917f1e2c69ca72 (diff)
ANother iteration,
- started harvesting pieces from tshark. - fixed? signal handlers - interactive test program very hard to debug... set follow-on-fork doesn't seem to work on my mac. Need linux I guess... svn path=/trunk/; revision=50273
Diffstat (limited to 'echld/echld-util.c')
-rw-r--r--echld/echld-util.c55
1 files changed, 54 insertions, 1 deletions
diff --git a/echld/echld-util.c b/echld/echld-util.c
index a6552ac7aa..d86adc3758 100644
--- a/echld/echld-util.c
+++ b/echld/echld-util.c
@@ -29,6 +29,8 @@
#include "echld-int.h"
#include "echld-util.h"
+#include <glib.h>
+
struct _ping {
struct timeval tv;
echld_ping_cb_t cb;
@@ -109,7 +111,7 @@ static gboolean got_param(echld_msg_type_t type, GByteArray* ba _U_, void* data)
break;
}
default:
- err_msg = g_strdup_printf("other type='%c'",type);
+ err_msg = g_strdup_printf("other type='%s'",TY(type));
g->cb(NULL,NULL,err_msg,g->cb_data);
g_free(err_msg);
break;
@@ -157,3 +159,54 @@ extern echld_state_t echld_set_param(int chld_id, const char* param, const char*
return echld_reqh(chld_id, ECHLD_SET_PARAM, 0, em, got_param, g);
}
+typedef struct _close {
+ echld_close_cb_t cb;
+ void* cb_data;
+} close_t;
+
+static gboolean closed(echld_msg_type_t type, GByteArray* ba, void* data) {
+ close_t* c = (close_t*)data;
+ parent_decoder_t* dec;
+ char* err_msg;
+
+ echld_get_all_codecs(NULL, NULL, NULL, &dec);
+
+ switch (type) {
+ case ECHLD_CLOSING: {
+ if (c->cb) {
+ c->cb(NULL,c->cb_data);
+ }
+ break;
+ }
+ case ECHLD_ERROR: {
+ int errnum;
+
+ if ( dec->error(ba, &errnum ,&err_msg) ) {
+ c->cb(err_msg,c->cb_data);
+ g_free(err_msg);
+ } else {
+ c->cb("Canot decode error message",c->cb_data);
+ }
+ break;
+ }
+ default:
+ err_msg = g_strdup_printf("other type='%s'",TY(type));
+ c->cb(err_msg,c->cb_data);
+ g_free(err_msg);
+ break;
+ }
+
+ g_free(c);
+ return TRUE;
+
+}
+
+echld_state_t echld_close(int child_id, echld_close_cb_t pcb, void* cb_data) {
+ close_t* c = g_new0(close_t,1);
+ c->cb = pcb;
+ c->cb_data = cb_data;
+
+ return echld_reqh(child_id,ECHLD_CLOSE_CHILD, 0, NULL, closed, c);
+}
+
+