}
static void
-server_got_symbol(int reply_code, const char *name)
+process_internal_message(int reply_code, const char *name)
{
u32 flag = 0;
switch (reply_code)
{
+ case RC_NOTIFY:
+ if (interactive)
+ retrieve_symbols();
+ return;
+
+ /* Symbols */
case RC_CONSTANT_NAME: flag = CLI_SF_CONSTANT; break;
case RC_VARIABLE_NAME: flag = CLI_SF_VARIABLE; break;
case RC_FILTER_NAME: flag = CLI_SF_FILTER; break;
return;
}
- add_to_symbols(flag, name);
+ if (flag && name && *name)
+ add_to_symbols(flag, name);
}
#define PRINTF(LEN, PARGS...) do { if (!skip_input) len = printf(PARGS); } while(0)
{
if (code >= 3000 && code < 4000)
{
- server_got_symbol(code, x+5);
+ process_internal_message(code, x+5);
}
else if (code)
{
RC_VARIABLE_NAME = 3006,
RC_TEMPLATE_NAME = 3007,
RC_INTERFACE_NAME = 3008,
+ RC_NOTIFY = 3009, /* Daemon notifies the client about new symbol set */
RC_REPLY_TOO_LONG = 8000,
RC_ROUTE_NOT_FOUND = 8001,
}
extern void cmd_reconfig_undo_notify(void);
+extern void cmd_reconfig_msg(int r);
static void
config_timeout(struct timer *t)
int r = config_undo();
if (r < 0)
log(L_ERR "Undo request failed");
+
+ cmd_reconfig_msg(r);
}
void
#include "nest/locks.h"
#include "conf/conf.h"
#include "filter/filter.h"
+#include "client/reply_codes.h"
#include "unix.h"
#include "krt.h"
config_free(conf);
}
-static void
+void
cmd_reconfig_msg(int r)
{
switch (r)
{
- case CONF_DONE: cli_msg( 3, "Reconfigured"); break;
+ case CONF_DONE: cli_msg( 3, "Reconfigured"); cli_msg(RC_NOTIFY, ""); cli_msg(19, "Nothing to do"); break;
case CONF_PROGRESS: cli_msg( 4, "Reconfiguration in progress"); break;
case CONF_QUEUED: cli_msg( 5, "Reconfiguration already in progress, queueing new config"); break;
case CONF_UNQUEUED: cli_msg(17, "Reconfiguration already in progress, removing queued config"); break;