49 if(item->
name != NULL)
52 for(i = 0; i < item->
ngroups; i++)
82 o = os_object_new(os);
84 os_object_put(o,
"jid",
jid_full(item->
jid), os_type_STRING);
86 if(item->
name != NULL)
87 os_object_put(o,
"name", item->
name, os_type_STRING);
89 os_object_put(o,
"to", &item->
to, os_type_BOOLEAN);
90 os_object_put(o,
"from", &item->
from, os_type_BOOLEAN);
91 os_object_put(o,
"ask", &item->
ask, os_type_INTEGER);
95 storage_replace(user->
sm->
st,
"roster-items",
jid_user(user->
jid), filter, os);
100 storage_delete(user->
sm->
st,
"roster-groups",
jid_user(user->
jid), filter);
106 for(i = 0; i < item->
ngroups; i++) {
107 o = os_object_new(os);
109 os_object_put(o,
"jid",
jid_full(item->
jid), os_type_STRING);
110 os_object_put(o,
"group", item->
groups[i], os_type_STRING);
113 storage_replace(user->
sm->
st,
"roster-groups",
jid_user(user->
jid), filter, os);
128 if(item->
to && item->
from)
141 else if(item->
ask == 2)
144 if(item->
name != NULL)
147 for(i = 0; i < item->
ngroups; i++)
159 for(scan = user->
sessions; scan != NULL; scan = scan->
next)
180 int ns, elem, ret, items = -1;
189 if(pkt->
from != NULL)
211 if (ret == st_SUCCESS && items >= mroster->
maxitems)
300 buf = (
char *) malloc(
sizeof(
char) * 128);
301 sprintf(buf,
"%d", item->
ver);
314 int attr, ns, i, ret, items = -1;
356 snprintf(filter, 4096,
"(jid=%zu:%s)", strlen(
jid_full(jid)),
jid_full(jid));
371 nad_set_attr(push->nad, elem, -1,
"subscription",
"remove", 6);
395 if (ret == st_SUCCESS && items >= mroster->
maxitems)
419 if(item->name != NULL) {
426 item->name = (
char *) malloc(
sizeof(
char) * (
NAD_AVAL_L(pkt->
nad, attr) + 1));
432 if(item->groups != NULL)
434 for(i = 0; i < item->ngroups; i++)
435 free(item->groups[i]);
449 item->groups = (
char **) realloc(item->groups,
sizeof(
char *) * (item->ngroups + 1));
451 item->groups[item->ngroups] = (
char *) malloc(
sizeof(
char) * (
NAD_CDATA_L(pkt->
nad, elem) + 1));
460 log_debug(
ZONE,
"added %s to roster (to %d from %d ask %d name %s ngroups %d)",
jid_full(item->jid), item->to, item->from, item->ask, item->name, item->ngroups);
487 int elem, attr, ver = 0;
518 buf = (
char *) malloc(
sizeof(
char) * (
NAD_AVAL_L(pkt->
nad, attr) + 1));
541 if(elem >= 0 && attr >= 0) {
542 buf = (
char *) malloc(
sizeof(
char) * 128);
543 sprintf(buf,
"%d", rw->
ver);
664 if(user->
top != NULL)
692 if(user->
top != NULL)
749 if(storage_get(user->
sm->
st,
"roster-items",
jid_user(user->
jid), NULL, &os) == st_SUCCESS) {
750 if(os_iter_first(os))
752 o = os_iter_object(os);
754 if(os_object_get_str(os, o,
"jid", &str)) {
759 if(item->
jid == NULL) {
764 if(os_object_get_str(os, o,
"name", &str))
765 item->
name = strdup(str);
767 os_object_get_bool(os, o,
"to", &item->
to);
768 os_object_get_bool(os, o,
"from", &item->
from);
769 os_object_get_int(os, o,
"ask", &item->
ask);
770 os_object_get_int(os, o,
"object-sequence", &item->
ver);
782 log_debug(
ZONE,
"added %s to roster (to %d from %d ask %d ver %d name %s)",
786 }
while(os_iter_next(os));
792 if(storage_get(user->
sm->
st,
"roster-groups",
jid_user(user->
jid), NULL, &os) == st_SUCCESS) {
793 if(os_iter_first(os))
795 o = os_iter_object(os);
797 if(os_object_get_str(os, o,
"jid", &str)) {
800 if(item != NULL && os_object_get_str(os, o,
"group", &str)) {
808 }
while(os_iter_next(os));
821 storage_delete(mi->
sm->
st,
"roster-items",
jid_user(jid), NULL);
822 storage_delete(mi->
sm->
st,
"roster-groups",
jid_user(jid), NULL);
835 if(mod->
init)
return 0;