ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/Mozilla-Plugin/Plugin.pm
(Generate patch)

Comparing cvsroot/Mozilla-Plugin/Plugin.pm (file contents):
Revision 1.7 by root, Sun Feb 25 13:29:41 2001 UTC vs.
Revision 1.8 by root, Sun Feb 25 23:31:25 2001 UTC

26#XSLoader::load __PACKAGE__, $VERSION; 26#XSLoader::load __PACKAGE__, $VERSION;
27use Data::Dumper;#d# 27use Data::Dumper;#d#
28 28
29my $interface; # Mozilla::Plugin::xxx (design weakness) 29my $interface; # Mozilla::Plugin::xxx (design weakness)
30 30
31sub NP_VERSION_MAJOR (){ 0 }
32sub NP_VERSION_MINOR (){ 9 }
33sub NP_EMBED (){ 1 }
34sub NP_FULL (){ 2 }
35sub NP_NORMAL (){ 1 }
36sub NP_SEEK (){ 2 }
37sub NP_ASFILE (){ 3 }
38sub NP_ASFILEONLY (){ 4 }
39sub NP_MAXREADY (){ 2147483647 }
40sub NPERR_NO_ERROR (){ 0 }
41sub NPERR_GENERIC_ERROR (){ 1 }
42sub NPERR_INVALID_INSTANCE_ERROR (){ 2 }
43sub NPERR_INVALID_FUNCTABLE_ERROR (){ 3 }
44sub NPERR_MODULE_LOAD_FAILED_ERROR (){ 4 }
45sub NPERR_OUT_OF_MEMORY_ERROR (){ 5 }
46sub NPERR_INVALID_PLUGIN_ERROR (){ 6 }
47sub NPERR_INVALID_PLUGIN_DIR_ERROR (){ 7 }
48sub NPERR_INCOMPATIBLE_VERSION_ERROR (){ 8 }
49sub NPERR_INVALID_PARAM (){ 9 }
50sub NPERR_INVALID_URL (){ 10 }
51sub NPERR_FILE_NOT_FOUND (){ 11 }
52sub NPERR_NO_DATA (){ 12 }
53sub NPERR_STREAM_NOT_SEEKABLE (){ 13 }
54sub NPVERS_HAS_STREAMOUTPUT (){ 8 }
55sub NPVERS_HAS_NOTIFICATION (){ 9 }
56sub NPVERS_HAS_LIVECONNECT (){ 9 }
57sub NPVERS_WIN16_HAS_LIVECONNECT (){ 10 }
58
31my $data; 59my $data;
32 60
33sub BIAS() { -2000000000 } # ugliest hack ever seen 61sub BIAS() { -2147483647 } # ugliest hack ever seen
34 62
35sub snd_cmd($) { 63sub snd_cmd($) {
36 $data = pack "NN", 0, ord($_[0]); 64 $data = pack "NN", 0, ord($_[0]);
37} 65}
38 66
129 157
130 if ($cmd eq "I") { 158 if ($cmd eq "I") {
131 rcv_u32 == 1 or die "protocol version mismatch\n"; 159 rcv_u32 == 1 or die "protocol version mismatch\n";
132 ($IFACE, $OSNAME, $OSVERS) = (rcv_blk, rcv_blk, rcv_blk); 160 ($IFACE, $OSNAME, $OSVERS) = (rcv_blk, rcv_blk, rcv_blk);
133 161
134 } elsif ($cmd eq "+") { 162 } elsif ($cmd eq "+") { # New
135 my ($objid, $type, $mode, $save, $argc) 163 my ($objid, $type, $mode, $save, $argc)
136 = (rcv_ptr, rcv_blk, rcv_u32, rcv_blk, rcv_u32); 164 = (rcv_ptr, rcv_blk, rcv_u32, rcv_blk, rcv_u32);
137 my %args; 165 my %args;
138 while ($argc--) { 166 while ($argc--) {
139 my ($argn, $argv) = (rcv_blk, rcv_blk); 167 my ($argn, $argv) = (rcv_blk, rcv_blk);
146 mode => $mode, 174 mode => $mode,
147 save => $save, 175 save => $save,
148 args => \%args, 176 args => \%args,
149 ); 177 );
150 178
151 } elsif ($cmd eq "-") { 179 } elsif ($cmd eq "-") { # Destroy
152 my $objid = rcv_ptr; 180 my $objid = rcv_ptr;
153 my $save = (delete $_OBJ{$objid})->save; 181 my $save = (delete $_OBJ{$objid})->save;
154 snd_cmd "-"; 182 snd_cmd "-";
155 snd_u32 length $save; 183 snd_u32 length $save;
156 snd_snd and snd_dyn $save; 184 snd_snd and snd_dyn $save;
157 185
158 } elsif ($cmd eq "W") { 186 } elsif ($cmd eq "X") { # SetWindow
159 my $objid = rcv_ptr; 187 my $objid = rcv_ptr;
160 my %args = ( 188 my %args = (
161 window => rcv_ptr, 189 window => rcv_ptr,
162 x => rcv_i32, 190 x => rcv_i32,
163 y => rcv_i32, 191 y => rcv_i32,
168 $args{window} = unpack "xxxxN", $args{window}; 196 $args{window} = unpack "xxxxN", $args{window};
169 $args{ws_type} = rcv_i32; 197 $args{ws_type} = rcv_i32;
170 $args{ws_depth} = rcv_u32; 198 $args{ws_depth} = rcv_u32;
171 } 199 }
172 200
201 snd_cmd 'X';
173 $_OBJ{$objid}->set_window(\%args); 202 snd_u32 $_OBJ{$objid}->set_window(\%args);
203 snd_snd;
204
205 } elsif ($cmd eq "N") { # NewStream
206 my $obj = $_OBJ{+rcv_ptr};
207 my %args = (
208 obj => $obj,
209 mimetype => rcv_blk,
210 id => rcv_ptr,
211 url => rcv_blk,
212 end => rcv_u32,
213 lastmodified => rcv_u32,
214 notifydata => rcv_u32,
215 seekable => rcv_u32,
216 );
217 my $str = $_OBJ{$args{id}} = new Mozilla::Stream \%args;
218
219 my ($stype, $err) = $obj->push_stream($str);
220
221 snd_cmd 'W';
222 snd_u32 $err;
223 snd_u32 $stype || NP_NORMAL;
224 snd_snd;
225
226 } elsif ($cmd eq "/") { # StreamAsFile
227 my $obj = $_OBJ{+rcv_ptr};
228 my $str = $_OBJ{+rcv_ptr};
229 my $path = rcv_blk;
230
231 $obj->stream_as_file($obj, $stream, $path);
232
233 } elsif ($cmd eq "R") { # WriteReady
234 my $obj = $_OBJ{+rcv_ptr};
235 my $str = $_OBJ{+rcv_ptr};
236
237 snd_cmd 'R';
238 snd_u32 $obj->write_ready($obj, $str);
239 snd_snd;
240
241 } elsif ($cmd eq "W") { # Write
242 my $obj = $_OBJ{+rcv_ptr};
243 my $str = $_OBJ{+rcv_ptr};
244 my $ofs = rcv_i32;
245 my $len = rcv_i32;
246 my $dta = rcv_dyn $len;
247
248 snd_cmd 'W';
249 snd_i32 $obj->write($str, $ofs, $len, $dta);
250 snd_snd;
251
252 } elsif ($cmd eq "D") { # DestroyStream
253 my $obj = $_OBJ{+rcv_ptr};
254 my $str = delete $_OBJ{+rcv_ptr};
255 my $why = rcv_u32;
256
257 $obj->destroy_stream($obj, $str, $why);
174 258
175 } else { 259 } else {
176 die "unknown command '$cmd' received"; 260 die "unknown command '$cmd' received";
177 } 261 }
178} 262}
215 unless ($self->{window}) { 299 unless ($self->{window}) {
216 $self->{window} = $new; 300 $self->{window} = $new;
217 print "window new calling with $new->{window}, $new->{w}, $new->{h}\n";#d# 301 print "window new calling with $new->{window}, $new->{w}, $new->{h}\n";#d#
218 $self->window_new($new->{window}, $new->{w}, $new->{h}); 302 $self->window_new($new->{window}, $new->{w}, $new->{h});
219 } 303 }
304
305 ();
220} 306}
221 307
222sub window_new {} 308sub window_new {}
223sub window_resize {} 309sub window_resize {}
224 310
228} 314}
229 315
230sub save { 316sub save {
231 my $self = shift; 317 my $self = shift;
232 $self->set_window(undef); 318 $self->set_window(undef);
319 $self->{destroy};
233 Storable::nfreeze $self->{save}; 320 Storable::nfreeze $self->{save};
234} 321}
235 322
323sub destroy {}
236sub DESTROY { 324sub DESTROY {}
237 #warn "DESTROY";#d# 325sub write_ready { 0xfffff }
326sub push_stream {}
327sub stream_as_file {}
328sub destroy_stream {}
329
330sub write {
331 my ($self) = shift;
332 shift->write(@_);
238} 333}
239 334
2401; 3351;
241 336
242=back 337=back

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines