source: perlwrap.pm @ dab82f29

owl
Last change on this file since dab82f29 was dab82f29, checked in by James M. Kretchmar <kretch@mit.edu>, 15 years ago
Don't crash on mobile device AIM messages [BZ 20] Don't crash when sending to someone not on AIM buddy list [BZ 94] Fix overflow vulerability in zwrite.c and zcrypt.c Add stack protector and -D_FORTIFY_SOURCE=2 where possible Fix hang [barnowl 4c46dfdebc294ca24fef59924f01688b8ee07dee] Fix segfault on missing subs [barnowl 99dabeed7de6d19acb50f1e73aa0bfe5f9469c02] Fix zcrypt bufffer size bug [barnowl 559076cd86edc3a8317819814dd5877b8bc7c3cb] Fix double free [barnowl e97c4a306ae2c9d2147d83da29fee59918198e70] Memory leak fix [barnowl c0a90c2c7ab97b9465c9873757faf312faa0021e] Memory leak fix [barnowl 95caa16b2e9ba10770d87d0955198c14c2d0e16a] Memory leak fix [barnowl 1716fed8c2650e46892cf6571555eac937266c6e] Add getstyle command [barnowl 216c73421653e3ef0e957aa9a9804e208a77c80e] Binary search for msgid [barnowl 0c8ab5eadbb6ecc97a120c91b9a824b33538c764] File-handle leak [barnowl e78397d6ac5da0de31a4e269c0ba7f3d691857a3] Fix delay in jump from top to bottom [barnowl 801b7ac63b962640debbcfd422cb9a60da5fea31] Load subs in chunks [barnowl 93e883d60051b80bf6d35391f9d76fd7dfd198e3] Load subs in chunks [barnowl f6050ee9b0a171a5031f84409eb181062afacd18] Better zsig logging [barnowl d857b667a5a9b108b1a2a26b4a5513bef2b53f80] free() -> owlfree() [barnowl d524c838ac7c115628424b8ac171c3489622ea3a] Escape AIM users in smartfilters [barnowl af9b92e3e7ccb7de276a94b5c7e5861b24e71eff] Better regex escape chars [barnowl 80e54a7631f091be8c9762adb9746bad38104738] Deal with quotes in smart filters [barnowl 4099cf83702763fa8d1efc4f1582a605431bdb77] Deal with 0 length zephyr fields [barnowl 128171aaf7cefa91a4bb1eada93a19d8fd0c355c] Deal with 0 length zephyr fields [barnowl 50e29e35c64d64e223d378d350a7bc4f038d78f5] Deal with 0 length zephyr fields [barnowl 804ab8af8b6d00bcd7e2402df892db8fbd61a3ec] Leave curmsg on screen after resize [barnowl c0f9e3009bc03e80a44de64cd5f2b4033290236e] Rip out brower stuff [barnowl 8e5935d11c699a7ce5a3e6e9a47799564c696d6a] Rip out browser stuff [barnowl 4f15e8e9ceada0d4b2cc969ebf43b0a1fb3709ea] No passwords in command history [barnowl 6e400cc71aa59e041dce677aadf50dc1f25228e2] Format NOC mssages [barnowl a1bb1980e4bca23b8329cc0e7c0bd5027055ea0a] Expand ~ in loadsubs [barnowl 27d8d835dc6d58c08fae10e75aae306c49215143] Expand ~ in source [barnowl 10d67d57cb29221f63a43a30643c697fc7b38911] Only use resizeterm() if it's available Debian backports Change license to GPLv3
  • Property mode set to 100644
File size: 6.3 KB
RevLine 
[f1e629d]1# $Id$
2#
3# This is all linked into the binary and evaluated when perl starts up...
4#
5#####################################################################
6#####################################################################
7
8package owl;
9
10# bootstrap in C bindings and glue
11bootstrap owl 1.2;
12
13# populate global variable space for legacy owlconf files
14sub _format_msg_legacy_wrap {
15    my ($m) = @_;
16    $m->legacy_populate_global();
17    return &owl::format_msg($m);
18}
19
20# populate global variable space for legacy owlconf files
21sub _receive_msg_legacy_wrap {
22    my ($m) = @_;
23    $m->legacy_populate_global();
24    return &owl::receive_msg($m);
25}
26
27# make owl::<command>("foo") be aliases to owl::command("<command> foo");
28sub AUTOLOAD {
29    my $called = $AUTOLOAD;
30    $called =~ s/.*:://;
31    return &owl::command("$called ".join(" ",@_));
32}
33
34#####################################################################
35#####################################################################
36
37package owl::Message;
38
39sub type        { return shift->{"type"}; }
40sub direction   { return shift->{"direction"}; }
41sub time        { return shift->{"time"}; }
42sub id          { return shift->{"id"}; }
43sub body        { return shift->{"body"}; }
44sub sender      { return shift->{"sender"}; }
45sub recipient   { return shift->{"recipient"}; }
46sub login       { return shift->{"login"}; }
[dab82f29]47sub is_private  { return shift->{"private"}; }
[f1e629d]48
49sub is_login    { return shift->login eq "login"; }
50sub is_logout   { return shift->login eq "logout"; }
51sub is_loginout { my $m=shift; return ($m->is_login or $m->is_logout); }
52sub is_incoming { return (shift->{"direction"} eq "in"); }
53sub is_outgoing { return (shift->{"direction"} eq "out"); }
54
55sub is_deleted  { return shift->{"deleted"}; }
56
57sub is_zephyr   { return (shift->{"type"} eq "zephyr"); }
58sub is_aim      { return (shift->{"type"} eq "aim"); }
59sub is_admin    { return (shift->{"type"} eq "admin"); }
60sub is_generic  { return (shift->{"type"} eq "generic"); }
61
62# These are overridden by appropriate message types
63sub is_ping     { return 0; }
64sub is_mail     { return 0; }
[87c6ef1]65sub is_personal { return undef; }
[f1e629d]66sub class       { return undef; }
67sub instance    { return undef; }
68sub realm       { return undef; }
69sub opcode      { return undef; }
70sub header      { return undef; }
71sub host        { return undef; }
72sub hostname    { return undef; }
73sub auth        { return undef; }
74sub fields      { return undef; }
75sub zsig        { return undef; }
76sub zwriteline  { return undef; }
[87c6ef1]77sub login_host  { return undef; }
78sub login_tty   { return undef; }
[f1e629d]79
80sub pretty_sender { return shift->sender; }
81
82sub delete {
83    my ($m) = @_;
84    &owl::command("delete --id ".$m->id);
85}
86
87sub undelete {
88    my ($m) = @_;
89    &owl::command("undelete --id ".$m->id);
90}
91
92# Serializes the message into something similar to the zwgc->vt format
93sub serialize {
94    my ($this) = @_;
95    my $s;
96    for my $f (keys %$this) {
97        my $val = $this->{$f};
98        if (ref($val) eq "ARRAY") {
99            for my $i (0..@$val-1) {
100                my $aval;
101                $aval = $val->[$i];
102                $aval =~ s/\n/\n$f.$i: /g;
103                $s .= "$f.$i: $aval\n";   
104            }
105        } else {
106            $val =~ s/\n/\n$f: /g;
107            $s .= "$f: $val\n";
108        }
109    }
110    return $s;
111}
112
113# Populate the annoying legacy global variables
114sub legacy_populate_global {
115    my ($m) = @_;
116    $owl::direction  = $m->direction ;
117    $owl::type       = $m->type      ;
118    $owl::id         = $m->id        ;
119    $owl::class      = $m->class     ;
120    $owl::instance   = $m->instance  ;
121    $owl::recipient  = $m->recipient ;
122    $owl::sender     = $m->sender    ;
123    $owl::realm      = $m->realm     ;
124    $owl::opcode     = $m->opcode    ;
125    $owl::zsig       = $m->zsig      ;
126    $owl::msg        = $m->body      ;
127    $owl::time       = $m->time      ;
128    $owl::host       = $m->host      ;
[282ec9b]129    $owl::login      = $m->login     ;
[87c6ef1]130    $owl::auth       = $m->auth      ;
[f1e629d]131    if ($m->fields) {
132        @owl::fields = @{$m->fields};
133        @main::fields = @{$m->fields};
134    } else {
135        @owl::fields = undef;
136        @main::fields = undef;
137    }
138}
139
140#####################################################################
141#####################################################################
142
143package owl::Message::Admin;
144
145@ISA = qw( owl::Message );
146
147sub header       { return shift->{"header"}; }
148
149#####################################################################
150#####################################################################
151
152package owl::Message::Generic;
153
154@ISA = qw( owl::Message );
155
156#####################################################################
157#####################################################################
158
159package owl::Message::AIM;
160
161@ISA = qw( owl::Message );
162
163# all non-loginout AIM messages are personal for now...
164sub is_personal { 
165    return !(shift->is_loginout);
166}
167
168#####################################################################
169#####################################################################
170
171package owl::Message::Zephyr;
172
173@ISA = qw( owl::Message );
174
175sub login_tty { 
176    my ($m) = @_;
177    return undef if (!$m->is_loginout);
178    return $m->fields->[2];
179}
180
181sub login_host { 
182    my ($m) = @_;
183    return undef if (!$m->is_loginout);
184    return $m->fields->[0];
185}
186
187sub zwriteline  { return shift->{"zwriteline"}; }
188
189sub zsig        { return shift->{"zsig"}; }
190
191sub is_ping     { return (lc(shift->opcode) eq "ping"); }
192
193sub is_personal { 
194    my ($m) = @_;
195    return ((lc($m->class) eq "message")
196            && (lc($m->instance) eq "personal")
197            && $m->is_private);
198}
199
200sub is_mail { 
201    my ($m) = @_;
202    return ((lc($m->class) eq "mail") && $m->is_private);
203}
204
205sub pretty_sender {
206    my ($m) = @_;
207    my $sender = $m->sender;
208    my $realm = owl::zephyr_getrealm();
209    $sender =~ s/\@$realm$//;
210    return $sender;
211}
212
213# These are arguably zephyr-specific
214sub class       { return shift->{"class"}; }
215sub instance    { return shift->{"instance"}; }
216sub realm       { return shift->{"realm"}; }
217sub opcode      { return shift->{"opcode"}; }
218sub host        { return shift->{"hostname"}; }
219sub hostname    { return shift->{"hostname"}; }
220sub header      { return shift->{"header"}; }
221sub auth        { return shift->{"auth"}; }
222sub fields      { return shift->{"fields"}; }
223sub zsig        { return shift->{"zsig"}; }
224
225#####################################################################
226#####################################################################
227
228# switch to package main when we're done
229package main;
230
2311;
Note: See TracBrowser for help on using the repository browser.