Skip to content
Snippets Groups Projects
Commit cdc9b3d4 authored by Armin Luntzer's avatar Armin Luntzer
Browse files

server net: add text command for MOTD modification

parent 27fb5c93
No related branches found
No related tags found
No related merge requests found
...@@ -28,6 +28,7 @@ void net_server_iddqd(gpointer ref); ...@@ -28,6 +28,7 @@ void net_server_iddqd(gpointer ref);
void net_server_broadcast_message(const gchar *msg, gpointer ref); void net_server_broadcast_message(const gchar *msg, gpointer ref);
void net_server_direct_message(const gchar *msg, gpointer ref); void net_server_direct_message(const gchar *msg, gpointer ref);
void net_server_set_nickname(const gchar *nick, gpointer ref); void net_server_set_nickname(const gchar *nick, gpointer ref);
int net_server_parse_msg(const gchar *msg, gpointer ref);
#endif /* _SERVER_INCLUDE_NET_H_ */ #endif /* _SERVER_INCLUDE_NET_H_ */
......
...@@ -174,6 +174,25 @@ exit: ...@@ -174,6 +174,25 @@ exit:
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }
static void net_push_motd_update(void)
{
gchar *buf;
gchar *motd;
motd = server_cfg_get_motd();
if (!motd)
return;
buf = g_strdup_printf("The MOTD has been updated and now reads: "
"\n\n%s\n\n", motd);
net_server_broadcast_message(buf, NULL);
g_free(buf);
g_free(motd);
}
/** /**
* @brief distribute a list of users to all clients * @brief distribute a list of users to all clients
...@@ -205,7 +224,6 @@ static gboolean net_push_userlist_cb(gpointer data) ...@@ -205,7 +224,6 @@ static gboolean net_push_userlist_cb(gpointer data)
tmp = msg; tmp = msg;
g_message("%s priv is %d", c->nick, c->priv);
switch (c->priv) { switch (c->priv) {
case PRIV_FULL: case PRIV_FULL:
buf = g_strdup_printf("<tt><span foreground='#FF0000'>" buf = g_strdup_printf("<tt><span foreground='#FF0000'>"
...@@ -1034,6 +1052,33 @@ void net_server_set_nickname(const gchar *nick, gpointer ref) ...@@ -1034,6 +1052,33 @@ void net_server_set_nickname(const gchar *nick, gpointer ref)
int net_server_parse_msg(const gchar *msg, gpointer ref)
{
struct con_data *c;
c = (struct con_data *) ref;
/* ignore if not fully priviledged */
if (c->priv < PRIV_FULL)
return -1;
/* shorter than our only supported command word */
if (strlen(msg) < 5)
return -1;
if (strncmp(msg, "!motd", 5))
return -1;
/* stupidly set the motd */
server_cfg_set_motd(&msg[5]);
net_push_motd_update();
return 0;
}
/** /**
* @brief broadcast a text message to all clients * @brief broadcast a text message to all clients
*/ */
......
...@@ -35,5 +35,9 @@ void proc_pr_message(struct packet *pkt, gpointer ref) ...@@ -35,5 +35,9 @@ void proc_pr_message(struct packet *pkt, gpointer ref)
if (strlen((gchar *) c->message) != c->len) if (strlen((gchar *) c->message) != c->len)
return; return;
/* see if it is an interpretable command */
if (!net_server_parse_msg((const gchar *) c->message, ref))
return;
net_server_broadcast_message((const gchar *) c->message, ref); net_server_broadcast_message((const gchar *) c->message, ref);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment