do you plan to support mozillas up-to-date-checker?
https://www.mozilla.com/en-US/plugincheck/
would be cool…
It’s possible. To use this Mozilla feature, we’d have to install the plugin via an xpi file on Firefox, which only allows the user to install the browser plugin, not additional useful software such as the desktop runtime. Also, I don’t think it will work reliably for Linux, where the different distros might use different versions of the runtime library.
Short answer: I’m not sure how much of a win it is. Seems cool but comes with limitations.
David
vlc at least is checked for updates, too and i havent installed vlc via xpi but used the standard installer so propably things changed with firefox 3.6…
I think I found a bug. I am trying to use a DirectRadioButton, works fine in client, but using .p3d I get the following traceback.
:loader(error): Couldn't load file models/gui/radio_button_gui.bam: not found on model path (currently: "/home/croxis/.panda3d/hosts/runtime.panda3d.org_96a0ec538744def6/panda3d/cmu_1.7:/mf")
Traceback (most recent call last):
File "/home/croxis/src/CityMania/client/network.py", line 89, in processBuffer
self.processData(data)
File "/home/croxis/src/CityMania/client/network.py", line 161, in processData
messenger.send("onGetMaps", [maps])
File "/root/pandaworker/panda3d-1.7.0/built_cmu/direct/showbase/Messenger.py", line 325, in send
File "/root/pandaworker/panda3d-1.7.0/built_cmu/direct/showbase/Messenger.py", line 410, in __dispatch
File "/home/croxis/src/CityMania/client/gui.py", line 244, in mapSelection
label = DirectRadioButton(text=mapName, image=heightTexture, variable=m, value=[mapName])
File "/root/pandaworker/panda3d-1.7.0/built_cmu/direct/gui/DirectRadioButton.py", line 46, in __init__
File "/root/pandaworker/panda3d-1.7.0/built_cmu/direct/showbase/Loader.py", line 169, in loadModel
IOError: Could not load model file(s): ['models/gui/radio_button_gui']
:task(error): Exception occurred in PythonTask Poll the buffer manager
Traceback (most recent call last):
File "/root/pandaworker/panda3d-1.7.0/built_cmu/direct/p3d/AppRunner.py", line 411, in run
File "/root/pandaworker/panda3d-1.7.0/built_cmu/direct/task/Task.py", line 496, in run
File "/root/pandaworker/panda3d-1.7.0/built_cmu/direct/task/Task.py", line 454, in step
File "/home/croxis/src/CityMania/client/network.py", line 89, in processBuffer
self.processData(data)
File "/home/croxis/src/CityMania/client/network.py", line 161, in processData
messenger.send("onGetMaps", [maps])
File "/root/pandaworker/panda3d-1.7.0/built_cmu/direct/showbase/Messenger.py", line 325, in send
File "/root/pandaworker/panda3d-1.7.0/built_cmu/direct/showbase/Messenger.py", line 410, in __dispatch
File "/home/croxis/src/CityMania/client/gui.py", line 244, in mapSelection
label = DirectRadioButton(text=mapName, image=heightTexture, variable=m, value=[mapName])
File "/root/pandaworker/panda3d-1.7.0/built_cmu/direct/gui/DirectRadioButton.py", line 46, in __init__
File "/root/pandaworker/panda3d-1.7.0/built_cmu/direct/showbase/Loader.py", line 169, in loadModel
IOError: Could not load model file(s): ['models/gui/radio_button_gui']
:TaskManager: TaskManager.destroy()
:display: Closing glxGraphicsWindow
Successfully joined thread: 0
Failure on startup.
Mark the “models” package as dependency.
-r models, correct?
If so I am still getting the error (even deleted ~/.panda3d just in case)
I have a fresh Fedora 12 install, with Firefox 3.5.6 and while the plugin seemed to install fine, it doesn’t work.
When I visit the online demo pages, the object tag doesn’t cause the game to appear at all. When I click on the “download” link to get the p3d file, I just end up with a grey square.
Is Firefox 3.5.6 supported? Should I download the runtime environment to check if Panda3D works at all on my machine? Is there anything I can do to debug this better?
Thank you.
If you type “about:plugins” in your browser, does the Panda3D plugin appear?
Can you show us the logfiles in ~/.panda3d/log/ ?
Thank you very much for your reply.
Yes, the Panda3D plugin shows up like this when I type “about:plugins”:
[color=red]
Panda3D Game Engine Plug-In
File name: nswrapper_32_32.nppanda3d.so
Runs 3-D games and interactive applets
MIME Type Description Suffixes Enabled
application/x-panda3d Panda3D applet p3d Yes
A logfile in ~/.panda3d/log/ is really informative! It looks like it shows an unexpected browser version:
[color=red]
initializing
browserFuncs = 0x8070e00
NP_GetEntryPoints, pluginFuncs = 0x8070ec0
Browser version 0.17
Plugin compiled with version 0.22
new instance 0x9343510
new instance->pdata = 0x9346800
Browser version insufficient: we require at least NPAPI version 0.19.
Plugin failed.
GetValue 14
Ignoring GetValue request 14
GetValue 14
Ignoring GetValue request 14
SetWindow 0, 0, 1274, 513
SetWindow 0, 0, 1274, 513
SetWindow 0, 0, 1274, 513
NewStream application/x-panda3d: 0x9347530, file:///home/sample/Downloads/ball-in-maze.p3d, size = 252982, notifyData = 0, for 0x9343510, 0x9346800
destroy instance 0x9343510, 0x9346800
save = 0xbfa38d08
shutdown
When I just type “about:” in the URL bar, I see this value:
[color=red]
Build identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.6) Gecko/20100107 Fedora/3.5.6-1.fc12 Firefox/3.5.6
Ah. We indeed require npapi version 1.9 or later. But judging from your user agent string, you do have the right version.
This is weird. But I am also noticing this in your about:plugins output:
nswrapper_32_32.nppanda3d.so
I’m wondering why it shows this nswrapper_32_32 prefix before the nppanda3d.so. I am guessing Fedora uses nswrapper to support both 32-bits and 64-bits browsers with the same plugin on the same machine.
Perhaps this nswrapper exposes an outdated npapi version, somehow. This is just a wild guess - but can you update your version of the nspluginwrapper?
You were probably correct in your guess about the wrong version of the npapi. I have the most recent version of the nspluginwrapper installed for my operating system (nspluginwrapper-1.3.0-10.fc12.i686), so I tried to exclude the panda3d plugin from the list of plugins that the nspluginwrapper tries to wrap.
I edited the file /etc/sysconfig/nspluginwrapper. I changed this line:
export IGNORE_WRAP="libtotem*:libjavaplugin*:gecko-mediaplayer*:mplayerplug-in*:librhythmbox*:packagekit*"
to this:
export IGNORE_WRAP="libtotem*:libjavaplugin*:gecko-mediaplayer*:mplayerplug-in*:librhythmbox*:packagekit*:nppanda3d*"
Then I restarted my browser, and the behavior was different. This time the demo app pages did render a large blank gray square where the object tag indicated that they should be. But they still did nothing. The log file now shows:
initializing
browserFuncs = 0x7eb45c8
NP_GetEntryPoints, pluginFuncs = 0xbf99fd04
Browser version 0.22
Plugin compiled with version 0.22
new instance 0xa92a9e18
new instance->pdata = 0xa81c8170
start_download: http://runtime.panda3d.org/contents.xml?1264934153
GetValue 14
Ignoring GetValue request 14
SetWindow 199, 335, 640, 480
SetWindow 199, 335, 640, 480
NewStream application/x-panda3d: 0xa862fce0, http://www.panda3d.org/demos/demos/ball-in-maze.p3d, size = 252982, notifyData = 0, for 0xa92a9e18, 0xa81c8170
Opening /tmp/p3d_hrcCuh for storing preliminary p3d data
NewStream application/xml: 0xa806c5e0, http://runtime.panda3d.org/contents.xml?1264934153, size = 38592, notifyData = 0xa84a7560, for 0xa92a9e18, 0xa81c8170
StreamAsFile http://runtime.panda3d.org/contents.xml?1264934153, 38592, notifyData = 0xa84a7560
start_download: http://runtime.panda3d.org/coreapi/linux_i386/p3d_plugin.so
DestroyStream: 0xa806c5e0, http://runtime.panda3d.org/contents.xml?1264934153, notifyData = 0xa84a7560, reason = 0, for 0xa92a9e18, 0xa81c8170
URLNotify: http://runtime.panda3d.org/contents.xml?1264934153, notifyData = 0xa84a7560, reason = 0
NewStream text/plain: 0xa86307d0, http://runtime.panda3d.org/coreapi/linux_i386/p3d_plugin.so, size = 959699, notifyData = 0xadac6780, for 0xa92a9e18, 0xa81c8170
DestroyStream: 0xa862fce0, http://www.panda3d.org/demos/demos/ball-in-maze.p3d, notifyData = 0xadac64d0, reason = 0, for 0xa92a9e18, 0xa81c8170
NewStream application/x-panda3d: 0xa862fce0, http://www.panda3d.org/demos/demos/ball-in-maze.p3d, size = 252982, notifyData = 0, for 0xa92a9e18, 0xa81c8170
StreamAsFile http://runtime.panda3d.org/coreapi/linux_i386/p3d_plugin.so, 959699, notifyData = 0xadac6780
Attempting to load core API from /home/sample/.panda3d/coreapi/linux_i386/p3d_plugin.so
Couldn't load /home/sample/.panda3d/coreapi/linux_i386/p3d_plugin.so: libssl.so.0.9.8: cannot open shared object file: No such file or directory
Unable to launch core API in /home/sample/.panda3d/coreapi/linux_i386/p3d_plugin.so
Plugin failed.
Stopping stream 0xa86307d0
DestroyStream: 0xa86307d0, http://runtime.panda3d.org/coreapi/linux_i386/p3d_plugin.so, notifyData = 0xadac6780, reason = 1, for 0xa92a9e18, 0xa81c8170
URLNotify: http://runtime.panda3d.org/coreapi/linux_i386/p3d_plugin.so, notifyData = 0xadac6780, reason = 1
It seems that the plugin was linked to libssl.so.0.9.8 but Fedora 12 ships with libssl.so.1.0.0.
Should I just symlink libssl.so.1.0.0 to libssl.so.0.9.8?
Thank you again for your attention.
Symlinking will probably not work as I doubt that 0.9.8 and 1.0.0 are binary compatible.
In this case, I know what the problem is. I just don’t know a solution, except that I should link libssl statically. I used to link it statically, but then various other problems came up.
I need to give this some more thought.
Well I went ahead and tried it anyway, and then a new message came up:
initializing
browserFuncs = 0x7eb45c8
NP_GetEntryPoints, pluginFuncs = 0xbfedcac4
Browser version 0.22
Plugin compiled with version 0.22
new instance 0xac03a558
new instance->pdata = 0xac025170
start_download: http://runtime.panda3d.org/contents.xml?1264936140
GetValue 14
Ignoring GetValue request 14
SetWindow 199, 335, 640, 480
SetWindow 199, 335, 640, 480
NewStream application/x-panda3d: 0xb21cf1f0, http://www.panda3d.org/demos/demos/ball-in-maze.p3d, size = 252982, notifyData = 0, for 0xac03a558, 0xac025170
Opening /tmp/p3d_pyXcCb for storing preliminary p3d data
NewStream application/x-panda3d: 0xb21cf5e0, http://www.panda3d.org/demos/demos/ball-in-maze.p3d, size = 252982, notifyData = 0, for 0xac03a558, 0xac025170
DestroyStream: 0xb21cf1f0, http://www.panda3d.org/demos/demos/ball-in-maze.p3d, notifyData = 0xac45b200, reason = 0, for 0xac03a558, 0xac025170
NewStream application/xml: 0xac48b5a0, http://runtime.panda3d.org/contents.xml?1264936140, size = 38592, notifyData = 0xac496570, for 0xac03a558, 0xac025170
StreamAsFile http://runtime.panda3d.org/contents.xml?1264936140, 38592, notifyData = 0xac496570
Attempting to load core API from /home/sample/.panda3d/coreapi/linux_i386/p3d_plugin.so
Couldn't load /home/sample/.panda3d/coreapi/linux_i386/p3d_plugin.so: libcrypto.so.0.9.8: cannot open shared object file: No such file or directory
Unable to launch core API in /home/sample/.panda3d/coreapi/linux_i386/p3d_plugin.so
Plugin failed.
Stopping stream 0xac48b5a0
DestroyStream: 0xac48b5a0, http://runtime.panda3d.org/contents.xml?1264936140, notifyData = 0xac496570, reason = 1, for 0xac03a558, 0xac025170
URLNotify: http://runtime.panda3d.org/contents.xml?1264936140, notifyData = 0xac496570, reason = 1
This time it was looking for libcrypto.so.0.9.8 but again, Fedora 12 ships with libcrypto.so.1.0.0.
So I symlinked that one as well, and then it worked! I got an ugly Motif-style dialog box warning me about a self-signed certificate, and then it downloaded a bunch of stuff and I saw the Ball in Maze game! It reminded me of the Gavin Bell OpenInventor demo from eons ago.
Thank you very much for your help!
One final question; as a best practice, should you do development and plugin testing in separate user accounts, or does the plugin not even know that the SDK is installed?
Thanks again!
Great! This means that they actually are ABI compatible.
The runtime works independently of the SDK indeed. You don’t have to use different user accounts.
Is there perhaps a Fedora package that provides libssl.so.0.9.8 and libcrypto.so.0.9.8, that we can list as a dependency for the rpm?
David
Hm, no, it doesn’t seem like it does.
I think the best solution would still be to link it statically, or maybe to ship it with the coreapi. Could perhaps the coreapi package contain multiple libraries, in the same coreapi directory? Or can a solo package only contain one file?
Hmm, the current design doesn’t allow multiple files in a “solo” package. But perhaps we can add support for this, to solve this particular problem.
David
I just ran through the installation of the plugin on Ubuntu Jaunty as well, and during that process it asks you to enter the specific version of Ubuntu that you are running, at Step 4 of this page: http://www.panda3d.org/download.php?platform=ubuntu&version=1.0.0&runtime
If this implies that there are different builds of the plugin for different versions of Ubuntu, could there not also be different builds of the plugin for different versions of Fedora? Many packages that show up in the listing that is output by rpm -q -a are qualified by a “fc12” in their name, meaning that they are intended specifically for the Fedora 12 release.
Could you just leave these libraries dynamically linked, but provide a different binary build for a couple of recent Fedora versions?
I just gave the plugin a whirl, and it looks pretty sweet. As pointed out in http://www.panda3d.org/blog/?p=14 though, it’s not exactly secure. It could be a bad mess waiting to happen. If somebody would take advantage of the plugin in a malicious manner, it could tarnish the plugin’s and possibly the engine’s reputation.
Is there a plan to resolve the security issues by running the code in a VM for example? I understand that the way the plugin’s security is now is a compromise of sorts, to get it out there quickly, but I just want to know if better security is something I can expect in a future release. Otherwise it could end up being just a toy.
If you run the plugin on Vista or Windows7 on IE, the OS will sandbox the plugin more-or-less effectively. One day, we hope to construct a similar sandbox for other OS’s. (This would not be the same thing as running in a VM, which would almost certainly preclude the use of graphics hardware.)
Still, I think the security model is effective as it is. The plugin cannot run any code that is not approved by the user. This is exactly as good as the security model for a downloadable executable, for instance. Is there a particular flaw in its design that you see that could allow someone to take advantage of the plugin in a malicious manner?
David