struct uiuser *users = NULL;
struct uidata *actives = NULL;
struct socket *uisocket = NULL;
+static time_t starttime;
static wchar_t *quoteword(wchar_t *word)
{
return;
}
for(d2 = actives; d2 != NULL; d2 = d2->next) {
- if((d2 != data) && d2->regname && !wcscmp(d2->regname, argv[1])) {
+ if((d2 != data) && (d2->userinfo == data->userinfo) && d2->regname && !wcscmp(d2->regname, argv[1])) {
sq(sk, 0, L"516", L"Name already in use", NULL);
return;
}
if(argv[1][0] == L'#') {
rcptid = wcstol(argv[1] + 1, NULL, 0);
for(rcpt = actives; rcpt != NULL; rcpt = rcpt->next) {
- if(rcpt->id == rcptid)
+ if((rcpt->userinfo == data->userinfo) && (rcpt->id == rcptid))
break;
}
} else {
for(rcpt = actives; rcpt != NULL; rcpt = rcpt->next) {
- if(rcpt->regname && !wcscmp(rcpt->regname, argv[1]))
+ if((rcpt->userinfo == data->userinfo) && rcpt->regname && !wcscmp(rcpt->regname, argv[1]))
break;
}
}
sq(sk, 0, L"200", L"Message sent", NULL);
}
+static void cmd_uptime(struct socket *sk, struct uidata *data, int argc, wchar_t **argv)
+{
+ sq(sk, 0, L"200", L"%%i", time(NULL) - starttime, NULL);
+}
+
#undef haveargs
#undef havepriv
{L"transstatus", cmd_transstatus},
{L"register", cmd_register},
{L"sendmsg", cmd_sendmsg},
+ {L"uptime", cmd_uptime},
{NULL, NULL}
};
}
if(!hup)
{
+ starttime = time(NULL);
if(uisocket != NULL)
putsock(uisocket);
if((uisocket = netcstcplisten(confgetint("ui", "port"), 1, uiaccept, NULL)) == NULL)