Changeset dcc3f80


Ignore:
Timestamp:
Oct 10, 2009, 9:24:41 PM (12 years ago)
Author:
Nelson Elhage <nelhage@mit.edu>
Branches:
master, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
Children:
68ab07c
Parents:
69c3878 (diff), 32ad44d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:
Merge branch 'zephyr-fixes'
Files:
3 added
14 edited

Legend:

Unmodified
Added
Removed
  • perl/lib/BarnOwl.pm

    r77c87b2 rdcc3f80  
    3232use BarnOwl::Message;
    3333use BarnOwl::Style;
     34use BarnOwl::Zephyr;
    3435use BarnOwl::Timer;
    3536use BarnOwl::Editwin;
  • perlglue.xs

    re1e59a7 rdcc3f80  
    442442
    443443
     444MODULE = BarnOwl                PACKAGE = BarnOwl::Zephyr
     445
     446int
     447have_zephyr()
     448        CODE:
     449                RETVAL = owl_global_is_havezephyr(&g);
     450        OUTPUT:
     451                RETVAL
    444452
    445453MODULE = BarnOwl                PACKAGE = BarnOwl::Internal
  • zephyr.c

    rdca3b27 rdcc3f80  
    8282void owl_zephyr_finish_initialization(owl_dispatch *d) {
    8383  Code_t code;
     84  char *perl;
    8485
    8586  owl_select_remove_dispatch(d->fd);
     
    125126    owl_function_zephyr_buddy_check(0);
    126127  }
     128
     129 perl = owl_perlconfig_execute("BarnOwl::Zephyr::_zephyr_startup()");
     130 owl_free(perl);
    127131}
    128132
     
    168172  }
    169173#endif
    170   return(0);
     174  return 0;
    171175}
    172176
     
    176180  if(owl_global_is_havezephyr(&g))
    177181    return(ZPending());
    178   else
    179     return 0;
    180 #else
    181   return(0);
    182 #endif
     182#endif
     183  return 0;
    183184}
    184185
     
    186187{
    187188#ifdef HAVE_LIBZEPHYR
    188   return(ZGetRealm());
    189 #else
    190   return("");
    191 #endif
     189  if (owl_global_is_havezephyr(&g))
     190    return(ZGetRealm());
     191#endif
     192  return "";
    192193}
    193194
     
    195196{
    196197#ifdef HAVE_LIBZEPHYR
    197   return(ZGetSender());
    198 #else
    199   return("");
    200 #endif
     198  if (owl_global_is_havezephyr(&g))
     199    return(ZGetSender());
     200#endif
     201  return "";
    201202}
    202203
  • .gitignore

    r42ad917 r1703f72  
    44*~
    55.#*
     6.*.swp
    67.deps
    78META.yml
  • Makefile.am

    r8830f79f re1e59a7  
    2020perl_tester_SOURCES = $(BASE_SRCS) \
    2121     owl.h owl_perl.h config.h \
    22      libzcrypt.a \
    2322     $(GEN_C) $(GEN_H) \
    2423     perl_tester.c
    2524
    26 perl_tester_LDADD = libfaim/libfaim.a libzcrypt.a
     25perl_tester_LDADD = libfaim/libfaim.a
    2726
    2827TESTS=runtests.sh
     
    4342GEN_H = owl_prototypes.h
    4443
     44TYPEMAP = typemap
     45
    4546BUILT_SOURCES = $(GEN_C) $(GEN_H)
    4647
     
    5455proto: owl_prototypes.h
    5556
    56 perlglue.c: perlglue.xs
    57         $(AM_V_GEN)perl $(XSUBPPDIR)/xsubpp $(XSUBPPFLAGS) -prototypes perlglue.xs > perlglue.c
     57perlglue.c: perlglue.xs $(TYPEMAP)
     58        $(AM_V_GEN)perl $(XSUBPPDIR)/xsubpp $(XSUBPPFLAGS) -prototypes perlglue.xs -typemap $(TYPEMAP) > perlglue.c
    5859
    5960varstubs.c: stubgen.pl variable.c
  • aim.c

    rc79a047 r1fdca1b  
    249249}
    250250
     251/*
     252 * I got these constants by skimming libfaim/im.c
     253 *
     254 * "UNICODE" actually means "UCS-2BE".
     255 */
     256#define AIM_CHARSET_ISO_8859_1         0x0003
     257#define AIM_CHARSET_UNICODE            0x0002
     258
     259int owl_aim_do_send(const char *to, const char *msg, int flags) /* noproto */
     260{
     261  int ret;
     262  char *encoded;
     263  struct aim_sendimext_args args;
     264    gsize len;
     265
     266  encoded = g_convert(msg, -1, "ISO-8859-1", "UTF-8", NULL, &len, NULL);
     267  if (encoded) {
     268    owl_function_debugmsg("Encoded outgoing AIM as ISO-8859-1");
     269    args.charset = AIM_CHARSET_ISO_8859_1;
     270    args.charsubset = 0;
     271    args.flags = AIM_IMFLAGS_ISO_8859_1;
     272  } else {
     273    owl_function_debugmsg("Encoding outgoing IM as UCS-2BE");
     274    encoded = g_convert(msg, -1, "UCS-2BE", "UTF-8", NULL, &len, NULL);
     275    if (!encoded) {
     276      /*
     277       * TODO: Strip or HTML-encode characters, or figure out how to
     278       * send in a differen charset.
     279       */
     280      owl_function_error("Unable to encode outgoing AIM message in UCS-2");
     281      return 1;
     282    }
     283
     284    args.charset = AIM_CHARSET_UNICODE;
     285    args.charsubset = 0;
     286    args.flags = AIM_IMFLAGS_UNICODE;
     287  }
     288
     289  args.destsn = to;
     290  args.msg = encoded;
     291  args.msglen = len;
     292  args.flags |= flags;
     293
     294  ret=aim_im_sendch1_ext(owl_global_get_aimsess(&g), &args);
     295
     296  owl_free(encoded);
     297
     298  return(ret);
     299}
     300
    251301int owl_aim_send_im(const char *to, const char *msg)
    252302{
    253   int ret;
    254 
    255   ret=aim_im_sendch1(owl_global_get_aimsess(&g), to, 0, msg);
    256    
    257   /* I don't know how to check for an error yet */
    258   return(ret);
     303  return owl_aim_do_send(to, msg, 0);
    259304}
    260305
    261306int owl_aim_send_awaymsg(const char *to, const char *msg)
    262307{
    263   int ret;
    264 
    265   ret=aim_im_sendch1(owl_global_get_aimsess(&g), to, AIM_IMFLAGS_AWAY, msg);
    266 
    267   /* I don't know how to check for an error yet */
    268   return(ret);
     308  return owl_aim_do_send(to, msg, AIM_IMFLAGS_AWAY);
    269309}
    270310
     
    11491189  owl_message *m;
    11501190  char *stripmsg, *nz_screenname, *wrapmsg;
    1151   char realmsg[8192+1] = "";
    1152   /* int clienttype = AIM_CLIENTTYPE_UNKNOWN; */
    1153 
    1154   /* clienttype = aim_fingerprintclient(args->features, args->featureslen); */
    1155 
    1156   /*
    1157   printf("icbm: sn = \"%s\"\n", userinfo->sn);
    1158   printf("icbm: probable client type: %d\n", clienttype);
    1159   printf("icbm: warnlevel = %f\n", aim_userinfo_warnlevel(userinfo));
    1160   printf("icbm: flags = 0x%04x = ", userinfo->flags);
    1161   printuserflags(userinfo->flags);
    1162   printf("\n");
    1163   */
    1164 
    1165   /*
    1166   printf("icbm: membersince = %lu\n", userinfo->membersince);
    1167   printf("icbm: onlinesince = %lu\n", userinfo->onlinesince);
    1168   printf("icbm: idletime = 0x%04x\n", userinfo->idletime);
    1169   printf("icbm: capabilities = %s = 0x%08lx\n", (userinfo->present & AIM_USERINFO_PRESENT_CAPABILITIES) ? "present" : "not present", userinfo->capabilities);
    1170   */
    1171 
    1172   /*
    1173   printf("icbm: icbmflags = ");
    1174   if (args->icbmflags & AIM_IMFLAGS_AWAY) printf("away ");
    1175   if (args->icbmflags & AIM_IMFLAGS_ACK) printf("ackrequest ");
    1176   if (args->icbmflags & AIM_IMFLAGS_OFFLINE) printf("offline ");
    1177   if (args->icbmflags & AIM_IMFLAGS_BUDDYREQ) printf("buddyreq ");
    1178   if (args->icbmflags & AIM_IMFLAGS_HASICON) printf("hasicon ");
    1179   printf("\n");
    1180   */
    1181 
    1182   /*
    1183   if (args->icbmflags & AIM_IMFLAGS_CUSTOMCHARSET) {
    1184   printf("icbm: encoding flags = {%04x, %04x}\n", args->charset, args->charsubset);
    1185   }
    1186   */
    1187  
    1188   /*
    1189    * Quickly convert it to eight bit format, replacing non-ASCII UNICODE
    1190    * characters with their equivelent HTML entity.
    1191    */
    1192   if (args->icbmflags & AIM_IMFLAGS_UNICODE) {
    1193     int i;
    1194    
    1195     for (i=0; i<args->msglen; i+=2) {
    1196       fu16_t uni;
    1197 
    1198       uni = ((args->msg[i] & 0xff) << 8) | (args->msg[i+1] & 0xff);
    1199       if ((uni < 128) || ((uni >= 160) && (uni <= 255))) { /* ISO 8859-1 */
    1200         snprintf(realmsg+strlen(realmsg), sizeof(realmsg)-strlen(realmsg), "%c", uni);
    1201       } else { /* something else, do UNICODE entity */
    1202         snprintf(realmsg+strlen(realmsg), sizeof(realmsg)-strlen(realmsg), "&#%04x;", uni);
    1203       }
    1204     }
     1191  char *realmsg = NULL;
     1192
     1193  if (!args->msg) {
     1194    realmsg = owl_strdup("");
     1195  } else if (args->icbmflags & AIM_IMFLAGS_UNICODE) {
     1196    realmsg = g_convert(args->msg, args->msglen, "UTF-8", "UCS-2BE",
     1197                        NULL, NULL, NULL);
     1198  } else if(args->icbmflags & AIM_IMFLAGS_ISO_8859_1) {
     1199    realmsg = g_convert(args->msg, args->msglen, "UTF-8", "ISO-8859-1",
     1200                        NULL, NULL, NULL);
    12051201  } else {
    1206     /*
    1207      * For non-UNICODE encodings (ASCII and ISO 8859-1), there is
    1208      * no need to do anything special here.  Most
    1209      * terminals/whatever will be able to display such characters
    1210      * unmodified.
    1211      *
    1212      * Beware that PC-ASCII 128 through 159 are _not_ actually
    1213      * defined in ASCII or ISO 8859-1, and you should send them as
    1214      * UNICODE.  WinAIM will send these characters in a UNICODE
    1215      * message, so you need to do so as well.
    1216      *
    1217      * You may not think it necessary to handle UNICODE messages. 
    1218      * You're probably wrong.  For one thing, Microsoft "Smart
    1219      * Quotes" will be sent by WinAIM as UNICODE (not HTML UNICODE,
    1220      * but real UNICODE). If you don't parse UNICODE at all, your
    1221      * users will get a blank message instead of the message
    1222      * containing Smart Quotes.
    1223      *
    1224      */
    1225     if (args->msg && args->msglen)
    1226       strncpy(realmsg, args->msg, sizeof(realmsg));
     1202    realmsg = owl_strdup(args->msg);
     1203  }
     1204
     1205  if (!realmsg) {
     1206    realmsg = owl_strdup("[Error decoding incoming IM]");
    12271207  }
    12281208
     
    12691249  }
    12701250
    1271   /*
    1272   if (realmsg) {
    1273     int i = 0;
    1274     while (realmsg[i] == '<') {
    1275       if (realmsg[i] == '<') {
    1276         while (realmsg[i] != '>')
    1277           i++;
    1278         i++;
    1279       }
    1280     }
    1281     tmpstr = realmsg+i;
    1282     faimtest_handlecmd(sess, conn, userinfo, tmpstr);
    1283   }
    1284   */
    1285  
     1251  owl_free(realmsg);
     1252
    12861253  return(1);
    12871254}
  • commands.c

    r61de085 r5ade618  
    861861  OWLCMD_VOID_CTX("edit:history-next", owl_command_edit_history_next,
    862862                  OWL_CTX_EDIT,
    863                   "replaces the text with the previous history",
     863                  "replaces the text with the next history",
    864864                  "", ""),
    865865
  • editwin.c

    r2184001 r6c171f1  
    326326static void oe_release_excursion(owl_editwin *e, oe_excursion *x)
    327327{
    328   oe_excursion *p;
     328  oe_excursion **px;
    329329
    330330  x->valid = 0;
    331   if (e->excursions == NULL)
    332     /* XXX huh. */ ;
    333   else if (e->excursions == x)
    334     e->excursions = x->next;
    335   else {
    336     for (p = e->excursions; p->next != NULL; p = p->next)
    337       if (p->next == x) {
    338         p->next = p->next->next;
    339         break;
    340       }
    341     /* and if we ran off the end? XXX */
    342   }
     331  for (px = &e->excursions; *px != NULL; px = &(*px)->next)
     332    if (*px == x) {
     333      *px = x->next;
     334      return;
     335    }
     336  abort();
    343337}
    344338
     
    12581252
    12591253  if (!g_unichar_iscntrl(c) || c == '\n' || c== '\t' ) {
    1260     memset(tmp, 0, 7);
    1261 
    12621254    if (c == '\n' && e->style == OWL_EDITWIN_STYLE_ONELINE) {
    12631255      return;
     
    13021294      return; /* our work here is done */
    13031295
    1304     g_unichar_to_utf8(c, tmp);
     1296    tmp[g_unichar_to_utf8(c, tmp)] = '\0';
    13051297    owl_editwin_replace(e, 0, tmp);
    13061298  }
  • fmtext.c

    rf119757 r6c171f1  
    5757
    5858  /* Set attributes */
    59   if (a) {
    60     memset(attrbuff,0,6);
    61     g_unichar_to_utf8(OWL_FMTEXT_UC_ATTR | attr, attrbuff);
    62     strcat(f->textbuff, attrbuff);     
    63   }
    64   if (fg) {
    65     memset(attrbuff,0,6);
    66     g_unichar_to_utf8(OWL_FMTEXT_UC_FGCOLOR | fgcolor, attrbuff);
    67     strcat(f->textbuff, attrbuff);     
    68   }
    69   if (bg) {
    70     memset(attrbuff,0,6);
    71     g_unichar_to_utf8(OWL_FMTEXT_UC_BGCOLOR | bgcolor, attrbuff);
    72     strcat(f->textbuff, attrbuff);     
    73   }
     59  if (a)
     60    strncat(f->textbuff, attrbuff,
     61            g_unichar_to_utf8(OWL_FMTEXT_UC_ATTR | attr, attrbuff));
     62  if (fg)
     63    strncat(f->textbuff, attrbuff,
     64            g_unichar_to_utf8(OWL_FMTEXT_UC_FGCOLOR | fgcolor, attrbuff));
     65  if (bg)
     66    strncat(f->textbuff, attrbuff,
     67            g_unichar_to_utf8(OWL_FMTEXT_UC_BGCOLOR | bgcolor, attrbuff));
    7468 
    7569  strcat(f->textbuff, text);
     
    202196  _owl_fmtext_realloc(f, newlen);
    203197
    204   if (a) {
    205     memset(attrbuff,0,6);
    206     g_unichar_to_utf8(OWL_FMTEXT_UC_ATTR | attr, attrbuff);
    207     strcat(f->textbuff, attrbuff);     
    208   }
    209   if (fg) {
    210     memset(attrbuff,0,6);
    211     g_unichar_to_utf8(OWL_FMTEXT_UC_FGCOLOR | fgcolor, attrbuff);
    212     strcat(f->textbuff, attrbuff);     
    213   }
    214   if (bg) {
    215     memset(attrbuff,0,6);
    216     g_unichar_to_utf8(OWL_FMTEXT_UC_BGCOLOR | bgcolor, attrbuff);
    217     strcat(f->textbuff, attrbuff);     
    218   }
     198  if (a)
     199    strncat(f->textbuff, attrbuff,
     200            g_unichar_to_utf8(OWL_FMTEXT_UC_ATTR | attr, attrbuff));
     201  if (fg)
     202    strncat(f->textbuff, attrbuff,
     203            g_unichar_to_utf8(OWL_FMTEXT_UC_FGCOLOR | fgcolor, attrbuff));
     204  if (bg)
     205    strncat(f->textbuff, attrbuff,
     206            g_unichar_to_utf8(OWL_FMTEXT_UC_BGCOLOR | bgcolor, attrbuff));
    219207
    220208  strncat(f->textbuff, in->textbuff+start, stop-start+1);
     
    315303        int start, end;
    316304        while (owl_regex_compare(owl_global_get_search_re(&g), s, &start, &end) == 0) {
     305          /* Prevent an infinite loop matching the empty string. */
     306          if (end == 0)
     307            break;
     308
    317309          /* Found search string, highlight it. */
    318310
  • functions.c

    r340c3e7 rdca3b27  
    19411941{
    19421942  owl_fmtext fm;
    1943   char *ptr, buff[LINE];
     1943  char *ptr;
     1944  char *result;
    19441945  int i;
    19451946
     
    19471948
    19481949  for (i=0; i<argc; i++) {
    1949     ptr=long_zuser(argv[i]);
    1950     owl_zephyr_zlocate(ptr, buff, auth);
    1951     owl_fmtext_append_normal(&fm, buff);
     1950    ptr = long_zuser(argv[i]);
     1951    result = owl_zephyr_zlocate(ptr, auth);
     1952    owl_fmtext_append_normal(&fm, result);
     1953    owl_free(result);
    19521954    owl_free(ptr);
    19531955  }
  • perl/modules/IRC/lib/BarnOwl/Module/IRC.pm

    r744769e r69c3878  
    399399    $body =~ tr/\n\r/  /;
    400400    if ($body =~ /^\/me (.*)/) {
    401         $conn->conn->me($to, $1);
     401        $conn->conn->me($to, Encode::encode('utf-8', $1));
    402402        $body = '* '.$conn->nick.' '.$1;
    403403    } else {
    404         $conn->conn->privmsg($to, $body);
     404        $conn->conn->privmsg($to, Encode::encode('utf-8', $body));
    405405    }
    406406    my $msg = BarnOwl::Message->new(
     
    545545            $conn = get_connection_by_alias($alias);
    546546        }
    547         if(!$conn && $use_channel) {
     547        if($use_channel) {
    548548            $channel = $ARGV[0];
    549549            if(defined($channel) && $channel =~ /^#/) {
    550550                if($channels{$channel} && @{$channels{$channel}} == 1) {
    551551                    shift @ARGV;
    552                     $conn = $channels{$channel}[0];
    553                 } 
     552                    $conn = $channels{$channel}[0] unless $conn;
     553                }
     554            } elsif ($m && $m->type eq 'IRC' && !$m->is_private) {
     555                $channel = $m->channel;
    554556            } else {
    555                 if($m && $m->type eq 'IRC' && !$m->is_private) {
    556                     $channel = $m->channel;
    557                 } else {
    558                     undef $channel;
    559                 }
     557                undef $channel;
    560558            }
    561559        }
     560
    562561        if(!$channel && $use_channel == REQUIRE_CHANNEL) {
    563562            die("Usage: $cmd <channel>\n");
  • perl/modules/IRC/lib/BarnOwl/Module/IRC/Connection.pm

    r744769e r7cfb1df  
    7474    $self->conn->add_handler(endofwhois=> sub { shift; $self->on_endofwhois(@_) });
    7575    $self->conn->add_handler(mode      => sub { shift; $self->on_mode(@_) });
    76 
    77     # * nosuchchannel
    78     # *
     76    $self->conn->add_handler(nosuchchannel => sub { shift; $self->on_nosuchchannel(@_) });
    7977
    8078    return $self;
     
    204202    my $self = shift;
    205203    delete $BarnOwl::Module::IRC::ircnets{$self->alias};
     204    for my $k (keys %BarnOwl::Module::IRC::channels) {
     205        my @conns = grep {$_ ne $self} @{$BarnOwl::Module::IRC::channels{$k}};
     206        if(@conns) {
     207            $BarnOwl::Module::IRC::channels{$k} = \@conns;
     208        } else {
     209            delete $BarnOwl::Module::IRC::channels{$k};
     210        }
     211    }
    206212    BarnOwl::remove_dispatch($self->{FD});
    207213    BarnOwl::admin_message('IRC',
     
    282288                           join(" ", $evt->args) . "on " . $evt->to->[0]
    283289                          );
     290}
     291
     292sub on_nosuchchannel {
     293    my ($self, $evt) = @_;
     294    BarnOwl::admin_message("IRC",
     295                           "[" . $self->alias . "] " .
     296                           "No such channel: " . [$evt->args]->[1])
    284297}
    285298
  • perl/modules/Jabber/lib/BarnOwl/Module/Jabber.pm

    r5118b32 r26cde20  
    321321              . "add <jid>     Adds <jid> to your roster.\n\n"
    322322              . "unsub <jid>   Unsubscribe from <jid>'s presence.\n\n"
    323               . "remove <jid>  Removes <jid> to your roster. (implicit unsub)\n\n"
     323              . "remove <jid>  Removes <jid> from your roster. (implicit unsub)\n\n"
    324324              . "auth <jid>    Authorizes <jid> to subscribe to your presence.\n\n"
    325325              . "deauth <jid>  De-authorizes <jid>'s subscription to your presence.\n\n"
  • perl_tester.c

    r42ad917 r737b8f1  
    3232  perl_free(my_perl);
    3333  PERL_SYS_TERM();
     34  return 0;
    3435}
    3536
Note: See TracChangeset for help on using the changeset viewer.