tmp = buddy->resources;
descrip = ast_strdup(iks_find_cdata(pak->x,"status"));
- while (tmp) {
+ while (tmp && pak->from->resource) {
if (!strcasecmp(tmp->resource, pak->from->resource)) {
tmp->status = status;
if (tmp->description) ast_free(tmp->description);
}
/* resource not found in our list, create it */
- if (!found && status != 6) {
+ if (!found && status != 6 && pak->from->resource) {
found = ast_calloc(1, sizeof(*found));
if (!found) {
buddy->resources = found;
}
- /* if 'from' attribute does not contain 'resource' string
- point to the top of our resource list */
- if (!found && !pak->from->resource && buddy->resources) {
- found = buddy->resources;
- }
-
ASTOBJ_UNLOCK(buddy);
ASTOBJ_UNREF(buddy, aji_buddy_destroy);
ver = iks_find_attrib(iks_find(pak->x, "caps:c"), "ver");
}
- if(status !=6 && !found->cap) {
+ /* retrieve capabilites of the new resource */
+ if(status !=6 && found && !found->cap) {
found->cap = aji_find_version(node, ver, pak);
if(gtalk_yuck(pak->x)) /* gtalk should do discover */
found->cap->jingle = 1;