Changeset f25812b for functions.c


Ignore:
Timestamp:
Mar 24, 2010, 4:24:38 PM (11 years ago)
Author:
Alejandro R. Sedeño <asedeno@mit.edu>
Branches:
master, release-1.6, release-1.7, release-1.8, release-1.9
Children:
125fd21
Parents:
59ab8dd
git-author:
Alejandro R. Sedeño <asedeno@mit.edu> (03/23/10 01:11:31)
git-committer:
Alejandro R. Sedeño <asedeno@mit.edu> (03/24/10 16:24:38)
Message:
Make pseudologins asynchronous

Signed-off-by: Alejandro R. Sedeño <asedeno@mit.edu>
Reviewed-By: Karl Ramm <kcr@1ts.org>
Reviewed-by: Anders Kaseorg <andersk@mit.edu>
File:
1 edited

Legend:

Unmodified
Added
Removed
  • functions.c

    r5934b87 rf25812b  
    34103410  int i, j;
    34113411  owl_list anyone;
    3412   owl_message *m;
    34133412  owl_zbuddylist *zbl;
     3413  GList **zaldlist;
     3414  GList *zaldptr;
     3415  ZAsyncLocateData_t *zald;
    34143416  const char *user;
    3415   ZLocations_t location[200];
    3416   int numlocs, ret;
    34173417
    34183418  if (!owl_global_is_havezephyr(&g)) return;
    3419 
    3420   zbl=owl_global_get_zephyr_buddylist(&g);
     3419  owl_global_set_pseudologin_notify(&g, notify);
     3420  zbl = owl_global_get_zephyr_buddylist(&g);
     3421  zaldlist = owl_global_get_zaldlist(&g);
     3422
     3423  /* Clear the existing ZALDs first. */
     3424  zaldptr = g_list_first(*zaldlist);
     3425  while (zaldptr) {
     3426    ZFreeALD(zaldptr->data);
     3427    owl_free(zaldptr->data);
     3428    zaldptr = g_list_next(zaldptr);
     3429  }
     3430  g_list_free(*zaldlist);
     3431  *zaldlist = NULL;
    34213432
    34223433  owl_list_create(&anyone);
    3423   ret=owl_zephyr_get_anyone_list(&anyone, NULL);
    3424 
    3425   j=owl_list_get_size(&anyone);
    3426   for (i=0; i<j; i++) {
    3427     user=owl_list_get_element(&anyone, i);
    3428     ret=ZLocateUser(zstr(user), &numlocs, ZAUTH);
    3429     if (ret!=ZERR_NONE) {
    3430       owl_function_error("Error getting location for %s", user);
    3431       continue;
    3432     }
    3433     numlocs=200;
    3434     ret=ZGetLocations(location, &numlocs);
    3435     if (ret==0) {
    3436       if ((numlocs>0) && !owl_zbuddylist_contains_user(zbl, user)) {
    3437         /* Send a PSEUDO LOGIN! */
    3438         if (notify) {
    3439           m=owl_malloc(sizeof(owl_message));
    3440           owl_message_create_pseudo_zlogin(m, 0, user, location[0].host, location[0].time, location[0].tty);
    3441           owl_global_messagequeue_addmsg(&g, m);
    3442         }
    3443         owl_zbuddylist_adduser(zbl, user);
    3444         owl_function_debugmsg("owl_function_zephyr_buddy_check: login for %s ", user);
    3445       } else if ((numlocs==0) && owl_zbuddylist_contains_user(zbl, user)) {
    3446         /* I don't think this ever happens (if there are 0 locations we should get an error from
    3447          * ZGetLocations)
    3448          */
    3449         owl_function_error("owl_function_zephyr_buddy_check: exceptional case logout for %s ",user);
    3450       }
    3451     } else if ((ret==ZERR_NOLOCATIONS) && owl_zbuddylist_contains_user(zbl, user)) {
    3452       /* Send a PSEUDO LOGOUT! */
    3453       if (notify) {
    3454         m=owl_malloc(sizeof(owl_message));
    3455         owl_message_create_pseudo_zlogin(m, 1, user, "", "", "");
    3456         owl_global_messagequeue_addmsg(&g, m);
    3457       }
    3458       owl_zbuddylist_deluser(zbl, user);
    3459       owl_function_debugmsg("owl_function_zephyr_buddy_check: logout for %s ",user);
     3434  owl_zephyr_get_anyone_list(&anyone, NULL);
     3435  j = owl_list_get_size(&anyone);
     3436  for (i = 0; i < j; i++) {
     3437    user = owl_list_get_element(&anyone, i);
     3438    zald = owl_malloc(sizeof(ZAsyncLocateData_t));
     3439    if (ZRequestLocations(zstr(user), zald, UNACKED, ZAUTH) == ZERR_NONE) {
     3440      *zaldlist = g_list_append(*zaldlist, zald);
     3441    } else {
     3442      owl_free(zald);
    34603443    }
    34613444  }
Note: See TracChangeset for help on using the changeset viewer.