Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • perlwrap.pm

    rb441079 r740d5f7  
    6767
    6868Strips zephyr formatting from a string and returns the result
     69
     70=head2 zephyr_getsubs
     71
     72Returns the list of subscription triples <class,instance,recipient>,
     73separated by newlines.
    6974
    7075=head2 queue_message MESSAGE
     
    295300        %{$args});
    296301    $func->($name, $args{default}, $args{summary}, $args{description});
     302}
     303
     304=head2 quote STRING
     305
     306Return a version of STRING fully quoted to survive processing by
     307BarnOwl's command parser.
     308
     309=cut
     310
     311sub quote {
     312    my $str = shift;
     313    return "''" if $str eq '';
     314    if ($str !~ /['" ]/) {
     315        return "$str";
     316    }
     317    if ($str !~ /'/) {
     318        return "'$str'";
     319    }
     320    $str =~ s/"/"'"'"/g;
     321    return '"' . $str . '"';
    297322}
    298323
     
    356381sub login_host  { return undef; }
    357382sub login_tty   { return undef; }
     383
     384# This is for back-compat with old messages that set these properties
     385# New protocol implementations are encourages to user override these
     386# methods.
     387sub replycmd         { return shift->{replycmd}};
     388sub replysendercmd   { return shift->{replysendercmd}};
    358389
    359390sub pretty_sender    { return shift->sender; }
     
    463494}
    464495
     496sub replycmd {return 'loopwrite';}
     497sub replysendercmd {return 'loopwrite';}
     498
    465499#####################################################################
    466500#####################################################################
     
    475509}
    476510
     511sub replycmd {
     512    my $self = shift;
     513    if ($self->is_incoming) {
     514        return "aimwrite " . BarnOwl::quote($self->sender);
     515    } else {
     516        return "aimwrite " . BarnOwl::quote($self->recipient);
     517    }
     518}
     519
     520sub replysendercmd {
     521    return shift->replycmd;
     522}
     523
    477524#####################################################################
    478525#####################################################################
     
    480527package BarnOwl::Message::Zephyr;
    481528
     529use constant WEBZEPHYR_PRINCIPAL => "daemon.webzephyr";
     530use constant WEBZEPHYR_CLASS     => "webzephyr";
     531use constant WEBZEPHYR_OPCODE    => "webzephyr";
     532
    482533use base qw( BarnOwl::Message );
     534
     535sub strip_realm {
     536    my $sender = shift;
     537    my $realm = BarnOwl::zephyr_getrealm();
     538    $sender =~ s/\@$realm$//;
     539    return $sender;
     540}
    483541
    484542sub login_type {
     
    537595sub pretty_sender {
    538596    my ($m) = @_;
    539     my $sender = $m->sender;
    540     my $realm = BarnOwl::zephyr_getrealm();
    541     $sender =~ s/\@$realm$//;
    542     return $sender;
     597    return strip_realm($m->sender);
    543598}
    544599
    545600sub pretty_recipient {
    546601    my ($m) = @_;
    547     my $recip = $m->recipient;
    548     my $realm = BarnOwl::zephyr_getrealm();
    549     $recip =~ s/\@$realm$//;
    550     return $recip;
     602    return strip_realm($m->recipient);
    551603}
    552604
     
    563615sub zsig        { return shift->{"zsig"}; }
    564616
    565 #####################################################################
    566 #####################################################################
    567 ################################################################################
     617sub zephyr_cc {
     618    my $self = shift;
     619    return $1 if $self->body =~ /^\s*cc:\s+([^\n]+)/i;
     620    return undef;
     621}
     622
     623sub replycmd {
     624    my $self = shift;
     625    my $sender = shift;
     626    $sender = 0 unless defined $sender;
     627    my ($class, $instance, $to, $cc);
     628    if($self->is_outgoing) {
     629        return $self->{zwriteline};
     630    }
     631
     632    if($sender && $self->opcode eq WEBZEPHYR_OPCODE) {
     633        $class = WEBZEPHYR_CLASS;
     634        $instance = $self->sender;
     635        $to = WEBZEPHYR_PRINCIPAL;
     636    } elsif($self->class eq WEBZEPHYR_CLASS
     637            && $self->is_loginout) {
     638        $class = WEBZEPHYR_CLASS;
     639        $instance = $self->instance;
     640        $to = WEBZEPHYR_PRINCIPAL;
     641    } elsif($self->is_loginout || $sender) {
     642        $class = 'MESSAGE';
     643        $instance = 'PERSONAL';
     644        $to = $self->sender;
     645    } else {
     646        $class = $self->class;
     647        $instance = $self->instance;
     648        $to = $self->recipient;
     649        $cc = $self->zephyr_cc();
     650        if($to eq '*' || $to eq '') {
     651            $to = '';
     652        } elsif($to !~ /^@/) {
     653            $to = $self->sender;
     654        }
     655    }
     656
     657    my $cmd;
     658    if(lc $self->opcode eq 'crypt') {
     659        $cmd = 'zcrypt';
     660    } else {
     661        $cmd = 'zwrite';
     662    }
     663
     664    if (lc $class ne 'message') {
     665        $cmd .= " -c " . BarnOwl::quote($self->class);
     666    }
     667    if (lc $instance ne 'personal') {
     668        $cmd .= " -i " . BarnOwl::quote($self->instance);
     669    }
     670    if ($to ne '') {
     671        $to = strip_realm($to);
     672        if (defined $cc) {
     673            my @cc = grep /^[^-]/, ($to, split /\s+/, $cc);
     674            my %cc = map {$_ => 1} @cc;
     675            delete $cc{strip_realm(BarnOwl::zephyr_getsender())};
     676            @cc = keys %cc;
     677            $cmd .= " -C " . join(" ", @cc);
     678        } else {
     679            if(BarnOwl::getvar('smartstrip') eq 'on') {
     680                $to = BarnOwl::zephyr_smartstrip_user($to);
     681            }
     682            $cmd .= " $to";
     683        }
     684    }
     685    return $cmd;
     686}
     687
     688sub replysendercmd {
     689    my $self = shift;
     690    return $self->replycmd(1);
     691}
     692
     693#####################################################################
     694#####################################################################
     695#####################################################################
    568696
    569697package BarnOwl::Hook;
     
    598726    my $self = shift;
    599727    my @args = @_;
    600     return map {$_->(@args)} @$self;
     728    return map {$self->_run($_,@args)} @$self;
     729}
     730
     731sub _run {
     732    my $self = shift;
     733    my $fn = shift;
     734    my @args = @_;
     735    no strict 'refs';
     736    return $fn->(@args);
    601737}
    602738
     
    610746    my $self = shift;
    611747    my $func = shift;
    612     die("Not a coderef!") unless ref($func) eq 'CODE';
     748    die("Not a coderef!") unless ref($func) eq 'CODE' || !ref($func);
     749    return if grep {$_ eq $func} @$self;
    613750    push @$self, $func;
    614751}
     
    680817
    681818our @EXPORT_OK = qw($startup $shutdown
    682                     $receiveMessage $mainLoop
    683                     $getBuddyList);
     819                    $receiveMessage $newMessage
     820                    $mainLoop $getBuddyList);
    684821
    685822our %EXPORT_TAGS = (all => [@EXPORT_OK]);
     
    688825our $shutdown = BarnOwl::Hook->new;
    689826our $receiveMessage = BarnOwl::Hook->new;
     827our $newMessage = BarnOwl::Hook->new;
    690828our $mainLoop = BarnOwl::Hook->new;
    691829our $getBuddyList = BarnOwl::Hook->new;
     
    713851        package main;
    714852        do $BarnOwl::configfile;
    715         die $@ if $@;
     853        if($@) {
     854            BarnOwl::error("In startup: $@\n");
     855            return;
     856        }
    716857        package BarnOwl;
    717858        if(*BarnOwl::format_msg{CODE}) {
     
    761902   
    762903    BarnOwl::receive_msg($m) if *BarnOwl::receive_msg{CODE};
     904}
     905
     906sub _new_msg {
     907    my $m = shift;
     908
     909    $newMessage->run($m);
     910   
     911    BarnOwl::new_msg($m) if *BarnOwl::new_msg{CODE};
    763912}
    764913
Note: See TracChangeset for help on using the changeset viewer.