[ekg2-commit] ekg2: commands.c (HEAD) jabber_handlers.c (HEAD) [darkjames]
CVS commit
cvs w toxygen.net
Czw, 3 Maj 2007, 01:43:05 CEST
Module name: ekg2
Changes by: darkjames 2007-05-03 01:43:03
Modified files:
commands.c jabber_handlers.c
Log message:
- implement /tlen: modify, add, del
- more tlenjabber_unescape() instead of jabber_unescape()
- don't allow to exist another user with same nickname @ jid: tlen: /add && /modify. [XXX]
Index: commands.c
===================================================================
RCS file: /home/cvs/ekg2/plugins/jabber/commands.c,v
diff -d -u -r1.159 -r1.160
--- commands.c 1 May 2007 14:12:58 -0000 1.159
+++ commands.c 2 May 2007 23:43:02 -0000 1.160
@@ -763,63 +763,64 @@
return 0;
}
-static COMMAND(jabber_command_auth)
-{
- jabber_private_t *j = session_private_get(session);
- session_t *s = session;
+static COMMAND(jabber_command_auth) {
+ jabber_private_t *j = session->priv;
+
const char *action;
const char *uid;
- int payload;
-
+ int payload = 4 + j->istlen;
- if (!(uid = jid_target2uid(session, params[1], quiet)))
+ if (!(uid = get_uid(session, params[1])) || (j->istlen && tolower(params[1][0]) == 'j') || (!j->istlen && tolower(params[1][0]) == 't')) {
+ printq("invalid_session");
return -1;
+ }
+
/* user jest OK, więc lepiej mieć go pod ręką */
tabnick_add(uid);
- payload = 4 + j->istlen;
-
if (match_arg(params[0], 'r', ("request"), 2)) {
action = "subscribe";
- printq("jabber_auth_request", uid+payload, session_name(s));
+ printq("jabber_auth_request", uid+payload, session_name(session));
} else if (match_arg(params[0], 'a', ("accept"), 2)) {
action = "subscribed";
- printq("jabber_auth_accept", uid+payload, session_name(s));
+ printq("jabber_auth_accept", uid+payload, session_name(session));
} else if (match_arg(params[0], 'c', ("cancel"), 2)) {
action = "unsubscribe";
- printq("jabber_auth_unsubscribed", uid+payload, session_name(s));
+ printq("jabber_auth_unsubscribed", uid+payload, session_name(session));
} else if (match_arg(params[0], 'd', ("deny"), 2)) {
action = "unsubscribed";
if (userlist_find(session, uid)) // mamy w rosterze
- printq("jabber_auth_cancel", uid+payload, session_name(s));
+ printq("jabber_auth_cancel", uid+payload, session_name(session));
else // nie mamy w rosterze
- printq("jabber_auth_denied", uid+payload, session_name(s));
+ printq("jabber_auth_denied", uid+payload, session_name(session));
- } else if (match_arg(params[0], 'p', ("probe"), 2)) {
+ } else if (match_arg(params[0], 'p', ("probe"), 2)) { /* TLEN ? */
/* ha! undocumented :-); bo
[Used on server only. Client authors need not worry about this.] */
action = "probe";
- printq("jabber_auth_probe", uid+payload, session_name(s));
+ printq("jabber_auth_probe", uid+payload, session_name(session));
} else {
wcs_printq("invalid_params", name);
return -1;
}
-
+ /* NOTE: libtlen send this without id */
watch_write(j->send_watch, "<presence to=\"%s\" type=\"%s\" id=\"roster\"/>", uid+payload, action);
return 0;
}
static COMMAND(jabber_command_modify) {
- jabber_private_t *j = session_private_get(session);
+ jabber_private_t *j = session->priv;
+
+ int addcom = !xstrcmp(name, ("add"));
+ int payload = 4 + j->istlen;
+
const char *uid = NULL;
- char *nickname = NULL;
- userlist_t *u;
+ char *nick = NULL;
+ char *nickname;
list_t m;
- int addcom = !xstrcmp(name, ("add"));
-
- u = userlist_find(session, target);
+ userlist_t *u = userlist_find(session, target);
if (u && addcom) { /* don't allow to add user again */
printq("user_exists_other", params[0], format_user(session, u->uid), session_name(session));
@@ -831,12 +832,14 @@
return -1;
}
- if (!(uid = jid_target2uid(session, target, quiet)))
+ if (!(uid = get_uid(session, target)) || (j->istlen && tolower(uid[0]) == 'j') || (!j->istlen && tolower(uid[0]) == 't')) {
+ printq("invalid_session");
return -1;
+ }
if (!u) u = xmalloc(sizeof(userlist_t)); /* alloc temporary memory for /jid:add */
- if (params[1]) {
+ if (params[0] && params[1]) {
char **argv = array_make(params[1], " \t", 0, 1, 1);
int i;
@@ -879,45 +882,57 @@
continue;
}
/* emulate gg:modify behavior */
- if (match_arg(argv[i], 'o', ("online"), 2)) { /* only jabber:iq:privacy */
+ if (!j->istlen && match_arg(argv[i], 'o', ("online"), 2)) { /* only jabber:iq:privacy */
command_exec_format(target, session, 0, ("/jid:privacy --set %s +pin"), uid);
continue;
}
- if (match_arg(argv[i], 'O', ("offline"), 2)) { /* only jabber:iq:privacy */
+ if (!j->istlen && match_arg(argv[i], 'O', ("offline"), 2)) { /* only jabber:iq:privacy */
command_exec_format(target, session, 0, ("/jid:privacy --set %s -pin"), uid);
continue;
}
if (match_arg(argv[i], 'n', ("nickname"), 2) && argv[i + 1]) {
- xfree(nickname);
- nickname = jabber_escape(argv[++i]);
+ xfree(nick);
+ nick = xstrdup(argv[++i]);
continue;
}
if (argv[i][0] != '-') { /* if param doesn't looks like command treat as a nickname */
- xfree(nickname);
- nickname = jabber_escape(argv[i]);
+ xfree(nick);
+ nick = xstrdup(argv[i]);
continue;
}
}
array_free(argv);
}
- if (addcom && !nickname && params[1]) nickname = jabber_escape(params[1]); /* ? */
- if (!addcom && !nickname) nickname = jabber_escape(u->nickname); /* get current nickname */
+ if (!nick && !addcom)
+ nick = xstrdup(u->nickname); /* get current nickname */
+
+ if (nick && xstrcmp(nick, u->nickname)) {
+ if (userlist_find(session, nick)) {
+ printq("user_exists", nick, session_name(session));
+
+ if (addcom)
+ xfree(u);
+ return -1;
+ }
+ }
+
+ nickname = tlenjabber_escape(nick); xfree(nick);
if (j->send_watch) j->send_watch->transfer_limit = -1; /* let's send this in one/two packets not in 7 or more. */
watch_write(j->send_watch, "<iq type=\"set\"><query xmlns=\"jabber:iq:roster\">");
/* nickname always should be set */
- if (nickname) watch_write(j->send_watch, "<item jid=\"%s\" name=\"%s\"%s>", uid+4, nickname, (u->groups ? "" : "/"));
- else watch_write(j->send_watch, "<item jid=\"%s\"%s>", uid+4, (u->groups ? "" : "/"));
+ if (nickname) watch_write(j->send_watch, "<item jid=\"%s\" name=\"%s\"%s>", uid+payload, nickname, (u->groups ? "" : "/"));
+ else watch_write(j->send_watch, "<item jid=\"%s\"%s>", uid+payload, (u->groups ? "" : "/"));
for (m = u->groups; m ; m = m->next) {
struct ekg_group *g = m->data;
- char *gname = jabber_escape(g->name);
+ char *gname = tlenjabber_escape(g->name);
watch_write(j->send_watch, "<group>%s</group>", gname);
xfree(gname);
@@ -937,18 +952,20 @@
return 0;
}
-static COMMAND(jabber_command_del)
-{
+static COMMAND(jabber_command_del) {
+ jabber_private_t *j = session->priv;
+ int del_all = !xstrcmp(params[0], "*");
+ int payload = 4 + j->istlen;
const char *uid;
- if (!(uid = jid_target2uid(session, target, quiet)))
+
+ if (!(uid = get_uid(session, target)) || (j->istlen && tolower(uid[0]) == 'j') || (!j->istlen && tolower(uid[0]) == 't')) {
+ printq("invalid_session");
return -1;
- {
- jabber_private_t *j = session_private_get(session);
- char *xuid = jabber_escape(uid+4);
- watch_write(j->send_watch, "<iq type=\"set\" id=\"roster\"><query xmlns=\"jabber:iq:roster\">");
- watch_write(j->send_watch, "<item jid=\"%s\" subscription=\"remove\"/></query></iq>", xuid);
- xfree(xuid);
}
+
+ watch_write(j->send_watch, "<iq type=\"set\" id=\"roster\"><query xmlns=\"jabber:iq:roster\">");
+ watch_write(j->send_watch, "<item jid=\"%s\" subscription=\"remove\"/></query></iq>", uid+payload);
+
print("user_deleted", target, session_name(session));
return 0;
}
@@ -2657,6 +2674,7 @@
command_add(&jabber_plugin, ("tlen:_autoaway"), "r", jabber_command_away, JABBER_ONLY, NULL);
command_add(&jabber_plugin, ("tlen:_autoxa"), "r", jabber_command_away, JABBER_ONLY, NULL);
command_add(&jabber_plugin, ("tlen:_autoback"), "r", jabber_command_away, JABBER_ONLY, NULL);
+ command_add(&jabber_plugin, ("tlen:add"), "!U ?", jabber_command_modify, JABBER_FLAGS_TARGET, NULL);
command_add(&jabber_plugin, ("tlen:alert"), "!u", tlen_command_alert, JABBER_FLAGS_TARGET, NULL);
command_add(&jabber_plugin, ("tlen:auth"), "!p !uU", jabber_command_auth, JABBER_FLAGS | COMMAND_ENABLEREQPARAMS,
"-a --accept -d --deny -r --request -c --cancel");
@@ -2665,9 +2683,12 @@
command_add(&jabber_plugin, ("tlen:change"), "?", tlen_command_pubdir, JABBER_FLAGS, NULL);
command_add(&jabber_plugin, ("tlen:connect"), "r ?", jabber_command_connect, JABBER_ONLY, NULL);
command_add(&jabber_plugin, ("tlen:disconnect"), "r ?", jabber_command_disconnect, JABBER_ONLY, NULL);
+ command_add(&jabber_plugin, ("tlen:del"), "!u", jabber_command_del, JABBER_FLAGS_TARGET, NULL);
command_add(&jabber_plugin, ("tlen:dnd"), "r", jabber_command_away, JABBER_ONLY, NULL);
command_add(&jabber_plugin, ("tlen:ffc"), "r", jabber_command_away, JABBER_ONLY, NULL);
command_add(&jabber_plugin, ("tlen:invisible"), "r", jabber_command_away, JABBER_ONLY, NULL);
+ command_add(&jabber_plugin, ("tlen:modify"), "!Uu !", jabber_command_modify, JABBER_FLAGS_TARGET,
+ "-n --nickname -g --group");
command_add(&jabber_plugin, ("tlen:msg"), "!uU !", jabber_command_msg, JABBER_FLAGS_TARGET, NULL);
command_add(&jabber_plugin, ("tlen:reconnect"), NULL, jabber_command_reconnect, JABBER_ONLY, NULL);
command_add(&jabber_plugin, ("tlen:search"), "?", tlen_command_pubdir, JABBER_FLAGS, NULL);
Index: jabber_handlers.c
===================================================================
RCS file: /home/cvs/ekg2/plugins/jabber/jabber_handlers.c,v
diff -d -u -r1.101 -r1.102
--- jabber_handlers.c 2 May 2007 22:00:28 -0000 1.101
+++ jabber_handlers.c 2 May 2007 23:43:02 -0000 1.102
@@ -2449,7 +2449,7 @@
if (!xstrncmp(jabber_attr(item->atts, "subscription"), "remove", 6)) {
/* nic nie robimy, bo juz usuniete */
} else {
- char *nickname = jabber_unescape(jabber_attr(item->atts, "name"));
+ char *nickname = tlenjabber_unescape(jabber_attr(item->atts, "name"));
const char *authval;
xmlnode_t *group = xmlnode_find_child(item,"group");
/* czemu sluzy dodanie usera z nickname uid jesli nie ma nickname ? */
@@ -2537,7 +2537,7 @@
int na = !xstrcmp(type, "unavailable");
- jid = jabber_unescape(from);
+ jid = tlenjabber_unescape(from);
if (istlen) uid = saprintf("tlen:%s", jid);
else uid = saprintf("jid:%s", jid);
Więcej informacji o liście dyskusyjnej ekg2-commit