summaryrefslogtreecommitdiff
path: root/pn_cmd_node.c
diff options
context:
space:
mode:
Diffstat (limited to 'pn_cmd_node.c')
-rw-r--r--pn_cmd_node.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/pn_cmd_node.c b/pn_cmd_node.c
index 327f19c..991d6c8 100644
--- a/pn_cmd_node.c
+++ b/pn_cmd_node.c
@@ -39,6 +39,7 @@ show_cmd(bool incoming,
static void
send_valist(struct pn_cmd_node *self,
+ pn_trans_cb_t cb,
const char *command,
const char *format,
va_list args)
@@ -51,6 +52,7 @@ send_valist(struct pn_cmd_node *self,
trans->id = ++priv->counter;
trans->command = g_strdup(command);
trans->params = g_strdup_vprintf(format, args);
+ trans->cb = cb;
g_hash_table_insert(priv->transactions, GINT_TO_POINTER(trans->id), trans);
@@ -69,13 +71,14 @@ send_valist(struct pn_cmd_node *self,
void
pn_cmd_node_send(struct pn_cmd_node *self,
+ pn_trans_cb_t cb,
const char *command,
const char *format,
...)
{
va_list args;
va_start(args, format);
- send_valist(self, command, format, args);
+ send_valist(self, cb, command, format, args);
va_end(args);
}
@@ -89,13 +92,19 @@ got_command(struct pn_cmd_node *self,
struct pn_cmd_node_priv *priv = self->priv;
struct pn_cmd *cmd;
struct pn_trans *trans;
+ pn_trans_cb_t cb = NULL;
show_cmd(true, string, length);
cmd = pn_cmd_new_from_string(string, length);
if (cmd->tr_id)
trans = g_hash_table_lookup(priv->transactions, GINT_TO_POINTER(cmd->tr_id));
- pn_warn(self, "unhandled command: %.*s", length, string);
+ if (trans)
+ cb = trans->cb;
+ if (cb)
+ cb(self, cmd);
+ else
+ pn_warn(self, "unhandled command: %.*s", length, string);
pn_cmd_free(cmd);
}