/* No specific identifier for command reply, call first one found */
(*reply)(ctx, NULL);
else
- silc_free(ctx);
+ silc_client_command_reply_free(ctx);
}
}
SILC_LOG_DEBUG(("Command reply context %p refcnt %d->%d", cmd,
cmd->users + 1, cmd->users));
if (cmd->users < 1) {
+ if (cmd->callbacks)
+ silc_free(cmd->callbacks);
silc_command_payload_free(cmd->payload);
silc_free(cmd);
}
{
SilcClientCommandReplyContext cmd = (SilcClientCommandReplyContext)context;
SilcClientConnection conn = (SilcClientConnection)cmd->sock->user_data;
- void *id;
+ void *id = NULL;
int i;
time_t diff, curtime;
}
}
- silc_free(id);
-
/* Notify application */
COMMAND_REPLY((SILC_ARGS));
out:
+ if (id)
+ silc_free(id);
SILC_CLIENT_PENDING_EXEC(cmd, SILC_COMMAND_PING);
silc_client_command_reply_free(cmd);
}
silc_client_command_reply_free(cmd);
}
+/* Reply to SERVICE command. */
+/* XXX incomplete */
+
+SILC_CLIENT_CMD_REPLY_FUNC(service)
+{
+ SilcClientCommandReplyContext cmd = (SilcClientCommandReplyContext)context;
+ SilcUInt32 tmp_len;
+ unsigned char *service_list, *name;
+
+ COMMAND_CHECK_STATUS;
+
+ /* Get service list */
+ service_list = silc_argument_get_arg_type(cmd->args, 2, &tmp_len);
+
+ /* Get requested service name */
+ name = silc_argument_get_arg_type(cmd->args, 3, &tmp_len);
+
+ /* Notify application */
+ COMMAND_REPLY((SILC_ARGS, service_list, name));
+
+ out:
+ SILC_CLIENT_PENDING_EXEC(cmd, SILC_COMMAND_SERVICE);
+ err:
+ silc_client_command_reply_free(cmd);
+}
+
SILC_CLIENT_CMD_REPLY_FUNC(quit)
{
silc_client_command_reply_free(context);