From d644fc64407dcd14ffcee6a0e9fbe28ee3a4e9bd Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 15 Aug 2008 23:45:02 -0500 Subject: Second Life viewer sources 1.18.0.6 --- linden/etc/message.xml | 399 +++ linden/indra/SConstruct | 59 +- linden/indra/indra_complete/indra_complete.sln | 20 - linden/indra/indra_complete/indra_complete_vc8.sln | 17 - linden/indra/lib/python/indra/__init__.py | 25 + linden/indra/lib/python/indra/compatibility.py | 121 + linden/indra/lib/python/indra/llmanifest.py | 2 +- linden/indra/lib/python/indra/llmessage.py | 375 +++ linden/indra/lib/python/indra/tokenstream.py | 152 ++ linden/indra/llcommon/lldarray.h | 19 +- linden/indra/llcommon/llpreprocessor.h | 22 +- linden/indra/llcommon/llprocessor.cpp | 8 +- linden/indra/llcommon/llprocessor.h | 1 - linden/indra/llcommon/llskiplist.h | 12 +- linden/indra/llcommon/llstreamtools.h | 2 + linden/indra/llcommon/llstring.h | 4 - linden/indra/llcommon/llsys.cpp | 25 +- linden/indra/llcommon/llsys.h | 12 +- linden/indra/llcommon/llversion.h | 6 +- linden/indra/llmath/llmath.vcproj | 12 - linden/indra/llmath/llmath_vc8.vcproj | 16 - linden/indra/llmath/llv4math.h | 121 - linden/indra/llmath/llv4matrix3.h | 222 -- linden/indra/llmath/llv4matrix4.h | 251 -- linden/indra/llmath/llv4vector3.h | 82 - linden/indra/llmessage/files.lst | 2 + linden/indra/llmessage/llcircuit.h | 6 +- linden/indra/llmessage/llhost.cpp | 12 +- linden/indra/llmessage/llhost.h | 6 +- linden/indra/llmessage/llhttpclient.cpp | 3 - linden/indra/llmessage/llhttpsender.cpp | 11 +- linden/indra/llmessage/llhttpsender.h | 3 + linden/indra/llmessage/lliosocket.cpp | 14 +- linden/indra/llmessage/llmessage.vcproj | 13 +- linden/indra/llmessage/llmessage_vc8.vcproj | 12 + linden/indra/llmessage/llmessagebuilder.h | 73 +- linden/indra/llmessage/llmessageconfig.cpp | 165 +- linden/indra/llmessage/llmessageconfig.h | 19 +- linden/indra/llmessage/llmessagereader.cpp | 28 + linden/indra/llmessage/llmessagereader.h | 29 + linden/indra/llmessage/llmessagetemplate.cpp | 32 +- linden/indra/llmessage/llmessagetemplate.h | 83 +- linden/indra/llmessage/llmessagetemplateparser.cpp | 754 ++++++ linden/indra/llmessage/llmessagetemplateparser.h | 82 + linden/indra/llmessage/llmsgvariabletype.h | 28 + linden/indra/llmessage/llpacketack.cpp | 84 + linden/indra/llmessage/llpacketack.h | 122 +- linden/indra/llmessage/llsdmessagebuilder.cpp | 80 +- linden/indra/llmessage/llsdmessagebuilder.h | 72 +- linden/indra/llmessage/llsdmessagereader.cpp | 68 +- linden/indra/llmessage/llsdmessagereader.h | 5 +- .../indra/llmessage/lltemplatemessagebuilder.cpp | 329 ++- linden/indra/llmessage/lltemplatemessagebuilder.h | 72 +- linden/indra/llmessage/lltemplatemessagereader.cpp | 151 +- linden/indra/llmessage/lltemplatemessagereader.h | 28 + linden/indra/llmessage/lltransfermanager.cpp | 28 - linden/indra/llmessage/lltransfermanager.h | 1 - linden/indra/llmessage/message.cpp | 1674 +++--------- linden/indra/llmessage/message.h | 76 +- linden/indra/llmessage/message_prehash.cpp | 338 +-- linden/indra/llmessage/message_prehash.h | 169 +- .../indra/newview/English.lproj/InfoPlist.strings | 4 +- linden/indra/newview/Info-SecondLife.plist | 2 +- linden/indra/newview/app_settings/message.xml | 228 -- linden/indra/newview/files.lst | 3 - linden/indra/newview/llagent.cpp | 2 - linden/indra/newview/llassetuploadresponders.cpp | 30 +- linden/indra/newview/llassetuploadresponders.h | 30 +- linden/indra/newview/llcontroldef.cpp | 6 - linden/indra/newview/lldrawable.h | 1 - linden/indra/newview/lleventpoll.cpp | 261 +- linden/indra/newview/lleventpoll.h | 7 +- linden/indra/newview/llfloaterimport.cpp | 5 +- linden/indra/newview/llinventorymodel.cpp | 167 -- linden/indra/newview/llpaneldisplay.cpp | 1 - linden/indra/newview/llselectmgr.cpp | 3 +- linden/indra/newview/llselectmgr.h | 4 +- linden/indra/newview/llstartup.cpp | 343 +-- linden/indra/newview/llstartup.h | 11 +- linden/indra/newview/lltoolbrush.cpp | 3 +- linden/indra/newview/lltoolbrush.h | 2 +- linden/indra/newview/llviewerjointmesh.cpp | 214 +- linden/indra/newview/llviewerjointmesh.h | 16 - linden/indra/newview/llviewerjointmesh_sse.cpp | 114 - linden/indra/newview/llviewerjointmesh_sse2.cpp | 116 - linden/indra/newview/llviewerjointmesh_vec.cpp | 97 - linden/indra/newview/llviewermenu.cpp | 65 +- linden/indra/newview/llviewermenufile.cpp | 3 +- linden/indra/newview/llviewermessage.cpp | 79 +- linden/indra/newview/llviewernetwork.h | 2 - linden/indra/newview/llviewerparcelmgr.cpp | 12 +- linden/indra/newview/llviewerregion.cpp | 36 +- linden/indra/newview/llviewerregion.h | 7 + linden/indra/newview/llworld.cpp | 52 +- .../newview/macview.xcodeproj/project.pbxproj | 24 +- linden/indra/newview/newview.vcproj | 116 +- linden/indra/newview/newview_vc8.vcproj | 97 +- linden/indra/newview/postbuild.bat | 5 + linden/indra/newview/prebuild.bat | 13 + linden/indra/newview/releasenotes.txt | 28 + linden/indra/newview/res/newViewRes.rc | 8 +- .../indra/newview/secondlife setup build vaak.bat | 2 +- .../indra/newview/skins/xui/de/floater_about.xml | 4 +- .../indra/newview/skins/xui/de/floater_groups.xml | 2 +- .../xui/de/floater_inventory_item_properties.xml | 2 +- .../indra/newview/skins/xui/de/floater_tools.xml | 24 +- .../indra/newview/skins/xui/de/menu_inventory.xml | 34 +- .../newview/skins/xui/de/menu_pie_attachment.xml | 4 +- .../indra/newview/skins/xui/de/menu_pie_avatar.xml | 2 +- .../indra/newview/skins/xui/de/menu_pie_land.xml | 2 +- .../indra/newview/skins/xui/de/menu_pie_object.xml | 10 +- .../indra/newview/skins/xui/de/menu_pie_self.xml | 10 +- linden/indra/newview/skins/xui/de/notify.xml | 40 +- linden/indra/newview/skins/xui/de/panel_login.xml | 6 +- .../skins/xui/de/panel_preferences_general.xml | 52 +- .../skins/xui/de/panel_preferences_graphics3.xml | 3 + .../newview/skins/xui/en-us/floater_about.xml | 7 +- .../indra/newview/skins/xui/en-us/panel_login.xml | 2 +- linden/indra/newview/skins/xui/ja/alerts.xml | 2855 +++++++++++--------- .../indra/newview/skins/xui/ja/floater_about.xml | 19 +- .../newview/skins/xui/ja/floater_about_land.xml | 254 +- .../skins/xui/ja/floater_animation_preview.xml | 97 +- .../indra/newview/skins/xui/ja/floater_auction.xml | 14 +- .../newview/skins/xui/ja/floater_avatar_picker.xml | 10 +- .../skins/xui/ja/floater_avatar_textures.xml | 26 +- .../newview/skins/xui/ja/floater_build_options.xml | 10 +- .../indra/newview/skins/xui/ja/floater_bumps.xml | 14 +- .../newview/skins/xui/ja/floater_buy_contents.xml | 10 +- .../newview/skins/xui/ja/floater_buy_currency.xml | 41 +- .../newview/skins/xui/ja/floater_buy_land.xml | 143 +- .../newview/skins/xui/ja/floater_buy_object.xml | 8 +- .../newview/skins/xui/ja/floater_chat_history.xml | 8 +- .../newview/skins/xui/ja/floater_choose_group.xml | 4 +- .../newview/skins/xui/ja/floater_clothing.xml | 6 +- .../newview/skins/xui/ja/floater_color_picker.xml | 22 +- .../newview/skins/xui/ja/floater_critical.xml | 8 +- .../newview/skins/xui/ja/floater_customize.xml | 413 +-- .../newview/skins/xui/ja/floater_directory.xml | 235 +- .../indra/newview/skins/xui/ja/floater_friends.xml | 45 +- .../indra/newview/skins/xui/ja/floater_gesture.xml | 17 +- .../newview/skins/xui/ja/floater_god_tools.xml | 116 +- .../newview/skins/xui/ja/floater_group_info.xml | 189 +- .../indra/newview/skins/xui/ja/floater_groups.xml | 10 +- linden/indra/newview/skins/xui/ja/floater_html.xml | 22 +- .../newview/skins/xui/ja/floater_html_help.xml | 2 +- linden/indra/newview/skins/xui/ja/floater_im.xml | 25 +- .../newview/skins/xui/ja/floater_image_preview.xml | 20 +- .../indra/newview/skins/xui/ja/floater_import.xml | 12 +- .../skins/xui/ja/floater_instant_message.xml | 19 +- .../newview/skins/xui/ja/floater_inventory.xml | 30 +- .../xui/ja/floater_inventory_item_properties.xml | 42 +- .../skins/xui/ja/floater_inventory_view_finder.xml | 16 +- .../newview/skins/xui/ja/floater_land_holdings.xml | 18 +- .../skins/xui/ja/floater_live_lsleditor.xml | 2 +- .../newview/skins/xui/ja/floater_moveview.xml | 16 +- linden/indra/newview/skins/xui/ja/floater_mute.xml | 13 +- .../skins/xui/ja/floater_name_description.xml | 8 +- .../indra/newview/skins/xui/ja/floater_new_im.xml | 4 +- .../skins/xui/ja/floater_new_outfit_dialog.xml | 27 +- .../newview/skins/xui/ja/floater_openobject.xml | 4 +- linden/indra/newview/skins/xui/ja/floater_pay.xml | 16 +- .../newview/skins/xui/ja/floater_pay_object.xml | 22 +- .../newview/skins/xui/ja/floater_postcard.xml | 22 +- .../newview/skins/xui/ja/floater_preferences.xml | 9 +- .../skins/xui/ja/floater_preview_animation.xml | 13 +- .../xui/ja/floater_preview_embedded_texture.xml | 7 +- .../xui/ja/floater_preview_existing_landmark.xml | 5 +- .../skins/xui/ja/floater_preview_gesture.xml | 29 +- .../skins/xui/ja/floater_preview_new_landmark.xml | 7 +- .../skins/xui/ja/floater_preview_notecard.xml | 4 +- .../ja/floater_preview_notecard_keep_discard.xml | 10 +- .../newview/skins/xui/ja/floater_preview_sound.xml | 13 +- .../skins/xui/ja/floater_preview_texture.xml | 7 +- .../ja/floater_preview_texture_keep_discard.xml | 10 +- .../skins/xui/ja/floater_price_for_listing.xml | 18 +- .../indra/newview/skins/xui/ja/floater_profile.xml | 2 +- linden/indra/newview/skins/xui/ja/floater_rate.xml | 18 +- .../newview/skins/xui/ja/floater_report_abuse.xml | 56 +- .../newview/skins/xui/ja/floater_report_bug.xml | 66 +- .../newview/skins/xui/ja/floater_script_debug.xml | 2 +- .../skins/xui/ja/floater_script_ed_panel.xml | 15 +- .../skins/xui/ja/floater_script_preview.xml | 2 +- .../newview/skins/xui/ja/floater_script_queue.xml | 2 +- .../newview/skins/xui/ja/floater_script_search.xml | 8 +- .../newview/skins/xui/ja/floater_sell_land.xml | 30 +- .../skins/xui/ja/floater_settings_debug.xml | 6 +- .../newview/skins/xui/ja/floater_snapshot.xml | 50 +- .../newview/skins/xui/ja/floater_sound_preview.xml | 12 +- .../indra/newview/skins/xui/ja/floater_telehub.xml | 24 +- .../newview/skins/xui/ja/floater_texture_ctrl.xml | 14 +- .../indra/newview/skins/xui/ja/floater_tools.xml | 221 +- .../newview/skins/xui/ja/floater_top_objects.xml | 42 +- linden/indra/newview/skins/xui/ja/floater_tos.xml | 14 +- .../skins/xui/ja/floater_wearable_save_as.xml | 6 +- .../newview/skins/xui/ja/floater_world_map.xml | 54 +- .../indra/newview/skins/xui/ja/menu_inventory.xml | 47 +- .../indra/newview/skins/xui/ja/menu_pie_avatar.xml | 18 +- .../indra/newview/skins/xui/ja/menu_pie_land.xml | 8 +- .../indra/newview/skins/xui/ja/menu_pie_object.xml | 23 +- .../indra/newview/skins/xui/ja/menu_pie_self.xml | 22 +- linden/indra/newview/skins/xui/ja/menu_viewer.xml | 164 +- linden/indra/newview/skins/xui/ja/notify.xml | 377 +-- linden/indra/newview/skins/xui/ja/panel_avatar.xml | 162 +- .../skins/xui/ja/panel_avatar_classified.xml | 18 +- .../newview/skins/xui/ja/panel_avatar_pick.xml | 8 +- .../indra/newview/skins/xui/ja/panel_chat_bar.xml | 12 +- .../newview/skins/xui/ja/panel_classified.xml | 8 +- linden/indra/newview/skins/xui/ja/panel_event.xml | 38 +- linden/indra/newview/skins/xui/ja/panel_group.xml | 7 +- .../newview/skins/xui/ja/panel_group_finder.xml | 4 +- .../newview/skins/xui/ja/panel_group_general.xml | 48 +- .../newview/skins/xui/ja/panel_group_invite.xml | 18 +- .../skins/xui/ja/panel_group_land_money.xml | 48 +- .../newview/skins/xui/ja/panel_group_notices.xml | 41 +- .../newview/skins/xui/ja/panel_group_roles.xml | 82 +- .../newview/skins/xui/ja/panel_group_voting.xml | 52 +- .../newview/skins/xui/ja/panel_land_covenant.xml | 24 +- linden/indra/newview/skins/xui/ja/panel_login.xml | 26 +- .../newview/skins/xui/ja/panel_media_remote.xml | 15 +- .../newview/skins/xui/ja/panel_music_remote.xml | 15 +- .../newview/skins/xui/ja/panel_overlaybar.xml | 15 +- linden/indra/newview/skins/xui/ja/panel_place.xml | 2 +- .../newview/skins/xui/ja/panel_place_small.xml | 2 +- .../skins/xui/ja/panel_preferences_audio.xml | 36 +- .../skins/xui/ja/panel_preferences_chat.xml | 42 +- .../skins/xui/ja/panel_preferences_general.xml | 90 +- .../skins/xui/ja/panel_preferences_graphics1.xml | 32 +- .../skins/xui/ja/panel_preferences_graphics2.xml | 36 +- .../skins/xui/ja/panel_preferences_graphics3.xml | 23 +- .../newview/skins/xui/ja/panel_preferences_im.xml | 27 +- .../skins/xui/ja/panel_preferences_input.xml | 22 +- .../skins/xui/ja/panel_preferences_network.xml | 32 +- .../skins/xui/ja/panel_preferences_popups.xml | 13 +- .../newview/skins/xui/ja/panel_region_covenant.xml | 33 +- .../newview/skins/xui/ja/panel_region_debug.xml | 36 +- .../newview/skins/xui/ja/panel_region_estate.xml | 51 +- .../newview/skins/xui/ja/panel_region_general.xml | 26 +- .../newview/skins/xui/ja/panel_region_terrain.xml | 28 +- .../newview/skins/xui/ja/panel_region_texture.xml | 59 +- .../newview/skins/xui/ja/panel_scrolling_param.xml | 4 +- .../newview/skins/xui/ja/panel_settings_chat.xml | 35 +- .../newview/skins/xui/ja/panel_settings_im.xml | 10 +- .../newview/skins/xui/ja/panel_settings_msgbox.xml | 10 +- .../skins/xui/ja/panel_settings_network.xml | 39 +- .../newview/skins/xui/ja/panel_settings_web.xml | 43 +- .../newview/skins/xui/ja/panel_status_bar.xml | 23 +- .../indra/newview/skins/xui/ja/panel_toolbar.xml | 29 +- .../indra/newview/skins/xui/ja/panel_top_pick.xml | 6 +- linden/indra/newview/skins/xui/ja/role_actions.xml | 179 +- linden/indra/newview/skins/xui/ja/untranslated.xml | Bin 69 -> 344387 bytes linden/indra/newview/skins/xui/ko/alerts.xml | 14 +- .../indra/newview/skins/xui/ko/floater_about.xml | 2 +- .../newview/skins/xui/ko/floater_about_land.xml | 30 +- .../skins/xui/ko/floater_animation_preview.xml | 60 +- .../skins/xui/ko/floater_avatar_textures.xml | 6 +- .../newview/skins/xui/ko/floater_clothing.xml | 2 +- .../newview/skins/xui/ko/floater_color_picker.xml | 4 +- .../newview/skins/xui/ko/floater_customize.xml | 2 +- .../newview/skins/xui/ko/floater_directory.xml | 60 +- .../indra/newview/skins/xui/ko/floater_friends.xml | 20 +- .../indra/newview/skins/xui/ko/floater_gesture.xml | 12 +- .../newview/skins/xui/ko/floater_group_info.xml | 4 +- .../indra/newview/skins/xui/ko/floater_groups.xml | 4 +- .../newview/skins/xui/ko/floater_image_preview.xml | 4 +- .../newview/skins/xui/ko/floater_inventory.xml | 6 +- .../skins/xui/ko/floater_inventory_view_finder.xml | 2 +- .../newview/skins/xui/ko/floater_land_holdings.xml | 10 +- linden/indra/newview/skins/xui/ko/floater_mute.xml | 2 +- .../skins/xui/ko/floater_new_outfit_dialog.xml | 6 +- .../skins/xui/ko/floater_preview_gesture.xml | 4 +- .../newview/skins/xui/ko/floater_report_abuse.xml | 8 +- .../newview/skins/xui/ko/floater_report_bug.xml | 8 +- .../newview/skins/xui/ko/floater_script_debug.xml | 2 +- .../newview/skins/xui/ko/floater_snapshot.xml | 4 +- .../indra/newview/skins/xui/ko/floater_telehub.xml | 4 +- .../newview/skins/xui/ko/floater_world_map.xml | 2 +- .../indra/newview/skins/xui/ko/menu_inventory.xml | 2 +- .../indra/newview/skins/xui/ko/menu_pie_self.xml | 4 +- linden/indra/newview/skins/xui/ko/menu_viewer.xml | 6 +- linden/indra/newview/skins/xui/ko/notify.xml | 2 +- linden/indra/newview/skins/xui/ko/panel_avatar.xml | 12 +- .../newview/skins/xui/ko/panel_group_general.xml | 14 +- .../newview/skins/xui/ko/panel_group_invite.xml | 2 +- .../skins/xui/ko/panel_group_land_money.xml | 6 +- .../newview/skins/xui/ko/panel_group_notices.xml | 16 +- .../newview/skins/xui/ko/panel_group_roles.xml | 20 +- .../newview/skins/xui/ko/panel_group_voting.xml | 10 +- .../newview/skins/xui/ko/panel_land_covenant.xml | 4 +- .../skins/xui/ko/panel_preferences_audio.xml | 4 +- .../skins/xui/ko/panel_preferences_chat.xml | 14 +- .../skins/xui/ko/panel_preferences_general.xml | 18 +- .../skins/xui/ko/panel_preferences_graphics2.xml | 12 +- .../skins/xui/ko/panel_preferences_graphics3.xml | 2 +- .../newview/skins/xui/ko/panel_preferences_im.xml | 8 +- .../skins/xui/ko/panel_preferences_input.xml | 6 +- .../skins/xui/ko/panel_preferences_network.xml | 2 +- .../skins/xui/ko/panel_preferences_popups.xml | 6 +- .../newview/skins/xui/ko/panel_region_debug.xml | 4 +- .../newview/skins/xui/ko/panel_region_general.xml | 4 +- .../newview/skins/xui/ko/panel_region_terrain.xml | 2 +- .../newview/skins/xui/ko/panel_region_texture.xml | 2 +- linden/indra/newview/viewer.cpp | 192 +- linden/indra/newview/viewer_manifest.py | 1 + .../indra/test/MacTester.xcodeproj/project.pbxproj | 2 +- linden/indra/test/blowfish.pl | 5 + linden/indra/test/files.lst | 21 + linden/indra/test/inventory.cpp | 463 +++- linden/indra/test/llbitpack_tut.cpp | 3 +- linden/indra/test/llbuffer_tut.cpp | 270 ++ linden/indra/test/lldatapacker_tut.cpp | 3 +- linden/indra/test/lldate_tut.cpp | 206 ++ linden/indra/test/llhost_tut.cpp | 237 ++ linden/indra/test/lljoint_tut.cpp | 244 ++ linden/indra/test/llmessageconfig_tut.cpp | 205 +- linden/indra/test/llmessagetemplateparser_tut.cpp | 370 +++ linden/indra/test/llnamevalue_tut.cpp | 848 ++++++ linden/indra/test/llpermissions_tut.cpp | 553 ++++ linden/indra/test/llquaternion_tut.cpp | 665 +++++ linden/indra/test/llsaleinfo_tut.cpp | 248 ++ linden/indra/test/llsdmessagebuilder_tut.cpp | 2 +- linden/indra/test/llsdmessagereader_tut.cpp | 6 +- linden/indra/test/llsdtraits.h | 28 + linden/indra/test/llsdutil_tut.cpp | 152 ++ linden/indra/test/llstreamtools_tut.cpp | 928 +++++++ linden/indra/test/llstring_tut.cpp | 1 + linden/indra/test/lltemplatemessagebuilder_tut.cpp | 964 +++++++ linden/indra/test/lltut.h | 6 - linden/indra/test/lluuidhashmap_tut.cpp | 359 +++ linden/indra/test/llxorcipher_tut.cpp | 133 + linden/indra/test/m3math_tut.cpp | 2 +- linden/indra/test/message_tut.cpp | 97 + linden/indra/test/test.cpp | 32 +- linden/indra/test/test.vcproj | 66 +- linden/indra/test/v2math_tut.cpp | 14 +- linden/indra/test/v3color_tut.cpp | 314 +++ linden/indra/test/v3dmath_tut.cpp | 157 +- linden/indra/test/v3math_tut.cpp | 14 +- linden/indra/test/v4color_tut.cpp | 364 +++ linden/indra/test/v4coloru_tut.cpp | 337 +++ linden/indra/test/v4math_tut.cpp | 379 +++ linden/scripts/messages/message_template.msg | 2239 ++++----------- linden/scripts/setup-path.py | 38 + linden/scripts/template_verifier.py | 175 ++ 343 files changed, 17833 insertions(+), 11012 deletions(-) create mode 100644 linden/etc/message.xml create mode 100644 linden/indra/lib/python/indra/__init__.py create mode 100644 linden/indra/lib/python/indra/compatibility.py create mode 100644 linden/indra/lib/python/indra/llmessage.py create mode 100644 linden/indra/lib/python/indra/tokenstream.py delete mode 100644 linden/indra/llmath/llv4math.h delete mode 100644 linden/indra/llmath/llv4matrix3.h delete mode 100644 linden/indra/llmath/llv4matrix4.h delete mode 100644 linden/indra/llmath/llv4vector3.h create mode 100644 linden/indra/llmessage/llmessagetemplateparser.cpp create mode 100644 linden/indra/llmessage/llmessagetemplateparser.h create mode 100644 linden/indra/llmessage/llpacketack.cpp delete mode 100644 linden/indra/newview/app_settings/message.xml delete mode 100644 linden/indra/newview/llviewerjointmesh_sse.cpp delete mode 100644 linden/indra/newview/llviewerjointmesh_sse2.cpp delete mode 100644 linden/indra/newview/llviewerjointmesh_vec.cpp create mode 100755 linden/indra/newview/prebuild.bat create mode 100644 linden/indra/test/llbuffer_tut.cpp create mode 100644 linden/indra/test/lldate_tut.cpp create mode 100644 linden/indra/test/llhost_tut.cpp create mode 100644 linden/indra/test/lljoint_tut.cpp create mode 100644 linden/indra/test/llmessagetemplateparser_tut.cpp create mode 100644 linden/indra/test/llnamevalue_tut.cpp create mode 100644 linden/indra/test/llpermissions_tut.cpp create mode 100644 linden/indra/test/llquaternion_tut.cpp create mode 100644 linden/indra/test/llsaleinfo_tut.cpp create mode 100644 linden/indra/test/llsdutil_tut.cpp create mode 100644 linden/indra/test/llstreamtools_tut.cpp create mode 100644 linden/indra/test/lltemplatemessagebuilder_tut.cpp create mode 100644 linden/indra/test/lluuidhashmap_tut.cpp create mode 100644 linden/indra/test/llxorcipher_tut.cpp create mode 100644 linden/indra/test/message_tut.cpp create mode 100644 linden/indra/test/v3color_tut.cpp create mode 100644 linden/indra/test/v4color_tut.cpp create mode 100644 linden/indra/test/v4coloru_tut.cpp create mode 100644 linden/indra/test/v4math_tut.cpp create mode 100755 linden/scripts/setup-path.py create mode 100755 linden/scripts/template_verifier.py (limited to 'linden') diff --git a/linden/etc/message.xml b/linden/etc/message.xml new file mode 100644 index 0000000..ad2364a --- /dev/null +++ b/linden/etc/message.xml @@ -0,0 +1,399 @@ + + + + serverDefaults + + + simulator + template + + spaceserver + template + + dataserver + template + + logDataserver + template + + inventoryDataserver + template + + rpcserver + template + + mapserver + template + + viewer + template + + + messages + + + + PacketAck + + flavor + template + trusted-sender + false + + + OpenCircuit + + flavor + template + trusted-sender + false + + + CloseCircuit + + flavor + template + trusted-sender + false + + + StartPingCheck + + flavor + template + trusted-sender + false + + + CompletePingCheck + + flavor + template + trusted-sender + false + + + AddCircuitCode + + flavor + template + trusted-sender + true + + + UseCircuitCode + + flavor + template + trusted-sender + false + + + CreateTrustedCircuit + + flavor + template + trusted-sender + false + + + RequestTrustedCircuit + + flavor + template + trusted-sender + true + + + + ReportAutosaveCrash + + flavor + template + trusted-sender + false + + + SetCPURatio + + flavor + template + trusted-sender + false + + + + CompleteAgentMovement + + flavor + template + trusted-sender + false + + + EconomyDataRequest + + flavor + template + trusted-sender + false + + + ViewerEffect + + flavor + template + trusted-sender + false + + + RegionHandshakeReply + + flavor + template + trusted-sender + false + + + + AgentUpdate + + flavor + template + trusted-sender + false + + + + ImagePacket + + flavor + template + trusted-sender + false + + + LayerData + + flavor + template + trusted-sender + false + + + ObjectUpdateCached + + flavor + template + trusted-sender + false + + + ObjectUpdateCompressed + + flavor + template + trusted-sender + false + + + ObjectUpdate + + flavor + template + trusted-sender + false + + + ImprovedTerseObjectUpdate + + flavor + template + trusted-sender + false + + + AvatarAnimation + + flavor + template + trusted-sender + false + + + AvatarAppearance + + flavor + template + trusted-sender + false + + + + EdgeDataPacket + + flavor + template + trusted-sender + true + + + CoarseLocationUpdate + + flavor + template + trusted-sender + true + + + SimulatorLoad + + flavor + template + trusted-sender + true + + + EstablishAgentCommunication + + flavor + llsd + trusted-sender + true + + + ChatterBoxSessionStartReply + + flavor + llsd + trusted-sender + true + + + ChatterBoxSessionEventReply + + flavor + llsd + trusted-sender + true + + + ForceCloseChatterBoxSession + + flavor + llsd + trusted-sender + true + + + ChatterBoxSessionLeaveReply + + flavor + llsd + trusted-sender + true + + + ChatterBoxSessionAgentListUpdates + + flavor + llsd + trusted-sender + true + + + ChatterBoxInvitation + + flavor + llsd + trusted-sender + true + + + capBans + + MapLayer + false + + MapLayerGod + false + + NewFileAgentInventory + false + + UpdateGestureAgentInventory + false + + UpdateNotecardAgentInventory + false + + UpdateScriptAgentInventory + true + + UpdateGestureTaskInventory + false + + UpdateNotecardTaskInventory + true + + UpdateScriptTaskInventory + true + + ViewerStartAuction + true + + ParcelGodReserveForNewbie + true + + SendUserReport + false + + SendUserReportWithScreenshot + false + + RequestTextureDownload + true + + EventQueueGet + false + + UntrustedSimulatorMessage + false + + SendPostcard + false + + SendPostcard2 + true + + SendPostcard3 + true + + + messageBans + + trusted + + + + untrusted + + + + + diff --git a/linden/indra/SConstruct b/linden/indra/SConstruct index 3de5e4f..f988b1b 100644 --- a/linden/indra/SConstruct +++ b/linden/indra/SConstruct @@ -392,18 +392,6 @@ for build_target in targets: env_no_distcc = env.Copy(CXX = compiler_no_distcc) - vec_match = re.compile("_vec\.") - env_vec = env.Copy() # _vec is for default vector optimizations or none - - sse_match = re.compile("_sse\.") - env_sse = env.Copy() - env_sse.Append(CPPFLAGS = ' -msse -mfpmath=sse') - - sse2_match = re.compile("_sse2\.") - env_sse2 = env.Copy() - env_sse2.Append(CPPFLAGS = ' -msse2 -mfpmath=sse') - - ### Distributed build hosts ### if enable_distcc: @@ -431,21 +419,6 @@ for build_target in targets: # HELPER FUNCTIONS # ##################### - ## handle special compiler modes - - def file_obj(file): - if file == 'newsim/lltask.cpp': - print 'Found lltask!' - return env_no_distcc.Object(file) - elif vec_match.search(file) != None: - return env_vec.Object(file) - elif sse_match.search(file) != None: - return env_sse.Object(file) - elif sse2_match.search(file) != None: - return env_sse2.Object(file) - else: - return file - ### Load a files.lst and files.PLATFORM.lst for each module ### def load_files(module, source_fname): @@ -456,7 +429,12 @@ for build_target in targets: for x in list: if not x.startswith('#'): file = os.path.join(build_dir, x) - new_list.append(file_obj(file)) + if x == 'newsim/lltask.cpp': + print 'Found lltask!' + obj = env_no_distcc.Object(file) + new_list.append(obj) + else: + new_list.append(file) list_file.close() except IOError, val: print 'Error: unable to open file list',source_fname, @@ -468,7 +446,7 @@ for build_target in targets: list = Split(platform_list_file.read()) for x in list: file = os.path.join(build_dir, x) - new_list.append(file_obj(file)) + new_list.append(file) platform_list_file.close() except IOError: return new_list @@ -522,6 +500,13 @@ for build_target in targets: Default(tgt) + ### Check the message template for compatibility with the base ### + tgt = env.Command("template_verifier_output", + '../scripts/template_verifier.py', + 'python $SOURCE --mode="development" 2>&1') + Default(tgt) + AlwaysBuild(tgt) + #################### # BUILD LIBRARIES # #################### @@ -684,16 +669,8 @@ for build_target in targets: create_executable('newspace/spaceserver' + file_suffix, 'newspace', internal_libs + external_libs) - # Userserver - Depends('userserver/userserver', 'newspace/spaceserver' + file_suffix) - external_libs = common_external_libs - internal_libs = ['llinventory', 'llscene', 'llmessage', 'llvfs', - 'llxml', 'llmath', 'llcommon'] - create_executable('userserver/userserver' + file_suffix, 'userserver', - internal_libs + external_libs) - # Rpcserver - Depends('rpcserver/rpcserver', 'userserver/userserver' + file_suffix) + Depends('rpcserver/rpcserver', 'newspace/spaceserver' + file_suffix) external_libs = common_external_libs + ['xmlrpc', 'mysqlclient'] internal_libs = ['llscene', 'llmessage', 'lldatabase', 'llvfs', 'llmath', 'llcommon'] @@ -754,7 +731,7 @@ for build_target in targets: Depends('test/test', 'newsim/simulator' + file_suffix) external_libs = common_external_libs + ['mysqlclient'] internal_libs = [ 'lldatabase', 'llinventory', 'llmessage', 'llxml', - 'llvfs', 'llmath', 'llcommon' ] + 'llvfs', 'llcharacter', 'llmath', 'llcommon' ] test_executable = 'test/test' + file_suffix create_executable(test_executable, 'test', internal_libs + external_libs) @@ -763,7 +740,7 @@ for build_target in targets: test_results_file = 'test/test_results' + file_suffix + '.txt' env.Command(test_results_file, test_executable, - "$SOURCE 2>&1 | tee $TARGET") + "$SOURCE 2>&1") # tee masks segfaults Depends(test_results_file, test_executable) Default(test_results_file) @@ -771,7 +748,7 @@ for build_target in targets: script_test_results = 'test/script_test_result' + file_suffix + '.txt' env.Command(script_test_results, test_script, - "$SOURCE 2>&1 | tee $TARGET") + "$SOURCE 2>&1") # tee masks segfaults Depends(script_test_results, test_results_file) Default(script_test_results) diff --git a/linden/indra/indra_complete/indra_complete.sln b/linden/indra/indra_complete/indra_complete.sln index 27e147e..24495ff 100644 --- a/linden/indra/indra_complete/indra_complete.sln +++ b/linden/indra/indra_complete/indra_complete.sln @@ -141,23 +141,13 @@ EndProject ProjectSection(ProjectDependencies) = postProject {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} {44CE6D82-7320-4609-8FC3-5965C19F4808} = {44CE6D82-7320-4609-8FC3-5965C19F4808} - {BFA102B0-C891-4E13-B1CF-C2F28073DA8E} = {BFA102B0-C891-4E13-B1CF-C2F28073DA8E} {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} EndProjectSection EndProject ProjectSection(ProjectDependencies) = postProject {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} {F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552} - {BFA102B0-C891-4E13-B1CF-C2F28073DA8E} = {BFA102B0-C891-4E13-B1CF-C2F28073DA8E} - {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} - EndProjectSection -EndProject - ProjectSection(ProjectDependencies) = postProject - {A5504A1E-8BA4-45D2-8144-1B6937E37E98} = {A5504A1E-8BA4-45D2-8144-1B6937E37E98} - {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} - {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34} {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} - {D37774F4-253D-4760-BF64-372A943224A1} = {D37774F4-253D-4760-BF64-372A943224A1} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "win_crash_logger", "..\win_crash_logger\win_crash_logger.vcproj", "{648685F3-8760-4CC5-BB2B-CAF9DECC25A4}" @@ -264,8 +254,6 @@ Global Debug = Debug Release = Release EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution - EndGlobalSection GlobalSection(ProjectConfiguration) = postSolution {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.ActiveCfg = Debug|Win32 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.Build.0 = Debug|Win32 @@ -455,14 +443,6 @@ Global {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release.Build.0 = Release|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseForDownload.ActiveCfg = Release|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Debug.ActiveCfg = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Debug.Build.0 = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Release.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Release.Build.0 = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseForDownload.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseForDownload.Build.0 = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug.ActiveCfg = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug.Build.0 = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Release.ActiveCfg = Release|Win32 diff --git a/linden/indra/indra_complete/indra_complete_vc8.sln b/linden/indra/indra_complete/indra_complete_vc8.sln index 8d09d72..9a35696 100644 --- a/linden/indra/indra_complete/indra_complete_vc8.sln +++ b/linden/indra/indra_complete/indra_complete_vc8.sln @@ -117,13 +117,6 @@ EndProject {F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552} EndProjectSection EndProject - ProjectSection(ProjectDependencies) = postProject - {A5504A1E-8BA4-45D2-8144-1B6937E37E98} = {A5504A1E-8BA4-45D2-8144-1B6937E37E98} - {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} - {E5D94794-5671-4BD6-A16D-26EC18F3DB34} = {E5D94794-5671-4BD6-A16D-26EC18F3DB34} - {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} - EndProjectSection -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "win_crash_logger", "..\win_crash_logger\win_crash_logger_vc8.vcproj", "{648685F3-8760-4CC5-BB2B-CAF9DECC25A4}" ProjectSection(ProjectDependencies) = postProject {B5B53617-416F-404A-BF10-22EBCCA0E4FB} = {B5B53617-416F-404A-BF10-22EBCCA0E4FB} @@ -447,16 +440,6 @@ Global {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.Release|Win32.Build.0 = Release|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32 {EC2A989E-3F8F-4B8B-9AE6-7C7EA37C84BC}.ReleaseNoOpt|Win32.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Debug|Win32.ActiveCfg = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Debug|Win32.Build.0 = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.DebugMesaHeadless|Win32.Build.0 = Debug|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Release|Win32.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.Release|Win32.Build.0 = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseForDownload|Win32.ActiveCfg = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseForDownload|Win32.Build.0 = Release|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseNoOpt|Win32.ActiveCfg = ReleaseNoOpt|Win32 - {14B06489-F3DD-4DB0-9B0E-A337F5894EDE}.ReleaseNoOpt|Win32.Build.0 = ReleaseNoOpt|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.ActiveCfg = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.Debug|Win32.Build.0 = Debug|Win32 {648685F3-8760-4CC5-BB2B-CAF9DECC25A4}.DebugMesaHeadless|Win32.ActiveCfg = Debug|Win32 diff --git a/linden/indra/lib/python/indra/__init__.py b/linden/indra/lib/python/indra/__init__.py new file mode 100644 index 0000000..7548558 --- /dev/null +++ b/linden/indra/lib/python/indra/__init__.py @@ -0,0 +1,25 @@ +# @file __init__.py +# @brief Initialization file for the indra module. +# +# Copyright (c) 2006-2007, Linden Research, Inc. +# +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab. Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlife.com/developers/opensource/gplv2 +# +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at http://secondlife.com/developers/opensource/flossexception +# +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +# +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. diff --git a/linden/indra/lib/python/indra/compatibility.py b/linden/indra/lib/python/indra/compatibility.py new file mode 100644 index 0000000..abc1c6a --- /dev/null +++ b/linden/indra/lib/python/indra/compatibility.py @@ -0,0 +1,121 @@ +# @file compatibility.py +# @brief Classes that manage compatibility states. +# +# Copyright (c) 2007-2007, Linden Research, Inc. +# +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab. Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlife.com/developers/opensource/gplv2 +# +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at http://secondlife.com/developers/opensource/flossexception +# +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +# +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. + + +"""Compatibility combination table: + + I M O N S + -- -- -- -- -- +I: I I I I I +M: I M M M M +O: I M O M O +N: I M M N N +S: I M O N S + +""" + +class _Compatibility(object): + def __init__(self, reason): + self.reasons = [ ] + if reason: + self.reasons.append(reason) + + def combine(self, other): + if self._level() <= other._level(): + return self._buildclone(other) + else: + return other._buildclone(self) + + def prefix(self, leadin): + self.reasons = [ leadin + r for r in self.reasons ] + + def same(self): return self._level() >= 1 + def deployable(self): return self._level() > 0 + def resolved(self): return self._level() > -1 + def compatible(self): return self._level() > -2 + + def explain(self): + return self.__class__.__name__ + "\n" + "\n".join(self.reasons) + "\n" + + def _buildclone(self, other=None): + c = self._buildinstance() + c.reasons = self.reasons + if other: + c.reasons = c.reasons + other.reasons + return c + + def _buildinstance(self): + return self.__class__(None) + +# def _level(self): +# raise RuntimeError('implement in subclass') + + +class Incompatible(_Compatibility): + def _level(self): + return -2 + +class Mixed(_Compatibility): + def __init__(self, *inputs): + _Compatibility.__init__(self, None) + for i in inputs: + self.reasons += i.reasons + + def _buildinstance(self): + return self.__class__() + + def _level(self): + return -1 + +class _Aged(_Compatibility): + def combine(self, other): + if self._level() == other._level(): + return self._buildclone(other) + if int(self._level()) == int(other._level()): + return Mixed(self, other) + return _Compatibility.combine(self, other) + +class Older(_Aged): + def _level(self): + return -0.25 + +class Newer(_Aged): + def _level(self): + return 0.25 + +class Same(_Compatibility): + def __init__(self): + _Compatibility.__init__(self, None) + + def _buildinstance(self): + return self.__class__() + + def _level(self): + return 1 + + + + diff --git a/linden/indra/lib/python/indra/llmanifest.py b/linden/indra/lib/python/indra/llmanifest.py index e295cd7..22483b4 100644 --- a/linden/indra/lib/python/indra/llmanifest.py +++ b/linden/indra/lib/python/indra/llmanifest.py @@ -3,7 +3,7 @@ # @author Ryan Williams # @brief Library for specifying operations on a set of files. # -# Copyright (c) 2006-2007, Linden Research, Inc. +# Copyright (c) 2007-2007, Linden Research, Inc. # # Second Life Viewer Source Code # The source code in this file ("Source Code") is provided by Linden Lab diff --git a/linden/indra/lib/python/indra/llmessage.py b/linden/indra/lib/python/indra/llmessage.py new file mode 100644 index 0000000..1d4995d --- /dev/null +++ b/linden/indra/lib/python/indra/llmessage.py @@ -0,0 +1,375 @@ +# @file llmessage.py +# @brief Message template parsing and compatiblity +# +# Copyright (c) 2007-2007, Linden Research, Inc. +# +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab. Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlife.com/developers/opensource/gplv2 +# +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at http://secondlife.com/developers/opensource/flossexception +# +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +# +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. + +from sets import Set, ImmutableSet + +from compatibility import Incompatible, Older, Newer, Same +from tokenstream import TokenStream + +### +### Message Template +### + +class Template: + def __init__(self): + self.messages = { } + + def addMessage(self, m): + self.messages[m.name] = m + + def compatibleWithBase(self, base): + messagenames = ( + ImmutableSet(self.messages.keys()) + | ImmutableSet(base.messages.keys()) + ) + + compatibility = Same() + for name in messagenames: + selfmessage = self.messages.get(name, None) + basemessage = base.messages.get(name, None) + + if not selfmessage: + c = Older("missing message %s, did you mean to deprecate?" % name) + elif not basemessage: + c = Newer("added message %s" % name) + else: + c = selfmessage.compatibleWithBase(basemessage) + c.prefix("in message %s: " % name) + + compatibility = compatibility.combine(c) + + return compatibility + + + +class Message: + HIGH = "High" + MEDIUM = "Medium" + LOW = "Low" + FIXED = "Fixed" + priorities = [ HIGH, MEDIUM, LOW, FIXED ] + prioritieswithnumber = [ FIXED ] + + TRUSTED = "Trusted" + NOTTRUSTED = "NotTrusted" + trusts = [ TRUSTED, NOTTRUSTED ] + + UNENCODED = "Unencoded" + ZEROCODED = "Zerocoded" + encodings = [ UNENCODED, ZEROCODED ] + + NOTDEPRECATED = "NotDeprecated" + DEPRECATED = "Deprecated" + UDPDEPRECATED = "UDPDeprecated" + deprecations = [ NOTDEPRECATED, UDPDEPRECATED, DEPRECATED ] + # in order of increasing deprecation + + def __init__(self, name, number, priority, trust, coding): + self.name = name + self.number = number + self.priority = priority + self.trust = trust + self.coding = coding + self.deprecateLevel = 0 + self.blocks = [ ] + + def deprecated(self): + return self.deprecateLevel != 0 + + def deprecate(self, deprecation): + self.deprecateLevel = self.deprecations.index(deprecation) + + def addBlock(self, block): + self.blocks.append(block) + + def compatibleWithBase(self, base): + if self.name != base.name: + # this should never happen in real life because of the + # way Template matches up messages by name + return Incompatible("has different name: %s vs. %s in base" + % (self.name, base.name)) + if self.priority != base.priority: + return Incompatible("has different priority: %s vs. %s in base" + % (self.priority, base.priority)) + if self.trust != base.trust: + return Incompatible("has different trust: %s vs. %s in base" + % (self.trust, base.trust)) + if self.coding != base.coding: + return Incompatible("has different coding: %s vs. %s in base" + % (self.coding, base.coding)) + if self.number != base.number: + return Incompatible("has different number: %s vs. %s in base" + % (self.number, base.number)) + + compatibility = Same() + + if self.deprecateLevel != base.deprecateLevel: + if self.deprecateLevel < base.deprecateLevel: + c = Older("is less deprecated: %s vs. %s in base" % ( + self.deprecations[self.deprecateLevel], + self.deprecations[base.deprecateLevel])) + else: + c = Newer("is more deprecated: %s vs. %s in base" % ( + self.deprecations[self.deprecateLevel], + self.deprecations[base.deprecateLevel])) + compatibility = compatibility.combine(c) + + selflen = len(self.blocks) + baselen = len(base.blocks) + samelen = min(selflen, baselen) + + for i in xrange(0, samelen): + selfblock = self.blocks[i] + baseblock = base.blocks[i] + + c = selfblock.compatibleWithBase(baseblock) + if not c.same(): + c = Incompatible("block %d isn't identical" % i) + compatibility = compatibility.combine(c) + + if selflen > baselen: + c = Newer("has %d extra blocks" % (selflen - baselen)) + elif selflen < baselen: + c = Older("missing %d extra blocks" % (baselen - selflen)) + else: + c = Same() + + compatibility = compatibility.combine(c) + return compatibility + + + +class Block(object): + SINGLE = "Single" + MULTIPLE = "Multiple" + VARIABLE = "Variable" + repeats = [ SINGLE, MULTIPLE, VARIABLE ] + repeatswithcount = [ MULTIPLE ] + + def __init__(self, name, repeat, count=None): + self.name = name + self.repeat = repeat + self.count = count + self.variables = [ ] + + def addVariable(self, variable): + self.variables.append(variable) + + def compatibleWithBase(self, base): + if self.name != base.name: + return Incompatible("has different name: %s vs. %s in base" + % (self.name, base.name)) + if self.repeat != base.repeat: + return Incompatible("has different repeat: %s vs. %s in base" + % (self.repeat, base.repeat)) + if self.repeat in Block.repeatswithcount: + if self.count != base.count: + return Incompatible("has different count: %s vs. %s in base" + % (self.count, base.count)) + + compatibility = Same() + + selflen = len(self.variables) + baselen = len(base.variables) + + for i in xrange(0, min(selflen, baselen)): + selfvar = self.variables[i] + basevar = base.variables[i] + + c = selfvar.compatibleWithBase(basevar) + if not c.same(): + c = Incompatible("variable %d isn't identical" % i) + compatibility = compatibility.combine(c) + + if selflen > baselen: + c = Newer("has %d extra variables" % (selflen - baselen)) + elif selflen < baselen: + c = Older("missing %d extra variables" % (baselen - selflen)) + else: + c = Same() + + compatibility = compatibility.combine(c) + return compatibility + + + +class Variable: + U8 = "U8"; U16 = "U16"; U32 = "U32"; U64 = "U64" + S8 = "S8"; S16 = "S16"; S32 = "S32"; S64 = "S64" + F32 = "F32"; F64 = "F64" + LLVECTOR3 = "LLVector3"; LLVECTOR3D = "LLVector3d"; LLVECTOR4 = "LLVector4" + LLQUATERNION = "LLQuaternion" + LLUUID = "LLUUID" + BOOL = "BOOL" + IPADDR = "IPADDR"; IPPORT = "IPPORT" + FIXED = "Fixed" + VARIABLE = "Variable" + types = [ U8, U16, U32, U64, S8, S16, S32, S64, F32, F64, + LLVECTOR3, LLVECTOR3D, LLVECTOR4, LLQUATERNION, + LLUUID, BOOL, IPADDR, IPPORT, FIXED, VARIABLE ] + typeswithsize = [ FIXED, VARIABLE ] + + def __init__(self, name, type, size): + self.name = name + self.type = type + self.size = size + + def compatibleWithBase(self, base): + if self.name != base.name: + return Incompatible("has different name: %s vs. %s in base" + % (self.name, base.name)) + if self.type != base.type: + return Incompatible("has different type: %s vs. %s in base" + % (self.type, base.type)) + if self.type in Variable.typeswithsize: + if self.size != base.size: + return Incompatible("has different size: %s vs. %s in base" + % (self.size, base.size)) + return Same() + + + +### +### Parsing Message Templates +### + +class TemplateParser: + def __init__(self, tokens): + self._tokens = tokens + self._version = 0 + self._numbers = { } + for p in Message.priorities: + self._numbers[p] = 0 + + def parseTemplate(self): + tokens = self._tokens + t = Template() + while True: + if tokens.want("version"): + v = float(tokens.require(tokens.wantFloat())) + self._version = v + t.version = v + continue + + m = self.parseMessage() + if m: + t.addMessage(m) + continue + + if self._version >= 2.0: + tokens.require(tokens.wantEOF()) + break + else: + if tokens.wantEOF(): + break + + tokens.consume() + # just assume (gulp) that this is a comment + # line 468: "sim -> dataserver" + return t + + + def parseMessage(self): + tokens = self._tokens + if not tokens.want("{"): + return None + + name = tokens.require(tokens.wantSymbol()) + priority = tokens.require(tokens.wantOneOf(Message.priorities)) + + if self._version >= 2.0 or priority in Message.prioritieswithnumber: + number = int("+" + tokens.require(tokens.wantInteger()), 0) + else: + self._numbers[priority] += 1 + number = self._numbers[priority] + + trust = tokens.require(tokens.wantOneOf(Message.trusts)) + coding = tokens.require(tokens.wantOneOf(Message.encodings)) + + m = Message(name, number, priority, trust, coding) + + if self._version >= 2.0: + d = tokens.wantOneOf(Message.deprecations) + if d: + m.deprecate(d) + + while True: + b = self.parseBlock() + if not b: + break + m.addBlock(b) + + tokens.require(tokens.want("}")) + + return m + + + def parseBlock(self): + tokens = self._tokens + if not tokens.want("{"): + return None + name = tokens.require(tokens.wantSymbol()) + repeat = tokens.require(tokens.wantOneOf(Block.repeats)) + if repeat in Block.repeatswithcount: + count = int(tokens.require(tokens.wantInteger())) + else: + count = None + + b = Block(name, repeat, count) + + while True: + v = self.parseVariable() + if not v: + break + b.addVariable(v) + + tokens.require(tokens.want("}")) + return b + + + def parseVariable(self): + tokens = self._tokens + if not tokens.want("{"): + return None + name = tokens.require(tokens.wantSymbol()) + type = tokens.require(tokens.wantOneOf(Variable.types)) + if type in Variable.typeswithsize: + size = tokens.require(tokens.wantInteger()) + else: + tokens.wantInteger() # in LandStatRequest: "{ ParcelLocalID S32 1 }" + size = None + tokens.require(tokens.want("}")) + return Variable(name, type, size) + +def parseTemplateString(s): + return TemplateParser(TokenStream().fromString(s)).parseTemplate() + +def parseTemplateFile(f): + return TemplateParser(TokenStream().fromFile(f)).parseTemplate() + + + + diff --git a/linden/indra/lib/python/indra/tokenstream.py b/linden/indra/lib/python/indra/tokenstream.py new file mode 100644 index 0000000..7dab11f --- /dev/null +++ b/linden/indra/lib/python/indra/tokenstream.py @@ -0,0 +1,152 @@ +# @file tokenstream.py +# @brief Message template parsing utility class +# +# Copyright (c) 2007-2007, Linden Research, Inc. +# +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab. Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlife.com/developers/opensource/gplv2 +# +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at http://secondlife.com/developers/opensource/flossexception +# +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +# +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. + +import re + +class _EOF(object): + pass + +EOF = _EOF() + +class _LineMarker(int): + pass + +_commentRE = re.compile(r'//.*') +_symbolRE = re.compile(r'[a-zA-Z_][a-zA-Z_0-9]*') +_integerRE = re.compile(r'(0x[0-9A-Fa-f]+|0\d*|[1-9]\d*)') +_floatRE = re.compile(r'\d+(\.\d*)?') + + +class ParseError(Exception): + def __init__(self, stream, reason): + self.line = stream.line + self.context = stream._context() + self.reason = reason + + def _contextString(self): + c = [ ] + for t in self.context: + if isinstance(t, _LineMarker): + break + c.append(t) + return " ".join(c) + + def __str__(self): + return "line %d: %s @ ... %s" % ( + self.line, self.reason, self._contextString()) + + def __nonzero__(self): + return False + + +def _optionText(options): + n = len(options) + if n == 1: + return '"%s"' % options[0] + return '"' + '", "'.join(options[0:(n-1)]) + '" or "' + options[-1] + '"' + + +class TokenStream(object): + def __init__(self): + self.line = 0 + self.tokens = [ ] + + def fromString(self, string): + return self.fromLines(string.split('\n')) + + def fromFile(self, file): + return self.fromLines(file) + + def fromLines(self, lines): + i = 0 + for line in lines: + i += 1 + self.tokens.append(_LineMarker(i)) + self.tokens.extend(_commentRE.sub(" ", line).split()) + self._consumeLines() + return self + + def consume(self): + if not self.tokens: + return EOF + t = self.tokens.pop(0) + self._consumeLines() + return t + + def _consumeLines(self): + while self.tokens and isinstance(self.tokens[0], _LineMarker): + self.line = self.tokens.pop(0) + + def peek(self): + if not self.tokens: + return EOF + return self.tokens[0] + + def want(self, t): + if t == self.peek(): + return self.consume() + return ParseError(self, 'expected "%s"' % t) + + def wantOneOf(self, options): + assert len(options) + if self.peek() in options: + return self.consume() + return ParseError(self, 'expected one of %s' % _optionText(options)) + + def wantEOF(self): + return self.want(EOF) + + def wantRE(self, re, message=None): + t = self.peek() + if t != EOF: + m = re.match(t) + if m and m.end() == len(t): + return self.consume() + if not message: + message = "expected match for r'%s'" % re.pattern + return ParseError(self, message) + + def wantSymbol(self): + return self.wantRE(_symbolRE, "expected symbol") + + def wantInteger(self): + return self.wantRE(_integerRE, "expected integer") + + def wantFloat(self): + return self.wantRE(_floatRE, "expected float") + + def _context(self): + n = min(5, len(self.tokens)) + return self.tokens[0:n] + + def require(self, t): + if t: + return t + if isinstance(t, ParseError): + raise t + else: + raise ParseError(self, "unmet requirement") + diff --git a/linden/indra/llcommon/lldarray.h b/linden/indra/llcommon/lldarray.h index 291da19..7942e77 100644 --- a/linden/indra/llcommon/lldarray.h +++ b/linden/indra/llcommon/lldarray.h @@ -189,16 +189,17 @@ public: void reset() { mVector.resize(0); mIndexMap.resize(0); } bool empty() const { return mVector.empty(); } - size_type size() const { return mVector.empty(); } + size_type size() const { return mVector.size(); } Type& operator[](const Key& k) { - typename std::map::iterator iter = mIndexMap.find(k); + typename std::map::const_iterator iter = mIndexMap.find(k); if (iter == mIndexMap.end()) { U32 n = mVector.size(); mIndexMap[k] = n; mVector.resize(n+1); + llassert(mVector.size() == mIndexMap.size()); return mVector[n]; } else @@ -206,7 +207,19 @@ public: return mVector[iter->second]; } } - + + const_iterator find(const Key& k) const + { + typename std::map::const_iterator iter = mIndexMap.find(k); + if(iter == mIndexMap.end()) + { + return mVector.end(); + } + else + { + return mVector.begin() + iter->second; + } + } }; #endif diff --git a/linden/indra/llcommon/llpreprocessor.h b/linden/indra/llcommon/llpreprocessor.h index 76145c5..495b9e8 100644 --- a/linden/indra/llcommon/llpreprocessor.h +++ b/linden/indra/llcommon/llpreprocessor.h @@ -71,22 +71,12 @@ #define MOZILLA_INTERNAL_API 1 #endif -// Figure out differences between compilers -#if defined(__GNUC__) +// Deal with minor differences on Unixy OSes. +#if LL_DARWIN || LL_LINUX #define GCC_VERSION (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) - #ifndef LL_GNUC - #define LL_GNUC 1 - #endif -#elif defined(__MSVC_VER__) || defined(_MSC_VER) - #ifndef LL_MSVC - #define LL_MSVC 1 - #endif -#endif -// Deal with minor differences on Unixy OSes. -#if LL_DARWIN || LL_LINUX // Different name, same functionality. #define stricmp strcasecmp #define strnicmp strncasecmp @@ -99,9 +89,9 @@ #endif // Deal with the differeneces on Windows -#if LL_MSVC +#if LL_WINDOWS #define snprintf safe_snprintf /* Flawfinder: ignore */ -#endif // LL_MSVC +#endif // LL_WINDOWS // Static linking with apr on windows needs to be declared. #ifdef LL_WINDOWS @@ -120,7 +110,7 @@ // Deal with VC6 problems -#if LL_MSVC +#if defined(LL_WINDOWS) #pragma warning( 3 : 4701 ) // "local variable used without being initialized" Treat this as level 3, not level 4. #pragma warning( 3 : 4702 ) // "unreachable code" Treat this as level 3, not level 4. #pragma warning( 3 : 4189 ) // "local variable initialized but not referenced" Treat this as level 3, not level 4. @@ -131,6 +121,6 @@ #pragma warning( disable : 4503 ) // 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation. #pragma warning( disable : 4800 ) // 'BOOL' : forcing value to bool 'true' or 'false' (performance warning) #pragma warning( disable : 4996 ) // warning: deprecated -#endif // LL_MSVC +#endif // LL_WINDOWS #endif // not LL_LINDEN_PREPROCESSOR_H diff --git a/linden/indra/llcommon/llprocessor.cpp b/linden/indra/llcommon/llprocessor.cpp index e76294d..bd21351 100644 --- a/linden/indra/llcommon/llprocessor.cpp +++ b/linden/indra/llcommon/llprocessor.cpp @@ -1538,7 +1538,6 @@ void CProcessor::GetStandardProcessorExtensions() CPUInfo._Ext.FXSR_FastStreamingSIMD_ExtensionsSaveRestore = CheckBit(edxreg, 24); CPUInfo._Ext.SSE_StreamingSIMD_Extensions = CheckBit(edxreg, 25); CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = CheckBit(edxreg, 26); - CPUInfo._Ext.Altivec_Extensions = false; CPUInfo._Ext.SS_SelfSnoop = CheckBit(edxreg, 27); CPUInfo._Ext.HT_HyperThreading = CheckBit(edxreg, 28); CPUInfo._Ext.HT_HyterThreadingSiblings = (ebxreg >> 16) & 0xFF; @@ -1892,12 +1891,11 @@ const ProcessorInfo *CProcessor::GetCPUInfo() break; } + // It's kinda like MMX or SSE... CPUInfo._Ext.EMMX_MultimediaExtensions = CPUInfo._Ext.MMX_MultimediaExtensions = CPUInfo._Ext.SSE_StreamingSIMD_Extensions = - CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = false; - - CPUInfo._Ext.Altivec_Extensions = hasFeature("hw.optional.altivec"); + CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = hasFeature("hw.optional.altivec"); #endif @@ -1914,7 +1912,6 @@ const ProcessorInfo *CProcessor::GetCPUInfo() CPUInfo._Ext.MMX_MultimediaExtensions = hasFeature("hw.optional.mmx"); CPUInfo._Ext.SSE_StreamingSIMD_Extensions = hasFeature("hw.optional.sse"); CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = hasFeature("hw.optional.sse2"); - CPUInfo._Ext.Altivec_Extensions = false; CPUInfo._Ext.AA64_AMD64BitArchitecture = hasFeature("hw.optional.x86_64"); #endif @@ -2068,7 +2065,6 @@ bool CProcessor::CPUInfoToText(char *strBuffer, unsigned int uiMaxLen) BOOLADD("SS Self Snoop: ", CPUInfo._Ext.SS_SelfSnoop); BOOLADD("SSE Streaming SIMD Extensions: ", CPUInfo._Ext.SSE_StreamingSIMD_Extensions); BOOLADD("SSE2 Streaming SIMD 2 Extensions: ", CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions); - BOOLADD("ALTVEC Altivec Extensions: ", CPUInfo._Ext.Altivec_Extensions); BOOLADD("TM Thermal Monitor: ", CPUInfo._Ext.TM_ThermalMonitor); BOOLADD("TSC Time Stamp Counter: ", CPUInfo._Ext.TSC_TimeStampCounter); BOOLADD("VME Virtual 8086 Mode Enhancements: ", CPUInfo._Ext.VME_Virtual8086ModeEnhancements); diff --git a/linden/indra/llcommon/llprocessor.h b/linden/indra/llcommon/llprocessor.h index 6db9328..fd9a5da 100644 --- a/linden/indra/llcommon/llprocessor.h +++ b/linden/indra/llcommon/llprocessor.h @@ -71,7 +71,6 @@ typedef struct ProcessorExtensions bool FXSR_FastStreamingSIMD_ExtensionsSaveRestore; bool SSE_StreamingSIMD_Extensions; bool SSE2_StreamingSIMD2_Extensions; - bool Altivec_Extensions; bool SS_SelfSnoop; bool HT_HyperThreading; unsigned int HT_HyterThreadingSiblings; diff --git a/linden/indra/llcommon/llskiplist.h b/linden/indra/llcommon/llskiplist.h index 40d0c8a..be3385d 100644 --- a/linden/indra/llcommon/llskiplist.h +++ b/linden/indra/llcommon/llskiplist.h @@ -28,10 +28,11 @@ #ifndef LL_LLSKIPLIST_H #define LL_LLSKIPLIST_H -#include "llrand.h" +#include "llerror.h" +//#include "vmath.h" // NOTA BENE: Insert first needs to be < NOT <= -// Binary depth must be >= 2 + template class LLSkipList { @@ -143,11 +144,14 @@ private: // Implementation // - -// Binary depth must be >= 2 template inline void LLSkipList::init() { + if (BINARY_DEPTH < 2) + { + llerrs << "Trying to create skip list with too little depth, " + "must be 2 or greater" << llendl; + } S32 i; for (i = 0; i < BINARY_DEPTH; i++) { diff --git a/linden/indra/llcommon/llstreamtools.h b/linden/indra/llcommon/llstreamtools.h index c339dde..d64bd57 100644 --- a/linden/indra/llcommon/llstreamtools.h +++ b/linden/indra/llcommon/llstreamtools.h @@ -60,11 +60,13 @@ bool skip_to_end_of_next_keyword(const char* keyword, std::istream& input_stream //bool skip_to_start_of_next_keyword(const char* keyword, std::istream& input_stream); // characters are pulled out of input_stream and appended to output_string +// returns result of input_stream.good() after characters are pulled bool get_word(std::string& output_string, std::istream& input_stream); bool get_line(std::string& output_string, std::istream& input_stream); // characters are pulled out of input_stream (up to a max of 'n') // and appended to output_string +// returns result of input_stream.good() after characters are pulled bool get_word(std::string& output_string, std::istream& input_stream, int n); bool get_line(std::string& output_string, std::istream& input_stream, int n); diff --git a/linden/indra/llcommon/llstring.h b/linden/indra/llcommon/llstring.h index a24f944..adfdfb8 100644 --- a/linden/indra/llcommon/llstring.h +++ b/linden/indra/llcommon/llstring.h @@ -1074,9 +1074,6 @@ BOOL LLStringBase::isHead( const std::basic_string& string, const T* s ) template BOOL LLStringBase::read(std::basic_string& string, const char* filename) /*Flawfinder: ignore*/ { -#ifdef LL_LINUX - printf("STUBBED: LLStringBase::read at %s:%d\n", __FILE__, __LINE__); -#else llifstream ifs(filename, llifstream::binary); if (!ifs.is_open()) { @@ -1091,7 +1088,6 @@ BOOL LLStringBase::read(std::basic_string& string, const char* filename) string = oss.str(); ifs.close(); -#endif return TRUE; } diff --git a/linden/indra/llcommon/llsys.cpp b/linden/indra/llcommon/llsys.cpp index 33e5cda..48f2474 100644 --- a/linden/indra/llcommon/llsys.cpp +++ b/linden/indra/llcommon/llsys.cpp @@ -304,33 +304,12 @@ LLCPUInfo::LLCPUInfo() { CProcessor proc; const ProcessorInfo* info = proc.GetCPUInfo(); - // proc.WriteInfoTextFile("procInfo.txt"); - mHasSSE = info->_Ext.SSE_StreamingSIMD_Extensions; - mHasSSE2 = info->_Ext.SSE2_StreamingSIMD2_Extensions; - mHasAltivec = info->_Ext.Altivec_Extensions; + mHasSSE = (info->_Ext.SSE_StreamingSIMD_Extensions != 0); + mHasSSE2 = (info->_Ext.SSE2_StreamingSIMD2_Extensions != 0); mCPUMhz = (S32)(proc.GetCPUFrequency(50)/1000000.0); mFamily.assign( info->strFamily ); } -bool LLCPUInfo::hasAltivec() const -{ - return mHasAltivec; -} - -bool LLCPUInfo::hasSSE() const -{ - return mHasSSE; -} - -bool LLCPUInfo::hasSSE2() const -{ - return mHasSSE2; -} - -S32 LLCPUInfo::getMhz() const -{ - return mCPUMhz; -} std::string LLCPUInfo::getCPUString() const { diff --git a/linden/indra/llcommon/llsys.h b/linden/indra/llcommon/llsys.h index 83ea081..2047d9a 100644 --- a/linden/indra/llcommon/llsys.h +++ b/linden/indra/llcommon/llsys.h @@ -72,18 +72,16 @@ public: std::string getCPUString() const; - bool hasAltivec() const; - bool hasSSE() const; - bool hasSSE2() const; - S32 getMhz() const; + BOOL hasSSE() const { return mHasSSE; } + BOOL hasSSE2() const { return mHasSSE2; } + S32 getMhz() const { return mCPUMhz; } // Family is "AMD Duron" or "Intel Pentium Pro" const std::string& getFamily() const { return mFamily; } private: - bool mHasSSE; - bool mHasSSE2; - bool mHasAltivec; + BOOL mHasSSE; + BOOL mHasSSE2; S32 mCPUMhz; std::string mFamily; }; diff --git a/linden/indra/llcommon/llversion.h b/linden/indra/llcommon/llversion.h index eb8310e..9739d04 100644 --- a/linden/indra/llcommon/llversion.h +++ b/linden/indra/llcommon/llversion.h @@ -30,8 +30,8 @@ #define LL_LLVERSION_H const S32 LL_VERSION_MAJOR = 1; -const S32 LL_VERSION_MINOR = 17; -const S32 LL_VERSION_PATCH = 3; -const S32 LL_VERSION_BUILD = 0; +const S32 LL_VERSION_MINOR = 18; +const S32 LL_VERSION_PATCH = 0; +const S32 LL_VERSION_BUILD = 6; #endif diff --git a/linden/indra/llmath/llmath.vcproj b/linden/indra/llmath/llmath.vcproj index bdc8ded..4876065 100644 --- a/linden/indra/llmath/llmath.vcproj +++ b/linden/indra/llmath/llmath.vcproj @@ -272,18 +272,6 @@ RelativePath=".\lluuid.h"> - - - - - - - - - - - - - - - - diff --git a/linden/indra/llmath/llv4math.h b/linden/indra/llmath/llv4math.h deleted file mode 100644 index d0b956b..0000000 --- a/linden/indra/llmath/llv4math.h +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4* class header file - vector processor enabled math - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -#ifndef LL_LLV4MATH_H -#define LL_LLV4MATH_H - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH - GNUC -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if LL_GNUC && __GNUC__ >= 4 && __SSE__ - -#define LL_VECTORIZE 1 - -#if LL_DARWIN - -#include -#include -typedef vFloat V4F32; - -#else - -#include -typedef float V4F32 __attribute__((vector_size(16))); - -#endif - -#endif -#if LL_GNUC - -#define LL_LLV4MATH_ALIGN_PREFIX -#define LL_LLV4MATH_ALIGN_POSTFIX __attribute__((aligned(16))) - -#endif - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH - MSVC -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if LL_MSVC && _M_IX86_FP - -#define LL_VECTORIZE 1 - -#include - -typedef __m128 V4F32; - -#endif -#if LL_MSVC - -#define LL_LLV4MATH_ALIGN_PREFIX __declspec(align(16)) -#define LL_LLV4MATH_ALIGN_POSTFIX - -#endif - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH - default - no vectorization -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if !LL_VECTORIZE - -#define LL_VECTORIZE 0 - -struct V4F32 { F32 __pad__[4]; }; - -inline F32 llv4lerp(F32 a, F32 b, F32 w) { return ( b - a ) * w + a; } - -#endif - -#ifndef LL_LLV4MATH_ALIGN_PREFIX -# define LL_LLV4MATH_ALIGN_PREFIX -#endif -#ifndef LL_LLV4MATH_ALIGN_POSTFIX -# define LL_LLV4MATH_ALIGN_POSTFIX -#endif - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - - -#define LLV4_NUM_AXIS 4 - -class LLV4Vector3; -class LLV4Matrix3; -class LLV4Matrix4; - -#endif diff --git a/linden/indra/llmath/llv4matrix3.h b/linden/indra/llmath/llv4matrix3.h deleted file mode 100644 index 0811338..0000000 --- a/linden/indra/llmath/llv4matrix3.h +++ /dev/null @@ -1,222 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4* class header file - vector processor enabled math - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -#ifndef LL_LLV4MATRIX3_H -#define LL_LLV4MATRIX3_H - -#include "llv4math.h" -#include "llv4vector3.h" -#include "m3math.h" // for operator LLMatrix3() - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -LL_LLV4MATH_ALIGN_PREFIX - -class LLV4Matrix3 -{ -public: - union { - F32 mMatrix[LLV4_NUM_AXIS][LLV4_NUM_AXIS]; - V4F32 mV[LLV4_NUM_AXIS]; - }; - - void lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w); - void multiply(const LLVector3 &a, LLVector3& out) const; - void multiply(const LLVector4 &a, LLV4Vector3& out) const; - void multiply(const LLVector3 &a, LLV4Vector3& out) const; - - const LLV4Matrix3& transpose(); - const LLV4Matrix3& operator=(const LLMatrix3& a); - - operator LLMatrix3() const { return (reinterpret_cast(const_cast(&mMatrix[0][0])))->getMat3(); } - - friend LLVector3 operator*(const LLVector3& a, const LLV4Matrix3& b); -} - -LL_LLV4MATH_ALIGN_POSTFIX; - - - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 - SSE -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if LL_VECTORIZE - -inline void LLV4Matrix3::lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w) -{ - __m128 vw = _mm_set1_ps(w); - mV[VX] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VX], a.mV[VX]), vw), a.mV[VX]); // ( b - a ) * w + a - mV[VY] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VY], a.mV[VY]), vw), a.mV[VY]); - mV[VZ] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VZ], a.mV[VZ]), vw), a.mV[VZ]); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLVector3& o) const -{ - LLV4Vector3 j; - j.v = _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ... - j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); - j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); - o.setVec(j.mV); -} - -inline void LLV4Matrix3::multiply(const LLVector4 &a, LLV4Vector3& o) const -{ - o.v = _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ... - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ - o.v = _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ... - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#else - -inline void LLV4Matrix3::lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w) -{ - mMatrix[VX][VX] = llv4lerp(a.mMatrix[VX][VX], b.mMatrix[VX][VX], w); - mMatrix[VX][VY] = llv4lerp(a.mMatrix[VX][VY], b.mMatrix[VX][VY], w); - mMatrix[VX][VZ] = llv4lerp(a.mMatrix[VX][VZ], b.mMatrix[VX][VZ], w); - - mMatrix[VY][VX] = llv4lerp(a.mMatrix[VY][VX], b.mMatrix[VY][VX], w); - mMatrix[VY][VY] = llv4lerp(a.mMatrix[VY][VY], b.mMatrix[VY][VY], w); - mMatrix[VY][VZ] = llv4lerp(a.mMatrix[VY][VZ], b.mMatrix[VY][VZ], w); - - mMatrix[VZ][VX] = llv4lerp(a.mMatrix[VZ][VX], b.mMatrix[VZ][VX], w); - mMatrix[VZ][VY] = llv4lerp(a.mMatrix[VZ][VY], b.mMatrix[VZ][VY], w); - mMatrix[VZ][VZ] = llv4lerp(a.mMatrix[VZ][VZ], b.mMatrix[VZ][VZ], w); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLVector3& o) const -{ - o.setVec( a.mV[VX] * mMatrix[VX][VX] + - a.mV[VY] * mMatrix[VY][VX] + - a.mV[VZ] * mMatrix[VZ][VX], - - a.mV[VX] * mMatrix[VX][VY] + - a.mV[VY] * mMatrix[VY][VY] + - a.mV[VZ] * mMatrix[VZ][VY], - - a.mV[VX] * mMatrix[VX][VZ] + - a.mV[VY] * mMatrix[VY][VZ] + - a.mV[VZ] * mMatrix[VZ][VZ]); -} - -inline void LLV4Matrix3::multiply(const LLVector4 &a, LLV4Vector3& o) const -{ - o.setVec( a.mV[VX] * mMatrix[VX][VX] + - a.mV[VY] * mMatrix[VY][VX] + - a.mV[VZ] * mMatrix[VZ][VX], - - a.mV[VX] * mMatrix[VX][VY] + - a.mV[VY] * mMatrix[VY][VY] + - a.mV[VZ] * mMatrix[VZ][VY], - - a.mV[VX] * mMatrix[VX][VZ] + - a.mV[VY] * mMatrix[VY][VZ] + - a.mV[VZ] * mMatrix[VZ][VZ]); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ - o.setVec( a.mV[VX] * mMatrix[VX][VX] + - a.mV[VY] * mMatrix[VY][VX] + - a.mV[VZ] * mMatrix[VZ][VX], - - a.mV[VX] * mMatrix[VX][VY] + - a.mV[VY] * mMatrix[VY][VY] + - a.mV[VZ] * mMatrix[VZ][VY], - - a.mV[VX] * mMatrix[VX][VZ] + - a.mV[VY] * mMatrix[VY][VZ] + - a.mV[VZ] * mMatrix[VZ][VZ]); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#endif - -inline const LLV4Matrix3& LLV4Matrix3::transpose() -{ -#if LL_VECTORIZE && defined(_MM_TRANSPOSE4_PS) - _MM_TRANSPOSE4_PS(mV[VX], mV[VY], mV[VZ], mV[VW]); - return *this; -#else - F32 temp; - temp = mMatrix[VX][VY]; mMatrix[VX][VY] = mMatrix[VY][VX]; mMatrix[VY][VX] = temp; - temp = mMatrix[VX][VZ]; mMatrix[VX][VZ] = mMatrix[VZ][VX]; mMatrix[VZ][VX] = temp; - temp = mMatrix[VY][VZ]; mMatrix[VY][VZ] = mMatrix[VZ][VY]; mMatrix[VZ][VY] = temp; -#endif - return *this; -} - -inline const LLV4Matrix3& LLV4Matrix3::operator=(const LLMatrix3& a) -{ - memcpy(mMatrix[VX], a.mMatrix[VX], sizeof(F32) * 3 ); - memcpy(mMatrix[VY], a.mMatrix[VY], sizeof(F32) * 3 ); - memcpy(mMatrix[VZ], a.mMatrix[VZ], sizeof(F32) * 3 ); - return *this; -} - -inline LLVector3 operator*(const LLVector3& a, const LLV4Matrix3& b) -{ - return LLVector3( - a.mV[VX] * b.mMatrix[VX][VX] + - a.mV[VY] * b.mMatrix[VY][VX] + - a.mV[VZ] * b.mMatrix[VZ][VX], - - a.mV[VX] * b.mMatrix[VX][VY] + - a.mV[VY] * b.mMatrix[VY][VY] + - a.mV[VZ] * b.mMatrix[VZ][VY], - - a.mV[VX] * b.mMatrix[VX][VZ] + - a.mV[VY] * b.mMatrix[VY][VZ] + - a.mV[VZ] * b.mMatrix[VZ][VZ] ); -} - -#endif diff --git a/linden/indra/llmath/llv4matrix4.h b/linden/indra/llmath/llv4matrix4.h deleted file mode 100644 index 38280a2..0000000 --- a/linden/indra/llmath/llv4matrix4.h +++ /dev/null @@ -1,251 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4* class header file - vector processor enabled math - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -#ifndef LL_LLV4MATRIX4_H -#define LL_LLV4MATRIX4_H - -#include "llv4math.h" -#include "llv4matrix3.h" // just for operator LLV4Matrix3() -#include "llv4vector3.h" - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -LL_LLV4MATH_ALIGN_PREFIX - -class LLV4Matrix4 -{ -public: - union { - F32 mMatrix[LLV4_NUM_AXIS][LLV4_NUM_AXIS]; - V4F32 mV[LLV4_NUM_AXIS]; - }; - - void lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w); - void multiply(const LLVector3 &a, LLVector3& o) const; - void multiply(const LLVector3 &a, LLV4Vector3& o) const; - - const LLV4Matrix4& transpose(); - const LLV4Matrix4& translate(const LLVector3 &vec); - const LLV4Matrix4& translate(const LLV4Vector3 &vec); - const LLV4Matrix4& operator=(const LLMatrix4& a); - - operator LLMatrix4() const { return *(reinterpret_cast(const_cast(&mMatrix[0][0]))); } - operator LLV4Matrix3() const { return *(reinterpret_cast(const_cast(&mMatrix[0][0]))); } - - friend LLVector3 operator*(const LLVector3 &a, const LLV4Matrix4 &b); -} - -LL_LLV4MATH_ALIGN_POSTFIX; - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 - SSE -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if LL_VECTORIZE - -inline void LLV4Matrix4::lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w) -{ - __m128 vw = _mm_set1_ps(w); - mV[VX] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VX], a.mV[VX]), vw), a.mV[VX]); // ( b - a ) * w + a - mV[VY] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VY], a.mV[VY]), vw), a.mV[VY]); - mV[VZ] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VZ], a.mV[VZ]), vw), a.mV[VZ]); - mV[VW] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VW], a.mV[VW]), vw), a.mV[VW]); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLVector3& o) const -{ - LLV4Vector3 j; - j.v = _mm_add_ps(mV[VW], _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX])); // ( ax * vx ) + vw - j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); - j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); - o.setVec(j.mV); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ - o.v = _mm_add_ps(mV[VW], _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX])); // ( ax * vx ) + vw - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); - o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); -} - -inline const LLV4Matrix4& LLV4Matrix4::translate(const LLV4Vector3 &vec) -{ - mV[VW] = _mm_add_ps(mV[VW], vec.v); - return (*this); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#else - -inline void LLV4Matrix4::lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w) -{ - mMatrix[VX][VX] = llv4lerp(a.mMatrix[VX][VX], b.mMatrix[VX][VX], w); - mMatrix[VX][VY] = llv4lerp(a.mMatrix[VX][VY], b.mMatrix[VX][VY], w); - mMatrix[VX][VZ] = llv4lerp(a.mMatrix[VX][VZ], b.mMatrix[VX][VZ], w); - - mMatrix[VY][VX] = llv4lerp(a.mMatrix[VY][VX], b.mMatrix[VY][VX], w); - mMatrix[VY][VY] = llv4lerp(a.mMatrix[VY][VY], b.mMatrix[VY][VY], w); - mMatrix[VY][VZ] = llv4lerp(a.mMatrix[VY][VZ], b.mMatrix[VY][VZ], w); - - mMatrix[VZ][VX] = llv4lerp(a.mMatrix[VZ][VX], b.mMatrix[VZ][VX], w); - mMatrix[VZ][VY] = llv4lerp(a.mMatrix[VZ][VY], b.mMatrix[VZ][VY], w); - mMatrix[VZ][VZ] = llv4lerp(a.mMatrix[VZ][VZ], b.mMatrix[VZ][VZ], w); - - mMatrix[VW][VX] = llv4lerp(a.mMatrix[VW][VX], b.mMatrix[VW][VX], w); - mMatrix[VW][VY] = llv4lerp(a.mMatrix[VW][VY], b.mMatrix[VW][VY], w); - mMatrix[VW][VZ] = llv4lerp(a.mMatrix[VW][VZ], b.mMatrix[VW][VZ], w); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLVector3& o) const -{ - o.setVec( a.mV[VX] * mMatrix[VX][VX] + - a.mV[VY] * mMatrix[VY][VX] + - a.mV[VZ] * mMatrix[VZ][VX] + - mMatrix[VW][VX], - - a.mV[VX] * mMatrix[VX][VY] + - a.mV[VY] * mMatrix[VY][VY] + - a.mV[VZ] * mMatrix[VZ][VY] + - mMatrix[VW][VY], - - a.mV[VX] * mMatrix[VX][VZ] + - a.mV[VY] * mMatrix[VY][VZ] + - a.mV[VZ] * mMatrix[VZ][VZ] + - mMatrix[VW][VZ]); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ - o.setVec( a.mV[VX] * mMatrix[VX][VX] + - a.mV[VY] * mMatrix[VY][VX] + - a.mV[VZ] * mMatrix[VZ][VX] + - mMatrix[VW][VX], - - a.mV[VX] * mMatrix[VX][VY] + - a.mV[VY] * mMatrix[VY][VY] + - a.mV[VZ] * mMatrix[VZ][VY] + - mMatrix[VW][VY], - - a.mV[VX] * mMatrix[VX][VZ] + - a.mV[VY] * mMatrix[VY][VZ] + - a.mV[VZ] * mMatrix[VZ][VZ] + - mMatrix[VW][VZ]); -} - -inline const LLV4Matrix4& LLV4Matrix4::translate(const LLV4Vector3 &vec) -{ - mMatrix[3][0] += vec.mV[0]; - mMatrix[3][1] += vec.mV[1]; - mMatrix[3][2] += vec.mV[2]; - return (*this); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#endif - -inline const LLV4Matrix4& LLV4Matrix4::operator=(const LLMatrix4& a) -{ - memcpy(mMatrix, a.mMatrix, sizeof(F32) * 16 ); - return *this; -} - -inline const LLV4Matrix4& LLV4Matrix4::transpose() -{ -#if LL_VECTORIZE && defined(_MM_TRANSPOSE4_PS) - _MM_TRANSPOSE4_PS(mV[VX], mV[VY], mV[VZ], mV[VW]); -#else - LLV4Matrix4 mat; - mat.mMatrix[0][0] = mMatrix[0][0]; - mat.mMatrix[1][0] = mMatrix[0][1]; - mat.mMatrix[2][0] = mMatrix[0][2]; - mat.mMatrix[3][0] = mMatrix[0][3]; - - mat.mMatrix[0][1] = mMatrix[1][0]; - mat.mMatrix[1][1] = mMatrix[1][1]; - mat.mMatrix[2][1] = mMatrix[1][2]; - mat.mMatrix[3][1] = mMatrix[1][3]; - - mat.mMatrix[0][2] = mMatrix[2][0]; - mat.mMatrix[1][2] = mMatrix[2][1]; - mat.mMatrix[2][2] = mMatrix[2][2]; - mat.mMatrix[3][2] = mMatrix[2][3]; - - mat.mMatrix[0][3] = mMatrix[3][0]; - mat.mMatrix[1][3] = mMatrix[3][1]; - mat.mMatrix[2][3] = mMatrix[3][2]; - mat.mMatrix[3][3] = mMatrix[3][3]; - - *this = mat; -#endif - return *this; -} - -inline const LLV4Matrix4& LLV4Matrix4::translate(const LLVector3 &vec) -{ - mMatrix[3][0] += vec.mV[0]; - mMatrix[3][1] += vec.mV[1]; - mMatrix[3][2] += vec.mV[2]; - return (*this); -} - -inline LLVector3 operator*(const LLVector3 &a, const LLV4Matrix4 &b) -{ - return LLVector3(a.mV[VX] * b.mMatrix[VX][VX] + - a.mV[VY] * b.mMatrix[VY][VX] + - a.mV[VZ] * b.mMatrix[VZ][VX] + - b.mMatrix[VW][VX], - - a.mV[VX] * b.mMatrix[VX][VY] + - a.mV[VY] * b.mMatrix[VY][VY] + - a.mV[VZ] * b.mMatrix[VZ][VY] + - b.mMatrix[VW][VY], - - a.mV[VX] * b.mMatrix[VX][VZ] + - a.mV[VY] * b.mMatrix[VY][VZ] + - a.mV[VZ] * b.mMatrix[VZ][VZ] + - b.mMatrix[VW][VZ]); -} - - -#endif diff --git a/linden/indra/llmath/llv4vector3.h b/linden/indra/llmath/llv4vector3.h deleted file mode 100644 index 994e7f5..0000000 --- a/linden/indra/llmath/llv4vector3.h +++ /dev/null @@ -1,82 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4* class header file - vector processor enabled math - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -#ifndef LL_LLV4VECTOR3_H -#define LL_LLV4VECTOR3_H - -#include "llv4math.h" - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Vector3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -LL_LLV4MATH_ALIGN_PREFIX - -class LLV4Vector3 -{ -public: - union { - F32 mV[LLV4_NUM_AXIS]; - V4F32 v; - }; - - enum { - ALIGNMENT = 16 - }; - - void setVec(F32 x, F32 y, F32 z); - void setVec(F32 a); -} - -LL_LLV4MATH_ALIGN_POSTFIX; - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Vector3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -inline void LLV4Vector3::setVec(F32 x, F32 y, F32 z) -{ - mV[VX] = x; - mV[VY] = y; - mV[VZ] = z; -} - -inline void LLV4Vector3::setVec(F32 a) -{ -#if LL_VECTORIZE - v = _mm_set1_ps(a); -#else - setVec(a, a, a); -#endif -} - -#endif diff --git a/linden/indra/llmessage/files.lst b/linden/indra/llmessage/files.lst index 456dffe..00a22b0 100644 --- a/linden/indra/llmessage/files.lst +++ b/linden/indra/llmessage/files.lst @@ -27,10 +27,12 @@ llmessage/llmessagebuilder.cpp llmessage/llmessageconfig.cpp llmessage/llmessagereader.cpp llmessage/llmessagetemplate.cpp +llmessage/llmessagetemplateparser.cpp llmessage/llmessagethrottle.cpp llmessage/llmime.cpp llmessage/llnamevalue.cpp llmessage/llnullcipher.cpp +llmessage/llpacketack.cpp llmessage/llpacketbuffer.cpp llmessage/llpacketring.cpp llmessage/llpartdata.cpp diff --git a/linden/indra/llmessage/llcircuit.h b/linden/indra/llmessage/llcircuit.h index 1eea203..33c0e10 100644 --- a/linden/indra/llmessage/llcircuit.h +++ b/linden/indra/llmessage/llcircuit.h @@ -58,7 +58,11 @@ const F32 LL_AVERAGED_PING_MIN = 100; // msec // IW: increased to avoid ret const U32 INITIAL_PING_VALUE_MSEC = 1000; // initial value for the ping delay, or for ping delay for an unknown circuit const TPACKETID LL_MAX_OUT_PACKET_ID = 0x01000000; -const U8 LL_PACKET_ID_SIZE = 4; + +// 0 - flags +// [1,4] - packetid +// 5 - data offset (after message name) +const U8 LL_PACKET_ID_SIZE = 6; const S32 LL_MAX_RESENT_PACKETS_PER_FRAME = 100; const S32 LL_MAX_ACKED_PACKETS_PER_FRAME = 200; diff --git a/linden/indra/llmessage/llhost.cpp b/linden/indra/llmessage/llhost.cpp index 50ef301..d57d52d 100644 --- a/linden/indra/llmessage/llhost.cpp +++ b/linden/indra/llmessage/llhost.cpp @@ -230,9 +230,9 @@ std::ostream& operator<< (std::ostream& os, const LLHost &hh) } -std::istream& operator>> (std::istream& is, LLHost &rh) -{ - is >> rh.mIP; - is >> rh.mPort; - return is; -} +//std::istream& operator>> (std::istream& is, LLHost &rh) +//{ +// is >> rh.mIP; +// is >> rh.mPort; +// return is; +//} diff --git a/linden/indra/llmessage/llhost.h b/linden/indra/llmessage/llhost.h index 5b477e0..1d37639 100644 --- a/linden/indra/llmessage/llhost.h +++ b/linden/indra/llmessage/llhost.h @@ -103,7 +103,11 @@ public: std::string getIPandPort() const; friend std::ostream& operator<< (std::ostream& os, const LLHost &hh); - friend std::istream& operator>> (std::istream& is, LLHost &hh); + + // This operator is not well defined. does it expect a + // "192.168.1.1:80" notation or "int int" format? Phoenix 2007-05-18 + //friend std::istream& operator>> (std::istream& is, LLHost &hh); + friend bool operator==( const LLHost &lhs, const LLHost &rhs ); friend bool operator!=( const LLHost &lhs, const LLHost &rhs ); friend bool operator<(const LLHost &lhs, const LLHost &rhs); diff --git a/linden/indra/llmessage/llhttpclient.cpp b/linden/indra/llmessage/llhttpclient.cpp index a1f8e29..392dfd0 100644 --- a/linden/indra/llmessage/llhttpclient.cpp +++ b/linden/indra/llmessage/llhttpclient.cpp @@ -43,12 +43,9 @@ #include const F32 HTTP_REQUEST_EXPIRY_SECS = 60.0f; - static std::string gCABundle; - - LLHTTPClient::Responder::Responder() : mReferenceCount(0) { diff --git a/linden/indra/llmessage/llhttpsender.cpp b/linden/indra/llmessage/llhttpsender.cpp index f96e6d2..3796a52 100644 --- a/linden/indra/llmessage/llhttpsender.cpp +++ b/linden/indra/llmessage/llhttpsender.cpp @@ -40,6 +40,7 @@ namespace { typedef std::map SenderMap; static SenderMap senderMap; + static LLHTTPSender* defaultSender = new LLHTTPSender(); } //virtual @@ -69,11 +70,10 @@ void LLHTTPSender::setSender(const LLHost& host, LLHTTPSender* sender) //static const LLHTTPSender& LLHTTPSender::getSender(const LLHost& host) { - static LLHTTPSender defaultSender; SenderMap::const_iterator iter = senderMap.find(host); if(iter == senderMap.end()) { - return defaultSender; + return *defaultSender; } return *(iter->second); } @@ -88,3 +88,10 @@ void LLHTTPSender::clearSender(const LLHost& host) senderMap.erase(iter); } } + +//static +void LLHTTPSender::setDefaultSender(LLHTTPSender* sender) +{ + delete defaultSender; + defaultSender = sender; +} diff --git a/linden/indra/llmessage/llhttpsender.h b/linden/indra/llmessage/llhttpsender.h index 650a0e9..5d8b028 100644 --- a/linden/indra/llmessage/llhttpsender.h +++ b/linden/indra/llmessage/llhttpsender.h @@ -53,6 +53,9 @@ class LLHTTPSender /** @brief Clear sender for host. */ static void clearSender(const LLHost& host); + + /** @brief Set default sender, takes ownership of sender. */ + static void setDefaultSender(LLHTTPSender* sender); }; #endif // LL_HTTP_SENDER_H diff --git a/linden/indra/llmessage/lliosocket.cpp b/linden/indra/llmessage/lliosocket.cpp index 8bc347c..fdb4a89 100644 --- a/linden/indra/llmessage/lliosocket.cpp +++ b/linden/indra/llmessage/lliosocket.cpp @@ -421,6 +421,7 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl( PUMP_DEBUG; apr_size_t len; bool done = false; + apr_status_t status = APR_SUCCESS; while(it != end) { @@ -428,9 +429,8 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl( if((*it).isOnChannel(channels.in())) { PUMP_DEBUG; - // *FIX: check return code - sockets will fail (broken, etc.) len = (apr_size_t)segment.size(); - apr_status_t status = apr_socket_send( + status = apr_socket_send( mDestination->getSocket(), (const char*)segment.data(), &len); @@ -438,12 +438,12 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl( // completed immediately' error from apr_socket_send. In this // case we break and the data will be sent the next time the chain // is pumped. -#if LL_WINDOWS - if (status == 730035) + if(APR_STATUS_IS_EAGAIN(status)) + { + ll_apr_warn_status(status); break; -#else - (void) status; -#endif + } + mLastWritten = segment.data() + len - 1; PUMP_DEBUG; diff --git a/linden/indra/llmessage/llmessage.vcproj b/linden/indra/llmessage/llmessage.vcproj index d3e0d89..bb404f0 100644 --- a/linden/indra/llmessage/llmessage.vcproj +++ b/linden/indra/llmessage/llmessage.vcproj @@ -240,6 +240,9 @@ RelativePath=".\llmessagetemplate.cpp"> + + + + + RelativePath=".\llhttpnode.h"> + RelativePath=".\llhttpsender.h"> @@ -482,6 +488,9 @@ RelativePath=".\llmessagetemplate.h"> + + + + @@ -363,6 +367,10 @@ > + + @@ -677,6 +685,10 @@ > + + diff --git a/linden/indra/llmessage/llmessagebuilder.h b/linden/indra/llmessage/llmessagebuilder.h index 7ae09c5..5c231bd 100644 --- a/linden/indra/llmessage/llmessagebuilder.h +++ b/linden/indra/llmessage/llmessagebuilder.h @@ -1,3 +1,31 @@ +/** + * @file llmessagebuilder.h + * @brief Declaration of LLMessageBuilder class. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLMESSAGEBUILDER_H #define LL_LLMESSAGEBUILDER_H @@ -20,31 +48,33 @@ public: //CLASS_LOG_TYPE(LLMessageBuilder); virtual ~LLMessageBuilder(); - virtual void newMessage(const char *name) = 0; + virtual void newMessage(const char* name) = 0; virtual void nextBlock(const char* blockname) = 0; virtual BOOL removeLastBlock() = 0; // TODO: babbage: remove this horror /** All add* methods expect pointers to canonical strings. */ - virtual void addBinaryData(const char *varname, const void *data, - S32 size) = 0; + virtual void addBinaryData( + const char* varname, + const void* data, + S32 size) = 0; virtual void addBOOL(const char* varname, BOOL b) = 0; - virtual void addS8(const char *varname, S8 s) = 0; - virtual void addU8(const char *varname, U8 u) = 0; - virtual void addS16(const char *varname, S16 i) = 0; - virtual void addU16(const char *varname, U16 i) = 0; - virtual void addF32(const char *varname, F32 f) = 0; - virtual void addS32(const char *varname, S32 s) = 0; - virtual void addU32(const char *varname, U32 u) = 0; - virtual void addU64(const char *varname, U64 lu) = 0; - virtual void addF64(const char *varname, F64 d) = 0; - virtual void addVector3(const char *varname, const LLVector3& vec) = 0; - virtual void addVector4(const char *varname, const LLVector4& vec) = 0; - virtual void addVector3d(const char *varname, const LLVector3d& vec) = 0; - virtual void addQuat(const char *varname, const LLQuaternion& quat) = 0; - virtual void addUUID(const char *varname, const LLUUID& uuid) = 0; - virtual void addIPAddr(const char *varname, const U32 ip) = 0; - virtual void addIPPort(const char *varname, const U16 port) = 0; + virtual void addS8(const char* varname, S8 s) = 0; + virtual void addU8(const char* varname, U8 u) = 0; + virtual void addS16(const char* varname, S16 i) = 0; + virtual void addU16(const char* varname, U16 i) = 0; + virtual void addF32(const char* varname, F32 f) = 0; + virtual void addS32(const char* varname, S32 s) = 0; + virtual void addU32(const char* varname, U32 u) = 0; + virtual void addU64(const char* varname, U64 lu) = 0; + virtual void addF64(const char* varname, F64 d) = 0; + virtual void addVector3(const char* varname, const LLVector3& vec) = 0; + virtual void addVector4(const char* varname, const LLVector4& vec) = 0; + virtual void addVector3d(const char* varname, const LLVector3d& vec) = 0; + virtual void addQuat(const char* varname, const LLQuaternion& quat) = 0; + virtual void addUUID(const char* varname, const LLUUID& uuid) = 0; + virtual void addIPAddr(const char* varname, const U32 ip) = 0; + virtual void addIPPort(const char* varname, const U16 port) = 0; virtual void addString(const char* varname, const char* s) = 0; virtual void addString(const char* varname, const std::string& s) = 0; @@ -54,7 +84,10 @@ public: virtual BOOL isBuilt() const = 0; virtual BOOL isClear() const = 0; - virtual U32 buildMessage(U8* buffer, U32 buffer_size) = 0; + virtual U32 buildMessage( + U8* buffer, + U32 buffer_size, + U8 offset_to_data) = 0; /**< Return built message size */ virtual void clearMessage() = 0; diff --git a/linden/indra/llmessage/llmessageconfig.cpp b/linden/indra/llmessage/llmessageconfig.cpp index 687896b..8d114a9 100644 --- a/linden/indra/llmessage/llmessageconfig.cpp +++ b/linden/indra/llmessage/llmessageconfig.cpp @@ -32,37 +32,44 @@ #include "llfile.h" #include "lllivefile.h" #include "llsd.h" +#include "llsdutil.h" #include "llsdserialize.h" +#include "message.h" static const char messageConfigFileName[] = "message.xml"; static const F32 messageConfigRefreshRate = 5.0; // seconds + static std::string sServerName = ""; static std::string sConfigDir = ""; +static std::string sServerDefault; +static LLSD sMessages; + + class LLMessageConfigFile : public LLLiveFile { -private: +public: LLMessageConfigFile() - : LLLiveFile(fileName(), messageConfigRefreshRate), - mChanged(false) + : LLLiveFile(fileName(), messageConfigRefreshRate) { } static std::string fileName(); - -public: + + LLSD mMessages; + std::string mServerDefault; + static LLMessageConfigFile& instance(); // return the singleton configuration file -protected: /* virtual */ void loadFile(); void loadServerDefaults(const LLSD& data); void loadMessages(const LLSD& data); + void loadCapBans(const LLSD& blacklist); + void loadMessageBans(const LLSD& blacklist); + bool isCapBanned(const std::string& cap_name) const; public: - bool mChanged; - - std::string mServerDefault; - LLSD mMessages; + LLSD mCapBans; }; std::string LLMessageConfigFile::fileName() @@ -102,26 +109,63 @@ void LLMessageConfigFile::loadFile() } loadServerDefaults(data); loadMessages(data); + loadCapBans(data); + loadMessageBans(data); } void LLMessageConfigFile::loadServerDefaults(const LLSD& data) { mServerDefault = data["serverDefaults"][sServerName].asString(); - lldebugs << "loading default " << mServerDefault << llendl; } void LLMessageConfigFile::loadMessages(const LLSD& data) { - LLPointer formatter = new LLSDXMLFormatter; - std::ostringstream out; - mMessages = data["messages"]; + +#ifdef DEBUG + std::ostringstream out; + LLSDXMLFormatter *formatter = new LLSDXMLFormatter; formatter->format(mMessages, out); - lldebugs << "loading ... " << out.str() + llinfos << "loading ... " << out.str() << " LLMessageConfigFile::loadMessages loaded " << mMessages.size() << " messages" << llendl; +#endif } +void LLMessageConfigFile::loadCapBans(const LLSD& data) +{ + LLSD bans = data["capBans"]; + if (!bans.isMap()) + { + llinfos << "LLMessageConfigFile::loadCapBans: missing capBans section" + << llendl; + return; + } + + mCapBans = bans; + + llinfos << "LLMessageConfigFile::loadCapBans: " + << bans.size() << " ban tests" << llendl; +} + +void LLMessageConfigFile::loadMessageBans(const LLSD& data) +{ + LLSD bans = data["messageBans"]; + if (!bans.isMap()) + { + llinfos << "LLMessageConfigFile::loadMessageBans: missing messageBans section" + << llendl; + return; + } + + gMessageSystem->setMessageBans(bans["trusted"], bans["untrusted"]); +} + +bool LLMessageConfigFile::isCapBanned(const std::string& cap_name) const +{ + llinfos << "mCapBans is " << LLSDXMLStreamer(mCapBans) << llendl; + return mCapBans[cap_name]; +} //--------------------------------------------------------------- // LLMessageConfig @@ -134,98 +178,77 @@ void LLMessageConfig::initClass(const std::string& server_name, sServerName = server_name; sConfigDir = config_dir; (void) LLMessageConfigFile::instance(); - llinfos << "LLMessageConfig::intiClass config file " + llinfos << "LLMessageConfig::initClass config file " << config_dir << "/" << messageConfigFileName << llendl; } //static -bool LLMessageConfig::isServerDefaultBuilderLLSD() +void LLMessageConfig::useConfig(const LLSD& config) { - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isServerDefaultBuilderLLSD() before" - << " LLMessageConfig::initClass()" << llendl; - } - LLMessageConfigFile& file = LLMessageConfigFile::instance(); - return (file.mServerDefault == "llsd"); -} + LLMessageConfigFile &the_file = LLMessageConfigFile::instance(); + the_file.loadServerDefaults(config); + the_file.loadMessages(config); + the_file.loadCapBans(config); + the_file.loadMessageBans(config); -//static -bool LLMessageConfig::isServerDefaultBuilderTemplate() -{ - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isServerDefaultBuilderTemplate() before" - << " LLMessageConfig::initClass()" << llendl; - } - LLMessageConfigFile& file = LLMessageConfigFile::instance(); - return (file.mServerDefault == "template"); } //static -bool LLMessageConfig::isMessageBuiltLLSD(const std::string& msg_name) +LLMessageConfig::Flavor LLMessageConfig::getServerDefaultFlavor() { - if (sServerName.empty()) + LLMessageConfigFile& file = LLMessageConfigFile::instance(); + if (file.mServerDefault == "llsd") { - llerrs << "LLMessageConfig::isMessageBuiltLLSD(name) before" - << " LLMessageConfig::initClass()" << llendl; + return LLSD_FLAVOR; } - LLMessageConfigFile& file = LLMessageConfigFile::instance(); - LLSD config = file.mMessages[msg_name]; - if (!config.has("builder")) + if (file.mServerDefault == "template") { - return isServerDefaultBuilderLLSD(); + return TEMPLATE_FLAVOR; } - return (config["builder"].asString() == "llsd"); + return NO_FLAVOR; } //static -bool LLMessageConfig::isMessageBuiltTemplate(const std::string& msg_name) +LLMessageConfig::Flavor LLMessageConfig::getMessageFlavor(const std::string& msg_name) { - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isMessageBuiltTemplate(name) before" - << " LLMessageConfig::initClass()" << llendl; - } LLMessageConfigFile& file = LLMessageConfigFile::instance(); LLSD config = file.mMessages[msg_name]; - if (!config.has("builder")) + if (config["flavor"].asString() == "llsd") { - return isServerDefaultBuilderTemplate(); + return LLSD_FLAVOR; } - return (config["builder"].asString() == "template"); + if (config["flavor"].asString() == "template") + { + return TEMPLATE_FLAVOR; + } + return NO_FLAVOR; } //static -bool LLMessageConfig::isMessageTrusted(const std::string& msg_name) +LLMessageConfig::SenderTrust LLMessageConfig::getSenderTrustedness( + const std::string& msg_name) { - if (sServerName.empty()) - { - llerrs << "LLMessageConfig::isMessageTrusted(name) before" - << " LLMessageConfig::initClass()" << llendl; - } LLMessageConfigFile& file = LLMessageConfigFile::instance(); LLSD config = file.mMessages[msg_name]; - if (!config.has("trusted-sender")) + if (config.has("trusted-sender")) { - return false; + return config["trusted-sender"].asBoolean() ? TRUSTED : UNTRUSTED; } - return config["trusted-sender"].asBoolean(); + return NOT_SET; } //static -bool LLMessageConfig::isValidUntrustedMessage(const std::string& msg_name) +bool LLMessageConfig::isValidMessage(const std::string& msg_name) { if (sServerName.empty()) { - llerrs << "LLMessageConfig::isMessageTrusted(name) before" - << " LLMessageConfig::initClass()" << llendl; + llerrs << "LLMessageConfig::initClass() not called" << llendl; } LLMessageConfigFile& file = LLMessageConfigFile::instance(); - LLSD config = file.mMessages[msg_name]; - if (!config.has("trusted-sender")) - { - return false; - } - return !(config["trusted-sender"].asBoolean()); + return file.mMessages.has(msg_name); +} + +bool LLMessageConfig::isCapBanned(const std::string& cap_name) +{ + return LLMessageConfigFile::instance().isCapBanned(cap_name); } diff --git a/linden/indra/llmessage/llmessageconfig.h b/linden/indra/llmessage/llmessageconfig.h index 1664ce6..ca09c27 100644 --- a/linden/indra/llmessage/llmessageconfig.h +++ b/linden/indra/llmessage/llmessageconfig.h @@ -31,21 +31,24 @@ #include +class LLSD; + class LLMessageConfig { public: + enum Flavor { NO_FLAVOR=0, LLSD_FLAVOR=1, TEMPLATE_FLAVOR=2 }; + enum SenderTrust { NOT_SET=0, UNTRUSTED=1, TRUSTED=2 }; + static void initClass(const std::string& server_name, const std::string& config_dir); - // force loading of config file during startup process - // so it can be used for startup features + static void useConfig(const LLSD& config); - static bool isServerDefaultBuilderLLSD(); - static bool isServerDefaultBuilderTemplate(); + static Flavor getServerDefaultFlavor(); // For individual messages - static bool isMessageBuiltLLSD(const std::string& msg_name); - static bool isMessageBuiltTemplate(const std::string& msg_name); - static bool isMessageTrusted(const std::string& msg_name); - static bool isValidUntrustedMessage(const std::string& msg_name); + static Flavor getMessageFlavor(const std::string& msg_name); + static SenderTrust getSenderTrustedness(const std::string& msg_name); + static bool isValidMessage(const std::string& msg_name); + static bool isCapBanned(const std::string& cap_name); }; #endif // LL_MESSAGECONFIG_H diff --git a/linden/indra/llmessage/llmessagereader.cpp b/linden/indra/llmessage/llmessagereader.cpp index 4824480..db4cbdf 100644 --- a/linden/indra/llmessage/llmessagereader.cpp +++ b/linden/indra/llmessage/llmessagereader.cpp @@ -1,3 +1,31 @@ +/** + * @file llsdmessagereader.cpp + * @brief LLMessageReader class implementation + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #include "llmessagereader.h" static BOOL sTimeDecodes = FALSE; diff --git a/linden/indra/llmessage/llmessagereader.h b/linden/indra/llmessage/llmessagereader.h index 33ce928..9c1923a 100644 --- a/linden/indra/llmessage/llmessagereader.h +++ b/linden/indra/llmessage/llmessagereader.h @@ -1,3 +1,31 @@ +/** + * @file llmessagereader.h + * @brief Declaration of LLMessageReader class. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLMESSAGEREADER_H #define LL_LLMESSAGEREADER_H @@ -45,6 +73,7 @@ class LLMessageReader virtual void clearMessage() = 0; + /** Returns pointer to canonical (prehashed) string. */ virtual const char* getMessageName() const = 0; virtual S32 getMessageSize() const = 0; diff --git a/linden/indra/llmessage/llmessagetemplate.cpp b/linden/indra/llmessage/llmessagetemplate.cpp index 026843d..daf7f7a 100644 --- a/linden/indra/llmessage/llmessagetemplate.cpp +++ b/linden/indra/llmessage/llmessagetemplate.cpp @@ -1,3 +1,31 @@ +/** + * @file llmessagetemplate.cpp + * @brief Implementation of message template classes. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #include "linden_common.h" #include "llmessagetemplate.h" @@ -94,7 +122,7 @@ std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg) for (LLMessageBlock::message_variable_map_t::iterator iter = msg.mMemberVariables.begin(); iter != msg.mMemberVariables.end(); iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = *(*iter); s << ci; } @@ -138,7 +166,7 @@ std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg) for (LLMessageTemplate::message_block_map_t::iterator iter = msg.mMemberBlocks.begin(); iter != msg.mMemberBlocks.end(); iter++) { - LLMessageBlock* ci = iter->second; + LLMessageBlock* ci = *iter; s << *ci; } diff --git a/linden/indra/llmessage/llmessagetemplate.h b/linden/indra/llmessage/llmessagetemplate.h index 8847ddc..804c343 100644 --- a/linden/indra/llmessage/llmessagetemplate.h +++ b/linden/indra/llmessage/llmessagetemplate.h @@ -1,3 +1,31 @@ +/** + * @file llmessagetemplate.h + * @brief Declaration of the message template classes. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLMESSAGETEMPLATE_H #define LL_LLMESSAGETEMPLATE_H @@ -123,7 +151,7 @@ public: mName = name; } - LLMessageVariable(char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size) + LLMessageVariable(const char *name, const EMsgVariableType type, const S32 size) : mType(type), mSize(size) { mName = gMessageStringTable.getString(name); } @@ -154,14 +182,14 @@ typedef enum e_message_block_type class LLMessageBlock { public: - LLMessageBlock(char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0) + LLMessageBlock(const char *name, EMsgBlockType type, S32 number = 1) : mType(type), mNumber(number), mTotalSize(0) { mName = gMessageStringTable.getString(name); } ~LLMessageBlock() { - for_each(mMemberVariables.begin(), mMemberVariables.end(), DeletePairedPointer()); + for_each(mMemberVariables.begin(), mMemberVariables.end(), DeletePointer()); } void addVariable(char *name, const EMsgVariableType type, const S32 size) @@ -193,9 +221,15 @@ public: return (mMemberVariables[name])->getSize(); } + const LLMessageVariable* getVariable(char* name) const + { + message_variable_map_t::const_iterator iter = mMemberVariables.find(name); + return iter != mMemberVariables.end()? *iter : NULL; + } + friend std::ostream& operator<<(std::ostream& s, LLMessageBlock &msg); - typedef std::map message_variable_map_t; + typedef LLDynamicArrayIndexed message_variable_map_t; message_variable_map_t mMemberVariables; char *mName; EMsgBlockType mType; @@ -224,6 +258,13 @@ enum EMsgEncoding ME_ZEROCODED }; +enum EMsgDeprecation +{ + MD_NOTDEPRECATED, + MD_UDPDEPRECATED, + MD_DEPRECATED +}; + class LLMessageTemplate { public: @@ -234,7 +275,8 @@ public: mFrequency(freq), mTrust(MT_NOTRUST), mEncoding(ME_ZEROCODED), - mMessageNumber(message_number), + mDeprecation(MD_NOTDEPRECATED), + mMessageNumber(message_number), mTotalSize(0), mReceiveCount(0), mReceiveBytes(0), @@ -253,8 +295,8 @@ public: ~LLMessageTemplate() { - for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePairedPointer()); - } + for_each(mMemberBlocks.begin(), mMemberBlocks.end(), DeletePointer()); +} void addBlock(LLMessageBlock *blockp) { @@ -289,7 +331,7 @@ public: mTrust = t; } - EMsgTrust getTrust(void) + EMsgTrust getTrust(void) const { return mTrust; } @@ -299,18 +341,28 @@ public: { mEncoding = e; } - EMsgEncoding getEncoding() + EMsgEncoding getEncoding() const { return mEncoding; } + void setDeprecation(EMsgDeprecation d) + { + mDeprecation = d; + } + + EMsgDeprecation getDeprecation() const + { + return mDeprecation; + } + void setHandlerFunc(void (*handler_func)(LLMessageSystem *msgsystem, void **user_data), void **user_data) { mHandlerFunc = handler_func; mUserData = user_data; } - BOOL callHandlerFunc(LLMessageSystem *msgsystem) + BOOL callHandlerFunc(LLMessageSystem *msgsystem) const { if (mHandlerFunc) { @@ -320,20 +372,27 @@ public: return FALSE; } - bool isBanned(bool trustedSource) + bool isBanned(bool trustedSource) const { return trustedSource ? mBanFromTrusted : mBanFromUntrusted; } friend std::ostream& operator<<(std::ostream& s, LLMessageTemplate &msg); + const LLMessageBlock* getBlock(char* name) const + { + message_block_map_t::const_iterator iter = mMemberBlocks.find(name); + return iter != mMemberBlocks.end()? *iter : NULL; + } + public: - typedef std::map message_block_map_t; + typedef LLDynamicArrayIndexed message_block_map_t; message_block_map_t mMemberBlocks; char *mName; EMsgFrequency mFrequency; EMsgTrust mTrust; EMsgEncoding mEncoding; + EMsgDeprecation mDeprecation; U32 mMessageNumber; S32 mTotalSize; U32 mReceiveCount; // how many of this template have been received since last reset diff --git a/linden/indra/llmessage/llmessagetemplateparser.cpp b/linden/indra/llmessage/llmessagetemplateparser.cpp new file mode 100644 index 0000000..eb5e87e --- /dev/null +++ b/linden/indra/llmessage/llmessagetemplateparser.cpp @@ -0,0 +1,754 @@ +/** + * @file llmessagetemplateparser.cpp + * @brief LLMessageTemplateParser implementation + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include "llmessagetemplateparser.h" +#include + + +// What follows is a bunch of C functions to do validation. + +// Lets support a small subset of regular expressions here +// Syntax is a string made up of: +// a - checks against alphanumeric ([A-Za-z0-9]) +// c - checks against character ([A-Za-z]) +// f - checks against first variable character ([A-Za-z_]) +// v - checks against variable ([A-Za-z0-9_]) +// s - checks against sign of integer ([-0-9]) +// d - checks against integer digit ([0-9]) +// * - repeat last check + +// checks 'a' +BOOL b_return_alphanumeric_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z')) + &&( (c < '0') + ||(c > '9'))) + { + return FALSE; + } + return TRUE; +} + +// checks 'c' +BOOL b_return_character_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z'))) + { + return FALSE; + } + return TRUE; +} + +// checks 'f' +BOOL b_return_first_variable_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z')) + &&(c != '_')) + { + return FALSE; + } + return TRUE; +} + +// checks 'v' +BOOL b_return_variable_ok(char c) +{ + if ( ( (c < 'A') + ||(c > 'Z')) + &&( (c < 'a') + ||(c > 'z')) + &&( (c < '0') + ||(c > '9')) + &&(c != '_')) + { + return FALSE; + } + return TRUE; +} + +// checks 's' +BOOL b_return_signed_integer_ok(char c) +{ + if ( ( (c < '0') + ||(c > '9')) + &&(c != '-')) + { + return FALSE; + } + return TRUE; +} + +// checks 'd' +BOOL b_return_integer_ok(char c) +{ + if ( (c < '0') + ||(c > '9')) + { + return FALSE; + } + return TRUE; +} + +BOOL (*gParseCheckCharacters[])(char c) = +{ + b_return_alphanumeric_ok, + b_return_character_ok, + b_return_first_variable_ok, + b_return_variable_ok, + b_return_signed_integer_ok, + b_return_integer_ok +}; + +S32 get_checker_number(char checker) +{ + switch(checker) + { + case 'a': + return 0; + case 'c': + return 1; + case 'f': + return 2; + case 'v': + return 3; + case 's': + return 4; + case 'd': + return 5; + case '*': + return 9999; + default: + return -1; + } +} + +// check token based on passed simplified regular expression +BOOL b_check_token(const char *token, char *regexp) +{ + S32 tptr, rptr = 0; + S32 current_checker, next_checker = 0; + + current_checker = get_checker_number(regexp[rptr++]); + + if (current_checker == -1) + { + llerrs << "Invalid regular expression value!" << llendl; + return FALSE; + } + + if (current_checker == 9999) + { + llerrs << "Regular expression can't start with *!" << llendl; + return FALSE; + } + + for (tptr = 0; token[tptr]; tptr++) + { + if (current_checker == -1) + { + llerrs << "Input exceeds regular expression!\nDid you forget a *?" << llendl; + return FALSE; + } + + if (!gParseCheckCharacters[current_checker](token[tptr])) + { + return FALSE; + } + if (next_checker != 9999) + { + next_checker = get_checker_number(regexp[rptr++]); + if (next_checker != 9999) + { + current_checker = next_checker; + } + } + } + return TRUE; +} + +// C variable can be made up of upper or lower case letters, underscores, or numbers, but can't start with a number +BOOL b_variable_ok(const char *token) +{ + if (!b_check_token(token, "fv*")) + { + llwarns << "Token '" << token << "' isn't a variable!" << llendl; + return FALSE; + } + return TRUE; +} + +// An integer is made up of the digits 0-9 and may be preceded by a '-' +BOOL b_integer_ok(const char *token) +{ + if (!b_check_token(token, "sd*")) + { + llwarns << "Token isn't an integer!" << llendl; + return FALSE; + } + return TRUE; +} + +// An integer is made up of the digits 0-9 +BOOL b_positive_integer_ok(const char *token) +{ + if (!b_check_token(token, "d*")) + { + llwarns << "Token isn't an integer!" << llendl; + return FALSE; + } + return TRUE; +} + + +// Done with C functions, here's the tokenizer. + +typedef boost::tokenizer< boost::char_separator > tokenizer; + +LLTemplateTokenizer::LLTemplateTokenizer(const std::string & contents) : mStarted(false), mTokens() +{ + boost::char_separator newline("\r\n", "", boost::keep_empty_tokens); + boost::char_separator spaces(" \t"); + U32 line_counter = 1; + + tokenizer line_tokens(contents, newline); + for(tokenizer::iterator line_iter = line_tokens.begin(); + line_iter != line_tokens.end(); + ++line_iter, ++line_counter) + { + tokenizer word_tokens(*line_iter, spaces); + for(tokenizer::iterator word_iter = word_tokens.begin(); + word_iter != word_tokens.end(); + ++word_iter) + { + if((*word_iter)[0] == '/') + { + break; // skip to end of line on comments + } + positioned_token pt;// = new positioned_token(); + pt.str = std::string(*word_iter); + pt.line = line_counter; + mTokens.push_back(pt); + } + } + mCurrent = mTokens.begin(); +} +void LLTemplateTokenizer::inc() +{ + if(atEOF()) + { + error("trying to increment token of EOF"); + } + else if(mStarted) + { + ++mCurrent; + } + else + { + mStarted = true; + mCurrent = mTokens.begin(); + } +} +void LLTemplateTokenizer::dec() +{ + if(mCurrent == mTokens.begin()) + { + if(mStarted) + { + mStarted = false; + } + else + { + error("trying to decrement past beginning of file"); + } + } + else + { + mCurrent--; + } +} + +std::string LLTemplateTokenizer::get() const +{ + if(atEOF()) + { + error("trying to get EOF"); + } + return mCurrent->str; +} + +U32 LLTemplateTokenizer::line() const +{ + if(atEOF()) + { + return 0; + } + return mCurrent->line; +} + +bool LLTemplateTokenizer::atEOF() const +{ + return mCurrent == mTokens.end(); +} + +std::string LLTemplateTokenizer::next() +{ + inc(); + return get(); +} + +bool LLTemplateTokenizer::want(const std::string & token) +{ + if(atEOF()) return false; + inc(); + if(atEOF()) return false; + if(get() != token) + { + dec(); // back up a step + return false; + } + return true; +} + +bool LLTemplateTokenizer::wantEOF() +{ + // see if the next token is EOF + if(atEOF()) return true; + inc(); + if(!atEOF()) + { + dec(); // back up a step + return false; + } + return true; +} + +void LLTemplateTokenizer::error(std::string message) const +{ + if(atEOF()) + { + llerrs << "Unexpected end of file: " << message << llendl; + } + else + { + llerrs << "Problem parsing message template at line " + << line() << ", with token '" << get() << "' : " + << message << llendl; + } +} + + +// Done with tokenizer, next is the parser. + +LLTemplateParser::LLTemplateParser(LLTemplateTokenizer & tokens): + mVersion(0.f), + mMessages() +{ + // the version number should be the first thing in the file + if (tokens.want("version")) + { + // version number + std::string vers_string = tokens.next(); + mVersion = (F32)atof(vers_string.c_str()); + + llinfos << "### Message template version " << mVersion << " ###" << llendl; + } + else + { + llerrs << "Version must be first in the message template, found " + << tokens.next() << llendl; + } + + while(LLMessageTemplate * templatep = parseMessage(tokens)) + { + if (templatep->getDeprecation() != MD_DEPRECATED) + { + mMessages.push_back(templatep); + } + } + + if(!tokens.wantEOF()) + { + llerrs << "Expected end of template or a message, instead found: " + << tokens.next() << " at " << tokens.line() << llendl; + } +} + +F32 LLTemplateParser::getVersion() const +{ + return mVersion; +} + +LLTemplateParser::message_iterator LLTemplateParser::getMessagesBegin() const +{ + return mMessages.begin(); +} + +LLTemplateParser::message_iterator LLTemplateParser::getMessagesEnd() const +{ + return mMessages.end(); +} + + +// static +LLMessageTemplate * LLTemplateParser::parseMessage(LLTemplateTokenizer & tokens) +{ + LLMessageTemplate *templatep = NULL; + if(!tokens.want("{")) + { + return NULL; + } + + // name first + std::string template_name = tokens.next(); + + // is name a legit C variable name + if (!b_variable_ok(template_name.c_str())) + { + llerrs << "Not legit variable name: " << template_name << " at " << tokens.line() << llendl; + } + + // ok, now get Frequency ("High", "Medium", or "Low") + EMsgFrequency frequency = MFT_LOW; + std::string freq_string = tokens.next(); + if (freq_string == "High") + { + frequency = MFT_HIGH; + } + else if (freq_string == "Medium") + { + frequency = MFT_MEDIUM; + } + else if (freq_string == "Low" || freq_string == "Fixed") + { + frequency = MFT_LOW; + } + else + { + llerrs << "Expected frequency, got " << freq_string << " at " << tokens.line() << llendl; + } + + // TODO more explicit checking here pls + U32 message_number = strtoul(tokens.next().c_str(),NULL,0); + + switch (frequency) { + case MFT_HIGH: + break; + case MFT_MEDIUM: + message_number = (255 << 8) | message_number; + break; + case MFT_LOW: + message_number = (255 << 24) | (255 << 16) | message_number; + break; + default: + llerrs << "Unknown frequency enum: " << frequency << llendl; + } + + templatep = new LLMessageTemplate( + template_name.c_str(), + message_number, + frequency); + + // Now get trust ("Trusted", "NotTrusted") + std::string trust = tokens.next(); + if (trust == "Trusted") + { + templatep->setTrust(MT_TRUST); + } + else if (trust == "NotTrusted") + { + templatep->setTrust(MT_NOTRUST); + } + else + { + llerrs << "Bad trust " << trust << " at " << tokens.line() << llendl; + } + + // get encoding + std::string encoding = tokens.next(); + if(encoding == "Unencoded") + { + templatep->setEncoding(ME_UNENCODED); + } + else if(encoding == "Zerocoded") + { + templatep->setEncoding(ME_ZEROCODED); + } + else + { + llerrs << "Bad encoding " << encoding << " at " << tokens.line() << llendl; + } + + // get deprecation + if(tokens.want("Deprecated")) + { + templatep->setDeprecation(MD_DEPRECATED); + } + else if (tokens.want("UDPDeprecated")) + { + templatep->setDeprecation(MD_UDPDEPRECATED); + } + else if (tokens.want("NotDeprecated")) + { + // this is the default value, but it can't hurt to set it twice + templatep->setDeprecation(MD_NOTDEPRECATED); + } + else { + // It's probably a brace, let's just start block processing + } + + while(LLMessageBlock * blockp = parseBlock(tokens)) + { + templatep->addBlock(blockp); + } + + if(!tokens.want("}")) + { + llerrs << "Expecting closing } for message " << template_name + << " at " << tokens.line() << llendl; + } + return templatep; +} + +// static +LLMessageBlock * LLTemplateParser::parseBlock(LLTemplateTokenizer & tokens) +{ + LLMessageBlock * blockp = NULL; + + if(!tokens.want("{")) + { + return NULL; + } + + // name first + std::string block_name = tokens.next(); + + // is name a legit C variable name + if (!b_variable_ok(block_name.c_str())) + { + llerrs << "not a legal block name: " << block_name + << " at " << tokens.line() << llendl; + } + + // now, block type ("Single", "Multiple", or "Variable") + std::string block_type = tokens.next(); + // which one is it? + if (block_type == "Single") + { + // ok, we can create a block + blockp = new LLMessageBlock(block_name.c_str(), MBT_SINGLE); + } + else if (block_type == "Multiple") + { + // need to get the number of repeats + std::string repeats = tokens.next(); + + // is it a legal integer + if (!b_positive_integer_ok(repeats.c_str())) + { + llerrs << "not a legal integer for block multiple count: " + << repeats << " at " << tokens.line() << llendl; + } + + // ok, we can create a block + blockp = new LLMessageBlock(block_name.c_str(), + MBT_MULTIPLE, + atoi(repeats.c_str())); + } + else if (block_type == "Variable") + { + // ok, we can create a block + blockp = new LLMessageBlock(block_name.c_str(), MBT_VARIABLE); + } + else + { + llerrs << "bad block type: " << block_type + << " at " << tokens.line() << llendl; + } + + + while(LLMessageVariable * varp = parseVariable(tokens)) + { + blockp->addVariable(varp->getName(), + varp->getType(), + varp->getSize()); + delete varp; + } + + if(!tokens.want("}")) + { + llerrs << "Expecting closing } for block " << block_name + << " at " << tokens.line() << llendl; + } + return blockp; + +} + +// static +LLMessageVariable * LLTemplateParser::parseVariable(LLTemplateTokenizer & tokens) +{ + LLMessageVariable * varp = NULL; + if(!tokens.want("{")) + { + return NULL; + } + + std::string var_name = tokens.next(); + + if (!b_variable_ok(var_name.c_str())) + { + llerrs << "Not a legit variable name: " << var_name + << " at " << tokens.line() << llendl; + } + + std::string var_type = tokens.next(); + + if (var_type == "U8") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U8, 1); + } + else if (var_type == "U16") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U16, 2); + } + else if (var_type == "U32") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U32, 4); + } + else if (var_type == "U64") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_U64, 8); + } + else if (var_type == "S8") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S8, 1); + } + else if (var_type == "S16") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S16, 2); + } + else if (var_type == "S32") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S32, 4); + } + else if (var_type == "S64") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_S64, 8); + } + else if (var_type == "F32") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_F32, 4); + } + else if (var_type == "F64") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_F64, 8); + } + else if (var_type == "LLVector3") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector3, 12); + } + else if (var_type == "LLVector3d") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector3d, 24); + } + else if (var_type == "LLVector4") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLVector4, 16); + } + else if (var_type == "LLQuaternion") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLQuaternion, 12); + } + else if (var_type == "LLUUID") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_LLUUID, 16); + } + else if (var_type == "BOOL") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_BOOL, 1); + } + else if (var_type == "IPADDR") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_IP_ADDR, 4); + } + else if (var_type == "IPPORT") + { + varp = new LLMessageVariable(var_name.c_str(), MVT_IP_PORT, 2); + } + else if (var_type == "Fixed" || var_type == "Variable") + { + std::string variable_size = tokens.next(); + + if (!b_positive_integer_ok(variable_size.c_str())) + { + llerrs << "not a legal integer variable size: " << variable_size + << " at " << tokens.line() << llendl; + } + + EMsgVariableType type_enum; + if(var_type == "Variable") + { + type_enum = MVT_VARIABLE; + } + else if(var_type == "Fixed") + { + type_enum = MVT_FIXED; + } + else + { + type_enum = MVT_FIXED; // removes a warning + llerrs << "bad variable type: " << var_type + << " at " << tokens.line() << llendl; + } + + varp = new LLMessageVariable( + var_name.c_str(), + type_enum, + atoi(variable_size.c_str())); + } + else + { + llerrs << "bad variable type:" << var_type + << " at " << tokens.line() << llendl; + } + + if(!tokens.want("}")) + { + llerrs << "Expecting closing } for variable " << var_name + << " at " << tokens.line() << llendl; + } + return varp; +} diff --git a/linden/indra/llmessage/llmessagetemplateparser.h b/linden/indra/llmessage/llmessagetemplateparser.h new file mode 100644 index 0000000..f56dfec --- /dev/null +++ b/linden/indra/llmessage/llmessagetemplateparser.h @@ -0,0 +1,82 @@ +/** + * @file llmessagetemplateparser.h + * @brief Classes to parse message template. + * + * Copyright (c) 2000-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#ifndef LL_MESSAGETEMPLATEPARSER_H +#define LL_MESSAGETEMPLATEPARSER_H + +#include +#include "llmessagetemplate.h" + +class LLTemplateTokenizer +{ +public: + LLTemplateTokenizer(const std::string & contents); + + U32 line() const; + bool atEOF() const; + std::string next(); + + bool want(const std::string & token); + bool wantEOF(); +private: + void inc(); + void dec(); + std::string get() const; + void error(std::string message = "generic") const; + + struct positioned_token + { + std::string str; + U32 line; + }; + + bool mStarted; + std::list mTokens; + std::list::const_iterator mCurrent; +}; + +class LLTemplateParser +{ +public: + typedef std::list::const_iterator message_iterator; + + static LLMessageTemplate * parseMessage(LLTemplateTokenizer & tokens); + static LLMessageBlock * parseBlock(LLTemplateTokenizer & tokens); + static LLMessageVariable * parseVariable(LLTemplateTokenizer & tokens); + + LLTemplateParser(LLTemplateTokenizer & tokens); + message_iterator getMessagesBegin() const; + message_iterator getMessagesEnd() const; + F32 getVersion() const; + +private: + F32 mVersion; + std::list mMessages; +}; + +#endif diff --git a/linden/indra/llmessage/llmsgvariabletype.h b/linden/indra/llmessage/llmsgvariabletype.h index 360d949..59fba7c 100644 --- a/linden/indra/llmessage/llmsgvariabletype.h +++ b/linden/indra/llmessage/llmsgvariabletype.h @@ -1,3 +1,31 @@ +/** + * @file llmsgvariabletype.h + * @brief Declaration of the EMsgVariableType enumeration. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLMSGVARIABLETYPE_H #define LL_LLMSGVARIABLETYPE_H diff --git a/linden/indra/llmessage/llpacketack.cpp b/linden/indra/llmessage/llpacketack.cpp new file mode 100644 index 0000000..27d9916 --- /dev/null +++ b/linden/indra/llmessage/llpacketack.cpp @@ -0,0 +1,84 @@ +/** + * @file llpacketack.cpp + * @author Phoenix + * @date 2007-05-09 + * @brief Implementation of the LLReliablePacket. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include "linden_common.h" +#include "llpacketack.h" + +#if !LL_WINDOWS +#include +#else +#include "winsock2.h" +#endif + +#include "message.h" + +LLReliablePacket::LLReliablePacket( + S32 socket, + U8* buf_ptr, + S32 buf_len, + LLReliablePacketParams* params) : + mBuffer(NULL), + mBufferLength(0) +{ + if (params) + { + mHost = params->mHost; + mRetries = params->mRetries; + mPingBasedRetry = params->mPingBasedRetry; + mTimeout = params->mTimeout; + mCallback = params->mCallback; + mCallbackData = params->mCallbackData; + mMessageName = params->mMessageName; + } + else + { + mRetries = 0; + mPingBasedRetry = TRUE; + mTimeout = 0.f; + mCallback = NULL; + mCallbackData = NULL; + mMessageName = NULL; + } + + mExpirationTime = (F64)((S64)totalTime())/1000000.0 + mTimeout; + mPacketID = ntohl(*((U32*)(&buf_ptr[PHL_PACKET_ID]))); + + mSocket = socket; + if (mRetries) + { + mBuffer = new U8[buf_len]; + if (mBuffer != NULL) + { + memcpy(mBuffer,buf_ptr,buf_len); /*Flawfinder: ignore*/ + mBufferLength = buf_len; + } + + } +} diff --git a/linden/indra/llmessage/llpacketack.h b/linden/indra/llmessage/llpacketack.h index c86fb0f..33fb5a0 100644 --- a/linden/indra/llmessage/llpacketack.h +++ b/linden/indra/llmessage/llpacketack.h @@ -29,37 +29,18 @@ #ifndef LL_LLPACKETACK_H #define LL_LLPACKETACK_H -#include -#include - -#include "llerror.h" -#include "lltimer.h" #include "llhost.h" -//class LLPacketAck -//{ -//public: -// LLHost mHost; -// TPACKETID mPacketID; -//public: -// LLPacketAck(const LLHost &host, TPACKETID packet_id) -// { -// mHost = host; -// mPacketID = packet_id; -// }; -// ~LLPacketAck(){}; -//}; - class LLReliablePacketParams { public: - LLHost mHost; - S32 mRetries; - BOOL mPingBasedRetry; - F32 mTimeout; - void (*mCallback)(void **,S32); - void **mCallbackData; - char *mMessageName; + LLHost mHost; + S32 mRetries; + BOOL mPingBasedRetry; + F32 mTimeout; + void (*mCallback)(void **,S32); + void** mCallbackData; + char* mMessageName; public: LLReliablePacketParams() @@ -80,9 +61,13 @@ public: mMessageName = NULL; }; - void set ( const LLHost &host, S32 retries, BOOL ping_based_retry, - F32 timeout, - void (*callback)(void **,S32), void **callback_data, char *name ) + void set( + const LLHost& host, + S32 retries, + BOOL ping_based_retry, + F32 timeout, + void (*callback)(void**,S32), + void** callback_data, char* name) { mHost = host; mRetries = retries; @@ -97,53 +82,11 @@ public: class LLReliablePacket { public: - LLReliablePacket(S32 socket, U8 *buf_ptr, S32 buf_len, LLReliablePacketParams *params) : - mBuffer(NULL), - mBufferLength(0) - { - if (params) - { - mHost = params->mHost; - mRetries = params->mRetries; - mPingBasedRetry = params->mPingBasedRetry; - mTimeout = params->mTimeout; - mCallback = params->mCallback; - mCallbackData = params->mCallbackData; - mMessageName = params->mMessageName; - } - else - { - mRetries = 0; - mPingBasedRetry = TRUE; - mTimeout = 0.f; - mCallback = NULL; - mCallbackData = NULL; - mMessageName = NULL; - } - - mExpirationTime = (F64)((S64)totalTime())/1000000.0 + mTimeout; - mPacketID = buf_ptr[1] + ((buf_ptr[0] & 0x0f ) * 256); - if (sizeof(TPACKETID) == 4) - { - mPacketID *= 256; - mPacketID += buf_ptr[2]; - mPacketID *= 256; - mPacketID += buf_ptr[3]; - } - - mSocket = socket; - if (mRetries) - { - mBuffer = new U8[buf_len]; - if (mBuffer != NULL) - { - memcpy(mBuffer,buf_ptr,buf_len); /*Flawfinder: ignore*/ - mBufferLength = buf_len; - } - - } - }; - + LLReliablePacket( + S32 socket, + U8* buf_ptr, + S32 buf_len, + LLReliablePacketParams* params); ~LLReliablePacket() { mCallback = NULL; @@ -153,22 +96,21 @@ public: friend class LLCircuitData; protected: - S32 mSocket; - LLHost mHost; - S32 mRetries; - BOOL mPingBasedRetry; - F32 mTimeout; - void (*mCallback)(void **,S32); - void **mCallbackData; - char *mMessageName; - - U8 *mBuffer; - S32 mBufferLength; + S32 mSocket; + LLHost mHost; + S32 mRetries; + BOOL mPingBasedRetry; + F32 mTimeout; + void (*mCallback)(void**,S32); + void** mCallbackData; + char* mMessageName; + + U8* mBuffer; + S32 mBufferLength; - TPACKETID mPacketID; + TPACKETID mPacketID; - F64 mExpirationTime; - + F64 mExpirationTime; }; #endif diff --git a/linden/indra/llmessage/llsdmessagebuilder.cpp b/linden/indra/llmessage/llsdmessagebuilder.cpp index b7deb48..d3dcd5b 100755 --- a/linden/indra/llmessage/llsdmessagebuilder.cpp +++ b/linden/indra/llmessage/llsdmessagebuilder.cpp @@ -1,3 +1,31 @@ +/** + * @file llsdmessagebuilder.cpp + * @brief LLSDMessageBuilder class implementation. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #include "linden_common.h" #include "llsdmessagebuilder.h" @@ -28,13 +56,13 @@ LLSDMessageBuilder::~LLSDMessageBuilder() // virtual -void LLSDMessageBuilder::newMessage(const char *name) +void LLSDMessageBuilder::newMessage(const char* name) { mbSBuilt = FALSE; mbSClear = FALSE; mCurrentMessage = LLSD::emptyMap(); - mCurrentMessageName = (char *)name; + mCurrentMessageName = (char*)name; } // virtual @@ -74,8 +102,10 @@ BOOL LLSDMessageBuilder::removeLastBlock() return FALSE; } -void LLSDMessageBuilder::addBinaryData(const char *varname, - const void *data, S32 size) +void LLSDMessageBuilder::addBinaryData( + const char* varname, + const void* data, + S32 size) { std::vector v; v.resize(size); @@ -83,57 +113,57 @@ void LLSDMessageBuilder::addBinaryData(const char *varname, (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addS8(const char *varname, S8 v) +void LLSDMessageBuilder::addS8(const char* varname, S8 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addU8(const char *varname, U8 v) +void LLSDMessageBuilder::addU8(const char* varname, U8 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addS16(const char *varname, S16 v) +void LLSDMessageBuilder::addS16(const char* varname, S16 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addU16(const char *varname, U16 v) +void LLSDMessageBuilder::addU16(const char* varname, U16 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addF32(const char *varname, F32 v) +void LLSDMessageBuilder::addF32(const char* varname, F32 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addS32(const char *varname, S32 v) +void LLSDMessageBuilder::addS32(const char* varname, S32 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addU32(const char *varname, U32 v) +void LLSDMessageBuilder::addU32(const char* varname, U32 v) { (*mCurrentBlock)[varname] = ll_sd_from_U32(v); } -void LLSDMessageBuilder::addU64(const char *varname, U64 v) +void LLSDMessageBuilder::addU64(const char* varname, U64 v) { (*mCurrentBlock)[varname] = ll_sd_from_U64(v); } -void LLSDMessageBuilder::addF64(const char *varname, F64 v) +void LLSDMessageBuilder::addF64(const char* varname, F64 v) { (*mCurrentBlock)[varname] = v; } -void LLSDMessageBuilder::addIPAddr(const char *varname, U32 v) +void LLSDMessageBuilder::addIPAddr(const char* varname, U32 v) { (*mCurrentBlock)[varname] = ll_sd_from_ipaddr(v); } -void LLSDMessageBuilder::addIPPort(const char *varname, U16 v) +void LLSDMessageBuilder::addIPPort(const char* varname, U16 v) { (*mCurrentBlock)[varname] = v; } @@ -159,27 +189,27 @@ void LLSDMessageBuilder::addString(const char* varname, const std::string& v) (*mCurrentBlock)[varname] = ""; } -void LLSDMessageBuilder::addVector3(const char *varname, const LLVector3& v) +void LLSDMessageBuilder::addVector3(const char* varname, const LLVector3& v) { (*mCurrentBlock)[varname] = ll_sd_from_vector3(v); } -void LLSDMessageBuilder::addVector4(const char *varname, const LLVector4& v) +void LLSDMessageBuilder::addVector4(const char* varname, const LLVector4& v) { (*mCurrentBlock)[varname] = ll_sd_from_vector4(v); } -void LLSDMessageBuilder::addVector3d(const char *varname, const LLVector3d& v) +void LLSDMessageBuilder::addVector3d(const char* varname, const LLVector3d& v) { (*mCurrentBlock)[varname] = ll_sd_from_vector3d(v); } -void LLSDMessageBuilder::addQuat(const char *varname, const LLQuaternion& v) +void LLSDMessageBuilder::addQuat(const char* varname, const LLQuaternion& v) { (*mCurrentBlock)[varname] = ll_sd_from_quaternion(v); } -void LLSDMessageBuilder::addUUID(const char *varname, const LLUUID& v) +void LLSDMessageBuilder::addUUID(const char* varname, const LLUUID& v) { (*mCurrentBlock)[varname] = v; } @@ -193,9 +223,7 @@ BOOL LLSDMessageBuilder::isMessageFull(const char* blockname) const return FALSE; } -// make sure that all the desired data is in place and then copy the data -// into MAX_BUFFER_SIZEd buffer -U32 LLSDMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) +U32 LLSDMessageBuilder::buildMessage(U8*, U32, U8) { return 0; } @@ -205,7 +233,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data) // copy the blocks // counting variables used to encode multiple block info S32 block_count = 0; - char *block_name = NULL; + char* block_name = NULL; // loop through msg blocks to loop through variables, totalling up size // data and filling the new (send) message @@ -222,7 +250,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data) if (block_count == 0) { block_count = mbci->mBlockNumber; - block_name = (char *)mbci->mName; + block_name = (char*)mbci->mName; } // counting down mutliple blocks @@ -248,7 +276,7 @@ void LLSDMessageBuilder::copyFromMessageData(const LLMsgData& data) void LLSDMessageBuilder::copyFromLLSD(const LLSD& msg) { mCurrentMessage = msg; - llinfos << LLSDXMLStreamer(mCurrentMessage) << llendl; + lldebugs << LLSDXMLStreamer(mCurrentMessage) << llendl; } const LLSD& LLSDMessageBuilder::getMessage() const diff --git a/linden/indra/llmessage/llsdmessagebuilder.h b/linden/indra/llmessage/llsdmessagebuilder.h index f04194d..8ea7763 100755 --- a/linden/indra/llmessage/llsdmessagebuilder.h +++ b/linden/indra/llmessage/llsdmessagebuilder.h @@ -1,3 +1,31 @@ +/** + * @file llsdmessagebuilder.h + * @brief Declaration of LLSDMessageBuilder class. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLSDMESSAGEBUILDER_H #define LL_LLSDMESSAGEBUILDER_H @@ -19,31 +47,33 @@ public: LLSDMessageBuilder(); virtual ~LLSDMessageBuilder(); - virtual void newMessage(const char *name); + virtual void newMessage(const char* name); virtual void nextBlock(const char* blockname); virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror... /** All add* methods expect pointers to canonical varname strings. */ - virtual void addBinaryData(const char *varname, const void *data, - S32 size); + virtual void addBinaryData( + const char* varname, + const void* data, + S32 size); virtual void addBOOL(const char* varname, BOOL b); - virtual void addS8(const char *varname, S8 s); - virtual void addU8(const char *varname, U8 u); - virtual void addS16(const char *varname, S16 i); - virtual void addU16(const char *varname, U16 i); - virtual void addF32(const char *varname, F32 f); - virtual void addS32(const char *varname, S32 s); - virtual void addU32(const char *varname, U32 u); - virtual void addU64(const char *varname, U64 lu); - virtual void addF64(const char *varname, F64 d); - virtual void addVector3(const char *varname, const LLVector3& vec); - virtual void addVector4(const char *varname, const LLVector4& vec); - virtual void addVector3d(const char *varname, const LLVector3d& vec); - virtual void addQuat(const char *varname, const LLQuaternion& quat); - virtual void addUUID(const char *varname, const LLUUID& uuid); - virtual void addIPAddr(const char *varname, const U32 ip); - virtual void addIPPort(const char *varname, const U16 port); + virtual void addS8(const char* varname, S8 s); + virtual void addU8(const char* varname, U8 u); + virtual void addS16(const char* varname, S16 i); + virtual void addU16(const char* varname, U16 i); + virtual void addF32(const char* varname, F32 f); + virtual void addS32(const char* varname, S32 s); + virtual void addU32(const char* varname, U32 u); + virtual void addU64(const char* varname, U64 lu); + virtual void addF64(const char* varname, F64 d); + virtual void addVector3(const char* varname, const LLVector3& vec); + virtual void addVector4(const char* varname, const LLVector4& vec); + virtual void addVector3d(const char* varname, const LLVector3d& vec); + virtual void addQuat(const char* varname, const LLQuaternion& quat); + virtual void addUUID(const char* varname, const LLUUID& uuid); + virtual void addIPAddr(const char* varname, const U32 ip); + virtual void addIPPort(const char* varname, const U16 port); virtual void addString(const char* varname, const char* s); virtual void addString(const char* varname, const std::string& s); @@ -52,8 +82,8 @@ public: virtual BOOL isBuilt() const; virtual BOOL isClear() const; - virtual U32 buildMessage(U8* buffer, U32 buffer_size); - /**< Return built message size */ + virtual U32 buildMessage(U8* buffer, U32 buffer_size, U8 offset_to_data); + /**< Null implementation which returns 0. */ virtual void clearMessage(); diff --git a/linden/indra/llmessage/llsdmessagereader.cpp b/linden/indra/llmessage/llsdmessagereader.cpp index 6312bee..6742edb 100755 --- a/linden/indra/llmessage/llsdmessagereader.cpp +++ b/linden/indra/llmessage/llsdmessagereader.cpp @@ -1,7 +1,38 @@ +/** + * @file llsdmessagereader.cpp + * @brief LLSDMessageReader class implementation. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + +#include "linden_common.h" + #include "llsdmessagereader.h" -#include "llsdutil.h" + #include "llmessagebuilder.h" #include "llsdmessagebuilder.h" +#include "llsdutil.h" LLSDMessageReader::LLSDMessageReader() { @@ -15,11 +46,30 @@ LLSDMessageReader::~LLSDMessageReader() LLSD getLLSD(const LLSD& input, const char* block, const char* var, S32 blocknum) { - if(input[block].isArray()) + // babbage: log error to llerrs if variable not found to mimic + // LLTemplateMessageReader::getData behaviour + if(NULL == block) + { + llerrs << "NULL block name" << llendl; + return LLSD(); + } + if(NULL == var) + { + llerrs << "NULL var name" << llendl; + return LLSD(); + } + if(! input[block].isArray()) { - return input[block][blocknum][var]; + llerrs << "block " << block << " not found" << llendl; + return LLSD(); } - return LLSD(); + + LLSD result = input[block][blocknum][var]; + if(result.isUndefined()) + { + llerrs << "var " << var << " not found" << llendl; + } + return result; } //virtual @@ -167,8 +217,12 @@ void LLSDMessageReader::getIPPort(const char *block, const char *var, void LLSDMessageReader::getString(const char *block, const char *var, S32 buffer_size, char *buffer, S32 blocknum) { + if(buffer_size <= 0) + { + llwarns << "buffer_size <= 0" << llendl; + return; + } std::string data = getLLSD(mMessage, block, var, blocknum); - S32 data_size = data.size(); if (data_size >= buffer_size) { @@ -241,7 +295,7 @@ void LLSDMessageReader::clearMessage() //virtual const char* LLSDMessageReader::getMessageName() const { - return mMessageName.c_str(); + return mMessageName; } // virtual @@ -256,7 +310,7 @@ void LLSDMessageReader::copyToBuilder(LLMessageBuilder& builder) const builder.copyFromLLSD(mMessage); } -void LLSDMessageReader::setMessage(const std::string& name, const LLSD& message) +void LLSDMessageReader::setMessage(const char* name, const LLSD& message) { mMessageName = name; // TODO: Validate diff --git a/linden/indra/llmessage/llsdmessagereader.h b/linden/indra/llmessage/llsdmessagereader.h index 5785194..d6d9f3d 100755 --- a/linden/indra/llmessage/llsdmessagereader.h +++ b/linden/indra/llmessage/llsdmessagereader.h @@ -69,10 +69,11 @@ public: virtual void copyToBuilder(LLMessageBuilder&) const; - void setMessage(const std::string& name, const LLSD& msg); + /** Expects a pointer to a canonical name string */ + void setMessage(const char* name, const LLSD& msg); private: - std::string mMessageName; + const char* mMessageName; // Canonical (prehashed) string. LLSD mMessage; }; diff --git a/linden/indra/llmessage/lltemplatemessagebuilder.cpp b/linden/indra/llmessage/lltemplatemessagebuilder.cpp index 806f034..9473343 100644 --- a/linden/indra/llmessage/lltemplatemessagebuilder.cpp +++ b/linden/indra/llmessage/lltemplatemessagebuilder.cpp @@ -1,3 +1,31 @@ +/** + * @file lltemplatemessagebuilder.cpp + * @brief LLTemplateMessageBuilder class implementation. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #include "linden_common.h" #include "lltemplatemessagebuilder.h" @@ -41,28 +69,30 @@ void LLTemplateMessageBuilder::newMessage(const char *name) delete mCurrentSMessageData; mCurrentSMessageData = NULL; - char *namep = (char *)name; - + char* namep = (char*)name; if (mMessageTemplates.count(namep) > 0) { mCurrentSMessageTemplate = mMessageTemplates[namep]; - if (mCurrentSMessageData) - { - delete mCurrentSMessageData; - } mCurrentSMessageData = new LLMsgData(namep); mCurrentSMessageName = namep; mCurrentSDataBlock = NULL; mCurrentSBlockName = NULL; // add at one of each block - LLMessageTemplate* msg_template = mMessageTemplates[namep]; - for (LLMessageTemplate::message_block_map_t::iterator iter = msg_template->mMemberBlocks.begin(); - iter != msg_template->mMemberBlocks.end(); iter++) + const LLMessageTemplate* msg_template = mMessageTemplates[namep]; + + if (msg_template->getDeprecation() != MD_NOTDEPRECATED) { - LLMessageBlock* ci = iter->second; - LLMsgBlkData *tblockp; - tblockp = new LLMsgBlkData(ci->mName, 0); + llwarns << "Sending deprecated message " << namep << llendl; + } + + LLMessageTemplate::message_block_map_t::const_iterator iter; + for(iter = msg_template->mMemberBlocks.begin(); + iter != msg_template->mMemberBlocks.end(); + ++iter) + { + LLMessageBlock* ci = *iter; + LLMsgBlkData* tblockp = new LLMsgBlkData(ci->mName, 0); mCurrentSMessageData->addBlock(tblockp); } } @@ -102,16 +132,14 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname) } // now, does this block exist? - LLMessageTemplate::message_block_map_t::iterator temp_iter = mCurrentSMessageTemplate->mMemberBlocks.find(bnamep); - if (temp_iter == mCurrentSMessageTemplate->mMemberBlocks.end()) + const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(bnamep); + if (!template_data) { llerrs << "LLTemplateMessageBuilder::nextBlock " << bnamep << " not a block in " << mCurrentSMessageTemplate->mName << llendl; return; } - LLMessageBlock* template_data = temp_iter->second; - // ok, have we already set this block? LLMsgBlkData* block_data = mCurrentSMessageData->mMemberBlocks[bnamep]; if (block_data->mBlockNumber == 0) @@ -122,10 +150,10 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname) mCurrentSBlockName = bnamep; // add placeholders for each of the variables - for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin(); + for (LLMessageBlock::message_variable_map_t::const_iterator iter = template_data->mMemberVariables.begin(); iter != template_data->mMemberVariables.end(); iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = **iter; mCurrentSDataBlock->addVariable(ci.getName(), ci.getType()); } return; @@ -181,12 +209,12 @@ void LLTemplateMessageBuilder::nextBlock(const char* blockname) mCurrentSMessageData->mMemberBlocks[nbnamep] = mCurrentSDataBlock; // add placeholders for each of the variables - for (LLMessageBlock::message_variable_map_t::iterator + for (LLMessageBlock::message_variable_map_t::const_iterator iter = template_data->mMemberVariables.begin(), end = template_data->mMemberVariables.end(); iter != end; iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = **iter; mCurrentSDataBlock->addVariable(ci.getName(), ci.getType()); } return; @@ -211,12 +239,12 @@ BOOL LLTemplateMessageBuilder::removeLastBlock() // Decrement the sent total by the size of the // data in the message block that we're currently building. - LLMessageBlock* template_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]; + const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName); - for (LLMessageBlock::message_variable_map_t::iterator iter = template_data->mMemberVariables.begin(); + for (LLMessageBlock::message_variable_map_t::const_iterator iter = template_data->mMemberVariables.begin(); iter != template_data->mMemberVariables.end(); iter++) { - LLMessageVariable& ci = *(iter->second); + LLMessageVariable& ci = **iter; mCurrentSendTotal -= ci.getSize(); } @@ -276,7 +304,7 @@ void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EM } // kewl, add the data if it exists - LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep]; + const LLMessageVariable* var_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName)->getVariable(vnamep); if (!var_data || !var_data->getName()) { llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl; @@ -336,7 +364,7 @@ void LLTemplateMessageBuilder::addData(const char *varname, const void *data, EM } // kewl, add the data if it exists - LLMessageVariable* var_data = mCurrentSMessageTemplate->mMemberBlocks[mCurrentSBlockName]->mMemberVariables[vnamep]; + const LLMessageVariable* var_data = mCurrentSMessageTemplate->getBlock(mCurrentSBlockName)->getVariable(vnamep); if (!var_data->getName()) { llerrs << vnamep << " not a variable in block " << mCurrentSBlockName << " of " << mCurrentSMessageTemplate->mName << llendl; @@ -484,7 +512,7 @@ static S32 zero_code(U8 **data, U32 *data_size) // skip the packet id field - for (U32 i=0;imMemberBlocks[bnamep]; + const LLMessageBlock* template_data = mCurrentSMessageTemplate->getBlock(bnamep); switch(template_data->mType) { @@ -593,138 +621,59 @@ BOOL LLTemplateMessageBuilder::isMessageFull(const char* blockname) const return FALSE; } - -// make sure that all the desired data is in place and then copy the data into MAX_BUFFER_SIZEd buffer -U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) +static S32 buildBlock(U8* buffer, S32 buffer_size, const LLMessageBlock* template_data, LLMsgData* message_data) { - // basic algorithm is to loop through the various pieces, building - // size and offset info if we encounter a -1 for mSize at any - // point that variable wasn't given data - - // do we have a current message? - if (!mCurrentSMessageTemplate) - { - llerrs << "newMessage not called prior to buildMessage" << llendl; - return 0; - } - - // zero out some useful values - - // leave room for circuit counter - U32 result = LL_PACKET_ID_SIZE; - - // encode message number and adjust total_offset - if (mCurrentSMessageTemplate->mFrequency == MFT_HIGH) - { -// old, endian-dependant way -// memcpy(&buffer[result], &mCurrentMessageTemplate->mMessageNumber, sizeof(U8)); - -// new, independant way - buffer[result] = (U8)mCurrentSMessageTemplate->mMessageNumber; - result += sizeof(U8); - } - else if (mCurrentSMessageTemplate->mFrequency == MFT_MEDIUM) - { - U8 temp = 255; - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - - // mask off unsightly bits - temp = mCurrentSMessageTemplate->mMessageNumber & 255; - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - } - else if (mCurrentSMessageTemplate->mFrequency == MFT_LOW) - { - U8 temp = 255; - U16 message_num; - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ - result += sizeof(U8); - - // mask off unsightly bits - message_num = mCurrentSMessageTemplate->mMessageNumber & 0xFFFF; - - // convert to network byte order - message_num = htons(message_num); - memcpy(&buffer[result], &message_num, sizeof(U16)); /*Flawfinder: ignore*/ - result += sizeof(U16); - } - else - { - llerrs << "unexpected message frequency in buildMessage" << llendl; - return 0; + S32 result = 0; + LLMsgData::msg_blk_data_map_t::const_iterator block_iter = message_data->mMemberBlocks.find(template_data->mName); + const LLMsgBlkData* mbci = block_iter->second; + + // ok, if this is the first block of a repeating pack, set + // block_count and, if it's type MBT_VARIABLE encode a byte + // for how many there are + S32 block_count = mbci->mBlockNumber; + if (template_data->mType == MBT_VARIABLE) + { + // remember that mBlockNumber is a S32 + U8 temp_block_number = (U8)mbci->mBlockNumber; + if ((S32)(result + sizeof(U8)) < MAX_BUFFER_SIZE) + { + memcpy(&buffer[result], &temp_block_number, sizeof(U8)); + result += sizeof(U8); + } + else + { + // Just reporting error is likely not enough. Need + // to check how to abort or error out gracefully + // from this function. XXXTBD + llerrs << "buildBlock failed. Message excedding " + << "sendBuffersize." << llendl; + } } - - // counting variables used to encode multiple block info - S32 block_count = 0; - U8 temp_block_number; - - // loop through msg blocks to loop through variables, - // totalling up size data and copying into buffer - for (LLMsgData::msg_blk_data_map_t::iterator - iter = mCurrentSMessageData->mMemberBlocks.begin(), - end = mCurrentSMessageData->mMemberBlocks.end(); - iter != end; iter++) + else if (template_data->mType == MBT_MULTIPLE) { - LLMsgBlkData* mbci = iter->second; - // do we need to encode a block code? - if (block_count == 0) + if (block_count != template_data->mNumber) { - block_count = mbci->mBlockNumber; - - LLMessageBlock* template_data = - mCurrentSMessageTemplate->mMemberBlocks[mbci->mName]; - - // ok, if this is the first block of a repeating pack, set - // block_count and, if it's type MBT_VARIABLE encode a byte - // for how many there are - if (template_data->mType == MBT_VARIABLE) - { - // remember that mBlockNumber is a S32 - temp_block_number = (U8)mbci->mBlockNumber; - if ((S32)(result + sizeof(U8)) < MAX_BUFFER_SIZE) - { - memcpy(&buffer[result], &temp_block_number, sizeof(U8)); - result += sizeof(U8); - } - else - { - // Just reporting error is likely not enough. Need - // to check how to abort or error out gracefully - // from this function. XXXTBD - llerrs << "buildMessage failed. Message excedding " - << "sendBuffersize." << llendl; - } - } - else if (template_data->mType == MBT_MULTIPLE) - { - if (block_count != template_data->mNumber) - { - // nope! need to fill it in all the way! - llerrs << "Block " << mbci->mName - << " is type MBT_MULTIPLE but only has data for " - << block_count << " out of its " - << template_data->mNumber << " blocks" << llendl; - } - } + // nope! need to fill it in all the way! + llerrs << "Block " << mbci->mName + << " is type MBT_MULTIPLE but only has data for " + << block_count << " out of its " + << template_data->mNumber << " blocks" << llendl; } + } - // counting down multiple blocks - block_count--; - + while(block_count > 0) + { // now loop through the variables - for (LLMsgBlkData::msg_var_data_map_t::iterator iter = mbci->mMemberVarData.begin(); + for (LLMsgBlkData::msg_var_data_map_t::const_iterator iter = mbci->mMemberVarData.begin(); iter != mbci->mMemberVarData.end(); iter++) { - LLMsgVarData& mvci = *iter; + const LLMsgVarData& mvci = *iter; if (mvci.getSize() == -1) { // oops, this variable wasn't ever set! llerrs << "The variable " << mvci.getName() << " in block " << mbci->mName << " of message " - << mCurrentSMessageData->mName + << template_data->mName << " wasn't set prior to buildMessage call" << llendl; } else @@ -774,7 +723,7 @@ U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) // Just reporting error is likely not // enough. Need to check how to abort or error // out gracefully from this function. XXXTBD - llerrs << "LLMessageSystem::buildMessage failed. " + llerrs << "buildBlock failed. " << "Attempted to pack " << result + mvci.getSize() << " bytes into a buffer with size " @@ -783,6 +732,94 @@ U32 LLTemplateMessageBuilder::buildMessage(U8* buffer, U32 buffer_size) } } } + + --block_count; + ++block_iter; + if (block_iter != message_data->mMemberBlocks.end()) + { + mbci = block_iter->second; + } + } + + return result; +} + + +// make sure that all the desired data is in place and then copy the data into MAX_BUFFER_SIZEd buffer +U32 LLTemplateMessageBuilder::buildMessage( + U8* buffer, + U32 buffer_size, + U8 offset_to_data) +{ + // basic algorithm is to loop through the various pieces, building + // size and offset info if we encounter a -1 for mSize at any + // point that variable wasn't given data + + // do we have a current message? + if (!mCurrentSMessageTemplate) + { + llerrs << "newMessage not called prior to buildMessage" << llendl; + return 0; + } + + // leave room for flags, packet sequence #, and data offset + // information. + buffer[PHL_OFFSET] = offset_to_data; + U32 result = LL_PACKET_ID_SIZE; + + // encode message number and adjust total_offset + if (mCurrentSMessageTemplate->mFrequency == MFT_HIGH) + { +// old, endian-dependant way +// memcpy(&buffer[result], &mCurrentMessageTemplate->mMessageNumber, sizeof(U8)); + +// new, independant way + buffer[result] = (U8)mCurrentSMessageTemplate->mMessageNumber; + result += sizeof(U8); + } + else if (mCurrentSMessageTemplate->mFrequency == MFT_MEDIUM) + { + U8 temp = 255; + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + + // mask off unsightly bits + temp = mCurrentSMessageTemplate->mMessageNumber & 255; + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + } + else if (mCurrentSMessageTemplate->mFrequency == MFT_LOW) + { + U8 temp = 255; + U16 message_num; + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + memcpy(&buffer[result], &temp, sizeof(U8)); /*Flawfinder: ignore*/ + result += sizeof(U8); + + // mask off unsightly bits + message_num = mCurrentSMessageTemplate->mMessageNumber & 0xFFFF; + + // convert to network byte order + message_num = htons(message_num); + memcpy(&buffer[result], &message_num, sizeof(U16)); /*Flawfinder: ignore*/ + result += sizeof(U16); + } + else + { + llerrs << "unexpected message frequency in buildMessage" << llendl; + return 0; + } + + // fast forward through the offset and build the message + result += offset_to_data; + for(LLMessageTemplate::message_block_map_t::const_iterator + iter = mCurrentSMessageTemplate->mMemberBlocks.begin(), + end = mCurrentSMessageTemplate->mMemberBlocks.end(); + iter != end; + ++iter) + { + result += buildBlock(buffer + result, buffer_size - result, *iter, mCurrentSMessageData); } mbSBuilt = TRUE; diff --git a/linden/indra/llmessage/lltemplatemessagebuilder.h b/linden/indra/llmessage/lltemplatemessagebuilder.h index ae53328..40a2f0d 100644 --- a/linden/indra/llmessage/lltemplatemessagebuilder.h +++ b/linden/indra/llmessage/lltemplatemessagebuilder.h @@ -1,3 +1,31 @@ +/** + * @file lltemplatemessagebuilder.h + * @brief Declaration of LLTemplateMessageBuilder class. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLTEMPLATEMESSAGEBUILDER_H #define LL_LLTEMPLATEMESSAGEBUILDER_H @@ -15,12 +43,12 @@ class LLTemplateMessageBuilder : public LLMessageBuilder { public: - typedef std::map message_template_name_map_t; + typedef std::map message_template_name_map_t; LLTemplateMessageBuilder(message_template_name_map_t&); virtual ~LLTemplateMessageBuilder(); - virtual void newMessage(const char *name); + virtual void newMessage(const char* name); virtual void nextBlock(const char* blockname); virtual BOOL removeLastBlock(); // TODO: babbage: remove this horror... @@ -29,22 +57,22 @@ public: virtual void addBinaryData(const char *varname, const void *data, S32 size); virtual void addBOOL(const char* varname, BOOL b); - virtual void addS8(const char *varname, S8 s); - virtual void addU8(const char *varname, U8 u); - virtual void addS16(const char *varname, S16 i); - virtual void addU16(const char *varname, U16 i); - virtual void addF32(const char *varname, F32 f); - virtual void addS32(const char *varname, S32 s); - virtual void addU32(const char *varname, U32 u); - virtual void addU64(const char *varname, U64 lu); - virtual void addF64(const char *varname, F64 d); - virtual void addVector3(const char *varname, const LLVector3& vec); - virtual void addVector4(const char *varname, const LLVector4& vec); - virtual void addVector3d(const char *varname, const LLVector3d& vec); - virtual void addQuat(const char *varname, const LLQuaternion& quat); - virtual void addUUID(const char *varname, const LLUUID& uuid); - virtual void addIPAddr(const char *varname, const U32 ip); - virtual void addIPPort(const char *varname, const U16 port); + virtual void addS8(const char* varname, S8 s); + virtual void addU8(const char* varname, U8 u); + virtual void addS16(const char* varname, S16 i); + virtual void addU16(const char* varname, U16 i); + virtual void addF32(const char* varname, F32 f); + virtual void addS32(const char* varname, S32 s); + virtual void addU32(const char* varname, U32 u); + virtual void addU64(const char* varname, U64 lu); + virtual void addF64(const char* varname, F64 d); + virtual void addVector3(const char* varname, const LLVector3& vec); + virtual void addVector4(const char* varname, const LLVector4& vec); + virtual void addVector3d(const char* varname, const LLVector3d& vec); + virtual void addQuat(const char* varname, const LLQuaternion& quat); + virtual void addUUID(const char* varname, const LLUUID& uuid); + virtual void addIPAddr(const char* varname, const U32 ip); + virtual void addIPPort(const char* varname, const U16 port); virtual void addString(const char* varname, const char* s); virtual void addString(const char* varname, const std::string& s); @@ -53,7 +81,7 @@ public: virtual BOOL isBuilt() const; virtual BOOL isClear() const; - virtual U32 buildMessage(U8* buffer, U32 buffer_size); + virtual U32 buildMessage(U8* buffer, U32 buffer_size, U8 offset_to_data); /**< Return built message size */ virtual void clearMessage(); @@ -68,14 +96,14 @@ public: virtual void copyFromLLSD(const LLSD&); private: - void addData(const char *varname, const void *data, + void addData(const char* varname, const void* data, EMsgVariableType type, S32 size); - void addData(const char *varname, const void *data, + void addData(const char* varname, const void* data, EMsgVariableType type); LLMsgData* mCurrentSMessageData; - LLMessageTemplate* mCurrentSMessageTemplate; + const LLMessageTemplate* mCurrentSMessageTemplate; LLMsgBlkData* mCurrentSDataBlock; char* mCurrentSMessageName; char* mCurrentSBlockName; diff --git a/linden/indra/llmessage/lltemplatemessagereader.cpp b/linden/indra/llmessage/lltemplatemessagereader.cpp index bb3f4f4..a1f5213 100644 --- a/linden/indra/llmessage/lltemplatemessagereader.cpp +++ b/linden/indra/llmessage/lltemplatemessagereader.cpp @@ -1,3 +1,31 @@ +/** + * @file lltemplatemessagereader.cpp + * @brief LLTemplateMessageReader class implementation. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #include "lltemplatemessagereader.h" #include "llfasttimer.h" @@ -53,7 +81,7 @@ void LLTemplateMessageReader::getData(const char *blockname, const char *varname char *bnamep = (char *)blockname + blocknum; // this works because it's just a hash. The bnamep is never derefference char *vnamep = (char *)varname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -135,7 +163,7 @@ S32 LLTemplateMessageReader::getNumberOfBlocks(const char *blockname) char *bnamep = (char *)blockname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -165,7 +193,7 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, const char *varname) char *bnamep = (char *)blockname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -214,7 +242,7 @@ S32 LLTemplateMessageReader::getSize(const char *blockname, S32 blocknum, const char *bnamep = (char *)blockname + blocknum; char *vnamep = (char *)varname; - LLMsgData::msg_blk_data_map_t::iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); + LLMsgData::msg_blk_data_map_t::const_iterator iter = mCurrentRMessageData->mMemberBlocks.find(bnamep); if (iter == mCurrentRMessageData->mMemberBlocks.end()) { @@ -497,16 +525,21 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender llassert( !mCurrentRMessageData ); delete mCurrentRMessageData; // just to make sure - S32 decode_pos = LL_PACKET_ID_SIZE + (S32)(mCurrentRMessageTemplate->mFrequency); + // The offset tells us how may bytes to skip after the end of the + // message name. + U8 offset = buffer[PHL_OFFSET]; + S32 decode_pos = LL_PACKET_ID_SIZE + (S32)(mCurrentRMessageTemplate->mFrequency) + offset; // create base working data set mCurrentRMessageData = new LLMsgData(mCurrentRMessageTemplate->mName); // loop through the template building the data structure as we go - for (LLMessageTemplate::message_block_map_t::iterator iter = mCurrentRMessageTemplate->mMemberBlocks.begin(); - iter != mCurrentRMessageTemplate->mMemberBlocks.end(); iter++) + LLMessageTemplate::message_block_map_t::const_iterator iter; + for(iter = mCurrentRMessageTemplate->mMemberBlocks.begin(); + iter != mCurrentRMessageTemplate->mMemberBlocks.end(); + ++iter) { - LLMessageBlock* mbci = iter->second; + LLMessageBlock* mbci = *iter; U8 repeat_number; S32 i; @@ -528,11 +561,16 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender // repeat number is a single byte if (decode_pos >= mReceiveSize) { - logRanOffEndOfPacket( sender ); - return FALSE; + logRanOffEndOfPacket(sender); + + // default to 0 repeats + repeat_number = 0; + } + else + { + repeat_number = buffer[decode_pos]; + decode_pos++; } - repeat_number = buffer[decode_pos]; - decode_pos++; } else { @@ -561,10 +599,12 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender mCurrentRMessageData->addBlock(cur_data_block); // now read the variables - for (LLMessageBlock::message_variable_map_t::iterator iter = mbci->mMemberVariables.begin(); + for (LLMessageBlock::message_variable_map_t::const_iterator iter = + mbci->mMemberVariables.begin(); iter != mbci->mMemberVariables.end(); iter++) { - LLMessageVariable& mvci = *(iter->second); + const LLMessageVariable& mvci = **iter; + // ok, build out the variables // add variable block cur_data_block->addVariable(mvci.getName(), mvci.getType()); @@ -580,34 +620,33 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender if ((decode_pos + data_size) > mReceiveSize) { - logRanOffEndOfPacket( sender ); - return FALSE; + logRanOffEndOfPacket(sender); + + // default to 0 length variable blocks + tsize = 0; } - switch(data_size) + else { - case 1: - htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1); - tsize = tsizeb; - break; - case 2: - htonmemcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2); - tsize = tsizeh; - break; - case 4: - htonmemcpy(&tsize, &buffer[decode_pos], MVT_U32, 4); - break; - default: - llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl; - break; - + switch(data_size) + { + case 1: + htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1); + tsize = tsizeb; + break; + case 2: + htonmemcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2); + tsize = tsizeh; + break; + case 4: + htonmemcpy(&tsize, &buffer[decode_pos], MVT_U32, 4); + break; + default: + llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl; + break; + } } decode_pos += data_size; - if ((decode_pos + (S32)tsize) > mReceiveSize) - { - logRanOffEndOfPacket( sender ); - return FALSE; - } cur_data_block->addData(mvci.getName(), &buffer[decode_pos], tsize, mvci.getType()); decode_pos += tsize; } @@ -615,14 +654,24 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender { // fixed! // so, copy data pointer and set data size to fixed size - if ((decode_pos + mvci.getSize()) > mReceiveSize) { - logRanOffEndOfPacket( sender ); - return FALSE; + logRanOffEndOfPacket(sender); + + // default to 0s. + U32 size = mvci.getSize(); + std::vector data(size); + memset(&(data[0]), 0, size); + cur_data_block->addData(mvci.getName(), &(data[0]), + size, mvci.getType()); + } + else + { + cur_data_block->addData(mvci.getName(), + &buffer[decode_pos], + mvci.getSize(), + mvci.getType()); } - - cur_data_block->addData(mvci.getName(), &buffer[decode_pos], mvci.getSize(), mvci.getType()); decode_pos += mvci.getSize(); } } @@ -644,11 +693,6 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender decode_timer.reset(); } - // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion ) - // { - // VTResume(); // VTune - // } - { LLFastTimer t(LLFastTimer::FTM_PROCESS_MESSAGES); if( !mCurrentRMessageTemplate->callHandlerFunc(gMessageSystem) ) @@ -657,11 +701,6 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender } } - // if( mCurrentRMessageTemplate->mName == _PREHASH_AgentToNewRegion ) - // { - // VTPause(); // VTune - // } - if(LLMessageReader::getTimeDecodes() || gMessageSystem->getTimingCallback()) { F32 decode_time = decode_timer.getElapsedTimeF32(); @@ -723,8 +762,12 @@ BOOL LLTemplateMessageReader::readMessage(const U8* buffer, //virtual const char* LLTemplateMessageReader::getMessageName() const { - static char empty_string[] = ""; - return mCurrentRMessageTemplate ? mCurrentRMessageTemplate->mName : empty_string; + if (!mCurrentRMessageTemplate) + { + llwarns << "no mCurrentRMessageTemplate" << llendl; + return ""; + } + return mCurrentRMessageTemplate->mName; } //virtual diff --git a/linden/indra/llmessage/lltemplatemessagereader.h b/linden/indra/llmessage/lltemplatemessagereader.h index dd5ee39..86d4ab6 100644 --- a/linden/indra/llmessage/lltemplatemessagereader.h +++ b/linden/indra/llmessage/lltemplatemessagereader.h @@ -1,3 +1,31 @@ +/** + * @file lltemplatemessagereader.h + * @brief Declaration of LLTemplateMessageReader class. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ + #ifndef LL_LLTEMPLATEMESSAGEREADER_H #define LL_LLTEMPLATEMESSAGEREADER_H diff --git a/linden/indra/llmessage/lltransfermanager.cpp b/linden/indra/llmessage/lltransfermanager.cpp index f42ce45..3de08c6 100644 --- a/linden/indra/llmessage/lltransfermanager.cpp +++ b/linden/indra/llmessage/lltransfermanager.cpp @@ -601,34 +601,6 @@ void LLTransferManager::processTransferAbort(LLMessageSystem *msgp, void **) //static -void LLTransferManager::processTransferPriority(LLMessageSystem *msgp, void **) -{ - //llinfos << "LLTransferManager::processTransferPacket" << llendl; - - LLUUID transfer_id; - LLTransferChannelType channel_type; - F32 priority = 0.f; - msgp->getUUID("TransferInfo", "TransferID", transfer_id); - msgp->getS32("TransferInfo", "ChannelType", (S32 &)channel_type); - msgp->getF32("TransferInfo", "Priority", priority); - - // Hmm, not a target. Maybe it's a source. - LLTransferSourceChannel *tscp = gTransferManager.getSourceChannel(msgp->getSender(), channel_type); - if (tscp) - { - LLTransferSource *tsp = tscp->findTransferSource(transfer_id); - if (tsp) - { - tscp->updatePriority(tsp, priority); - return; - } - } - - llwarns << "Couldn't find transfer " << transfer_id << " to set priority!" << llendl; -} - - -//static void LLTransferManager::reliablePacketCallback(void **user_data, S32 result) { LLUUID *transfer_idp = (LLUUID *)user_data; diff --git a/linden/indra/llmessage/lltransfermanager.h b/linden/indra/llmessage/lltransfermanager.h index 81a0221..d063156 100644 --- a/linden/indra/llmessage/lltransfermanager.h +++ b/linden/indra/llmessage/lltransfermanager.h @@ -129,7 +129,6 @@ public: static void processTransferInfo(LLMessageSystem *mesgsys, void **); static void processTransferPacket(LLMessageSystem *mesgsys, void **); static void processTransferAbort(LLMessageSystem *mesgsys, void **); - static void processTransferPriority(LLMessageSystem *mesgsys, void **); static void reliablePacketCallback(void **, S32 result); diff --git a/linden/indra/llmessage/message.cpp b/linden/indra/llmessage/message.cpp index d1c2875..01dce40 100644 --- a/linden/indra/llmessage/message.cpp +++ b/linden/indra/llmessage/message.cpp @@ -67,9 +67,12 @@ #include "lltemplatemessagebuilder.h" #include "lltemplatemessagereader.h" #include "llmessagetemplate.h" +#include "llmessagetemplateparser.h" #include "llsd.h" #include "llsdmessagebuilder.h" #include "llsdmessagereader.h" +#include "llsdserialize.h" +#include "llstring.h" #include "lltransfermanager.h" #include "lluuid.h" #include "llxfermanager.h" @@ -100,220 +103,28 @@ public: apr_pollfd_t mPollFD; }; -// Lets support a small subset of regular expressions here -// Syntax is a string made up of: -// a - checks against alphanumeric ([A-Za-z0-9]) -// c - checks against character ([A-Za-z]) -// f - checks against first variable character ([A-Za-z_]) -// v - checks against variable ([A-Za-z0-9_]) -// s - checks against sign of integer ([-0-9]) -// d - checks against integer digit ([0-9]) -// * - repeat last check - -// checks 'a' -BOOL b_return_alphanumeric_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z')) - &&( (c < '0') - ||(c > '9'))) - { - return FALSE; - } - return TRUE; -} - -// checks 'c' -BOOL b_return_character_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z'))) - { - return FALSE; - } - return TRUE; -} - -// checks 'f' -BOOL b_return_first_variable_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z')) - &&(c != '_')) - { - return FALSE; - } - return TRUE; -} - -// checks 'v' -BOOL b_return_variable_ok(char c) -{ - if ( ( (c < 'A') - ||(c > 'Z')) - &&( (c < 'a') - ||(c > 'z')) - &&( (c < '0') - ||(c > '9')) - &&(c != '_')) - { - return FALSE; - } - return TRUE; -} - -// checks 's' -BOOL b_return_signed_integer_ok(char c) -{ - if ( ( (c < '0') - ||(c > '9')) - &&(c != '-')) - { - return FALSE; - } - return TRUE; -} - -// checks 'd' -BOOL b_return_integer_ok(char c) -{ - if ( (c < '0') - ||(c > '9')) - { - return FALSE; - } - return TRUE; -} - -BOOL (*gParseCheckCharacters[])(char c) = -{ - b_return_alphanumeric_ok, - b_return_character_ok, - b_return_first_variable_ok, - b_return_variable_ok, - b_return_signed_integer_ok, - b_return_integer_ok -}; - -S32 get_checker_number(char checker) -{ - switch(checker) - { - case 'a': - return 0; - case 'c': - return 1; - case 'f': - return 2; - case 'v': - return 3; - case 's': - return 4; - case 'd': - return 5; - case '*': - return 9999; - default: - return -1; - } -} - -// check token based on passed simplified regular expression -BOOL b_check_token(char *token, char *regexp) -{ - S32 tptr, rptr = 0; - S32 current_checker, next_checker = 0; - - current_checker = get_checker_number(regexp[rptr++]); - - if (current_checker == -1) - { - llerrs << "Invalid regular expression value!" << llendl; - return FALSE; - } - - if (current_checker == 9999) - { - llerrs << "Regular expression can't start with *!" << llendl; - return FALSE; - } - - for (tptr = 0; token[tptr]; tptr++) - { - if (current_checker == -1) - { - llerrs << "Input exceeds regular expression!\nDid you forget a *?" << llendl; - return FALSE; - } - - if (!gParseCheckCharacters[current_checker](token[tptr])) - { - return FALSE; - } - if (next_checker != 9999) - { - next_checker = get_checker_number(regexp[rptr++]); - if (next_checker != 9999) - { - current_checker = next_checker; - } - } - } - return TRUE; -} - -// C variable can be made up of upper or lower case letters, underscores, or numbers, but can't start with a number -BOOL b_variable_ok(char *token) -{ - if (!b_check_token(token, "fv*")) - { - llerrs << "Token '" << token << "' isn't a variable!" << llendl; - return FALSE; - } - return TRUE; -} - -// An integer is made up of the digits 0-9 and may be preceded by a '-' -BOOL b_integer_ok(char *token) -{ - if (!b_check_token(token, "sd*")) - { - llerrs << "Token isn't an integer!" << llendl; - return FALSE; - } - return TRUE; -} - -// An integer is made up of the digits 0-9 -BOOL b_positive_integer_ok(char *token) -{ - if (!b_check_token(token, "d*")) - { - llerrs << "Token isn't an integer!" << llendl; - return FALSE; - } - return TRUE; -} - namespace { class LLFnPtrResponder : public LLHTTPClient::Responder { + LOG_CLASS(LLFnPtrResponder); public: - LLFnPtrResponder(void (*callback)(void **,S32), void **callbackData) : + LLFnPtrResponder(void (*callback)(void **,S32), void **callbackData, const std::string& name) : mCallback(callback), - mCallbackData(callbackData) + mCallbackData(callbackData), + mMessageName(name) { } virtual void error(U32 status, const std::string& reason) { + // don't spam when agent communication disconnected already + if (status != 410) + { + llwarns << "error status " << status + << " for message " << mMessageName + << " reason " << reason << llendl; + } // TODO: Map status in to useful error code. if(NULL != mCallback) mCallback(mCallbackData, LL_ERR_TCP_TIMEOUT); } @@ -327,6 +138,7 @@ namespace void (*mCallback)(void **,S32); void **mCallbackData; + std::string mMessageName; }; } @@ -352,10 +164,28 @@ void LLTrustedMessageService::post(LLHTTPNode::ResponsePtr response, ["x-secondlife-udp-listen-port"]; LLSD message_data; - message_data["sender"] = senderIP + ":" + senderPort; + std::string sender = senderIP + ":" + senderPort; + message_data["sender"] = sender; message_data["body"] = input; - LLMessageSystem::dispatch(name, message_data, response); + // untrusted senders should not have access to the trusted message + // service, but this can happen in development, so check and warn + LLMessageConfig::SenderTrust trust = + LLMessageConfig::getSenderTrustedness(name); + if ((trust == LLMessageConfig::TRUSTED || + (trust == LLMessageConfig::NOT_SET && + gMessageSystem->isTrustedMessage(name))) + && !gMessageSystem->isTrustedSender(LLHost(sender))) + { + llwarns << "trusted message POST to /trusted-message/" + << name << " from unknown or untrusted sender " + << sender << llendl; + response->status(403, "Unknown or untrusted sender"); + } + else + { + LLMessageSystem::dispatch(name, message_data, response); + } } class LLMessageHandlerBridge : public LLHTTPNode @@ -372,14 +202,15 @@ void LLMessageHandlerBridge::post(LLHTTPNode::ResponsePtr response, const LLSD& context, const LLSD& input) const { std::string name = context["request"]["wildcard"]["message-name"]; - + char* namePtr = gMessageStringTable.getString(name.c_str()); + lldebugs << "Setting mLastSender " << input["sender"].asString() << llendl; gMessageSystem->mLastSender = LLHost(input["sender"].asString()); gMessageSystem->mPacketsIn += 1; - gMessageSystem->mLLSDMessageReader->setMessage(name, input["body"]); + gMessageSystem->mLLSDMessageReader->setMessage(namePtr, input["body"]); gMessageSystem->mMessageReader = gMessageSystem->mLLSDMessageReader; - if(gMessageSystem->callHandler(name.c_str(), false, gMessageSystem)) + if(gMessageSystem->callHandler(namePtr, false, gMessageSystem)) { response->result(LLSD()); } @@ -401,6 +232,12 @@ LLUseCircuitCodeResponder::~LLUseCircuitCodeResponder() // even abstract base classes need a concrete destructor } +static const char* nullToEmpty(const char* s) +{ + static char emptyString[] = ""; + return s? s : emptyString; +} + void LLMessageSystem::init() { // initialize member variables @@ -440,7 +277,6 @@ void LLMessageSystem::init() mIncomingCompressedSize = 0; mCurrentRecvPacketID = 0; - mMessageFileChecksum = 0; mMessageFileVersionNumber = 0.f; mTimingCallback = NULL; @@ -454,9 +290,7 @@ void LLMessageSystem::init() LLMessageSystem::LLMessageSystem(const char *filename, U32 port, S32 version_major, S32 version_minor, - S32 version_patch) : - mTemplateConfirmed(FALSE), - mTemplateMatches(FALSE) + S32 version_patch) { init(); @@ -501,835 +335,63 @@ LLMessageSystem::LLMessageSystem(const char *filename, U32 port, if (!gAPRPoolp) { llerrs << "No APR pool before message system initialization!" << llendl; - ll_init_apr(); - } - apr_socket_t *aprSocketp = NULL; - apr_os_sock_put(&aprSocketp, (apr_os_sock_t*)&mSocket, gAPRPoolp); - - mPollInfop = new LLMessagePollInfo; - mPollInfop->mAPRSocketp = aprSocketp; - mPollInfop->mPollFD.p = gAPRPoolp; - mPollInfop->mPollFD.desc_type = APR_POLL_SOCKET; - mPollInfop->mPollFD.reqevents = APR_POLLIN; - mPollInfop->mPollFD.rtnevents = 0; - mPollInfop->mPollFD.desc.s = aprSocketp; - mPollInfop->mPollFD.client_data = NULL; - - F64 mt_sec = getMessageTimeSeconds(); - mResendDumpTime = mt_sec; - mMessageCountTime = mt_sec; - mCircuitPrintTime = mt_sec; - mCurrentMessageTimeSeconds = mt_sec; - - // Constants for dumping output based on message processing time/count - mNumMessageCounts = 0; - mMaxMessageCounts = 200; // >= 0 means dump warnings - mMaxMessageTime = 1.f; - - mTrueReceiveSize = 0; -} - -// Read file and build message templates -void LLMessageSystem::loadTemplateFile(const char* filename) -{ - if(!filename) - { - llerrs << "No template filename specified" << llendl; - mbError = TRUE; - return; - } - - char token[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - // state variables - BOOL b_template_start = TRUE; - BOOL b_template_end = FALSE; - BOOL b_template = FALSE; - BOOL b_block_start = FALSE; - BOOL b_block_end = FALSE; - BOOL b_block = FALSE; - BOOL b_variable_start = FALSE; - BOOL b_variable_end = FALSE; - BOOL b_variable = FALSE; - //BOOL b_in_comment_block = FALSE; // not yet used - - // working temp variables - LLMessageTemplate *templatep = NULL; - char template_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - LLMessageBlock *blockp = NULL; - char block_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - LLMessageVariable var; - char var_name[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - char formatString[MAX_MESSAGE_INTERNAL_NAME_SIZE]; /* Flawfinder: ignore */ - - FILE* messagefilep = NULL; - mMessageFileChecksum = 0; - mMessageFileVersionNumber = 0.f; - S32 checksum_offset = 0; - char* checkp = NULL; - - // scanf needs 1 byte more than width, thus the MAX_... -1. - snprintf( /* Flawfinder: ignore */ - formatString, - sizeof(formatString), - "%%%ds", - MAX_MESSAGE_INTERNAL_NAME_SIZE - 1); - messagefilep = LLFile::fopen(filename, "r"); /* Flawfinder: ignore */ - if (messagefilep) - { -// mName = gMessageStringTable.getString(filename); - - fseek(messagefilep, 0L, SEEK_SET ); - while(fscanf(messagefilep, formatString, token) != EOF) /* Flawfinder: ignore */ - { - // skip comments - if (token[0] == '/') - { - // skip to end of line - while (token[0] != 10) - fscanf(messagefilep, "%c", token); - continue; - } - - checkp = token; - - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // what are we looking for - if (!strcmp(token, "{")) - { - // is that a legit option? - if (b_template_start) - { - // yup! - b_template_start = FALSE; - - // remember that it could be only a signal message, so name is all that it contains - b_template_end = TRUE; - - // start working on it! - b_template = TRUE; - } - else if (b_block_start) - { - // yup! - b_block_start = FALSE; - b_template_end = FALSE; - - // start working on it! - b_block = TRUE; - } - else if (b_variable_start) - { - // yup! - b_variable_start = FALSE; - b_block_end = FALSE; - - // start working on it! - b_variable = TRUE; - } - else - { - llerrs << "Detcted unexpected token '" << token - << "' while parsing template." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - } - - if (!strcmp(token, "}")) - { - // is that a legit option? - if (b_template_end) - { - // yup! - b_template_end = FALSE; - b_template = FALSE; - b_block_start = FALSE; - - // add data! - // we've gotten a complete variable! hooray! - // add it! - if (NULL == templatep) - { - llerrs << "Trying to addTemplate a NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - addTemplate(templatep); - - //llinfos << "Read template: "templatep->mNametemp_str - // << llendl; - - // look for next one! - b_template_start = TRUE; - } - else if (b_block_end) - { - // yup! - b_block_end = FALSE; - b_variable_start = FALSE; - - // add data! - // we've gotten a complete variable! hooray! - // add it to template - if (NULL == templatep) - { - llerrs << "Trying to addBlock to NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->addBlock(blockp); - - // start working on it! - b_template_end = TRUE; - b_block_start = TRUE; - } - else if (b_variable_end) - { - // yup! - b_variable_end = FALSE; - - // add data! - // we've gotten a complete variable! hooray! - // add it to block - blockp->addVariable(var.getName(), var.getType(), var.getSize()); - - // start working on it! - b_variable_start = TRUE; - b_block_end = TRUE; - } - else - { - llerrs << "Detcted unexpected token '" << token - << "' while parsing template." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - } - - // now, are we looking to start a template? - if (b_template) - { - - b_template = FALSE; - - // name first - if (fscanf(messagefilep, formatString, template_name) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected message template name, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // debugging to help figure out busted templates - //llinfos << template_name << llendl; - - // is name a legit C variable name - if (!b_variable_ok(template_name)) - { - // nope! - llerrs << "Not legal message template name: " - << template_name << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = template_name; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // ok, now get Frequency ("High", "Medium", or "Low") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected message template frequency, found EOF." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // which one is it? - if (!strcmp(token, "High")) - { - if (++mNumberHighFreqMessages == 255) - { - // oops, too many High Frequency messages!! - llerrs << "Message " << template_name - << " exceeded 254 High frequency messages!" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a template! - // message number is just mNumberHighFreqMessages - templatep = new LLMessageTemplate(template_name, mNumberHighFreqMessages, MFT_HIGH); - //lldebugs << "Template " << template_name << " # " - // << std::hex << mNumberHighFreqMessages - // << std::dec << " high" - // << llendl; - } - else if (!strcmp(token, "Medium")) - { - if (++mNumberMediumFreqMessages == 255) - { - // oops, too many Medium Frequency messages!! - llerrs << "Message " << template_name - << " exceeded 254 Medium frequency messages!" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a template! - // message number is ((255 << 8) | mNumberMediumFreqMessages) - templatep = new LLMessageTemplate(template_name, (255 << 8) | mNumberMediumFreqMessages, MFT_MEDIUM); - //lldebugs << "Template " << template_name << " # " - // << std::hex << mNumberMediumFreqMessages - // << std::dec << " medium" - // << llendl; - } - else if (!strcmp(token, "Low")) - { - if (++mNumberLowFreqMessages == 65535) - { - // oops, too many High Frequency messages!! - llerrs << "Message " << template_name - << " exceeded 65534 Low frequency messages!" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a template! - // message number is ((255 << 24) | (255 << 16) | mNumberLowFreqMessages) - templatep = new LLMessageTemplate(template_name, (255 << 24) | (255 << 16) | mNumberLowFreqMessages, MFT_LOW); - //lldebugs << "Template " << template_name << " # " - // << std::hex << mNumberLowFreqMessages - // << std::dec << " low" - // << llendl; - } - else if (!strcmp(token, "Fixed")) - { - U32 message_num = 0; - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected message template number (fixed)," - << " found EOF." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - message_num = strtoul(token,NULL,0); - - // ok, we can create a template! - // message number is ((255 << 24) | (255 << 16) | mNumberLowFreqMessages) - templatep = new LLMessageTemplate(template_name, message_num, MFT_LOW); - } - else - { - // oops, bad frequency line - llerrs << "Bad frequency! " << token - << " isn't High, Medium, or Low" << llendl - mbError = TRUE; - fclose(messagefilep); - return; - } - - // Now get trust ("Trusted", "NotTrusted") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // File ended - llerrs << "Expected message template " - "trust, but file ended." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32) *checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - if (strcmp(token, "Trusted") == 0) - { - if (NULL == templatep) - { - llerrs << "Trying to setTrust for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setTrust(MT_TRUST); - } - else if (strcmp(token, "NotTrusted") == 0) - { - if (NULL == templatep) - { - llerrs << "Trying to setTrust for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setTrust(MT_NOTRUST); - } - else - { - // bad trust token - llerrs << "bad trust: " << token - << " isn't Trusted or NotTrusted" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // get encoding - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // File ended - llerrs << "Expected message encoding, but file ended." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - checkp = token; - while(*checkp) - { - mMessageFileChecksum += ((U32) *checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - if(0 == strcmp(token, "Unencoded")) - { - if (NULL == templatep) - { - llerrs << "Trying to setEncoding for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setEncoding(ME_UNENCODED); - } - else if(0 == strcmp(token, "Zerocoded")) - { - if (NULL == templatep) - { - llerrs << "Trying to setEncoding for NULL templatep during load." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - templatep->setEncoding(ME_ZEROCODED); - } - else - { - // bad trust token - llerrs << "bad encoding: " << token - << " isn't Unencoded or Zerocoded" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // ok, now we need to look for a block - b_block_start = TRUE; - continue; - } - - // now, are we looking to start a template? - if (b_block) - { - b_block = FALSE; - // ok, need to pull header info - - // name first - if (fscanf(messagefilep, formatString, block_name) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected block name, but file ended" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = block_name; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is name a legit C variable name - if (!b_variable_ok(block_name)) - { - // nope! - llerrs << block_name << "is not a legal block name" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // now, block type ("Single", "Multiple", or "Variable") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected block type, but file ended." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // which one is it? - if (!strcmp(token, "Single")) - { - // ok, we can create a block - blockp = new LLMessageBlock(block_name, MBT_SINGLE); - } - else if (!strcmp(token, "Multiple")) - { - // need to get the number of repeats - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected block multiple count," - " but file ended." << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is it a legal integer - if (!b_positive_integer_ok(token)) - { - // nope! - llerrs << token << "is not a legal integer for" - " block multiple count" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a block - blockp = new LLMessageBlock(block_name, MBT_MULTIPLE, atoi(token)); - } - else if (!strcmp(token, "Variable")) - { - // ok, we can create a block - blockp = new LLMessageBlock(block_name, MBT_VARIABLE); - } - else - { - // oops, bad block type - llerrs << "Bad block type! " << token - << " isn't Single, Multiple, or Variable" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, now we need to look for a variable - b_variable_start = TRUE; - continue; - } - - // now, are we looking to start a template? - if (b_variable) - { - b_variable = FALSE; - // ok, need to pull header info - - // name first - if (fscanf(messagefilep, formatString, var_name) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable name, but file ended." - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = var_name; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is name a legit C variable name - if (!b_variable_ok(var_name)) - { - // nope! - llerrs << var_name << " is not a legal variable name" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - // now, variable type ("Fixed" or "Variable") - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable type, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - - // which one is it? - if (!strcmp(token, "U8")) - { - var = LLMessageVariable(var_name, MVT_U8, 1); - } - else if (!strcmp(token, "U16")) - { - var = LLMessageVariable(var_name, MVT_U16, 2); - } - else if (!strcmp(token, "U32")) - { - var = LLMessageVariable(var_name, MVT_U32, 4); - } - else if (!strcmp(token, "U64")) - { - var = LLMessageVariable(var_name, MVT_U64, 8); - } - else if (!strcmp(token, "S8")) - { - var = LLMessageVariable(var_name, MVT_S8, 1); - } - else if (!strcmp(token, "S16")) - { - var = LLMessageVariable(var_name, MVT_S16, 2); - } - else if (!strcmp(token, "S32")) - { - var = LLMessageVariable(var_name, MVT_S32, 4); - } - else if (!strcmp(token, "S64")) - { - var = LLMessageVariable(var_name, MVT_S64, 8); - } - else if (!strcmp(token, "F32")) - { - var = LLMessageVariable(var_name, MVT_F32, 4); - } - else if (!strcmp(token, "F64")) - { - var = LLMessageVariable(var_name, MVT_F64, 8); - } - else if (!strcmp(token, "LLVector3")) - { - var = LLMessageVariable(var_name, MVT_LLVector3, 12); - } - else if (!strcmp(token, "LLVector3d")) - { - var = LLMessageVariable(var_name, MVT_LLVector3d, 24); - } - else if (!strcmp(token, "LLVector4")) - { - var = LLMessageVariable(var_name, MVT_LLVector4, 16); - } - else if (!strcmp(token, "LLQuaternion")) - { - var = LLMessageVariable(var_name, MVT_LLQuaternion, 12); - } - else if (!strcmp(token, "LLUUID")) - { - var = LLMessageVariable(var_name, MVT_LLUUID, 16); - } - else if (!strcmp(token, "BOOL")) - { - var = LLMessageVariable(var_name, MVT_BOOL, 1); - } - else if (!strcmp(token, "IPADDR")) - { - var = LLMessageVariable(var_name, MVT_IP_ADDR, 4); - } - else if (!strcmp(token, "IPPORT")) - { - var = LLMessageVariable(var_name, MVT_IP_PORT, 2); - } - else if (!strcmp(token, "Fixed")) - { - // need to get the variable size - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable size, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - - // is it a legal integer - if (!b_positive_integer_ok(token)) - { - // nope! - llerrs << token << " is not a legal integer for" - " variable size" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a block - var = LLMessageVariable(var_name, MVT_FIXED, atoi(token)); - } - else if (!strcmp(token, "Variable")) - { - // need to get the variable size - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected variable size, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } + ll_init_apr(); + } + apr_socket_t *aprSocketp = NULL; + apr_os_sock_put(&aprSocketp, (apr_os_sock_t*)&mSocket, gAPRPoolp); - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } + mPollInfop = new LLMessagePollInfo; + mPollInfop->mAPRSocketp = aprSocketp; + mPollInfop->mPollFD.p = gAPRPoolp; + mPollInfop->mPollFD.desc_type = APR_POLL_SOCKET; + mPollInfop->mPollFD.reqevents = APR_POLLIN; + mPollInfop->mPollFD.rtnevents = 0; + mPollInfop->mPollFD.desc.s = aprSocketp; + mPollInfop->mPollFD.client_data = NULL; - // is it a legal integer - if (!b_positive_integer_ok(token)) - { - // nope! - llerrs << token << "is not a legal integer" - " for variable size" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - // ok, we can create a block - var = LLMessageVariable(var_name, MVT_VARIABLE, atoi(token)); - } - else - { - // oops, bad variable type - llerrs << "Bad variable type! " << token - << " isn't Fixed or Variable" << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } + F64 mt_sec = getMessageTimeSeconds(); + mResendDumpTime = mt_sec; + mMessageCountTime = mt_sec; + mCircuitPrintTime = mt_sec; + mCurrentMessageTimeSeconds = mt_sec; - // we got us a variable! - b_variable_end = TRUE; - continue; - } + // Constants for dumping output based on message processing time/count + mNumMessageCounts = 0; + mMaxMessageCounts = 200; // >= 0 means dump warnings + mMaxMessageTime = 1.f; + + mTrueReceiveSize = 0; +} - // do we have a version number stuck in the file? - if (!strcmp(token, "version")) - { - // version number - if (fscanf(messagefilep, formatString, token) == EOF) /* Flawfinder: ignore */ - { - // oops, file ended - llerrs << "Expected version number, but file ended" - << llendl; - mbError = TRUE; - fclose(messagefilep); - return; - } - - checkp = token; - while (*checkp) - { - mMessageFileChecksum += ((U32)*checkp++) << checksum_offset; - checksum_offset = (checksum_offset + 8) % 32; - } - mMessageFileVersionNumber = (F32)atof(token); - -// llinfos << "### Message template version " << mMessageFileVersionNumber << " ###" << llendl; - continue; - } - } - llinfos << "Message template checksum = " << std::hex << mMessageFileChecksum << std::dec << llendl; +// Read file and build message templates +void LLMessageSystem::loadTemplateFile(const char* filename) +{ + if(!filename) + { + llerrs << "No template filename specified" << llendl; + mbError = TRUE; + return; } - else + + LLString template_body; + if(!LLString::read(template_body, filename)) { llwarns << "Failed to open template: " << filename << llendl; mbError = TRUE; return; } - fclose(messagefilep); + + LLTemplateTokenizer tokens(template_body); + LLTemplateParser parsed(tokens); + mMessageFileVersionNumber = parsed.getVersion(); + for(LLTemplateParser::message_iterator iter = parsed.getMessagesBegin(); + iter != parsed.getMessagesEnd(); + iter++) + { + addTemplate(*iter); + } } @@ -1393,6 +455,94 @@ BOOL LLMessageSystem::poll(F32 seconds) } } +bool LLMessageSystem::isTrustedSender(const LLHost& host) const +{ + LLCircuitData* cdp = mCircuitInfo.findCircuit(host); + if(NULL == cdp) + { + return false; + } + return cdp->getTrusted(); +} + +static LLMessageSystem::message_template_name_map_t::const_iterator +findTemplate(const LLMessageSystem::message_template_name_map_t& templates, + std::string name) +{ + const char* namePrehash = gMessageStringTable.getString(name.c_str()); + if(NULL == namePrehash) {return templates.end();} + return templates.find(namePrehash); +} + +bool LLMessageSystem::isTrustedMessage(const std::string& name) const +{ + message_template_name_map_t::const_iterator iter = + findTemplate(mMessageTemplates, name); + if(iter == mMessageTemplates.end()) {return false;} + return iter->second->getTrust() == MT_TRUST; +} + +bool LLMessageSystem::isUntrustedMessage(const std::string& name) const +{ + message_template_name_map_t::const_iterator iter = + findTemplate(mMessageTemplates, name); + if(iter == mMessageTemplates.end()) {return false;} + return iter->second->getTrust() == MT_NOTRUST; +} + +LLCircuitData* LLMessageSystem::findCircuit(const LLHost& host, + bool resetPacketId) +{ + LLCircuitData* cdp = mCircuitInfo.findCircuit(host); + if (!cdp) + { + // This packet comes from a circuit we don't know about. + + // Are we rejecting off-circuit packets? + if (mbProtected) + { + // cdp is already NULL, so we don't need to unset it. + } + else + { + // nope, open the new circuit + cdp = mCircuitInfo.addCircuitData(host, mCurrentRecvPacketID); + + if(resetPacketId) + { + // I added this - I think it's correct - DJS + // reset packet in ID + cdp->setPacketInID(mCurrentRecvPacketID); + } + // And claim the packet is on the circuit we just added. + } + } + else + { + // this is an old circuit. . . is it still alive? + if (!cdp->isAlive()) + { + // nope. don't accept if we're protected + if (mbProtected) + { + // don't accept packets from unexpected sources + cdp = NULL; + } + else + { + // wake up the circuit + cdp->setAlive(TRUE); + + if(resetPacketId) + { + // reset packet in ID + cdp->setPacketInID(mCurrentRecvPacketID); + } + } + } + } + return cdp; +} // Returns TRUE if a valid, on-circuit message has been received. BOOL LLMessageSystem::checkMessages( S64 frame_count ) @@ -1471,71 +621,12 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) } // process the message as normal - - mIncomingCompressedSize = zeroCodeExpand(&buffer,&receive_size); - mCurrentRecvPacketID = buffer[1] + ((buffer[0] & 0x0f ) * 256); - if (sizeof(TPACKETID) == 4) - { - mCurrentRecvPacketID *= 256; - mCurrentRecvPacketID += buffer[2]; - mCurrentRecvPacketID *= 256; - mCurrentRecvPacketID += buffer[3]; - } - + mIncomingCompressedSize = zeroCodeExpand(&buffer, &receive_size); + mCurrentRecvPacketID = ntohl(*((U32*)(&buffer[1]))); host = getSender(); - //llinfos << host << ":" << mCurrentRecvPacketID << llendl; - - // For testing the weird case we're having in the office where the first few packets - // on a connection get dropped - //if ((mCurrentRecvPacketID < 8) && !(buffer[0] & LL_RESENT_FLAG)) - //{ - // llinfos << "Evil! Dropping " << mCurrentRecvPacketID << " from " << host << " for fun!" << llendl; - // continue; - //} - - cdp = mCircuitInfo.findCircuit(host); - if (!cdp) - { - // This packet comes from a circuit we don't know about. - - // Are we rejecting off-circuit packets? - if (mbProtected) - { - // cdp is already NULL, so we don't need to unset it. - } - else - { - // nope, open the new circuit - cdp = mCircuitInfo.addCircuitData(host, mCurrentRecvPacketID); - - // I added this - I think it's correct - DJS - // reset packet in ID - cdp->setPacketInID(mCurrentRecvPacketID); - - // And claim the packet is on the circuit we just added. - } - } - else - { - // this is an old circuit. . . is it still alive? - if (!cdp->isAlive()) - { - // nope. don't accept if we're protected - if (mbProtected) - { - // don't accept packets from unexpected sources - cdp = NULL; - } - else - { - // wake up the circuit - cdp->setAlive(TRUE); - // reset packet in ID - cdp->setPacketInID(mCurrentRecvPacketID); - } - } - } + const bool resetPacketId = true; + cdp = findCircuit(host, resetPacketId); // At this point, cdp is now a pointer to the circuit that // this message came in on if it's valid, and NULL if the @@ -1664,6 +755,10 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) if (valid_packet) { + // enable this for output of message names + //llinfos << "< \"" << mTemplateMessageReader->getMessageName() + //<< "\"" << llendl; + /* Code for dumping the complete contents of a message. Keep for future use in optimizing messages. if( 1 ) { @@ -1768,9 +863,7 @@ BOOL LLMessageSystem::checkMessages( S64 frame_count ) { if (mbProtected && (!cdp)) { - llwarns << "Packet " - << mTemplateMessageReader->getMessageName() - << " from invalid circuit " << host << llendl; + llwarns << "Invalid Packet from invalid circuit " << host << llendl; mOffCircuitPackets++; } else @@ -2051,15 +1144,34 @@ S32 LLMessageSystem::flushReliable(const LLHost &host) return send_bytes; } - +LLHTTPClient::ResponderPtr LLMessageSystem::createResponder(const std::string& name) +{ + if(mSendReliable) + { + return new LLFnPtrResponder(mReliablePacketParams.mCallback, + mReliablePacketParams.mCallbackData, + name); + } + else + { + llwarns << "LLMessageSystem::sendMessage: Sending unreliable " + << mMessageBuilder->getMessageName() << " message via HTTP" + << llendl; + return new LLFnPtrResponder(NULL, NULL, + mMessageBuilder->getMessageName()); + } +} + // This can be called from signal handlers, // so should should not use llinfos. S32 LLMessageSystem::sendMessage(const LLHost &host) { if (! mMessageBuilder->isBuilt()) { - mSendSize = mMessageBuilder->buildMessage(mSendBuffer, - MAX_BUFFER_SIZE); + mSendSize = mMessageBuilder->buildMessage( + mSendBuffer, + MAX_BUFFER_SIZE, + 0); } if (!(host.isOk())) // if port and ip are zero, don't bother trying to send the message @@ -2088,6 +1200,7 @@ S32 LLMessageSystem::sendMessage(const LLHost &host) else { // nope, open the new circuit + cdp = mCircuitInfo.addCircuitData(host, 0); } } @@ -2115,33 +1228,23 @@ S32 LLMessageSystem::sendMessage(const LLHost &host) LLSD message = mLLSDMessageBuilder->getMessage(); const LLHTTPSender& sender = LLHTTPSender::getSender(host); - LLHTTPClient::ResponderPtr responder = NULL; - if(mSendReliable) - { - responder = - new LLFnPtrResponder(mReliablePacketParams.mCallback, - mReliablePacketParams.mCallbackData); - } - else - { - llwarns << "LLMessageSystem::sendMessage: Sending unreliable " << mMessageBuilder->getMessageName() << " message via HTTP" << llendl; - responder = new LLFnPtrResponder(NULL, NULL); - } sender.send(host, mLLSDMessageBuilder->getMessageName(), - message, responder); + message, createResponder(mLLSDMessageBuilder->getMessageName())); mSendReliable = FALSE; mReliablePacketParams.clear(); return 1; } - memset(mSendBuffer,0,LL_PACKET_ID_SIZE); // zero out the packet ID field + // zero out the flags and packetid. Subtract 1 here so that we do + // not overwrite the offset if it was set set in buildMessage(). + memset(mSendBuffer, 0, LL_PACKET_ID_SIZE - 1); // add the send id to the front of the message cdp->nextPacketOutID(); // Packet ID size is always 4 - *((S32*)&mSendBuffer[0]) = htonl(cdp->getPacketOutID()); + *((S32*)&mSendBuffer[PHL_PACKET_ID]) = htonl(cdp->getPacketOutID()); // Compress the message, which will usually reduce its size. U8 * buf_ptr = (U8 *)mSendBuffer; @@ -2284,7 +1387,7 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re char buffer[MAX_STRING]; /* Flawfinder: ignore */ snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize: mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */ str << buffer - << mMessageReader->getMessageName() + << nullToEmpty(mMessageReader->getMessageName()) << (recv_reliable ? " reliable" : "") << " REJECTED"; llinfos << str.str() << llendl; @@ -2307,6 +1410,27 @@ void LLMessageSystem::logMsgFromInvalidCircuit( const LLHost& host, BOOL recv_re } } +S32 LLMessageSystem::sendMessage(const LLHost &host, const char* name, + const LLSD& message) +{ + if (!(host.isOk())) + { + llwarns << "trying to send message to invalid host" << llendl; + return 0; + } + newMessage(name); + if (mMessageBuilder != mLLSDMessageBuilder) + { + llwarns << "trying to send llsd message when builder is not LLSD!" + << llendl; + return 0; + } + + const LLHTTPSender& sender = LLHTTPSender::getSender(host); + sender.send(host, name, message, createResponder(name)); + return 1; +} + void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host ) { // RequestTrustedCircuit is how we establish trust, so don't spam @@ -2314,9 +1438,9 @@ void LLMessageSystem::logTrustedMsgFromUntrustedCircuit( const LLHost& host ) if (strcmp(mMessageReader->getMessageName(), "RequestTrustedCircuit")) { llwarns << "Received trusted message on untrusted circuit. " - << "Will reply with deny. " - << "Message: " << mMessageReader->getMessageName() - << " Host: " << host << llendl; + << "Will reply with deny. " + << "Message: " << nullToEmpty(mMessageReader->getMessageName()) + << " Host: " << host << llendl; } if (mNumMessageCounts >= MAX_MESSAGE_COUNT_NUM) @@ -2366,7 +1490,7 @@ void LLMessageSystem::logValidMsg(LLCircuitData *cdp, const LLHost& host, BOOL r char buffer[MAX_STRING]; /* Flawfinder: ignore */ snprintf(buffer, MAX_STRING, "\t%6d\t%6d\t%6d ", mMessageReader->getMessageSize(), (mIncomingCompressedSize ? mIncomingCompressedSize : mMessageReader->getMessageSize()), mCurrentRecvPacketID); /* Flawfinder: ignore */ str << buffer - << mMessageReader->getMessageName() + << nullToEmpty(mMessageReader->getMessageName()) << (recv_reliable ? " reliable" : "") << (recv_resent ? " resent" : "") << (recv_acks ? " acks" : ""); @@ -2506,16 +1630,16 @@ void LLMessageSystem::disableCircuit(const LLHost &host) llinfos << "Host " << LLHost(old_ip, old_port) << " circuit " << code << " removed from lookup table" << llendl; gMessageSystem->mIPPortToCircuitCode.erase(ip_port); } + mCircuitInfo.removeCircuitData(host); } else { // Sigh, since we can open circuits which don't have circuit // codes, it's possible for this to happen... - //llwarns << "Couldn't find circuit code for " << host << llendl; + llwarns << "Couldn't find circuit code for " << host << llendl; } - mCircuitInfo.removeCircuitData(host); } @@ -2937,6 +2061,30 @@ void LLMessageSystem::processUseCircuitCode(LLMessageSystem* msg, } } +// static +void LLMessageSystem::processError(LLMessageSystem* msg, void**) +{ + char buffer[MTUBYTES]; + S32 error_code = 0; + msg->getS32("Data", "Code", error_code); + std::string error_token; + msg->getString("Data", "Token", MTUBYTES, buffer); + error_token.assign(buffer); + LLUUID error_id; + msg->getUUID("Data", "ID", error_id); + std::string error_system; + msg->getString("Data", "System", MTUBYTES, buffer); + error_system.assign(buffer); + std::string error_message; + msg->getString("Data", "Message", MTUBYTES, buffer); + error_message.assign(buffer); + + llwarns << "Message error from " << msg->getSender() << " - " + << error_code << " " << error_token << " " << error_id << " \"" + << error_system << "\" \"" << error_message << "\"" << llendl; +} + + static LLHTTPNode& messageRootNode() { static LLHTTPNode root_node; @@ -2964,10 +2112,13 @@ void LLMessageSystem::dispatch( const LLSD& message, LLHTTPNode::ResponsePtr responsep) { - if (msg_name.empty()) + if ((gMessageSystem->mMessageTemplates.find + (gMessageStringTable.getString(msg_name.c_str())) == + gMessageSystem->mMessageTemplates.end()) && + !LLMessageConfig::isValidMessage(msg_name)) { - llwarns << "LLMessageService::dispatch called with no message name" - << llendl; + llwarns << "Ignoring unknown message " << msg_name << llendl; + responsep->notFound("Invalid message name"); return; } @@ -2980,6 +2131,9 @@ void LLMessageSystem::dispatch( << path << llendl; return; } + // enable this for output of message names + //llinfos << "< \"" << msg_name << "\"" << llendl; + //lldebugs << "data: " << LLSDXMLStreamer(message) << llendl; handler->post(responsep, context, message); } @@ -3044,6 +2198,56 @@ void LLMessageSystem::setMessageBans( check_for_unrecognized_messages("untrusted", untrusted, mMessageTemplates); } +S32 LLMessageSystem::sendError( + const LLHost& host, + const LLUUID& agent_id, + S32 code, + const std::string& token, + const LLUUID& id, + const std::string& system, + const std::string& message, + const LLSD& data) +{ + newMessage("Error"); + nextBlockFast(_PREHASH_AgentData); + addUUIDFast(_PREHASH_AgentID, agent_id); + nextBlockFast(_PREHASH_Data); + addS32("Code", code); + addString("Token", token); + addUUID("ID", id); + addString("System", system); + std::string temp; + temp = message; + if(temp.size() > (size_t)MTUBYTES) temp.resize((size_t)MTUBYTES); + addString("Message", message); + LLPointer formatter = new LLSDBinaryFormatter; + std::ostringstream ostr; + formatter->format(data, ostr); + temp = ostr.str(); + bool pack_data = true; + static const std::string ERROR_MESSAGE_NAME("Error"); + if (LLMessageConfig::getMessageFlavor(ERROR_MESSAGE_NAME) == + LLMessageConfig::TEMPLATE_FLAVOR) + { + S32 msg_size = temp.size() + mMessageBuilder->getMessageSize(); + if(msg_size >= ETHERNET_MTU_BYTES) + { + pack_data = false; + } + } + if(pack_data) + { + addBinaryData("Data", (void*)temp.c_str(), temp.size()); + } + else + { + llwarns << "Data and message were too large -- data removed." + << llendl; + addBinaryData("Data", NULL, 0); + } + return sendReliable(host); +} + void process_packet_ack(LLMessageSystem *msgsystem, void** /*user_data*/) { TPACKETID packet_id; @@ -3069,37 +2273,8 @@ void process_packet_ack(LLMessageSystem *msgsystem, void** /*user_data*/) } } -void send_template_reply(LLMessageSystem* msg, const LLUUID& token) -{ - msg->newMessageFast(_PREHASH_TemplateChecksumReply); - msg->nextBlockFast(_PREHASH_DataBlock); - msg->addU32Fast(_PREHASH_Checksum, msg->mMessageFileChecksum); - msg->addU8Fast(_PREHASH_MajorVersion, U8(msg->mSystemVersionMajor) ); - msg->addU8Fast(_PREHASH_MinorVersion, U8(msg->mSystemVersionMinor) ); - msg->addU8Fast(_PREHASH_PatchVersion, U8(msg->mSystemVersionPatch) ); - msg->addU8Fast(_PREHASH_ServerVersion, U8(msg->mSystemVersionServer) ); - msg->addU32Fast(_PREHASH_Flags, msg->mVersionFlags); - msg->nextBlockFast(_PREHASH_TokenBlock); - msg->addUUIDFast(_PREHASH_Token, token); - msg->sendMessage(msg->getSender()); -} - -void process_template_checksum_request(LLMessageSystem* msg, void**) -{ - llinfos << "Message template checksum request received from " - << msg->getSender() << llendl; - send_template_reply(msg, LLUUID::null); -} - -void process_secured_template_checksum_request(LLMessageSystem* msg, void**) -{ - llinfos << "Secured message template checksum request received from " - << msg->getSender() << llendl; - LLUUID token; - msg->getUUIDFast(_PREHASH_TokenBlock, _PREHASH_Token, token); - send_template_reply(msg, token); -} +/* void process_log_messages(LLMessageSystem* msg, void**) { U8 log_message; @@ -3116,7 +2291,7 @@ void process_log_messages(LLMessageSystem* msg, void**) llinfos << "Stopping logging via message" << llendl; msg->stopLogging(); } -} +}*/ // Make circuit trusted if the MD5 Digest matches, otherwise // notify remote end that they are not trusted. @@ -3349,15 +2524,14 @@ BOOL start_messaging_system( //gMessageSystem->setHandlerFuncFast(_PREHASH_AckAddCircuitCode, ack_add_circuit_code, NULL); gMessageSystem->setHandlerFuncFast(_PREHASH_UseCircuitCode, LLMessageSystem::processUseCircuitCode, (void**)responder); gMessageSystem->setHandlerFuncFast(_PREHASH_PacketAck, process_packet_ack, NULL); - gMessageSystem->setHandlerFuncFast(_PREHASH_TemplateChecksumRequest, process_template_checksum_request, NULL); - gMessageSystem->setHandlerFuncFast(_PREHASH_SecuredTemplateChecksumRequest, process_secured_template_checksum_request, NULL); - gMessageSystem->setHandlerFuncFast(_PREHASH_LogMessages, process_log_messages, NULL); + //gMessageSystem->setHandlerFuncFast(_PREHASH_LogMessages, process_log_messages, NULL); gMessageSystem->setHandlerFuncFast(_PREHASH_CreateTrustedCircuit, process_create_trusted_circuit, NULL); gMessageSystem->setHandlerFuncFast(_PREHASH_DenyTrustedCircuit, process_deny_trusted_circuit, NULL); + gMessageSystem->setHandlerFunc("Error", LLMessageSystem::processError); // We can hand this to the null_message_callback since it is a // trusted message, so it will automatically be denied if it isn't @@ -3471,11 +2645,11 @@ void LLMessageSystem::summarizeLogs(std::ostream& str) snprintf(buffer, MAX_STRING, "%35s%10s%10s%10s%10s", "Message", "Count", "Time", "Max", "Avg"); /* Flawfinder: ignore */ str << buffer << std:: endl; F32 avg; - for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(), + for (message_template_name_map_t::const_iterator iter = mMessageTemplates.begin(), end = mMessageTemplates.end(); iter != end; iter++) { - LLMessageTemplate* mt = iter->second; + const LLMessageTemplate* mt = iter->second; if(mt->mTotalDecoded > 0) { avg = mt->mTotalDecodeTime / (F32)mt->mTotalDecoded; @@ -3549,11 +2723,11 @@ void LLMessageSystem::dumpReceiveCounts() if(mNumMessageCounts > 0) { llinfos << "Dump: " << mNumMessageCounts << " messages processed in " << mReceiveTime << " seconds" << llendl; - for (message_template_name_map_t::iterator iter = mMessageTemplates.begin(), + for (message_template_name_map_t::const_iterator iter = mMessageTemplates.begin(), end = mMessageTemplates.end(); iter != end; iter++) { - LLMessageTemplate* mt = iter->second; + const LLMessageTemplate* mt = iter->second; if (mt->mReceiveCount > 0) { llinfos << "Num: " << std::setw(3) << mt->mReceiveCount << " Bytes: " << std::setw(6) << mt->mReceiveBytes @@ -3601,8 +2775,10 @@ S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal() if (! mMessageBuilder->isBuilt()) { - mSendSize = mMessageBuilder->buildMessage(mSendBuffer, - MAX_BUFFER_SIZE); + mSendSize = mMessageBuilder->buildMessage( + mSendBuffer, + MAX_BUFFER_SIZE, + 0); } // TODO: babbage: remove this horror mMessageBuilder->setBuilt(FALSE); @@ -3616,7 +2792,7 @@ S32 LLMessageSystem::zeroCodeAdjustCurrentSendTotal() // skip the packet id field - for (U32 i=0;isecond; if (msg_template->isBanned(trustedSource)) { llwarns << "LLMessageSystem::callHandler: banned message " @@ -3852,14 +3031,13 @@ BOOL LLMessageSystem::isCircuitCodeKnown(U32 code) const BOOL LLMessageSystem::isMessageFast(const char *msg) { - return(msg == mMessageReader->getMessageName()); + return msg == mMessageReader->getMessageName(); } char* LLMessageSystem::getMessageName() { - const char* name = mMessageReader->getMessageName(); - return name[0] == '\0'? NULL : const_cast(name); + return const_cast(mMessageReader->getMessageName()); } const LLUUID& LLMessageSystem::getSenderID() const @@ -4188,120 +3366,6 @@ void LLMessageSystem::dumpPacketToLog() } } -//static -BOOL LLMessageSystem::isTemplateConfirmed() -{ - return gMessageSystem->mTemplateConfirmed; -} - -//static -BOOL LLMessageSystem::doesTemplateMatch() -{ - if (!isTemplateConfirmed()) - { - return FALSE; - } - return gMessageSystem->mTemplateMatches; -} - -//static -void LLMessageSystem::sendMessageTemplateChecksum(const LLHost ¤tHost) -{ - gMessageSystem->mTemplateConfirmed = FALSE; - gMessageSystem->mTemplateMatches = FALSE; - gMessageSystem->newMessageFast(_PREHASH_TemplateChecksumRequest); - // Don't use ping-based retry - gMessageSystem->sendReliable(currentHost, 40, FALSE, 3, NULL, NULL); -} - -//static -void LLMessageSystem::processMessageTemplateChecksumReply(LLMessageSystem *msg, - void** user_data) -{ - U32 remote_template_checksum = 0; - msg->getU32Fast(_PREHASH_DataBlock, _PREHASH_Checksum, remote_template_checksum); - msg->mTemplateConfirmed = TRUE; - if ((remote_template_checksum) != msg->mMessageFileChecksum) - { - llwarns << "out of sync message template!" << llendl; - - msg->mTemplateMatches = FALSE; - msg->newMessageFast(_PREHASH_CloseCircuit); - msg->sendMessage(msg->getSender()); - return; - } - - msg->mTemplateMatches = TRUE; - llinfos << "According to " << msg->getSender() - << " the message template is current!" - << llendl; -} - -//static -void LLMessageSystem::sendSecureMessageTemplateChecksum(const LLHost& host) -{ - // generate an token for use during template checksum requests to - // prevent DOS attacks from injected bad template checksum replies. - LLUUID *template_tokenp = new LLUUID; - template_tokenp->generate(); - lldebugs << "random token: " << *template_tokenp << llendl; - - // register the handler for the reply while saving off template_token - gMessageSystem->setHandlerFuncFast(_PREHASH_TemplateChecksumReply, - LLMessageSystem::processSecureTemplateChecksumReply, - (void**)template_tokenp); - - // send checksum request - gMessageSystem->mTemplateConfirmed = FALSE; - gMessageSystem->newMessageFast(_PREHASH_SecuredTemplateChecksumRequest); - gMessageSystem->nextBlockFast(_PREHASH_TokenBlock); - gMessageSystem->addUUIDFast(_PREHASH_Token, *template_tokenp); - gMessageSystem->sendReliable(host); -} - -//static -void LLMessageSystem::processSecureTemplateChecksumReply(LLMessageSystem *msg, - void** user_data) -{ - // copy the token out into the stack and delete allocated memory - LLUUID template_token = *((LLUUID*)user_data); - delete user_data; - - LLUUID received_token; - msg->getUUID("TokenBlock", "Token", received_token); - - if(received_token != template_token) - { - llwarns << "Incorrect token in template checksum reply: " - << received_token << llendl; - //return do_normal_idle; - return; - } - - U32 remote_template_checksum = 0; - U8 major_version = 0; - U8 minor_version = 0; - U8 patch_version = 0; - U8 server_version = 0; - U32 flags = 0x0; - msg->getU32("DataBlock", "Checksum", remote_template_checksum); - msg->getU8 ("DataBlock", "MajorVersion", major_version); - msg->getU8 ("DataBlock", "MinorVersion", minor_version); - msg->getU8 ("DataBlock", "PatchVersion", patch_version); - msg->getU8 ("DataBlock", "ServerVersion", server_version); - msg->getU32("DataBlock", "Flags", flags); - - msg->mTemplateConfirmed = TRUE; - if (remote_template_checksum != gMessageSystem->mMessageFileChecksum) - { - llinfos << "Message template out of sync" << llendl; - msg->mTemplateMatches = FALSE; - } - else - { - msg->mTemplateMatches = TRUE; - } -} //static U64 LLMessageSystem::getMessageTimeUsecs(const BOOL update) @@ -4352,14 +3416,32 @@ typedef std::map BuilderMap; void LLMessageSystem::newMessageFast(const char *name) { - if(LLMessageConfig::isMessageBuiltTemplate(name)) + LLMessageConfig::Flavor message_flavor = + LLMessageConfig::getMessageFlavor(name); + LLMessageConfig::Flavor server_flavor = + LLMessageConfig::getServerDefaultFlavor(); + + if(message_flavor == LLMessageConfig::TEMPLATE_FLAVOR) { mMessageBuilder = mTemplateMessageBuilder; } - else + else if (message_flavor == LLMessageConfig::LLSD_FLAVOR) { mMessageBuilder = mLLSDMessageBuilder; } + // NO_FLAVOR + else + { + if (server_flavor == LLMessageConfig::LLSD_FLAVOR) + { + mMessageBuilder = mLLSDMessageBuilder; + } + // TEMPLATE_FLAVOR or NO_FLAVOR + else + { + mMessageBuilder = mTemplateMessageBuilder; + } + } mSendReliable = FALSE; mMessageBuilder->newMessage(name); } @@ -4822,6 +3904,10 @@ void LLMessageSystem::getIPPort(const char *block, const char *var, U16 &u, void LLMessageSystem::getStringFast(const char *block, const char *var, S32 buffer_size, char *s, S32 blocknum) { + if(buffer_size <= 0) + { + llwarns << "buffer_size <= 0" << llendl; + } mMessageReader->getString(block, var, buffer_size, s, blocknum); } diff --git a/linden/indra/llmessage/message.h b/linden/indra/llmessage/message.h index 0a55485..6c834f7 100644 --- a/linden/indra/llmessage/message.h +++ b/linden/indra/llmessage/message.h @@ -1,5 +1,5 @@ /** - * @FILE message.h + * @file message.h * @brief LLMessageSystem class header file * * Copyright (c) 2001-2007, Linden Research, Inc. @@ -50,11 +50,13 @@ #include "lltimer.h" #include "llpacketring.h" #include "llhost.h" +#include "llhttpclient.h" #include "llhttpnode.h" #include "llpacketack.h" #include "message_prehash.h" #include "llstl.h" #include "llmsgvariabletype.h" +#include "llmsgvariabletype.h" const U32 MESSAGE_MAX_STRINGS_LENGTH = 64; const U32 MESSAGE_NUMBER_OF_HASH_BUCKETS = 8192; @@ -126,7 +128,16 @@ const U8 LL_RELIABLE_FLAG = 0x40; const U8 LL_RESENT_FLAG = 0x20; const U8 LL_ACK_FLAG = 0x10; -const S32 LL_MINIMUM_VALID_PACKET_SIZE = LL_PACKET_ID_SIZE + 1; // 4 bytes id + 1 byte message name (high) +// 1 byte flags, 4 bytes sequence, 1 byte offset + 1 byte message name (high) +const S32 LL_MINIMUM_VALID_PACKET_SIZE = LL_PACKET_ID_SIZE + 1; +enum EPacketHeaderLayout +{ + PHL_FLAGS = 0, + PHL_PACKET_ID = 1, + PHL_OFFSET = 5, + PHL_NAME = 6 +}; + const S32 LL_DEFAULT_RELIABLE_RETRIES = 3; const F32 LL_MINIMUM_RELIABLE_TIMEOUT_SECONDS = 1.f; @@ -155,8 +166,6 @@ class LLUUID; class LLMessageSystem; class LLPumpIO; -// message data pieces are used to collect the data called for by the message template - // message system exceptional condition handlers. enum EMessageException { @@ -168,6 +177,7 @@ enum EMessageException typedef void (*msg_exception_callback)(LLMessageSystem*,void*,EMessageException); +// message data pieces are used to collect the data called for by the message template class LLMsgData; class LLMsgBlkData; class LLMessageTemplate; @@ -180,6 +190,8 @@ class LLMessageReader; class LLTemplateMessageReader; class LLSDMessageReader; + + class LLUseCircuitCodeResponder { LOG_CLASS(LLMessageSystem); @@ -204,7 +216,6 @@ class LLMessageSystem // Set this flag to TRUE when you want *very* verbose logs. BOOL mVerboseLog; - U32 mMessageFileChecksum; F32 mMessageFileVersionNumber; typedef std::map message_template_name_map_t; @@ -450,8 +461,11 @@ public: void forwardReliable(const LLHost &host); void forwardReliable(const U32 circuit_code); + LLHTTPClient::ResponderPtr createResponder(const std::string& name); S32 sendMessage(const LLHost &host); S32 sendMessage(const U32 circuit); + S32 sendMessage(const LLHost &host, const char* name, + const LLSD& message); // BOOL decodeData(const U8 *buffer, const LLHost &host); @@ -528,6 +542,15 @@ public: // The actual sending is done by reallySendDenyTrustedCircuit() void sendDenyTrustedCircuit(const LLHost &host); + /** Return false if host is unknown or untrusted */ + bool isTrustedSender(const LLHost& host) const; + + /** Return false true if name is unknown or untrusted */ + bool isTrustedMessage(const std::string& name) const; + + /** Return false true if name is unknown or trusted */ + bool isUntrustedMessage(const std::string& name) const; + private: // A list of the circuits that need to be sent DenyTrustedCircuit messages. typedef std::set host_set_t; @@ -537,7 +560,6 @@ private: // related to sendDenyTrustedCircuit() void reallySendDenyTrustedCircuit(const LLHost &host); - public: // Use this to establish trust to and from a host. This blocks // until trust has been established, and probably should only be @@ -594,15 +616,6 @@ public: void setMaxMessageTime(const F32 seconds); // Max time to process messages before warning and dumping (neg to disable) void setMaxMessageCounts(const S32 num); // Max number of messages before dumping (neg to disable) - // statics - static BOOL isTemplateConfirmed(); - static BOOL doesTemplateMatch(); - static void sendMessageTemplateChecksum(const LLHost&); - static void processMessageTemplateChecksumReply(LLMessageSystem *msg, - void** user_data); - static void sendSecureMessageTemplateChecksum(const LLHost&); - static void processSecureTemplateChecksumReply(LLMessageSystem *msg, - void** user_data); static U64 getMessageTimeUsecs(const BOOL update = FALSE); // Get the current message system time in microseconds static F64 getMessageTimeSeconds(const BOOL update = FALSE); // Get the current message system time in seconds @@ -613,6 +626,7 @@ public: //static void processAssignCircuitCode(LLMessageSystem* msg, void**); static void processAddCircuitCode(LLMessageSystem* msg, void**); static void processUseCircuitCode(LLMessageSystem* msg, void**); + static void processError(LLMessageSystem* msg, void**); // dispatch llsd message to http node tree static void dispatch(const std::string& msg_name, @@ -623,13 +637,33 @@ public: void setMessageBans(const LLSD& trusted, const LLSD& untrusted); + /** + * @brief send an error message to the host. This is a helper method. + * + * @param host Destination host. + * @param agent_id Destination agent id (may be null) + * @param code An HTTP status compatible error code. + * @param token A specific short string based message + * @param id The transactionid/uniqueid/sessionid whatever. + * @param system The hierarchical path to the system (255 bytes) + * @param message Human readable message (1200 bytes) + * @param data Extra info. + * @return Returns value returned from sendReliable(). + */ + S32 sendError( + const LLHost& host, + const LLUUID& agent_id, + S32 code, + const std::string& token, + const LLUUID& id, + const std::string& system, + const std::string& message, + const LLSD& data); + // Check UDP messages and pump http_pump to receive HTTP messages. bool checkAllMessages(S64 frame_count, LLPumpIO* http_pump); private: - // data used in those internal handlers - BOOL mTemplateConfirmed; - BOOL mTemplateMatches; // The mCircuitCodes is a map from circuit codes to session // ids. This allows us to verify sessions on connect. @@ -639,7 +673,7 @@ private: // Viewers need to track a process session in order to make sure // that no one gives them a bad circuit code. LLUUID mSessionID; - + void addTemplate(LLMessageTemplate *templatep); void clearReceiveState(); BOOL decodeTemplate( const U8* buffer, S32 buffer_size, LLMessageTemplate** msg_template ); @@ -710,6 +744,10 @@ private: bool callHandler(const char *name, bool trustedSource, LLMessageSystem* msg); + + + /** Find, create or revive circuit for host as needed */ + LLCircuitData* findCircuit(const LLHost& host, bool resetPacketId); }; diff --git a/linden/indra/llmessage/message_prehash.cpp b/linden/indra/llmessage/message_prehash.cpp index 3e26726..fbe5c33 100644 --- a/linden/indra/llmessage/message_prehash.cpp +++ b/linden/indra/llmessage/message_prehash.cpp @@ -27,14 +27,14 @@ */ /** - * Generated from message template version number 1.053 + * Generated from message template version number 2.000 */ #include "linden_common.h" #include "message.h" -F32 gPrehashVersionNumber = 1.053f; +F32 gPrehashVersionNumber = 2.000f; char * _PREHASH_X; char * _PREHASH_Y; @@ -59,7 +59,6 @@ char * _PREHASH_ScriptAnswerYes; char * _PREHASH_PartnerID; char * _PREHASH_DirLandQuery; char * _PREHASH_TeleportStart; -char * _PREHASH_LogMessages; char * _PREHASH_AboutText; char * _PREHASH_VisualParam; char * _PREHASH_GroupPrims; @@ -67,10 +66,8 @@ char * _PREHASH_SelectedPrims; char * _PREHASH_ID; char * _PREHASH_UUIDNameRequest; char * _PREHASH_UUIDGroupNameRequest; -char * _PREHASH_MoneyTransactionsRequest; char * _PREHASH_GroupAccountTransactionsRequest; char * _PREHASH_MapNameRequest; -char * _PREHASH_MailTaskSimRequest; char * _PREHASH_UpdateSimulator; char * _PREHASH_BillableFactor; char * _PREHASH_ObjectBonusFactor; @@ -80,7 +77,6 @@ char * _PREHASH_ConfirmEnableSimulator; char * _PREHASH_LayerType; char * _PREHASH_OwnerRole; char * _PREHASH_ParcelOverlay; -char * _PREHASH_AdjustBalance; char * _PREHASH_GroupOwned; char * _PREHASH_IP; char * _PREHASH_ChatFromViewer; @@ -115,8 +111,8 @@ char * _PREHASH_SensedData; char * _PREHASH_UpdateBlock; char * _PREHASH_ClassifiedGodDelete; char * _PREHASH_ObjectGrabUpdate; -char * _PREHASH_TaxDate; char * _PREHASH_LocationPos; +char * _PREHASH_TaxDate; char * _PREHASH_StartDateTime; char * _PREHASH_ObjectUpdateCached; char * _PREHASH_Packets; @@ -148,14 +144,11 @@ char * _PREHASH_AABBMin; char * _PREHASH_ClassifiedFlags; char * _PREHASH_ControlFlags; char * _PREHASH_TeleportRequest; -char * _PREHASH_SpaceLocationTeleportRequest; -char * _PREHASH_LeaderBoardRequest; char * _PREHASH_ScriptTeleportRequest; +char * _PREHASH_EstateCovenantRequest; char * _PREHASH_DateUTC; char * _PREHASH_TaskIDs; -char * _PREHASH_EstateCovenantRequest; char * _PREHASH_RequestResult; -char * _PREHASH_ReputationAgentAssign; char * _PREHASH_CanAcceptAgents; char * _PREHASH_ObjectSaleInfo; char * _PREHASH_KillChildAgents; @@ -167,7 +160,6 @@ char * _PREHASH_InfoBlock; char * _PREHASH_OwnershipCost; char * _PREHASH_AvatarNotesUpdate; char * _PREHASH_PID; -char * _PREHASH_TimeString; char * _PREHASH_DirPopularReply; char * _PREHASH_TerrainHeightRange00; char * _PREHASH_SimData; @@ -193,7 +185,6 @@ char * _PREHASH_Objects; char * _PREHASH_URL; char * _PREHASH_CreationDate; char * _PREHASH_JointPivot; -char * _PREHASH_RateeID; char * _PREHASH_FPS; char * _PREHASH_HasTelehub; char * _PREHASH_PathEnd; @@ -218,7 +209,6 @@ char * _PREHASH_GroupNoticesListReply; char * _PREHASH_ParcelAccessListReply; char * _PREHASH_RpcChannelReply; char * _PREHASH_RegionPresenceResponse; -char * _PREHASH_AgentPresenceResponse; char * _PREHASH_CharterMember; char * _PREHASH_EdgeData; char * _PREHASH_NameData; @@ -232,14 +222,12 @@ char * _PREHASH_Mag; char * _PREHASH_ParcelPropertiesRequestByID; char * _PREHASH_ObjectLink; char * _PREHASH_RpcScriptReplyInbound; -char * _PREHASH_BoardData; char * _PREHASH_RezData; char * _PREHASH_RemoveInventoryObjects; char * _PREHASH_GroupProposalBallot; char * _PREHASH_RPCServerIP; char * _PREHASH_Far; char * _PREHASH_GodSessionID; -char * _PREHASH_ViewerDigest; char * _PREHASH_FLAboutText; char * _PREHASH_RegionHandshakeReply; char * _PREHASH_GroupActiveProposalItemReply; @@ -251,7 +239,6 @@ char * _PREHASH_Set; char * _PREHASH_NewName; char * _PREHASH_Key; char * _PREHASH_AgentID; -char * _PREHASH_OnlineStatusRequest; char * _PREHASH_EventNotificationRemoveRequest; char * _PREHASH_NewFolderID; char * _PREHASH_Arc; @@ -263,7 +250,6 @@ char * _PREHASH_Top; char * _PREHASH_MiscStats; char * _PREHASH_ImageID; char * _PREHASH_DataPacket; -char * _PREHASH_ObjectDehinge; char * _PREHASH_You; char * _PREHASH_ScriptControlChange; char * _PREHASH_LoadURL; @@ -280,9 +266,9 @@ char * _PREHASH_Contribution; char * _PREHASH_SetGroupContribution; char * _PREHASH_Offline; char * _PREHASH_AgentIsNowWearing; -char * _PREHASH_SecPerDay; char * _PREHASH_Members; char * _PREHASH_FailedResends; +char * _PREHASH_SecPerDay; char * _PREHASH_CameraCenter; char * _PREHASH_CameraLeftAxis; char * _PREHASH_ExBlock; @@ -290,7 +276,6 @@ char * _PREHASH_Channel; char * _PREHASH_NetTest; char * _PREHASH_DiscardLevel; char * _PREHASH_LayerID; -char * _PREHASH_RatorID; char * _PREHASH_GrabOffset; char * _PREHASH_SimPort; char * _PREHASH_PricePerMeter; @@ -310,21 +295,16 @@ char * _PREHASH_SitName; char * _PREHASH_RegionsVisited; char * _PREHASH_DirClassifiedReply; char * _PREHASH_AvatarClassifiedReply; -char * _PREHASH_ReputationIndividualReply; char * _PREHASH_MediaURL; char * _PREHASH_CompleteAgentMovement; -char * _PREHASH_SpaceIP; char * _PREHASH_ClassifiedID; char * _PREHASH_LocalID; +char * _PREHASH_SpaceIP; char * _PREHASH_RemoveItem; char * _PREHASH_LogFailedMoneyTransaction; char * _PREHASH_ViewerStartAuction; char * _PREHASH_StartAuction; -char * _PREHASH_NameValueName; -char * _PREHASH_AngVelX; char * _PREHASH_DuplicateFlags; -char * _PREHASH_AngVelY; -char * _PREHASH_AngVelZ; char * _PREHASH_TextColor; char * _PREHASH_SlaveID; char * _PREHASH_Charter; @@ -335,21 +315,16 @@ char * _PREHASH_ParcelAuctions; char * _PREHASH_OwnerIsGroup; char * _PREHASH_NameValuePair; char * _PREHASH_RemoveNameValuePair; -char * _PREHASH_GetNameValuePair; char * _PREHASH_BulkUpdateInventory; char * _PREHASH_UpdateTaskInventory; char * _PREHASH_RemoveTaskInventory; char * _PREHASH_MoveTaskInventory; char * _PREHASH_RequestTaskInventory; char * _PREHASH_ReplyTaskInventory; -char * _PREHASH_DeclineInventory; char * _PREHASH_AggregatePermInventory; -char * _PREHASH_SimulatorInfo; -char * _PREHASH_MoneyTransactionsReply; char * _PREHASH_GroupAccountTransactionsReply; -char * _PREHASH_MailTaskSimReply; +char * _PREHASH_SimulatorInfo; char * _PREHASH_WearableData; -char * _PREHASH_StatisticsData; char * _PREHASH_Enabled; char * _PREHASH_Savings; char * _PREHASH_SimulatorLoad; @@ -361,15 +336,12 @@ char * _PREHASH_JoinGroupRequest; char * _PREHASH_LeaveGroupRequest; char * _PREHASH_InviteGroupRequest; char * _PREHASH_LiveHelpGroupRequest; -char * _PREHASH_ServerVersion; char * _PREHASH_PriceParcelClaimFactor; char * _PREHASH_BillableArea; char * _PREHASH_ObjectID; char * _PREHASH_ObjectFlagUpdate; char * _PREHASH_GroupRoleUpdate; char * _PREHASH_RequestInventoryAsset; -char * _PREHASH_RedoLand; -char * _PREHASH_TravelAccess; char * _PREHASH_ChangedGrid; char * _PREHASH_AgentDropGroup; char * _PREHASH_Details; @@ -402,7 +374,6 @@ char * _PREHASH_Timestamp; char * _PREHASH_GlobalPos; char * _PREHASH_GrabOffsetInitial; char * _PREHASH_IsTrial; -char * _PREHASH_FinalizeLogout; char * _PREHASH_ObjectDuplicateOnRay; char * _PREHASH_GroupMembershipCount; char * _PREHASH_MethodData; @@ -438,32 +409,26 @@ char * _PREHASH_TaskData; char * _PREHASH_SimWideMaxPrims; char * _PREHASH_TotalPrims; char * _PREHASH_ProfileBegin; -char * _PREHASH_MoneyDetailsRequest; char * _PREHASH_Request; char * _PREHASH_GroupAccountDetailsRequest; char * _PREHASH_GroupActiveProposalsRequest; char * _PREHASH_StringValue; -char * _PREHASH_ClosestSimulator; char * _PREHASH_Version; char * _PREHASH_OtherCount; char * _PREHASH_MemberCount; char * _PREHASH_ChatData; char * _PREHASH_IsGroupOwned; char * _PREHASH_EnergyEfficiency; -char * _PREHASH_MaxPlace; char * _PREHASH_PickInfoUpdate; char * _PREHASH_PickDelete; char * _PREHASH_ScriptReset; char * _PREHASH_Requester; char * _PREHASH_ForSale; char * _PREHASH_NearestLandingRegionReply; -char * _PREHASH_RecordAgentPresence; -char * _PREHASH_EraseAgentPresence; char * _PREHASH_ParcelID; char * _PREHASH_Godlike; char * _PREHASH_TotalDebits; char * _PREHASH_Direction; -char * _PREHASH_Appearance; char * _PREHASH_HealthData; char * _PREHASH_LeftAxis; char * _PREHASH_LocationBlock; @@ -471,41 +436,31 @@ char * _PREHASH_ObjectImage; char * _PREHASH_TerrainStartHeight00; char * _PREHASH_TerrainStartHeight01; char * _PREHASH_TerrainStartHeight10; -char * _PREHASH_ObjectHinge; char * _PREHASH_TerrainStartHeight11; -char * _PREHASH_MetersPerGrid; char * _PREHASH_WaterHeight; char * _PREHASH_FetchInventoryReply; -char * _PREHASH_MoneySummaryReply; char * _PREHASH_GroupAccountSummaryReply; char * _PREHASH_AttachedSound; char * _PREHASH_ParamInUse; char * _PREHASH_GodKickUser; char * _PREHASH_PickName; char * _PREHASH_TaskName; -char * _PREHASH_SubType; char * _PREHASH_ObjectCount; char * _PREHASH_RegionPresenceRequestByHandle; char * _PREHASH_RezSingleAttachmentFromInv; char * _PREHASH_ChildAgentUpdate; -char * _PREHASH_ToID; -char * _PREHASH_ViewerPort; char * _PREHASH_IsOwnerGroup; char * _PREHASH_AgentHeightWidth; char * _PREHASH_VerticalAngle; char * _PREHASH_WearableType; char * _PREHASH_AggregatePermNextOwner; char * _PREHASH_ShowInList; -char * _PREHASH_PositionSuggestion; char * _PREHASH_UpdateParcel; -char * _PREHASH_ClearAgentSessions; char * _PREHASH_SetAlwaysRun; char * _PREHASH_NVPair; char * _PREHASH_SearchType; char * _PREHASH_ObjectSpinStart; char * _PREHASH_UseEstateSun; -char * _PREHASH_LogoutBlock; -char * _PREHASH_RelayLogControl; char * _PREHASH_RegionID; char * _PREHASH_AbuseRegionID; char * _PREHASH_Creator; @@ -514,14 +469,12 @@ char * _PREHASH_DirEventsReply; char * _PREHASH_EventInfoReply; char * _PREHASH_UserInfoReply; char * _PREHASH_PathRadiusOffset; -char * _PREHASH_SessionInfo; char * _PREHASH_TextureData; char * _PREHASH_ChatPass; char * _PREHASH_TargetID; char * _PREHASH_DefaultPayPrice; char * _PREHASH_UserLocation; char * _PREHASH_MaxPrims; -char * _PREHASH_RegionIP; char * _PREHASH_LandmarkID; char * _PREHASH_InitiateDownload; char * _PREHASH_Name; @@ -529,18 +482,13 @@ char * _PREHASH_OtherCleanTime; char * _PREHASH_ParcelSetOtherCleanTime; char * _PREHASH_TeleportPriceExponent; char * _PREHASH_Gain; -char * _PREHASH_VelX; char * _PREHASH_PacketAck; char * _PREHASH_PathSkew; -char * _PREHASH_Negative; -char * _PREHASH_VelY; char * _PREHASH_SimulatorShutdownRequest; char * _PREHASH_NearestLandingRegionRequest; -char * _PREHASH_VelZ; char * _PREHASH_OtherID; char * _PREHASH_MemberID; char * _PREHASH_MapLayerRequest; -char * _PREHASH_PatchVersion; char * _PREHASH_ObjectScale; char * _PREHASH_TargetIP; char * _PREHASH_Redo; @@ -583,27 +531,20 @@ char * _PREHASH_Perp; char * _PREHASH_Code; char * _PREHASH_InvType; char * _PREHASH_AgentFOV; -char * _PREHASH_BulkMoneyTransfer; char * _PREHASH_Audible; char * _PREHASH_AuctionData; char * _PREHASH_IDBlock; -char * _PREHASH_ReputationData; char * _PREHASH_West; char * _PREHASH_Undo; char * _PREHASH_TotalNumItems; char * _PREHASH_Info; char * _PREHASH_Area; -char * _PREHASH_Behavior; char * _PREHASH_SimCrashed; char * _PREHASH_Text; -char * _PREHASH_AgentToNewRegion; char * _PREHASH_PriceGroupCreate; char * _PREHASH_ObjectShape; char * _PREHASH_GroupRoleDataReply; -char * _PREHASH_PosX; -char * _PREHASH_PosY; char * _PREHASH_MuteCRC; -char * _PREHASH_PosZ; char * _PREHASH_Size; char * _PREHASH_FromAddress; char * _PREHASH_Body; @@ -621,16 +562,14 @@ char * _PREHASH_Stat; char * _PREHASH_SoundID; char * _PREHASH_Item; char * _PREHASH_User; -char * _PREHASH_RemoteInfos; char * _PREHASH_Prey; -char * _PREHASH_UsecSinceStart; char * _PREHASH_RayStart; +char * _PREHASH_UsecSinceStart; char * _PREHASH_ParcelData; char * _PREHASH_CameraUpAxis; char * _PREHASH_ScriptDialog; char * _PREHASH_MasterParcelData; char * _PREHASH_Invalid; -char * _PREHASH_MinPlace; char * _PREHASH_ProfileCurve; char * _PREHASH_ParcelAccessListUpdate; char * _PREHASH_MuteListUpdate; @@ -649,14 +588,12 @@ char * _PREHASH_DeRezObject; char * _PREHASH_IsTemporary; char * _PREHASH_InsigniaID; char * _PREHASH_CheckFlags; -char * _PREHASH_TransferPriority; char * _PREHASH_EventID; char * _PREHASH_Selected; char * _PREHASH_FromAgentId; char * _PREHASH_Type; char * _PREHASH_ChatType; char * _PREHASH_ReportData; -char * _PREHASH_LeaderBoardData; char * _PREHASH_RequestBlock; char * _PREHASH_GrantData; char * _PREHASH_DetachAttachmentIntoInv; @@ -672,12 +609,9 @@ char * _PREHASH_OnlineNotification; char * _PREHASH_OfflineNotification; char * _PREHASH_SendPostcard; char * _PREHASH_RequestFlags; -char * _PREHASH_MoneyHistoryRequest; -char * _PREHASH_MoneySummaryRequest; char * _PREHASH_GroupAccountSummaryRequest; char * _PREHASH_GroupVoteHistoryRequest; char * _PREHASH_ParamValue; -char * _PREHASH_Checksum; char * _PREHASH_MaxAgents; char * _PREHASH_CreateNewOutfitAttachments; char * _PREHASH_RegionHandle; @@ -687,12 +621,10 @@ char * _PREHASH_AvatarInterestsUpdate; char * _PREHASH_GroupNoticeID; char * _PREHASH_ParcelName; char * _PREHASH_PriceObjectRent; -char * _PREHASH_ConnectAgentToUserserver; -char * _PREHASH_ConnectToUserserver; char * _PREHASH_OfferCallingCard; -char * _PREHASH_AgentAccess; char * _PREHASH_AcceptCallingCard; char * _PREHASH_DeclineCallingCard; +char * _PREHASH_AgentAccess; char * _PREHASH_DataHomeLocationReply; char * _PREHASH_EventLocationReply; char * _PREHASH_TerseDateID; @@ -710,8 +642,8 @@ char * _PREHASH_Invoice; char * _PREHASH_IntervalDays; char * _PREHASH_PathScaleX; char * _PREHASH_FromTaskID; -char * _PREHASH_TimeInfo; char * _PREHASH_PathScaleY; +char * _PREHASH_TimeInfo; char * _PREHASH_PublicCount; char * _PREHASH_ParcelJoin; char * _PREHASH_GroupRolesCount; @@ -736,7 +668,6 @@ char * _PREHASH_NearestLandingRegionUpdated; char * _PREHASH_PassToAgent; char * _PREHASH_PreyAgent; char * _PREHASH_SimStats; -char * _PREHASH_Options; char * _PREHASH_LogoutReply; char * _PREHASH_FeatureDisabled; char * _PREHASH_ObjectLocalID; @@ -747,10 +678,8 @@ char * _PREHASH_Destination; char * _PREHASH_MasterID; char * _PREHASH_TransferData; char * _PREHASH_WantToMask; -char * _PREHASH_AvatarData; char * _PREHASH_ParcelSelectObjects; char * _PREHASH_ExtraParams; -char * _PREHASH_LogLogin; char * _PREHASH_CreatorID; char * _PREHASH_Summary; char * _PREHASH_BuyObjectInventory; @@ -791,8 +720,8 @@ char * _PREHASH_ButtonLabel; char * _PREHASH_GranterID; char * _PREHASH_WantToText; char * _PREHASH_ReportType; -char * _PREHASH_DataBlock; char * _PREHASH_SimulatorReady; +char * _PREHASH_DataBlock; char * _PREHASH_AnimationSourceList; char * _PREHASH_SubscribeLoad; char * _PREHASH_UnsubscribeLoad; @@ -819,9 +748,8 @@ char * _PREHASH_Header; char * _PREHASH_GestureFlags; char * _PREHASH_XferID; char * _PREHASH_StatValue; -char * _PREHASH_PickID; char * _PREHASH_TaskID; -char * _PREHASH_GridsPerEdge; +char * _PREHASH_PickID; char * _PREHASH_RayEnd; char * _PREHASH_Throttles; char * _PREHASH_RebakeAvatarTextures; @@ -834,30 +762,24 @@ char * _PREHASH_Access; char * _PREHASH_TitleRoleID; char * _PREHASH_SquareMetersCredit; char * _PREHASH_Filename; -char * _PREHASH_SecuredTemplateChecksumRequest; -char * _PREHASH_TemplateChecksumRequest; -char * _PREHASH_AgentPresenceRequest; char * _PREHASH_ClassifiedInfoRequest; char * _PREHASH_ParcelInfoRequest; char * _PREHASH_ParcelObjectOwnersRequest; char * _PREHASH_TeleportLandmarkRequest; char * _PREHASH_EventInfoRequest; -char * _PREHASH_ChatFromSimulator; -char * _PREHASH_PickInfoRequest; char * _PREHASH_MoneyBalanceRequest; char * _PREHASH_GroupMembersRequest; char * _PREHASH_GroupRoleMembersRequest; +char * _PREHASH_ChatFromSimulator; char * _PREHASH_OldFolderID; char * _PREHASH_UserInfoRequest; char * _PREHASH_TextureID; char * _PREHASH_ProfileURL; char * _PREHASH_Handle; -char * _PREHASH_StartParcelRenameAck; char * _PREHASH_ButtonIndex; char * _PREHASH_GetScriptRunning; char * _PREHASH_SetScriptRunning; char * _PREHASH_Health; -char * _PREHASH_FileID; char * _PREHASH_CircuitInfo; char * _PREHASH_ObjectBuy; char * _PREHASH_ProfileEnd; @@ -882,7 +804,6 @@ char * _PREHASH_PingID; char * _PREHASH_Change; char * _PREHASH_Height; char * _PREHASH_Region; -char * _PREHASH_MoneyHistoryReply; char * _PREHASH_TelehubInfo; char * _PREHASH_StateSave; char * _PREHASH_RoleData; @@ -893,11 +814,10 @@ char * _PREHASH_ParcelGodMarkAsContent; char * _PREHASH_UsePhysics; char * _PREHASH_RegionDenyTransacted; char * _PREHASH_JointType; -char * _PREHASH_TaxEstimate; char * _PREHASH_ObjectTaxEstimate; char * _PREHASH_LightTaxEstimate; -char * _PREHASH_TeleportLandingStatusChanged; char * _PREHASH_LandTaxEstimate; +char * _PREHASH_TeleportLandingStatusChanged; char * _PREHASH_GroupTaxEstimate; char * _PREHASH_AvgViewerFPS; char * _PREHASH_Buttons; @@ -929,8 +849,6 @@ char * _PREHASH_WinnerID; char * _PREHASH_ChannelType; char * _PREHASH_NonExemptMembers; char * _PREHASH_Agents; -char * _PREHASH_SimulatorStart; -char * _PREHASH_Enable; char * _PREHASH_MemberData; char * _PREHASH_ToGroupID; char * _PREHASH_ImageNotInDatabase; @@ -938,27 +856,21 @@ char * _PREHASH_StartDate; char * _PREHASH_AnimID; char * _PREHASH_Serial; char * _PREHASH_AbuseRegionName; -char * _PREHASH_ControlPort; char * _PREHASH_ModifyLand; char * _PREHASH_Digest; char * _PREHASH_Victim; char * _PREHASH_Script; -char * _PREHASH_TemplateChecksumReply; char * _PREHASH_PickInfoReply; char * _PREHASH_MoneyBalanceReply; char * _PREHASH_RoutedMoneyBalanceReply; char * _PREHASH_RoleID; char * _PREHASH_RegionInfo; -char * _PREHASH_Sequence; char * _PREHASH_GodUpdateRegionInfo; -char * _PREHASH_LocalX; -char * _PREHASH_LocalY; char * _PREHASH_StartAnim; -char * _PREHASH_Location; char * _PREHASH_Action; +char * _PREHASH_Location; char * _PREHASH_Rights; char * _PREHASH_SearchDir; -char * _PREHASH_Active; char * _PREHASH_TransferRequest; char * _PREHASH_ScriptSensorRequest; char * _PREHASH_MoneyTransferRequest; @@ -969,8 +881,6 @@ char * _PREHASH_Center; char * _PREHASH_SharedData; char * _PREHASH_PSBlock; char * _PREHASH_UUIDNameBlock; -char * _PREHASH_Viewer; -char * _PREHASH_GroupNoticeDelete; char * _PREHASH_GroupTitleUpdate; char * _PREHASH_Method; char * _PREHASH_TouchName; @@ -982,11 +892,9 @@ char * _PREHASH_GodlikeMessage; char * _PREHASH_SystemMessage; char * _PREHASH_BodyRotation; char * _PREHASH_SearchRegions; -char * _PREHASH_Ignore; char * _PREHASH_AnimationData; char * _PREHASH_StatID; char * _PREHASH_ItemID; -char * _PREHASH_AvatarStatisticsReply; char * _PREHASH_ScriptDialogReply; char * _PREHASH_RegionIDAndHandleReply; char * _PREHASH_CameraAtOffset; @@ -1011,7 +919,6 @@ char * _PREHASH_OldItemID; char * _PREHASH_RegionPort; char * _PREHASH_PriceEnergyUnit; char * _PREHASH_Bitmap; -char * _PREHASH_TrackAgentSession; char * _PREHASH_CacheMissType; char * _PREHASH_VFileID; char * _PREHASH_GroupInsigniaID; @@ -1059,7 +966,6 @@ char * _PREHASH_MeanCollisionAlert; char * _PREHASH_CanAcceptTasks; char * _PREHASH_ItemData; char * _PREHASH_AnimationList; -char * _PREHASH_PassObject; char * _PREHASH_Reputation; char * _PREHASH_IntValue; char * _PREHASH_TargetType; @@ -1082,10 +988,8 @@ char * _PREHASH_ParcelBuy; char * _PREHASH_DirFindQueryBackend; char * _PREHASH_DirPlacesQueryBackend; char * _PREHASH_DirClassifiedQueryBackend; -char * _PREHASH_DirPicksQueryBackend; char * _PREHASH_DirLandQueryBackend; char * _PREHASH_DirPopularQueryBackend; -char * _PREHASH_LogoutDemand; char * _PREHASH_HistoryData; char * _PREHASH_SnapshotID; char * _PREHASH_Aspect; @@ -1093,7 +997,6 @@ char * _PREHASH_ParamSize; char * _PREHASH_VoteCast; char * _PREHASH_CastsShadows; char * _PREHASH_EveryoneMask; -char * _PREHASH_SetSunPhase; char * _PREHASH_ObjectSpinUpdate; char * _PREHASH_MaturePublish; char * _PREHASH_UseExistingAsset; @@ -1102,7 +1005,6 @@ char * _PREHASH_ParcelLocalID; char * _PREHASH_TeleportCancel; char * _PREHASH_UnixTime; char * _PREHASH_QueryFlags; -char * _PREHASH_LastExecFroze; char * _PREHASH_AlwaysRun; char * _PREHASH_Bottom; char * _PREHASH_ButtonData; @@ -1121,7 +1023,6 @@ char * _PREHASH_NVPairs; char * _PREHASH_GroupNoticesListRequest; char * _PREHASH_ParcelAccessListRequest; char * _PREHASH_MuteListRequest; -char * _PREHASH_StartPeriod; char * _PREHASH_RpcChannelRequest; char * _PREHASH_LandStatRequest; char * _PREHASH_PlacesQuery; @@ -1149,34 +1050,27 @@ char * _PREHASH_SnapSelection; char * _PREHASH_SoundTrigger; char * _PREHASH_TerrainRaiseLimit; char * _PREHASH_Quorum; -char * _PREHASH_TokenBlock; char * _PREHASH_AgentBlock; char * _PREHASH_CommandBlock; char * _PREHASH_PricePublicObjectDecay; char * _PREHASH_SpawnPointPos; -char * _PREHASH_AttachedSoundCutoffRadius; char * _PREHASH_VolumeDetail; char * _PREHASH_FromAgentName; char * _PREHASH_Range; char * _PREHASH_DirectoryVisibility; char * _PREHASH_PublicIP; char * _PREHASH_TeleportFailed; -char * _PREHASH_OnlineStatusReply; -char * _PREHASH_RequestAvatarInfo; char * _PREHASH_PreloadSound; char * _PREHASH_ScreenshotID; char * _PREHASH_CovenantTimestamp; char * _PREHASH_OldestUnacked; char * _PREHASH_SimulatorIP; -char * _PREHASH_ObjectImport; char * _PREHASH_Value; char * _PREHASH_JointAxisOrAnchor; char * _PREHASH_Test0; char * _PREHASH_Test1; char * _PREHASH_Test2; char * _PREHASH_SunPhase; -char * _PREHASH_Place; -char * _PREHASH_Phase; char * _PREHASH_ParcelDivide; char * _PREHASH_PriceObjectClaim; char * _PREHASH_Field; @@ -1186,7 +1080,6 @@ char * _PREHASH_LiveHelpGroupReply; char * _PREHASH_Score; char * _PREHASH_Image; char * _PREHASH_ObjectClickAction; -char * _PREHASH_Delta; char * _PREHASH_Parameter; char * _PREHASH_Flags; char * _PREHASH_Plane; @@ -1196,26 +1089,24 @@ char * _PREHASH_DirFindQuery; char * _PREHASH_Textures; char * _PREHASH_EventData; char * _PREHASH_Final; +char * _PREHASH_System; char * _PREHASH_TelehubPos; char * _PREHASH_ReportAutosaveCrash; char * _PREHASH_CreateTrustedCircuit; char * _PREHASH_DenyTrustedCircuit; char * _PREHASH_RequestTrustedCircuit; char * _PREHASH_Codec; -char * _PREHASH_Level; char * _PREHASH_Modal; char * _PREHASH_ChildAgentUnknown; char * _PREHASH_LandingType; char * _PREHASH_ScriptRunningReply; -char * _PREHASH_MoneyDetailsReply; char * _PREHASH_Reply; +char * _PREHASH_GroupAccountDetailsReply; char * _PREHASH_TelehubRot; -char * _PREHASH_RequestFriendship; char * _PREHASH_AcceptFriendship; -char * _PREHASH_GroupAccountDetailsReply; +char * _PREHASH_ItemType; char * _PREHASH_DwellInfo; char * _PREHASH_AgentResume; -char * _PREHASH_ItemType; char * _PREHASH_MailFilter; char * _PREHASH_Disconnect; char * _PREHASH_SimPosition; @@ -1242,7 +1133,6 @@ char * _PREHASH_VoteType; char * _PREHASH_CategoryID; char * _PREHASH_Token; char * _PREHASH_AggregatePerms; -char * _PREHASH_StartParcelRemoveAck; char * _PREHASH_ObjectSelect; char * _PREHASH_ForceObjectSelect; char * _PREHASH_Price; @@ -1271,7 +1161,6 @@ char * _PREHASH_Notes; char * _PREHASH_AvatarID; char * _PREHASH_FounderID; char * _PREHASH_EndPointID; -char * _PREHASH_StipendEstimate; char * _PREHASH_LocationLookAt; char * _PREHASH_Sound; char * _PREHASH_Cover; @@ -1291,12 +1180,12 @@ char * _PREHASH_ProfileHollow; char * _PREHASH_GroupRoleChanges; char * _PREHASH_Count; char * _PREHASH_South; -char * _PREHASH_Entry; char * _PREHASH_ObjectUpdateCompressed; char * _PREHASH_MuteFlags; char * _PREHASH_Group; char * _PREHASH_AgentPause; char * _PREHASH_LanguagesText; +char * _PREHASH_Error; char * _PREHASH_InternalScriptMail; char * _PREHASH_FindAgent; char * _PREHASH_AgentData; @@ -1305,7 +1194,6 @@ char * _PREHASH_AssetBlock; char * _PREHASH_AcceptNotices; char * _PREHASH_SetGroupAcceptNotices; char * _PREHASH_CloseCircuit; -char * _PREHASH_LogControl; char * _PREHASH_TeleportFinish; char * _PREHASH_PathRevolutions; char * _PREHASH_ClassifiedInfoReply; @@ -1322,7 +1210,6 @@ char * _PREHASH_DataHomeLocationRequest; char * _PREHASH_EventNotificationAddRequest; char * _PREHASH_ParcelDwellRequest; char * _PREHASH_EventLocationRequest; -char * _PREHASH_EndPeriod; char * _PREHASH_SetStartLocationRequest; char * _PREHASH_QueryStart; char * _PREHASH_EjectData; @@ -1335,7 +1222,6 @@ char * _PREHASH_ParcelRelease; char * _PREHASH_VFileType; char * _PREHASH_EjectGroupMemberReply; char * _PREHASH_ImageData; -char * _PREHASH_SpaceServerSimulatorTimeMessage; char * _PREHASH_SimulatorViewerTimeMessage; char * _PREHASH_Rotation; char * _PREHASH_Selection; @@ -1343,7 +1229,6 @@ char * _PREHASH_TransactionData; char * _PREHASH_OperationData; char * _PREHASH_ExpirationDate; char * _PREHASH_ParcelDeedToGroup; -char * _PREHASH_DirPicksReply; char * _PREHASH_AvatarPicksReply; char * _PREHASH_GroupTitlesReply; char * _PREHASH_AgentInfo; @@ -1354,8 +1239,8 @@ char * _PREHASH_PassPrice; char * _PREHASH_SourceID; char * _PREHASH_ChangeUserRights; char * _PREHASH_TeleportFlags; -char * _PREHASH_AssetData; char * _PREHASH_SlaveParcelData; +char * _PREHASH_AssetData; char * _PREHASH_MultipleObjectUpdate; char * _PREHASH_ObjectUpdate; char * _PREHASH_ImprovedTerseObjectUpdate; @@ -1371,7 +1256,6 @@ char * _PREHASH_TaskLocalID; char * _PREHASH_ClaimDate; char * _PREHASH_MergeParcel; char * _PREHASH_Priority; -char * _PREHASH_Building; char * _PREHASH_QueryText; char * _PREHASH_GroupNoticeAdd; char * _PREHASH_ReturnType; @@ -1381,7 +1265,6 @@ char * _PREHASH_HeaderData; char * _PREHASH_RequestMultipleObjects; char * _PREHASH_RetrieveInstantMessages; char * _PREHASH_OpenCircuit; -char * _PREHASH_SecureSessionID; char * _PREHASH_CrossedRegion; char * _PREHASH_DirGroupsReply; char * _PREHASH_AvatarGroupsReply; @@ -1392,18 +1275,14 @@ char * _PREHASH_Position; char * _PREHASH_ParentEstate; char * _PREHASH_EstateName; char * _PREHASH_MuteName; -char * _PREHASH_StartParcelRename; -char * _PREHASH_BulkParcelRename; char * _PREHASH_ParcelRename; char * _PREHASH_ViewerFilename; -char * _PREHASH_Positive; char * _PREHASH_UserReportInternal; char * _PREHASH_AvatarPropertiesRequest; char * _PREHASH_ParcelPropertiesRequest; char * _PREHASH_GroupProfileRequest; char * _PREHASH_AgentDataUpdateRequest; char * _PREHASH_PriceObjectScaleFactor; -char * _PREHASH_DirPicksQuery; char * _PREHASH_OpenEnrollment; char * _PREHASH_GroupData; char * _PREHASH_RequestGodlikePowers; @@ -1414,7 +1293,6 @@ char * _PREHASH_Controls; char * _PREHASH_FirstDetachAll; char * _PREHASH_EstateID; char * _PREHASH_ImprovedInstantMessage; -char * _PREHASH_AgentQuit; char * _PREHASH_CheckParcelSales; char * _PREHASH_ParcelSales; char * _PREHASH_CurrentInterval; @@ -1431,12 +1309,8 @@ char * _PREHASH_OwnerIDs; char * _PREHASH_SystemKickUser; char * _PREHASH_TransactionTime; char * _PREHASH_TimeToLive; -char * _PREHASH_StartParcelRemove; -char * _PREHASH_BulkParcelRemove; char * _PREHASH_OldAgentID; -char * _PREHASH_BonusEstimate; char * _PREHASH_MusicURL; -char * _PREHASH_CompleteLure; char * _PREHASH_ParcelPrimBonus; char * _PREHASH_EjectUser; char * _PREHASH_CoarseLocationUpdate; @@ -1469,10 +1343,6 @@ char * _PREHASH_ParcelProperties; char * _PREHASH_EstateOwnerID; char * _PREHASH_LogoutRequest; char * _PREHASH_AssetUploadRequest; -char * _PREHASH_ReputationIndividualRequest; -char * _PREHASH_MajorVersion; -char * _PREHASH_MinorVersion; -char * _PREHASH_SimulatorAssign; char * _PREHASH_TransactionType; char * _PREHASH_AvatarPropertiesUpdate; char * _PREHASH_ParcelPropertiesUpdate; @@ -1481,7 +1351,6 @@ char * _PREHASH_AbortXfer; char * _PREHASH_DeRezAck; char * _PREHASH_TakeControls; char * _PREHASH_DirLandReply; -char * _PREHASH_SpaceLocationTeleportReply; char * _PREHASH_MuteType; char * _PREHASH_IMViaEMail; char * _PREHASH_RentPrice; @@ -1522,7 +1391,6 @@ void init_prehash_data() _PREHASH_PartnerID = gMessageStringTable.getString("PartnerID"); _PREHASH_DirLandQuery = gMessageStringTable.getString("DirLandQuery"); _PREHASH_TeleportStart = gMessageStringTable.getString("TeleportStart"); - _PREHASH_LogMessages = gMessageStringTable.getString("LogMessages"); _PREHASH_AboutText = gMessageStringTable.getString("AboutText"); _PREHASH_VisualParam = gMessageStringTable.getString("VisualParam"); _PREHASH_GroupPrims = gMessageStringTable.getString("GroupPrims"); @@ -1530,10 +1398,8 @@ void init_prehash_data() _PREHASH_ID = gMessageStringTable.getString("ID"); _PREHASH_UUIDNameRequest = gMessageStringTable.getString("UUIDNameRequest"); _PREHASH_UUIDGroupNameRequest = gMessageStringTable.getString("UUIDGroupNameRequest"); - _PREHASH_MoneyTransactionsRequest = gMessageStringTable.getString("MoneyTransactionsRequest"); _PREHASH_GroupAccountTransactionsRequest = gMessageStringTable.getString("GroupAccountTransactionsRequest"); _PREHASH_MapNameRequest = gMessageStringTable.getString("MapNameRequest"); - _PREHASH_MailTaskSimRequest = gMessageStringTable.getString("MailTaskSimRequest"); _PREHASH_UpdateSimulator = gMessageStringTable.getString("UpdateSimulator"); _PREHASH_BillableFactor = gMessageStringTable.getString("BillableFactor"); _PREHASH_ObjectBonusFactor = gMessageStringTable.getString("ObjectBonusFactor"); @@ -1543,7 +1409,6 @@ void init_prehash_data() _PREHASH_LayerType = gMessageStringTable.getString("LayerType"); _PREHASH_OwnerRole = gMessageStringTable.getString("OwnerRole"); _PREHASH_ParcelOverlay = gMessageStringTable.getString("ParcelOverlay"); - _PREHASH_AdjustBalance = gMessageStringTable.getString("AdjustBalance"); _PREHASH_GroupOwned = gMessageStringTable.getString("GroupOwned"); _PREHASH_IP = gMessageStringTable.getString("IP"); _PREHASH_ChatFromViewer = gMessageStringTable.getString("ChatFromViewer"); @@ -1578,8 +1443,8 @@ void init_prehash_data() _PREHASH_UpdateBlock = gMessageStringTable.getString("UpdateBlock"); _PREHASH_ClassifiedGodDelete = gMessageStringTable.getString("ClassifiedGodDelete"); _PREHASH_ObjectGrabUpdate = gMessageStringTable.getString("ObjectGrabUpdate"); - _PREHASH_TaxDate = gMessageStringTable.getString("TaxDate"); _PREHASH_LocationPos = gMessageStringTable.getString("LocationPos"); + _PREHASH_TaxDate = gMessageStringTable.getString("TaxDate"); _PREHASH_StartDateTime = gMessageStringTable.getString("StartDateTime"); _PREHASH_ObjectUpdateCached = gMessageStringTable.getString("ObjectUpdateCached"); _PREHASH_Packets = gMessageStringTable.getString("Packets"); @@ -1611,14 +1476,11 @@ void init_prehash_data() _PREHASH_ClassifiedFlags = gMessageStringTable.getString("ClassifiedFlags"); _PREHASH_ControlFlags = gMessageStringTable.getString("ControlFlags"); _PREHASH_TeleportRequest = gMessageStringTable.getString("TeleportRequest"); - _PREHASH_SpaceLocationTeleportRequest = gMessageStringTable.getString("SpaceLocationTeleportRequest"); - _PREHASH_LeaderBoardRequest = gMessageStringTable.getString("LeaderBoardRequest"); _PREHASH_ScriptTeleportRequest = gMessageStringTable.getString("ScriptTeleportRequest"); + _PREHASH_EstateCovenantRequest = gMessageStringTable.getString("EstateCovenantRequest"); _PREHASH_DateUTC = gMessageStringTable.getString("DateUTC"); _PREHASH_TaskIDs = gMessageStringTable.getString("TaskIDs"); - _PREHASH_EstateCovenantRequest = gMessageStringTable.getString("EstateCovenantRequest"); _PREHASH_RequestResult = gMessageStringTable.getString("RequestResult"); - _PREHASH_ReputationAgentAssign = gMessageStringTable.getString("ReputationAgentAssign"); _PREHASH_CanAcceptAgents = gMessageStringTable.getString("CanAcceptAgents"); _PREHASH_ObjectSaleInfo = gMessageStringTable.getString("ObjectSaleInfo"); _PREHASH_KillChildAgents = gMessageStringTable.getString("KillChildAgents"); @@ -1630,7 +1492,6 @@ void init_prehash_data() _PREHASH_OwnershipCost = gMessageStringTable.getString("OwnershipCost"); _PREHASH_AvatarNotesUpdate = gMessageStringTable.getString("AvatarNotesUpdate"); _PREHASH_PID = gMessageStringTable.getString("PID"); - _PREHASH_TimeString = gMessageStringTable.getString("TimeString"); _PREHASH_DirPopularReply = gMessageStringTable.getString("DirPopularReply"); _PREHASH_TerrainHeightRange00 = gMessageStringTable.getString("TerrainHeightRange00"); _PREHASH_SimData = gMessageStringTable.getString("SimData"); @@ -1656,7 +1517,6 @@ void init_prehash_data() _PREHASH_URL = gMessageStringTable.getString("URL"); _PREHASH_CreationDate = gMessageStringTable.getString("CreationDate"); _PREHASH_JointPivot = gMessageStringTable.getString("JointPivot"); - _PREHASH_RateeID = gMessageStringTable.getString("RateeID"); _PREHASH_FPS = gMessageStringTable.getString("FPS"); _PREHASH_HasTelehub = gMessageStringTable.getString("HasTelehub"); _PREHASH_PathEnd = gMessageStringTable.getString("PathEnd"); @@ -1681,7 +1541,6 @@ void init_prehash_data() _PREHASH_ParcelAccessListReply = gMessageStringTable.getString("ParcelAccessListReply"); _PREHASH_RpcChannelReply = gMessageStringTable.getString("RpcChannelReply"); _PREHASH_RegionPresenceResponse = gMessageStringTable.getString("RegionPresenceResponse"); - _PREHASH_AgentPresenceResponse = gMessageStringTable.getString("AgentPresenceResponse"); _PREHASH_CharterMember = gMessageStringTable.getString("CharterMember"); _PREHASH_EdgeData = gMessageStringTable.getString("EdgeData"); _PREHASH_NameData = gMessageStringTable.getString("NameData"); @@ -1695,14 +1554,12 @@ void init_prehash_data() _PREHASH_ParcelPropertiesRequestByID = gMessageStringTable.getString("ParcelPropertiesRequestByID"); _PREHASH_ObjectLink = gMessageStringTable.getString("ObjectLink"); _PREHASH_RpcScriptReplyInbound = gMessageStringTable.getString("RpcScriptReplyInbound"); - _PREHASH_BoardData = gMessageStringTable.getString("BoardData"); _PREHASH_RezData = gMessageStringTable.getString("RezData"); _PREHASH_RemoveInventoryObjects = gMessageStringTable.getString("RemoveInventoryObjects"); _PREHASH_GroupProposalBallot = gMessageStringTable.getString("GroupProposalBallot"); _PREHASH_RPCServerIP = gMessageStringTable.getString("RPCServerIP"); _PREHASH_Far = gMessageStringTable.getString("Far"); _PREHASH_GodSessionID = gMessageStringTable.getString("GodSessionID"); - _PREHASH_ViewerDigest = gMessageStringTable.getString("ViewerDigest"); _PREHASH_FLAboutText = gMessageStringTable.getString("FLAboutText"); _PREHASH_RegionHandshakeReply = gMessageStringTable.getString("RegionHandshakeReply"); _PREHASH_GroupActiveProposalItemReply = gMessageStringTable.getString("GroupActiveProposalItemReply"); @@ -1714,7 +1571,6 @@ void init_prehash_data() _PREHASH_NewName = gMessageStringTable.getString("NewName"); _PREHASH_Key = gMessageStringTable.getString("Key"); _PREHASH_AgentID = gMessageStringTable.getString("AgentID"); - _PREHASH_OnlineStatusRequest = gMessageStringTable.getString("OnlineStatusRequest"); _PREHASH_EventNotificationRemoveRequest = gMessageStringTable.getString("EventNotificationRemoveRequest"); _PREHASH_NewFolderID = gMessageStringTable.getString("NewFolderID"); _PREHASH_Arc = gMessageStringTable.getString("Arc"); @@ -1726,7 +1582,6 @@ void init_prehash_data() _PREHASH_MiscStats = gMessageStringTable.getString("MiscStats"); _PREHASH_ImageID = gMessageStringTable.getString("ImageID"); _PREHASH_DataPacket = gMessageStringTable.getString("DataPacket"); - _PREHASH_ObjectDehinge = gMessageStringTable.getString("ObjectDehinge"); _PREHASH_You = gMessageStringTable.getString("You"); _PREHASH_ScriptControlChange = gMessageStringTable.getString("ScriptControlChange"); _PREHASH_LoadURL = gMessageStringTable.getString("LoadURL"); @@ -1743,9 +1598,9 @@ void init_prehash_data() _PREHASH_SetGroupContribution = gMessageStringTable.getString("SetGroupContribution"); _PREHASH_Offline = gMessageStringTable.getString("Offline"); _PREHASH_AgentIsNowWearing = gMessageStringTable.getString("AgentIsNowWearing"); - _PREHASH_SecPerDay = gMessageStringTable.getString("SecPerDay"); _PREHASH_Members = gMessageStringTable.getString("Members"); _PREHASH_FailedResends = gMessageStringTable.getString("FailedResends"); + _PREHASH_SecPerDay = gMessageStringTable.getString("SecPerDay"); _PREHASH_CameraCenter = gMessageStringTable.getString("CameraCenter"); _PREHASH_CameraLeftAxis = gMessageStringTable.getString("CameraLeftAxis"); _PREHASH_ExBlock = gMessageStringTable.getString("ExBlock"); @@ -1753,7 +1608,6 @@ void init_prehash_data() _PREHASH_NetTest = gMessageStringTable.getString("NetTest"); _PREHASH_DiscardLevel = gMessageStringTable.getString("DiscardLevel"); _PREHASH_LayerID = gMessageStringTable.getString("LayerID"); - _PREHASH_RatorID = gMessageStringTable.getString("RatorID"); _PREHASH_GrabOffset = gMessageStringTable.getString("GrabOffset"); _PREHASH_SimPort = gMessageStringTable.getString("SimPort"); _PREHASH_PricePerMeter = gMessageStringTable.getString("PricePerMeter"); @@ -1773,21 +1627,16 @@ void init_prehash_data() _PREHASH_RegionsVisited = gMessageStringTable.getString("RegionsVisited"); _PREHASH_DirClassifiedReply = gMessageStringTable.getString("DirClassifiedReply"); _PREHASH_AvatarClassifiedReply = gMessageStringTable.getString("AvatarClassifiedReply"); - _PREHASH_ReputationIndividualReply = gMessageStringTable.getString("ReputationIndividualReply"); _PREHASH_MediaURL = gMessageStringTable.getString("MediaURL"); _PREHASH_CompleteAgentMovement = gMessageStringTable.getString("CompleteAgentMovement"); - _PREHASH_SpaceIP = gMessageStringTable.getString("SpaceIP"); _PREHASH_ClassifiedID = gMessageStringTable.getString("ClassifiedID"); _PREHASH_LocalID = gMessageStringTable.getString("LocalID"); + _PREHASH_SpaceIP = gMessageStringTable.getString("SpaceIP"); _PREHASH_RemoveItem = gMessageStringTable.getString("RemoveItem"); _PREHASH_LogFailedMoneyTransaction = gMessageStringTable.getString("LogFailedMoneyTransaction"); _PREHASH_ViewerStartAuction = gMessageStringTable.getString("ViewerStartAuction"); _PREHASH_StartAuction = gMessageStringTable.getString("StartAuction"); - _PREHASH_NameValueName = gMessageStringTable.getString("NameValueName"); - _PREHASH_AngVelX = gMessageStringTable.getString("AngVelX"); _PREHASH_DuplicateFlags = gMessageStringTable.getString("DuplicateFlags"); - _PREHASH_AngVelY = gMessageStringTable.getString("AngVelY"); - _PREHASH_AngVelZ = gMessageStringTable.getString("AngVelZ"); _PREHASH_TextColor = gMessageStringTable.getString("TextColor"); _PREHASH_SlaveID = gMessageStringTable.getString("SlaveID"); _PREHASH_Charter = gMessageStringTable.getString("Charter"); @@ -1798,21 +1647,16 @@ void init_prehash_data() _PREHASH_OwnerIsGroup = gMessageStringTable.getString("OwnerIsGroup"); _PREHASH_NameValuePair = gMessageStringTable.getString("NameValuePair"); _PREHASH_RemoveNameValuePair = gMessageStringTable.getString("RemoveNameValuePair"); - _PREHASH_GetNameValuePair = gMessageStringTable.getString("GetNameValuePair"); _PREHASH_BulkUpdateInventory = gMessageStringTable.getString("BulkUpdateInventory"); _PREHASH_UpdateTaskInventory = gMessageStringTable.getString("UpdateTaskInventory"); _PREHASH_RemoveTaskInventory = gMessageStringTable.getString("RemoveTaskInventory"); _PREHASH_MoveTaskInventory = gMessageStringTable.getString("MoveTaskInventory"); _PREHASH_RequestTaskInventory = gMessageStringTable.getString("RequestTaskInventory"); _PREHASH_ReplyTaskInventory = gMessageStringTable.getString("ReplyTaskInventory"); - _PREHASH_DeclineInventory = gMessageStringTable.getString("DeclineInventory"); _PREHASH_AggregatePermInventory = gMessageStringTable.getString("AggregatePermInventory"); - _PREHASH_SimulatorInfo = gMessageStringTable.getString("SimulatorInfo"); - _PREHASH_MoneyTransactionsReply = gMessageStringTable.getString("MoneyTransactionsReply"); _PREHASH_GroupAccountTransactionsReply = gMessageStringTable.getString("GroupAccountTransactionsReply"); - _PREHASH_MailTaskSimReply = gMessageStringTable.getString("MailTaskSimReply"); + _PREHASH_SimulatorInfo = gMessageStringTable.getString("SimulatorInfo"); _PREHASH_WearableData = gMessageStringTable.getString("WearableData"); - _PREHASH_StatisticsData = gMessageStringTable.getString("StatisticsData"); _PREHASH_Enabled = gMessageStringTable.getString("Enabled"); _PREHASH_Savings = gMessageStringTable.getString("Savings"); _PREHASH_SimulatorLoad = gMessageStringTable.getString("SimulatorLoad"); @@ -1824,15 +1668,12 @@ void init_prehash_data() _PREHASH_LeaveGroupRequest = gMessageStringTable.getString("LeaveGroupRequest"); _PREHASH_InviteGroupRequest = gMessageStringTable.getString("InviteGroupRequest"); _PREHASH_LiveHelpGroupRequest = gMessageStringTable.getString("LiveHelpGroupRequest"); - _PREHASH_ServerVersion = gMessageStringTable.getString("ServerVersion"); _PREHASH_PriceParcelClaimFactor = gMessageStringTable.getString("PriceParcelClaimFactor"); _PREHASH_BillableArea = gMessageStringTable.getString("BillableArea"); _PREHASH_ObjectID = gMessageStringTable.getString("ObjectID"); _PREHASH_ObjectFlagUpdate = gMessageStringTable.getString("ObjectFlagUpdate"); _PREHASH_GroupRoleUpdate = gMessageStringTable.getString("GroupRoleUpdate"); _PREHASH_RequestInventoryAsset = gMessageStringTable.getString("RequestInventoryAsset"); - _PREHASH_RedoLand = gMessageStringTable.getString("RedoLand"); - _PREHASH_TravelAccess = gMessageStringTable.getString("TravelAccess"); _PREHASH_ChangedGrid = gMessageStringTable.getString("ChangedGrid"); _PREHASH_AgentDropGroup = gMessageStringTable.getString("AgentDropGroup"); _PREHASH_Details = gMessageStringTable.getString("Details"); @@ -1865,7 +1706,6 @@ void init_prehash_data() _PREHASH_GlobalPos = gMessageStringTable.getString("GlobalPos"); _PREHASH_GrabOffsetInitial = gMessageStringTable.getString("GrabOffsetInitial"); _PREHASH_IsTrial = gMessageStringTable.getString("IsTrial"); - _PREHASH_FinalizeLogout = gMessageStringTable.getString("FinalizeLogout"); _PREHASH_ObjectDuplicateOnRay = gMessageStringTable.getString("ObjectDuplicateOnRay"); _PREHASH_GroupMembershipCount = gMessageStringTable.getString("GroupMembershipCount"); _PREHASH_MethodData = gMessageStringTable.getString("MethodData"); @@ -1901,32 +1741,26 @@ void init_prehash_data() _PREHASH_SimWideMaxPrims = gMessageStringTable.getString("SimWideMaxPrims"); _PREHASH_TotalPrims = gMessageStringTable.getString("TotalPrims"); _PREHASH_ProfileBegin = gMessageStringTable.getString("ProfileBegin"); - _PREHASH_MoneyDetailsRequest = gMessageStringTable.getString("MoneyDetailsRequest"); _PREHASH_Request = gMessageStringTable.getString("Request"); _PREHASH_GroupAccountDetailsRequest = gMessageStringTable.getString("GroupAccountDetailsRequest"); _PREHASH_GroupActiveProposalsRequest = gMessageStringTable.getString("GroupActiveProposalsRequest"); _PREHASH_StringValue = gMessageStringTable.getString("StringValue"); - _PREHASH_ClosestSimulator = gMessageStringTable.getString("ClosestSimulator"); _PREHASH_Version = gMessageStringTable.getString("Version"); _PREHASH_OtherCount = gMessageStringTable.getString("OtherCount"); _PREHASH_MemberCount = gMessageStringTable.getString("MemberCount"); _PREHASH_ChatData = gMessageStringTable.getString("ChatData"); _PREHASH_IsGroupOwned = gMessageStringTable.getString("IsGroupOwned"); _PREHASH_EnergyEfficiency = gMessageStringTable.getString("EnergyEfficiency"); - _PREHASH_MaxPlace = gMessageStringTable.getString("MaxPlace"); _PREHASH_PickInfoUpdate = gMessageStringTable.getString("PickInfoUpdate"); _PREHASH_PickDelete = gMessageStringTable.getString("PickDelete"); _PREHASH_ScriptReset = gMessageStringTable.getString("ScriptReset"); _PREHASH_Requester = gMessageStringTable.getString("Requester"); _PREHASH_ForSale = gMessageStringTable.getString("ForSale"); _PREHASH_NearestLandingRegionReply = gMessageStringTable.getString("NearestLandingRegionReply"); - _PREHASH_RecordAgentPresence = gMessageStringTable.getString("RecordAgentPresence"); - _PREHASH_EraseAgentPresence = gMessageStringTable.getString("EraseAgentPresence"); _PREHASH_ParcelID = gMessageStringTable.getString("ParcelID"); _PREHASH_Godlike = gMessageStringTable.getString("Godlike"); _PREHASH_TotalDebits = gMessageStringTable.getString("TotalDebits"); _PREHASH_Direction = gMessageStringTable.getString("Direction"); - _PREHASH_Appearance = gMessageStringTable.getString("Appearance"); _PREHASH_HealthData = gMessageStringTable.getString("HealthData"); _PREHASH_LeftAxis = gMessageStringTable.getString("LeftAxis"); _PREHASH_LocationBlock = gMessageStringTable.getString("LocationBlock"); @@ -1934,41 +1768,31 @@ void init_prehash_data() _PREHASH_TerrainStartHeight00 = gMessageStringTable.getString("TerrainStartHeight00"); _PREHASH_TerrainStartHeight01 = gMessageStringTable.getString("TerrainStartHeight01"); _PREHASH_TerrainStartHeight10 = gMessageStringTable.getString("TerrainStartHeight10"); - _PREHASH_ObjectHinge = gMessageStringTable.getString("ObjectHinge"); _PREHASH_TerrainStartHeight11 = gMessageStringTable.getString("TerrainStartHeight11"); - _PREHASH_MetersPerGrid = gMessageStringTable.getString("MetersPerGrid"); _PREHASH_WaterHeight = gMessageStringTable.getString("WaterHeight"); _PREHASH_FetchInventoryReply = gMessageStringTable.getString("FetchInventoryReply"); - _PREHASH_MoneySummaryReply = gMessageStringTable.getString("MoneySummaryReply"); _PREHASH_GroupAccountSummaryReply = gMessageStringTable.getString("GroupAccountSummaryReply"); _PREHASH_AttachedSound = gMessageStringTable.getString("AttachedSound"); _PREHASH_ParamInUse = gMessageStringTable.getString("ParamInUse"); _PREHASH_GodKickUser = gMessageStringTable.getString("GodKickUser"); _PREHASH_PickName = gMessageStringTable.getString("PickName"); _PREHASH_TaskName = gMessageStringTable.getString("TaskName"); - _PREHASH_SubType = gMessageStringTable.getString("SubType"); _PREHASH_ObjectCount = gMessageStringTable.getString("ObjectCount"); _PREHASH_RegionPresenceRequestByHandle = gMessageStringTable.getString("RegionPresenceRequestByHandle"); _PREHASH_RezSingleAttachmentFromInv = gMessageStringTable.getString("RezSingleAttachmentFromInv"); _PREHASH_ChildAgentUpdate = gMessageStringTable.getString("ChildAgentUpdate"); - _PREHASH_ToID = gMessageStringTable.getString("ToID"); - _PREHASH_ViewerPort = gMessageStringTable.getString("ViewerPort"); _PREHASH_IsOwnerGroup = gMessageStringTable.getString("IsOwnerGroup"); _PREHASH_AgentHeightWidth = gMessageStringTable.getString("AgentHeightWidth"); _PREHASH_VerticalAngle = gMessageStringTable.getString("VerticalAngle"); _PREHASH_WearableType = gMessageStringTable.getString("WearableType"); _PREHASH_AggregatePermNextOwner = gMessageStringTable.getString("AggregatePermNextOwner"); _PREHASH_ShowInList = gMessageStringTable.getString("ShowInList"); - _PREHASH_PositionSuggestion = gMessageStringTable.getString("PositionSuggestion"); _PREHASH_UpdateParcel = gMessageStringTable.getString("UpdateParcel"); - _PREHASH_ClearAgentSessions = gMessageStringTable.getString("ClearAgentSessions"); _PREHASH_SetAlwaysRun = gMessageStringTable.getString("SetAlwaysRun"); _PREHASH_NVPair = gMessageStringTable.getString("NVPair"); _PREHASH_SearchType = gMessageStringTable.getString("SearchType"); _PREHASH_ObjectSpinStart = gMessageStringTable.getString("ObjectSpinStart"); _PREHASH_UseEstateSun = gMessageStringTable.getString("UseEstateSun"); - _PREHASH_LogoutBlock = gMessageStringTable.getString("LogoutBlock"); - _PREHASH_RelayLogControl = gMessageStringTable.getString("RelayLogControl"); _PREHASH_RegionID = gMessageStringTable.getString("RegionID"); _PREHASH_AbuseRegionID = gMessageStringTable.getString("AbuseRegionID"); _PREHASH_Creator = gMessageStringTable.getString("Creator"); @@ -1977,14 +1801,12 @@ void init_prehash_data() _PREHASH_EventInfoReply = gMessageStringTable.getString("EventInfoReply"); _PREHASH_UserInfoReply = gMessageStringTable.getString("UserInfoReply"); _PREHASH_PathRadiusOffset = gMessageStringTable.getString("PathRadiusOffset"); - _PREHASH_SessionInfo = gMessageStringTable.getString("SessionInfo"); _PREHASH_TextureData = gMessageStringTable.getString("TextureData"); _PREHASH_ChatPass = gMessageStringTable.getString("ChatPass"); _PREHASH_TargetID = gMessageStringTable.getString("TargetID"); _PREHASH_DefaultPayPrice = gMessageStringTable.getString("DefaultPayPrice"); _PREHASH_UserLocation = gMessageStringTable.getString("UserLocation"); _PREHASH_MaxPrims = gMessageStringTable.getString("MaxPrims"); - _PREHASH_RegionIP = gMessageStringTable.getString("RegionIP"); _PREHASH_LandmarkID = gMessageStringTable.getString("LandmarkID"); _PREHASH_InitiateDownload = gMessageStringTable.getString("InitiateDownload"); _PREHASH_Name = gMessageStringTable.getString("Name"); @@ -1992,18 +1814,13 @@ void init_prehash_data() _PREHASH_ParcelSetOtherCleanTime = gMessageStringTable.getString("ParcelSetOtherCleanTime"); _PREHASH_TeleportPriceExponent = gMessageStringTable.getString("TeleportPriceExponent"); _PREHASH_Gain = gMessageStringTable.getString("Gain"); - _PREHASH_VelX = gMessageStringTable.getString("VelX"); _PREHASH_PacketAck = gMessageStringTable.getString("PacketAck"); _PREHASH_PathSkew = gMessageStringTable.getString("PathSkew"); - _PREHASH_Negative = gMessageStringTable.getString("Negative"); - _PREHASH_VelY = gMessageStringTable.getString("VelY"); _PREHASH_SimulatorShutdownRequest = gMessageStringTable.getString("SimulatorShutdownRequest"); _PREHASH_NearestLandingRegionRequest = gMessageStringTable.getString("NearestLandingRegionRequest"); - _PREHASH_VelZ = gMessageStringTable.getString("VelZ"); _PREHASH_OtherID = gMessageStringTable.getString("OtherID"); _PREHASH_MemberID = gMessageStringTable.getString("MemberID"); _PREHASH_MapLayerRequest = gMessageStringTable.getString("MapLayerRequest"); - _PREHASH_PatchVersion = gMessageStringTable.getString("PatchVersion"); _PREHASH_ObjectScale = gMessageStringTable.getString("ObjectScale"); _PREHASH_TargetIP = gMessageStringTable.getString("TargetIP"); _PREHASH_Redo = gMessageStringTable.getString("Redo"); @@ -2046,27 +1863,20 @@ void init_prehash_data() _PREHASH_Code = gMessageStringTable.getString("Code"); _PREHASH_InvType = gMessageStringTable.getString("InvType"); _PREHASH_AgentFOV = gMessageStringTable.getString("AgentFOV"); - _PREHASH_BulkMoneyTransfer = gMessageStringTable.getString("BulkMoneyTransfer"); _PREHASH_Audible = gMessageStringTable.getString("Audible"); _PREHASH_AuctionData = gMessageStringTable.getString("AuctionData"); _PREHASH_IDBlock = gMessageStringTable.getString("IDBlock"); - _PREHASH_ReputationData = gMessageStringTable.getString("ReputationData"); _PREHASH_West = gMessageStringTable.getString("West"); _PREHASH_Undo = gMessageStringTable.getString("Undo"); _PREHASH_TotalNumItems = gMessageStringTable.getString("TotalNumItems"); _PREHASH_Info = gMessageStringTable.getString("Info"); _PREHASH_Area = gMessageStringTable.getString("Area"); - _PREHASH_Behavior = gMessageStringTable.getString("Behavior"); _PREHASH_SimCrashed = gMessageStringTable.getString("SimCrashed"); _PREHASH_Text = gMessageStringTable.getString("Text"); - _PREHASH_AgentToNewRegion = gMessageStringTable.getString("AgentToNewRegion"); _PREHASH_PriceGroupCreate = gMessageStringTable.getString("PriceGroupCreate"); _PREHASH_ObjectShape = gMessageStringTable.getString("ObjectShape"); _PREHASH_GroupRoleDataReply = gMessageStringTable.getString("GroupRoleDataReply"); - _PREHASH_PosX = gMessageStringTable.getString("PosX"); - _PREHASH_PosY = gMessageStringTable.getString("PosY"); _PREHASH_MuteCRC = gMessageStringTable.getString("MuteCRC"); - _PREHASH_PosZ = gMessageStringTable.getString("PosZ"); _PREHASH_Size = gMessageStringTable.getString("Size"); _PREHASH_FromAddress = gMessageStringTable.getString("FromAddress"); _PREHASH_Body = gMessageStringTable.getString("Body"); @@ -2084,16 +1894,14 @@ void init_prehash_data() _PREHASH_SoundID = gMessageStringTable.getString("SoundID"); _PREHASH_Item = gMessageStringTable.getString("Item"); _PREHASH_User = gMessageStringTable.getString("User"); - _PREHASH_RemoteInfos = gMessageStringTable.getString("RemoteInfos"); _PREHASH_Prey = gMessageStringTable.getString("Prey"); - _PREHASH_UsecSinceStart = gMessageStringTable.getString("UsecSinceStart"); _PREHASH_RayStart = gMessageStringTable.getString("RayStart"); + _PREHASH_UsecSinceStart = gMessageStringTable.getString("UsecSinceStart"); _PREHASH_ParcelData = gMessageStringTable.getString("ParcelData"); _PREHASH_CameraUpAxis = gMessageStringTable.getString("CameraUpAxis"); _PREHASH_ScriptDialog = gMessageStringTable.getString("ScriptDialog"); _PREHASH_MasterParcelData = gMessageStringTable.getString("MasterParcelData"); _PREHASH_Invalid = gMessageStringTable.getString("Invalid"); - _PREHASH_MinPlace = gMessageStringTable.getString("MinPlace"); _PREHASH_ProfileCurve = gMessageStringTable.getString("ProfileCurve"); _PREHASH_ParcelAccessListUpdate = gMessageStringTable.getString("ParcelAccessListUpdate"); _PREHASH_MuteListUpdate = gMessageStringTable.getString("MuteListUpdate"); @@ -2112,14 +1920,12 @@ void init_prehash_data() _PREHASH_IsTemporary = gMessageStringTable.getString("IsTemporary"); _PREHASH_InsigniaID = gMessageStringTable.getString("InsigniaID"); _PREHASH_CheckFlags = gMessageStringTable.getString("CheckFlags"); - _PREHASH_TransferPriority = gMessageStringTable.getString("TransferPriority"); _PREHASH_EventID = gMessageStringTable.getString("EventID"); _PREHASH_Selected = gMessageStringTable.getString("Selected"); _PREHASH_FromAgentId = gMessageStringTable.getString("FromAgentId"); _PREHASH_Type = gMessageStringTable.getString("Type"); _PREHASH_ChatType = gMessageStringTable.getString("ChatType"); _PREHASH_ReportData = gMessageStringTable.getString("ReportData"); - _PREHASH_LeaderBoardData = gMessageStringTable.getString("LeaderBoardData"); _PREHASH_RequestBlock = gMessageStringTable.getString("RequestBlock"); _PREHASH_GrantData = gMessageStringTable.getString("GrantData"); _PREHASH_DetachAttachmentIntoInv = gMessageStringTable.getString("DetachAttachmentIntoInv"); @@ -2135,12 +1941,9 @@ void init_prehash_data() _PREHASH_OfflineNotification = gMessageStringTable.getString("OfflineNotification"); _PREHASH_SendPostcard = gMessageStringTable.getString("SendPostcard"); _PREHASH_RequestFlags = gMessageStringTable.getString("RequestFlags"); - _PREHASH_MoneyHistoryRequest = gMessageStringTable.getString("MoneyHistoryRequest"); - _PREHASH_MoneySummaryRequest = gMessageStringTable.getString("MoneySummaryRequest"); _PREHASH_GroupAccountSummaryRequest = gMessageStringTable.getString("GroupAccountSummaryRequest"); _PREHASH_GroupVoteHistoryRequest = gMessageStringTable.getString("GroupVoteHistoryRequest"); _PREHASH_ParamValue = gMessageStringTable.getString("ParamValue"); - _PREHASH_Checksum = gMessageStringTable.getString("Checksum"); _PREHASH_MaxAgents = gMessageStringTable.getString("MaxAgents"); _PREHASH_CreateNewOutfitAttachments = gMessageStringTable.getString("CreateNewOutfitAttachments"); _PREHASH_RegionHandle = gMessageStringTable.getString("RegionHandle"); @@ -2150,12 +1953,10 @@ void init_prehash_data() _PREHASH_GroupNoticeID = gMessageStringTable.getString("GroupNoticeID"); _PREHASH_ParcelName = gMessageStringTable.getString("ParcelName"); _PREHASH_PriceObjectRent = gMessageStringTable.getString("PriceObjectRent"); - _PREHASH_ConnectAgentToUserserver = gMessageStringTable.getString("ConnectAgentToUserserver"); - _PREHASH_ConnectToUserserver = gMessageStringTable.getString("ConnectToUserserver"); _PREHASH_OfferCallingCard = gMessageStringTable.getString("OfferCallingCard"); - _PREHASH_AgentAccess = gMessageStringTable.getString("AgentAccess"); _PREHASH_AcceptCallingCard = gMessageStringTable.getString("AcceptCallingCard"); _PREHASH_DeclineCallingCard = gMessageStringTable.getString("DeclineCallingCard"); + _PREHASH_AgentAccess = gMessageStringTable.getString("AgentAccess"); _PREHASH_DataHomeLocationReply = gMessageStringTable.getString("DataHomeLocationReply"); _PREHASH_EventLocationReply = gMessageStringTable.getString("EventLocationReply"); _PREHASH_TerseDateID = gMessageStringTable.getString("TerseDateID"); @@ -2173,8 +1974,8 @@ void init_prehash_data() _PREHASH_IntervalDays = gMessageStringTable.getString("IntervalDays"); _PREHASH_PathScaleX = gMessageStringTable.getString("PathScaleX"); _PREHASH_FromTaskID = gMessageStringTable.getString("FromTaskID"); - _PREHASH_TimeInfo = gMessageStringTable.getString("TimeInfo"); _PREHASH_PathScaleY = gMessageStringTable.getString("PathScaleY"); + _PREHASH_TimeInfo = gMessageStringTable.getString("TimeInfo"); _PREHASH_PublicCount = gMessageStringTable.getString("PublicCount"); _PREHASH_ParcelJoin = gMessageStringTable.getString("ParcelJoin"); _PREHASH_GroupRolesCount = gMessageStringTable.getString("GroupRolesCount"); @@ -2199,7 +2000,6 @@ void init_prehash_data() _PREHASH_PassToAgent = gMessageStringTable.getString("PassToAgent"); _PREHASH_PreyAgent = gMessageStringTable.getString("PreyAgent"); _PREHASH_SimStats = gMessageStringTable.getString("SimStats"); - _PREHASH_Options = gMessageStringTable.getString("Options"); _PREHASH_LogoutReply = gMessageStringTable.getString("LogoutReply"); _PREHASH_FeatureDisabled = gMessageStringTable.getString("FeatureDisabled"); _PREHASH_ObjectLocalID = gMessageStringTable.getString("ObjectLocalID"); @@ -2210,10 +2010,8 @@ void init_prehash_data() _PREHASH_MasterID = gMessageStringTable.getString("MasterID"); _PREHASH_TransferData = gMessageStringTable.getString("TransferData"); _PREHASH_WantToMask = gMessageStringTable.getString("WantToMask"); - _PREHASH_AvatarData = gMessageStringTable.getString("AvatarData"); _PREHASH_ParcelSelectObjects = gMessageStringTable.getString("ParcelSelectObjects"); _PREHASH_ExtraParams = gMessageStringTable.getString("ExtraParams"); - _PREHASH_LogLogin = gMessageStringTable.getString("LogLogin"); _PREHASH_CreatorID = gMessageStringTable.getString("CreatorID"); _PREHASH_Summary = gMessageStringTable.getString("Summary"); _PREHASH_BuyObjectInventory = gMessageStringTable.getString("BuyObjectInventory"); @@ -2254,8 +2052,8 @@ void init_prehash_data() _PREHASH_GranterID = gMessageStringTable.getString("GranterID"); _PREHASH_WantToText = gMessageStringTable.getString("WantToText"); _PREHASH_ReportType = gMessageStringTable.getString("ReportType"); - _PREHASH_DataBlock = gMessageStringTable.getString("DataBlock"); _PREHASH_SimulatorReady = gMessageStringTable.getString("SimulatorReady"); + _PREHASH_DataBlock = gMessageStringTable.getString("DataBlock"); _PREHASH_AnimationSourceList = gMessageStringTable.getString("AnimationSourceList"); _PREHASH_SubscribeLoad = gMessageStringTable.getString("SubscribeLoad"); _PREHASH_UnsubscribeLoad = gMessageStringTable.getString("UnsubscribeLoad"); @@ -2282,9 +2080,8 @@ void init_prehash_data() _PREHASH_GestureFlags = gMessageStringTable.getString("GestureFlags"); _PREHASH_XferID = gMessageStringTable.getString("XferID"); _PREHASH_StatValue = gMessageStringTable.getString("StatValue"); - _PREHASH_PickID = gMessageStringTable.getString("PickID"); _PREHASH_TaskID = gMessageStringTable.getString("TaskID"); - _PREHASH_GridsPerEdge = gMessageStringTable.getString("GridsPerEdge"); + _PREHASH_PickID = gMessageStringTable.getString("PickID"); _PREHASH_RayEnd = gMessageStringTable.getString("RayEnd"); _PREHASH_Throttles = gMessageStringTable.getString("Throttles"); _PREHASH_RebakeAvatarTextures = gMessageStringTable.getString("RebakeAvatarTextures"); @@ -2297,30 +2094,24 @@ void init_prehash_data() _PREHASH_TitleRoleID = gMessageStringTable.getString("TitleRoleID"); _PREHASH_SquareMetersCredit = gMessageStringTable.getString("SquareMetersCredit"); _PREHASH_Filename = gMessageStringTable.getString("Filename"); - _PREHASH_SecuredTemplateChecksumRequest = gMessageStringTable.getString("SecuredTemplateChecksumRequest"); - _PREHASH_TemplateChecksumRequest = gMessageStringTable.getString("TemplateChecksumRequest"); - _PREHASH_AgentPresenceRequest = gMessageStringTable.getString("AgentPresenceRequest"); _PREHASH_ClassifiedInfoRequest = gMessageStringTable.getString("ClassifiedInfoRequest"); _PREHASH_ParcelInfoRequest = gMessageStringTable.getString("ParcelInfoRequest"); _PREHASH_ParcelObjectOwnersRequest = gMessageStringTable.getString("ParcelObjectOwnersRequest"); _PREHASH_TeleportLandmarkRequest = gMessageStringTable.getString("TeleportLandmarkRequest"); _PREHASH_EventInfoRequest = gMessageStringTable.getString("EventInfoRequest"); - _PREHASH_ChatFromSimulator = gMessageStringTable.getString("ChatFromSimulator"); - _PREHASH_PickInfoRequest = gMessageStringTable.getString("PickInfoRequest"); _PREHASH_MoneyBalanceRequest = gMessageStringTable.getString("MoneyBalanceRequest"); _PREHASH_GroupMembersRequest = gMessageStringTable.getString("GroupMembersRequest"); _PREHASH_GroupRoleMembersRequest = gMessageStringTable.getString("GroupRoleMembersRequest"); + _PREHASH_ChatFromSimulator = gMessageStringTable.getString("ChatFromSimulator"); _PREHASH_OldFolderID = gMessageStringTable.getString("OldFolderID"); _PREHASH_UserInfoRequest = gMessageStringTable.getString("UserInfoRequest"); _PREHASH_TextureID = gMessageStringTable.getString("TextureID"); _PREHASH_ProfileURL = gMessageStringTable.getString("ProfileURL"); _PREHASH_Handle = gMessageStringTable.getString("Handle"); - _PREHASH_StartParcelRenameAck = gMessageStringTable.getString("StartParcelRenameAck"); _PREHASH_ButtonIndex = gMessageStringTable.getString("ButtonIndex"); _PREHASH_GetScriptRunning = gMessageStringTable.getString("GetScriptRunning"); _PREHASH_SetScriptRunning = gMessageStringTable.getString("SetScriptRunning"); _PREHASH_Health = gMessageStringTable.getString("Health"); - _PREHASH_FileID = gMessageStringTable.getString("FileID"); _PREHASH_CircuitInfo = gMessageStringTable.getString("CircuitInfo"); _PREHASH_ObjectBuy = gMessageStringTable.getString("ObjectBuy"); _PREHASH_ProfileEnd = gMessageStringTable.getString("ProfileEnd"); @@ -2345,7 +2136,6 @@ void init_prehash_data() _PREHASH_Change = gMessageStringTable.getString("Change"); _PREHASH_Height = gMessageStringTable.getString("Height"); _PREHASH_Region = gMessageStringTable.getString("Region"); - _PREHASH_MoneyHistoryReply = gMessageStringTable.getString("MoneyHistoryReply"); _PREHASH_TelehubInfo = gMessageStringTable.getString("TelehubInfo"); _PREHASH_StateSave = gMessageStringTable.getString("StateSave"); _PREHASH_RoleData = gMessageStringTable.getString("RoleData"); @@ -2356,11 +2146,10 @@ void init_prehash_data() _PREHASH_UsePhysics = gMessageStringTable.getString("UsePhysics"); _PREHASH_RegionDenyTransacted = gMessageStringTable.getString("RegionDenyTransacted"); _PREHASH_JointType = gMessageStringTable.getString("JointType"); - _PREHASH_TaxEstimate = gMessageStringTable.getString("TaxEstimate"); _PREHASH_ObjectTaxEstimate = gMessageStringTable.getString("ObjectTaxEstimate"); _PREHASH_LightTaxEstimate = gMessageStringTable.getString("LightTaxEstimate"); - _PREHASH_TeleportLandingStatusChanged = gMessageStringTable.getString("TeleportLandingStatusChanged"); _PREHASH_LandTaxEstimate = gMessageStringTable.getString("LandTaxEstimate"); + _PREHASH_TeleportLandingStatusChanged = gMessageStringTable.getString("TeleportLandingStatusChanged"); _PREHASH_GroupTaxEstimate = gMessageStringTable.getString("GroupTaxEstimate"); _PREHASH_AvgViewerFPS = gMessageStringTable.getString("AvgViewerFPS"); _PREHASH_Buttons = gMessageStringTable.getString("Buttons"); @@ -2392,8 +2181,6 @@ void init_prehash_data() _PREHASH_ChannelType = gMessageStringTable.getString("ChannelType"); _PREHASH_NonExemptMembers = gMessageStringTable.getString("NonExemptMembers"); _PREHASH_Agents = gMessageStringTable.getString("Agents"); - _PREHASH_SimulatorStart = gMessageStringTable.getString("SimulatorStart"); - _PREHASH_Enable = gMessageStringTable.getString("Enable"); _PREHASH_MemberData = gMessageStringTable.getString("MemberData"); _PREHASH_ToGroupID = gMessageStringTable.getString("ToGroupID"); _PREHASH_ImageNotInDatabase = gMessageStringTable.getString("ImageNotInDatabase"); @@ -2401,27 +2188,21 @@ void init_prehash_data() _PREHASH_AnimID = gMessageStringTable.getString("AnimID"); _PREHASH_Serial = gMessageStringTable.getString("Serial"); _PREHASH_AbuseRegionName = gMessageStringTable.getString("AbuseRegionName"); - _PREHASH_ControlPort = gMessageStringTable.getString("ControlPort"); _PREHASH_ModifyLand = gMessageStringTable.getString("ModifyLand"); _PREHASH_Digest = gMessageStringTable.getString("Digest"); _PREHASH_Victim = gMessageStringTable.getString("Victim"); _PREHASH_Script = gMessageStringTable.getString("Script"); - _PREHASH_TemplateChecksumReply = gMessageStringTable.getString("TemplateChecksumReply"); _PREHASH_PickInfoReply = gMessageStringTable.getString("PickInfoReply"); _PREHASH_MoneyBalanceReply = gMessageStringTable.getString("MoneyBalanceReply"); _PREHASH_RoutedMoneyBalanceReply = gMessageStringTable.getString("RoutedMoneyBalanceReply"); _PREHASH_RoleID = gMessageStringTable.getString("RoleID"); _PREHASH_RegionInfo = gMessageStringTable.getString("RegionInfo"); - _PREHASH_Sequence = gMessageStringTable.getString("Sequence"); _PREHASH_GodUpdateRegionInfo = gMessageStringTable.getString("GodUpdateRegionInfo"); - _PREHASH_LocalX = gMessageStringTable.getString("LocalX"); - _PREHASH_LocalY = gMessageStringTable.getString("LocalY"); _PREHASH_StartAnim = gMessageStringTable.getString("StartAnim"); - _PREHASH_Location = gMessageStringTable.getString("Location"); _PREHASH_Action = gMessageStringTable.getString("Action"); + _PREHASH_Location = gMessageStringTable.getString("Location"); _PREHASH_Rights = gMessageStringTable.getString("Rights"); _PREHASH_SearchDir = gMessageStringTable.getString("SearchDir"); - _PREHASH_Active = gMessageStringTable.getString("Active"); _PREHASH_TransferRequest = gMessageStringTable.getString("TransferRequest"); _PREHASH_ScriptSensorRequest = gMessageStringTable.getString("ScriptSensorRequest"); _PREHASH_MoneyTransferRequest = gMessageStringTable.getString("MoneyTransferRequest"); @@ -2432,8 +2213,6 @@ void init_prehash_data() _PREHASH_SharedData = gMessageStringTable.getString("SharedData"); _PREHASH_PSBlock = gMessageStringTable.getString("PSBlock"); _PREHASH_UUIDNameBlock = gMessageStringTable.getString("UUIDNameBlock"); - _PREHASH_Viewer = gMessageStringTable.getString("Viewer"); - _PREHASH_GroupNoticeDelete = gMessageStringTable.getString("GroupNoticeDelete"); _PREHASH_GroupTitleUpdate = gMessageStringTable.getString("GroupTitleUpdate"); _PREHASH_Method = gMessageStringTable.getString("Method"); _PREHASH_TouchName = gMessageStringTable.getString("TouchName"); @@ -2445,11 +2224,9 @@ void init_prehash_data() _PREHASH_SystemMessage = gMessageStringTable.getString("SystemMessage"); _PREHASH_BodyRotation = gMessageStringTable.getString("BodyRotation"); _PREHASH_SearchRegions = gMessageStringTable.getString("SearchRegions"); - _PREHASH_Ignore = gMessageStringTable.getString("Ignore"); _PREHASH_AnimationData = gMessageStringTable.getString("AnimationData"); _PREHASH_StatID = gMessageStringTable.getString("StatID"); _PREHASH_ItemID = gMessageStringTable.getString("ItemID"); - _PREHASH_AvatarStatisticsReply = gMessageStringTable.getString("AvatarStatisticsReply"); _PREHASH_ScriptDialogReply = gMessageStringTable.getString("ScriptDialogReply"); _PREHASH_RegionIDAndHandleReply = gMessageStringTable.getString("RegionIDAndHandleReply"); _PREHASH_CameraAtOffset = gMessageStringTable.getString("CameraAtOffset"); @@ -2474,7 +2251,6 @@ void init_prehash_data() _PREHASH_RegionPort = gMessageStringTable.getString("RegionPort"); _PREHASH_PriceEnergyUnit = gMessageStringTable.getString("PriceEnergyUnit"); _PREHASH_Bitmap = gMessageStringTable.getString("Bitmap"); - _PREHASH_TrackAgentSession = gMessageStringTable.getString("TrackAgentSession"); _PREHASH_CacheMissType = gMessageStringTable.getString("CacheMissType"); _PREHASH_VFileID = gMessageStringTable.getString("VFileID"); _PREHASH_GroupInsigniaID = gMessageStringTable.getString("GroupInsigniaID"); @@ -2522,7 +2298,6 @@ void init_prehash_data() _PREHASH_CanAcceptTasks = gMessageStringTable.getString("CanAcceptTasks"); _PREHASH_ItemData = gMessageStringTable.getString("ItemData"); _PREHASH_AnimationList = gMessageStringTable.getString("AnimationList"); - _PREHASH_PassObject = gMessageStringTable.getString("PassObject"); _PREHASH_Reputation = gMessageStringTable.getString("Reputation"); _PREHASH_IntValue = gMessageStringTable.getString("IntValue"); _PREHASH_TargetType = gMessageStringTable.getString("TargetType"); @@ -2545,10 +2320,8 @@ void init_prehash_data() _PREHASH_DirFindQueryBackend = gMessageStringTable.getString("DirFindQueryBackend"); _PREHASH_DirPlacesQueryBackend = gMessageStringTable.getString("DirPlacesQueryBackend"); _PREHASH_DirClassifiedQueryBackend = gMessageStringTable.getString("DirClassifiedQueryBackend"); - _PREHASH_DirPicksQueryBackend = gMessageStringTable.getString("DirPicksQueryBackend"); _PREHASH_DirLandQueryBackend = gMessageStringTable.getString("DirLandQueryBackend"); _PREHASH_DirPopularQueryBackend = gMessageStringTable.getString("DirPopularQueryBackend"); - _PREHASH_LogoutDemand = gMessageStringTable.getString("LogoutDemand"); _PREHASH_HistoryData = gMessageStringTable.getString("HistoryData"); _PREHASH_SnapshotID = gMessageStringTable.getString("SnapshotID"); _PREHASH_Aspect = gMessageStringTable.getString("Aspect"); @@ -2556,7 +2329,6 @@ void init_prehash_data() _PREHASH_VoteCast = gMessageStringTable.getString("VoteCast"); _PREHASH_CastsShadows = gMessageStringTable.getString("CastsShadows"); _PREHASH_EveryoneMask = gMessageStringTable.getString("EveryoneMask"); - _PREHASH_SetSunPhase = gMessageStringTable.getString("SetSunPhase"); _PREHASH_ObjectSpinUpdate = gMessageStringTable.getString("ObjectSpinUpdate"); _PREHASH_MaturePublish = gMessageStringTable.getString("MaturePublish"); _PREHASH_UseExistingAsset = gMessageStringTable.getString("UseExistingAsset"); @@ -2565,7 +2337,6 @@ void init_prehash_data() _PREHASH_TeleportCancel = gMessageStringTable.getString("TeleportCancel"); _PREHASH_UnixTime = gMessageStringTable.getString("UnixTime"); _PREHASH_QueryFlags = gMessageStringTable.getString("QueryFlags"); - _PREHASH_LastExecFroze = gMessageStringTable.getString("LastExecFroze"); _PREHASH_AlwaysRun = gMessageStringTable.getString("AlwaysRun"); _PREHASH_Bottom = gMessageStringTable.getString("Bottom"); _PREHASH_ButtonData = gMessageStringTable.getString("ButtonData"); @@ -2584,7 +2355,6 @@ void init_prehash_data() _PREHASH_GroupNoticesListRequest = gMessageStringTable.getString("GroupNoticesListRequest"); _PREHASH_ParcelAccessListRequest = gMessageStringTable.getString("ParcelAccessListRequest"); _PREHASH_MuteListRequest = gMessageStringTable.getString("MuteListRequest"); - _PREHASH_StartPeriod = gMessageStringTable.getString("StartPeriod"); _PREHASH_RpcChannelRequest = gMessageStringTable.getString("RpcChannelRequest"); _PREHASH_LandStatRequest = gMessageStringTable.getString("LandStatRequest"); _PREHASH_PlacesQuery = gMessageStringTable.getString("PlacesQuery"); @@ -2612,34 +2382,27 @@ void init_prehash_data() _PREHASH_SoundTrigger = gMessageStringTable.getString("SoundTrigger"); _PREHASH_TerrainRaiseLimit = gMessageStringTable.getString("TerrainRaiseLimit"); _PREHASH_Quorum = gMessageStringTable.getString("Quorum"); - _PREHASH_TokenBlock = gMessageStringTable.getString("TokenBlock"); _PREHASH_AgentBlock = gMessageStringTable.getString("AgentBlock"); _PREHASH_CommandBlock = gMessageStringTable.getString("CommandBlock"); _PREHASH_PricePublicObjectDecay = gMessageStringTable.getString("PricePublicObjectDecay"); _PREHASH_SpawnPointPos = gMessageStringTable.getString("SpawnPointPos"); - _PREHASH_AttachedSoundCutoffRadius = gMessageStringTable.getString("AttachedSoundCutoffRadius"); _PREHASH_VolumeDetail = gMessageStringTable.getString("VolumeDetail"); _PREHASH_FromAgentName = gMessageStringTable.getString("FromAgentName"); _PREHASH_Range = gMessageStringTable.getString("Range"); _PREHASH_DirectoryVisibility = gMessageStringTable.getString("DirectoryVisibility"); _PREHASH_PublicIP = gMessageStringTable.getString("PublicIP"); _PREHASH_TeleportFailed = gMessageStringTable.getString("TeleportFailed"); - _PREHASH_OnlineStatusReply = gMessageStringTable.getString("OnlineStatusReply"); - _PREHASH_RequestAvatarInfo = gMessageStringTable.getString("RequestAvatarInfo"); _PREHASH_PreloadSound = gMessageStringTable.getString("PreloadSound"); _PREHASH_ScreenshotID = gMessageStringTable.getString("ScreenshotID"); _PREHASH_CovenantTimestamp = gMessageStringTable.getString("CovenantTimestamp"); _PREHASH_OldestUnacked = gMessageStringTable.getString("OldestUnacked"); _PREHASH_SimulatorIP = gMessageStringTable.getString("SimulatorIP"); - _PREHASH_ObjectImport = gMessageStringTable.getString("ObjectImport"); _PREHASH_Value = gMessageStringTable.getString("Value"); _PREHASH_JointAxisOrAnchor = gMessageStringTable.getString("JointAxisOrAnchor"); _PREHASH_Test0 = gMessageStringTable.getString("Test0"); _PREHASH_Test1 = gMessageStringTable.getString("Test1"); _PREHASH_Test2 = gMessageStringTable.getString("Test2"); _PREHASH_SunPhase = gMessageStringTable.getString("SunPhase"); - _PREHASH_Place = gMessageStringTable.getString("Place"); - _PREHASH_Phase = gMessageStringTable.getString("Phase"); _PREHASH_ParcelDivide = gMessageStringTable.getString("ParcelDivide"); _PREHASH_PriceObjectClaim = gMessageStringTable.getString("PriceObjectClaim"); _PREHASH_Field = gMessageStringTable.getString("Field"); @@ -2649,7 +2412,6 @@ void init_prehash_data() _PREHASH_Score = gMessageStringTable.getString("Score"); _PREHASH_Image = gMessageStringTable.getString("Image"); _PREHASH_ObjectClickAction = gMessageStringTable.getString("ObjectClickAction"); - _PREHASH_Delta = gMessageStringTable.getString("Delta"); _PREHASH_Parameter = gMessageStringTable.getString("Parameter"); _PREHASH_Flags = gMessageStringTable.getString("Flags"); _PREHASH_Plane = gMessageStringTable.getString("Plane"); @@ -2659,26 +2421,24 @@ void init_prehash_data() _PREHASH_Textures = gMessageStringTable.getString("Textures"); _PREHASH_EventData = gMessageStringTable.getString("EventData"); _PREHASH_Final = gMessageStringTable.getString("Final"); + _PREHASH_System = gMessageStringTable.getString("System"); _PREHASH_TelehubPos = gMessageStringTable.getString("TelehubPos"); _PREHASH_ReportAutosaveCrash = gMessageStringTable.getString("ReportAutosaveCrash"); _PREHASH_CreateTrustedCircuit = gMessageStringTable.getString("CreateTrustedCircuit"); _PREHASH_DenyTrustedCircuit = gMessageStringTable.getString("DenyTrustedCircuit"); _PREHASH_RequestTrustedCircuit = gMessageStringTable.getString("RequestTrustedCircuit"); _PREHASH_Codec = gMessageStringTable.getString("Codec"); - _PREHASH_Level = gMessageStringTable.getString("Level"); _PREHASH_Modal = gMessageStringTable.getString("Modal"); _PREHASH_ChildAgentUnknown = gMessageStringTable.getString("ChildAgentUnknown"); _PREHASH_LandingType = gMessageStringTable.getString("LandingType"); _PREHASH_ScriptRunningReply = gMessageStringTable.getString("ScriptRunningReply"); - _PREHASH_MoneyDetailsReply = gMessageStringTable.getString("MoneyDetailsReply"); _PREHASH_Reply = gMessageStringTable.getString("Reply"); + _PREHASH_GroupAccountDetailsReply = gMessageStringTable.getString("GroupAccountDetailsReply"); _PREHASH_TelehubRot = gMessageStringTable.getString("TelehubRot"); - _PREHASH_RequestFriendship = gMessageStringTable.getString("RequestFriendship"); _PREHASH_AcceptFriendship = gMessageStringTable.getString("AcceptFriendship"); - _PREHASH_GroupAccountDetailsReply = gMessageStringTable.getString("GroupAccountDetailsReply"); + _PREHASH_ItemType = gMessageStringTable.getString("ItemType"); _PREHASH_DwellInfo = gMessageStringTable.getString("DwellInfo"); _PREHASH_AgentResume = gMessageStringTable.getString("AgentResume"); - _PREHASH_ItemType = gMessageStringTable.getString("ItemType"); _PREHASH_MailFilter = gMessageStringTable.getString("MailFilter"); _PREHASH_Disconnect = gMessageStringTable.getString("Disconnect"); _PREHASH_SimPosition = gMessageStringTable.getString("SimPosition"); @@ -2705,7 +2465,6 @@ void init_prehash_data() _PREHASH_CategoryID = gMessageStringTable.getString("CategoryID"); _PREHASH_Token = gMessageStringTable.getString("Token"); _PREHASH_AggregatePerms = gMessageStringTable.getString("AggregatePerms"); - _PREHASH_StartParcelRemoveAck = gMessageStringTable.getString("StartParcelRemoveAck"); _PREHASH_ObjectSelect = gMessageStringTable.getString("ObjectSelect"); _PREHASH_ForceObjectSelect = gMessageStringTable.getString("ForceObjectSelect"); _PREHASH_Price = gMessageStringTable.getString("Price"); @@ -2734,7 +2493,6 @@ void init_prehash_data() _PREHASH_AvatarID = gMessageStringTable.getString("AvatarID"); _PREHASH_FounderID = gMessageStringTable.getString("FounderID"); _PREHASH_EndPointID = gMessageStringTable.getString("EndPointID"); - _PREHASH_StipendEstimate = gMessageStringTable.getString("StipendEstimate"); _PREHASH_LocationLookAt = gMessageStringTable.getString("LocationLookAt"); _PREHASH_Sound = gMessageStringTable.getString("Sound"); _PREHASH_Cover = gMessageStringTable.getString("Cover"); @@ -2754,12 +2512,12 @@ void init_prehash_data() _PREHASH_GroupRoleChanges = gMessageStringTable.getString("GroupRoleChanges"); _PREHASH_Count = gMessageStringTable.getString("Count"); _PREHASH_South = gMessageStringTable.getString("South"); - _PREHASH_Entry = gMessageStringTable.getString("Entry"); _PREHASH_ObjectUpdateCompressed = gMessageStringTable.getString("ObjectUpdateCompressed"); _PREHASH_MuteFlags = gMessageStringTable.getString("MuteFlags"); _PREHASH_Group = gMessageStringTable.getString("Group"); _PREHASH_AgentPause = gMessageStringTable.getString("AgentPause"); _PREHASH_LanguagesText = gMessageStringTable.getString("LanguagesText"); + _PREHASH_Error = gMessageStringTable.getString("Error"); _PREHASH_InternalScriptMail = gMessageStringTable.getString("InternalScriptMail"); _PREHASH_FindAgent = gMessageStringTable.getString("FindAgent"); _PREHASH_AgentData = gMessageStringTable.getString("AgentData"); @@ -2768,7 +2526,6 @@ void init_prehash_data() _PREHASH_AcceptNotices = gMessageStringTable.getString("AcceptNotices"); _PREHASH_SetGroupAcceptNotices = gMessageStringTable.getString("SetGroupAcceptNotices"); _PREHASH_CloseCircuit = gMessageStringTable.getString("CloseCircuit"); - _PREHASH_LogControl = gMessageStringTable.getString("LogControl"); _PREHASH_TeleportFinish = gMessageStringTable.getString("TeleportFinish"); _PREHASH_PathRevolutions = gMessageStringTable.getString("PathRevolutions"); _PREHASH_ClassifiedInfoReply = gMessageStringTable.getString("ClassifiedInfoReply"); @@ -2785,7 +2542,6 @@ void init_prehash_data() _PREHASH_EventNotificationAddRequest = gMessageStringTable.getString("EventNotificationAddRequest"); _PREHASH_ParcelDwellRequest = gMessageStringTable.getString("ParcelDwellRequest"); _PREHASH_EventLocationRequest = gMessageStringTable.getString("EventLocationRequest"); - _PREHASH_EndPeriod = gMessageStringTable.getString("EndPeriod"); _PREHASH_SetStartLocationRequest = gMessageStringTable.getString("SetStartLocationRequest"); _PREHASH_QueryStart = gMessageStringTable.getString("QueryStart"); _PREHASH_EjectData = gMessageStringTable.getString("EjectData"); @@ -2798,7 +2554,6 @@ void init_prehash_data() _PREHASH_VFileType = gMessageStringTable.getString("VFileType"); _PREHASH_EjectGroupMemberReply = gMessageStringTable.getString("EjectGroupMemberReply"); _PREHASH_ImageData = gMessageStringTable.getString("ImageData"); - _PREHASH_SpaceServerSimulatorTimeMessage = gMessageStringTable.getString("SpaceServerSimulatorTimeMessage"); _PREHASH_SimulatorViewerTimeMessage = gMessageStringTable.getString("SimulatorViewerTimeMessage"); _PREHASH_Rotation = gMessageStringTable.getString("Rotation"); _PREHASH_Selection = gMessageStringTable.getString("Selection"); @@ -2806,7 +2561,6 @@ void init_prehash_data() _PREHASH_OperationData = gMessageStringTable.getString("OperationData"); _PREHASH_ExpirationDate = gMessageStringTable.getString("ExpirationDate"); _PREHASH_ParcelDeedToGroup = gMessageStringTable.getString("ParcelDeedToGroup"); - _PREHASH_DirPicksReply = gMessageStringTable.getString("DirPicksReply"); _PREHASH_AvatarPicksReply = gMessageStringTable.getString("AvatarPicksReply"); _PREHASH_GroupTitlesReply = gMessageStringTable.getString("GroupTitlesReply"); _PREHASH_AgentInfo = gMessageStringTable.getString("AgentInfo"); @@ -2817,8 +2571,8 @@ void init_prehash_data() _PREHASH_SourceID = gMessageStringTable.getString("SourceID"); _PREHASH_ChangeUserRights = gMessageStringTable.getString("ChangeUserRights"); _PREHASH_TeleportFlags = gMessageStringTable.getString("TeleportFlags"); - _PREHASH_AssetData = gMessageStringTable.getString("AssetData"); _PREHASH_SlaveParcelData = gMessageStringTable.getString("SlaveParcelData"); + _PREHASH_AssetData = gMessageStringTable.getString("AssetData"); _PREHASH_MultipleObjectUpdate = gMessageStringTable.getString("MultipleObjectUpdate"); _PREHASH_ObjectUpdate = gMessageStringTable.getString("ObjectUpdate"); _PREHASH_ImprovedTerseObjectUpdate = gMessageStringTable.getString("ImprovedTerseObjectUpdate"); @@ -2834,7 +2588,6 @@ void init_prehash_data() _PREHASH_ClaimDate = gMessageStringTable.getString("ClaimDate"); _PREHASH_MergeParcel = gMessageStringTable.getString("MergeParcel"); _PREHASH_Priority = gMessageStringTable.getString("Priority"); - _PREHASH_Building = gMessageStringTable.getString("Building"); _PREHASH_QueryText = gMessageStringTable.getString("QueryText"); _PREHASH_GroupNoticeAdd = gMessageStringTable.getString("GroupNoticeAdd"); _PREHASH_ReturnType = gMessageStringTable.getString("ReturnType"); @@ -2844,7 +2597,6 @@ void init_prehash_data() _PREHASH_RequestMultipleObjects = gMessageStringTable.getString("RequestMultipleObjects"); _PREHASH_RetrieveInstantMessages = gMessageStringTable.getString("RetrieveInstantMessages"); _PREHASH_OpenCircuit = gMessageStringTable.getString("OpenCircuit"); - _PREHASH_SecureSessionID = gMessageStringTable.getString("SecureSessionID"); _PREHASH_CrossedRegion = gMessageStringTable.getString("CrossedRegion"); _PREHASH_DirGroupsReply = gMessageStringTable.getString("DirGroupsReply"); _PREHASH_AvatarGroupsReply = gMessageStringTable.getString("AvatarGroupsReply"); @@ -2855,18 +2607,14 @@ void init_prehash_data() _PREHASH_ParentEstate = gMessageStringTable.getString("ParentEstate"); _PREHASH_EstateName = gMessageStringTable.getString("EstateName"); _PREHASH_MuteName = gMessageStringTable.getString("MuteName"); - _PREHASH_StartParcelRename = gMessageStringTable.getString("StartParcelRename"); - _PREHASH_BulkParcelRename = gMessageStringTable.getString("BulkParcelRename"); _PREHASH_ParcelRename = gMessageStringTable.getString("ParcelRename"); _PREHASH_ViewerFilename = gMessageStringTable.getString("ViewerFilename"); - _PREHASH_Positive = gMessageStringTable.getString("Positive"); _PREHASH_UserReportInternal = gMessageStringTable.getString("UserReportInternal"); _PREHASH_AvatarPropertiesRequest = gMessageStringTable.getString("AvatarPropertiesRequest"); _PREHASH_ParcelPropertiesRequest = gMessageStringTable.getString("ParcelPropertiesRequest"); _PREHASH_GroupProfileRequest = gMessageStringTable.getString("GroupProfileRequest"); _PREHASH_AgentDataUpdateRequest = gMessageStringTable.getString("AgentDataUpdateRequest"); _PREHASH_PriceObjectScaleFactor = gMessageStringTable.getString("PriceObjectScaleFactor"); - _PREHASH_DirPicksQuery = gMessageStringTable.getString("DirPicksQuery"); _PREHASH_OpenEnrollment = gMessageStringTable.getString("OpenEnrollment"); _PREHASH_GroupData = gMessageStringTable.getString("GroupData"); _PREHASH_RequestGodlikePowers = gMessageStringTable.getString("RequestGodlikePowers"); @@ -2877,7 +2625,6 @@ void init_prehash_data() _PREHASH_FirstDetachAll = gMessageStringTable.getString("FirstDetachAll"); _PREHASH_EstateID = gMessageStringTable.getString("EstateID"); _PREHASH_ImprovedInstantMessage = gMessageStringTable.getString("ImprovedInstantMessage"); - _PREHASH_AgentQuit = gMessageStringTable.getString("AgentQuit"); _PREHASH_CheckParcelSales = gMessageStringTable.getString("CheckParcelSales"); _PREHASH_ParcelSales = gMessageStringTable.getString("ParcelSales"); _PREHASH_CurrentInterval = gMessageStringTable.getString("CurrentInterval"); @@ -2894,12 +2641,8 @@ void init_prehash_data() _PREHASH_SystemKickUser = gMessageStringTable.getString("SystemKickUser"); _PREHASH_TransactionTime = gMessageStringTable.getString("TransactionTime"); _PREHASH_TimeToLive = gMessageStringTable.getString("TimeToLive"); - _PREHASH_StartParcelRemove = gMessageStringTable.getString("StartParcelRemove"); - _PREHASH_BulkParcelRemove = gMessageStringTable.getString("BulkParcelRemove"); _PREHASH_OldAgentID = gMessageStringTable.getString("OldAgentID"); - _PREHASH_BonusEstimate = gMessageStringTable.getString("BonusEstimate"); _PREHASH_MusicURL = gMessageStringTable.getString("MusicURL"); - _PREHASH_CompleteLure = gMessageStringTable.getString("CompleteLure"); _PREHASH_ParcelPrimBonus = gMessageStringTable.getString("ParcelPrimBonus"); _PREHASH_EjectUser = gMessageStringTable.getString("EjectUser"); _PREHASH_CoarseLocationUpdate = gMessageStringTable.getString("CoarseLocationUpdate"); @@ -2932,10 +2675,6 @@ void init_prehash_data() _PREHASH_EstateOwnerID = gMessageStringTable.getString("EstateOwnerID"); _PREHASH_LogoutRequest = gMessageStringTable.getString("LogoutRequest"); _PREHASH_AssetUploadRequest = gMessageStringTable.getString("AssetUploadRequest"); - _PREHASH_ReputationIndividualRequest = gMessageStringTable.getString("ReputationIndividualRequest"); - _PREHASH_MajorVersion = gMessageStringTable.getString("MajorVersion"); - _PREHASH_MinorVersion = gMessageStringTable.getString("MinorVersion"); - _PREHASH_SimulatorAssign = gMessageStringTable.getString("SimulatorAssign"); _PREHASH_TransactionType = gMessageStringTable.getString("TransactionType"); _PREHASH_AvatarPropertiesUpdate = gMessageStringTable.getString("AvatarPropertiesUpdate"); _PREHASH_ParcelPropertiesUpdate = gMessageStringTable.getString("ParcelPropertiesUpdate"); @@ -2944,7 +2683,6 @@ void init_prehash_data() _PREHASH_DeRezAck = gMessageStringTable.getString("DeRezAck"); _PREHASH_TakeControls = gMessageStringTable.getString("TakeControls"); _PREHASH_DirLandReply = gMessageStringTable.getString("DirLandReply"); - _PREHASH_SpaceLocationTeleportReply = gMessageStringTable.getString("SpaceLocationTeleportReply"); _PREHASH_MuteType = gMessageStringTable.getString("MuteType"); _PREHASH_IMViaEMail = gMessageStringTable.getString("IMViaEMail"); _PREHASH_RentPrice = gMessageStringTable.getString("RentPrice"); diff --git a/linden/indra/llmessage/message_prehash.h b/linden/indra/llmessage/message_prehash.h index 06a8a9c..b75edca 100644 --- a/linden/indra/llmessage/message_prehash.h +++ b/linden/indra/llmessage/message_prehash.h @@ -30,7 +30,7 @@ #define LL_MESSAGE_PREHASH_H /** - * Generated from message template version number 1.053 + * Generated from message template version number 2.000 */ @@ -59,7 +59,6 @@ extern char * _PREHASH_ScriptAnswerYes; extern char * _PREHASH_PartnerID; extern char * _PREHASH_DirLandQuery; extern char * _PREHASH_TeleportStart; -extern char * _PREHASH_LogMessages; extern char * _PREHASH_AboutText; extern char * _PREHASH_VisualParam; extern char * _PREHASH_GroupPrims; @@ -67,10 +66,8 @@ extern char * _PREHASH_SelectedPrims; extern char * _PREHASH_ID; extern char * _PREHASH_UUIDNameRequest; extern char * _PREHASH_UUIDGroupNameRequest; -extern char * _PREHASH_MoneyTransactionsRequest; extern char * _PREHASH_GroupAccountTransactionsRequest; extern char * _PREHASH_MapNameRequest; -extern char * _PREHASH_MailTaskSimRequest; extern char * _PREHASH_UpdateSimulator; extern char * _PREHASH_BillableFactor; extern char * _PREHASH_ObjectBonusFactor; @@ -80,7 +77,6 @@ extern char * _PREHASH_ConfirmEnableSimulator; extern char * _PREHASH_LayerType; extern char * _PREHASH_OwnerRole; extern char * _PREHASH_ParcelOverlay; -extern char * _PREHASH_AdjustBalance; extern char * _PREHASH_GroupOwned; extern char * _PREHASH_IP; extern char * _PREHASH_ChatFromViewer; @@ -115,8 +111,8 @@ extern char * _PREHASH_SensedData; extern char * _PREHASH_UpdateBlock; extern char * _PREHASH_ClassifiedGodDelete; extern char * _PREHASH_ObjectGrabUpdate; -extern char * _PREHASH_TaxDate; extern char * _PREHASH_LocationPos; +extern char * _PREHASH_TaxDate; extern char * _PREHASH_StartDateTime; extern char * _PREHASH_ObjectUpdateCached; extern char * _PREHASH_Packets; @@ -148,14 +144,11 @@ extern char * _PREHASH_AABBMin; extern char * _PREHASH_ClassifiedFlags; extern char * _PREHASH_ControlFlags; extern char * _PREHASH_TeleportRequest; -extern char * _PREHASH_SpaceLocationTeleportRequest; -extern char * _PREHASH_LeaderBoardRequest; extern char * _PREHASH_ScriptTeleportRequest; +extern char * _PREHASH_EstateCovenantRequest; extern char * _PREHASH_DateUTC; extern char * _PREHASH_TaskIDs; -extern char * _PREHASH_EstateCovenantRequest; extern char * _PREHASH_RequestResult; -extern char * _PREHASH_ReputationAgentAssign; extern char * _PREHASH_CanAcceptAgents; extern char * _PREHASH_ObjectSaleInfo; extern char * _PREHASH_KillChildAgents; @@ -167,7 +160,6 @@ extern char * _PREHASH_InfoBlock; extern char * _PREHASH_OwnershipCost; extern char * _PREHASH_AvatarNotesUpdate; extern char * _PREHASH_PID; -extern char * _PREHASH_TimeString; extern char * _PREHASH_DirPopularReply; extern char * _PREHASH_TerrainHeightRange00; extern char * _PREHASH_SimData; @@ -193,7 +185,6 @@ extern char * _PREHASH_Objects; extern char * _PREHASH_URL; extern char * _PREHASH_CreationDate; extern char * _PREHASH_JointPivot; -extern char * _PREHASH_RateeID; extern char * _PREHASH_FPS; extern char * _PREHASH_HasTelehub; extern char * _PREHASH_PathEnd; @@ -218,7 +209,6 @@ extern char * _PREHASH_GroupNoticesListReply; extern char * _PREHASH_ParcelAccessListReply; extern char * _PREHASH_RpcChannelReply; extern char * _PREHASH_RegionPresenceResponse; -extern char * _PREHASH_AgentPresenceResponse; extern char * _PREHASH_CharterMember; extern char * _PREHASH_EdgeData; extern char * _PREHASH_NameData; @@ -232,14 +222,12 @@ extern char * _PREHASH_Mag; extern char * _PREHASH_ParcelPropertiesRequestByID; extern char * _PREHASH_ObjectLink; extern char * _PREHASH_RpcScriptReplyInbound; -extern char * _PREHASH_BoardData; extern char * _PREHASH_RezData; extern char * _PREHASH_RemoveInventoryObjects; extern char * _PREHASH_GroupProposalBallot; extern char * _PREHASH_RPCServerIP; extern char * _PREHASH_Far; extern char * _PREHASH_GodSessionID; -extern char * _PREHASH_ViewerDigest; extern char * _PREHASH_FLAboutText; extern char * _PREHASH_RegionHandshakeReply; extern char * _PREHASH_GroupActiveProposalItemReply; @@ -251,7 +239,6 @@ extern char * _PREHASH_Set; extern char * _PREHASH_NewName; extern char * _PREHASH_Key; extern char * _PREHASH_AgentID; -extern char * _PREHASH_OnlineStatusRequest; extern char * _PREHASH_EventNotificationRemoveRequest; extern char * _PREHASH_NewFolderID; extern char * _PREHASH_Arc; @@ -263,7 +250,6 @@ extern char * _PREHASH_Top; extern char * _PREHASH_MiscStats; extern char * _PREHASH_ImageID; extern char * _PREHASH_DataPacket; -extern char * _PREHASH_ObjectDehinge; extern char * _PREHASH_You; extern char * _PREHASH_ScriptControlChange; extern char * _PREHASH_LoadURL; @@ -280,9 +266,9 @@ extern char * _PREHASH_Contribution; extern char * _PREHASH_SetGroupContribution; extern char * _PREHASH_Offline; extern char * _PREHASH_AgentIsNowWearing; -extern char * _PREHASH_SecPerDay; extern char * _PREHASH_Members; extern char * _PREHASH_FailedResends; +extern char * _PREHASH_SecPerDay; extern char * _PREHASH_CameraCenter; extern char * _PREHASH_CameraLeftAxis; extern char * _PREHASH_ExBlock; @@ -290,7 +276,6 @@ extern char * _PREHASH_Channel; extern char * _PREHASH_NetTest; extern char * _PREHASH_DiscardLevel; extern char * _PREHASH_LayerID; -extern char * _PREHASH_RatorID; extern char * _PREHASH_GrabOffset; extern char * _PREHASH_SimPort; extern char * _PREHASH_PricePerMeter; @@ -310,21 +295,16 @@ extern char * _PREHASH_SitName; extern char * _PREHASH_RegionsVisited; extern char * _PREHASH_DirClassifiedReply; extern char * _PREHASH_AvatarClassifiedReply; -extern char * _PREHASH_ReputationIndividualReply; extern char * _PREHASH_MediaURL; extern char * _PREHASH_CompleteAgentMovement; -extern char * _PREHASH_SpaceIP; extern char * _PREHASH_ClassifiedID; extern char * _PREHASH_LocalID; +extern char * _PREHASH_SpaceIP; extern char * _PREHASH_RemoveItem; extern char * _PREHASH_LogFailedMoneyTransaction; extern char * _PREHASH_ViewerStartAuction; extern char * _PREHASH_StartAuction; -extern char * _PREHASH_NameValueName; -extern char * _PREHASH_AngVelX; extern char * _PREHASH_DuplicateFlags; -extern char * _PREHASH_AngVelY; -extern char * _PREHASH_AngVelZ; extern char * _PREHASH_TextColor; extern char * _PREHASH_SlaveID; extern char * _PREHASH_Charter; @@ -335,21 +315,16 @@ extern char * _PREHASH_ParcelAuctions; extern char * _PREHASH_OwnerIsGroup; extern char * _PREHASH_NameValuePair; extern char * _PREHASH_RemoveNameValuePair; -extern char * _PREHASH_GetNameValuePair; extern char * _PREHASH_BulkUpdateInventory; extern char * _PREHASH_UpdateTaskInventory; extern char * _PREHASH_RemoveTaskInventory; extern char * _PREHASH_MoveTaskInventory; extern char * _PREHASH_RequestTaskInventory; extern char * _PREHASH_ReplyTaskInventory; -extern char * _PREHASH_DeclineInventory; extern char * _PREHASH_AggregatePermInventory; -extern char * _PREHASH_SimulatorInfo; -extern char * _PREHASH_MoneyTransactionsReply; extern char * _PREHASH_GroupAccountTransactionsReply; -extern char * _PREHASH_MailTaskSimReply; +extern char * _PREHASH_SimulatorInfo; extern char * _PREHASH_WearableData; -extern char * _PREHASH_StatisticsData; extern char * _PREHASH_Enabled; extern char * _PREHASH_Savings; extern char * _PREHASH_SimulatorLoad; @@ -361,15 +336,12 @@ extern char * _PREHASH_JoinGroupRequest; extern char * _PREHASH_LeaveGroupRequest; extern char * _PREHASH_InviteGroupRequest; extern char * _PREHASH_LiveHelpGroupRequest; -extern char * _PREHASH_ServerVersion; extern char * _PREHASH_PriceParcelClaimFactor; extern char * _PREHASH_BillableArea; extern char * _PREHASH_ObjectID; extern char * _PREHASH_ObjectFlagUpdate; extern char * _PREHASH_GroupRoleUpdate; extern char * _PREHASH_RequestInventoryAsset; -extern char * _PREHASH_RedoLand; -extern char * _PREHASH_TravelAccess; extern char * _PREHASH_ChangedGrid; extern char * _PREHASH_AgentDropGroup; extern char * _PREHASH_Details; @@ -402,7 +374,6 @@ extern char * _PREHASH_Timestamp; extern char * _PREHASH_GlobalPos; extern char * _PREHASH_GrabOffsetInitial; extern char * _PREHASH_IsTrial; -extern char * _PREHASH_FinalizeLogout; extern char * _PREHASH_ObjectDuplicateOnRay; extern char * _PREHASH_GroupMembershipCount; extern char * _PREHASH_MethodData; @@ -438,32 +409,26 @@ extern char * _PREHASH_TaskData; extern char * _PREHASH_SimWideMaxPrims; extern char * _PREHASH_TotalPrims; extern char * _PREHASH_ProfileBegin; -extern char * _PREHASH_MoneyDetailsRequest; extern char * _PREHASH_Request; extern char * _PREHASH_GroupAccountDetailsRequest; extern char * _PREHASH_GroupActiveProposalsRequest; extern char * _PREHASH_StringValue; -extern char * _PREHASH_ClosestSimulator; extern char * _PREHASH_Version; extern char * _PREHASH_OtherCount; extern char * _PREHASH_MemberCount; extern char * _PREHASH_ChatData; extern char * _PREHASH_IsGroupOwned; extern char * _PREHASH_EnergyEfficiency; -extern char * _PREHASH_MaxPlace; extern char * _PREHASH_PickInfoUpdate; extern char * _PREHASH_PickDelete; extern char * _PREHASH_ScriptReset; extern char * _PREHASH_Requester; extern char * _PREHASH_ForSale; extern char * _PREHASH_NearestLandingRegionReply; -extern char * _PREHASH_RecordAgentPresence; -extern char * _PREHASH_EraseAgentPresence; extern char * _PREHASH_ParcelID; extern char * _PREHASH_Godlike; extern char * _PREHASH_TotalDebits; extern char * _PREHASH_Direction; -extern char * _PREHASH_Appearance; extern char * _PREHASH_HealthData; extern char * _PREHASH_LeftAxis; extern char * _PREHASH_LocationBlock; @@ -471,41 +436,31 @@ extern char * _PREHASH_ObjectImage; extern char * _PREHASH_TerrainStartHeight00; extern char * _PREHASH_TerrainStartHeight01; extern char * _PREHASH_TerrainStartHeight10; -extern char * _PREHASH_ObjectHinge; extern char * _PREHASH_TerrainStartHeight11; -extern char * _PREHASH_MetersPerGrid; extern char * _PREHASH_WaterHeight; extern char * _PREHASH_FetchInventoryReply; -extern char * _PREHASH_MoneySummaryReply; extern char * _PREHASH_GroupAccountSummaryReply; extern char * _PREHASH_AttachedSound; extern char * _PREHASH_ParamInUse; extern char * _PREHASH_GodKickUser; extern char * _PREHASH_PickName; extern char * _PREHASH_TaskName; -extern char * _PREHASH_SubType; extern char * _PREHASH_ObjectCount; extern char * _PREHASH_RegionPresenceRequestByHandle; extern char * _PREHASH_RezSingleAttachmentFromInv; extern char * _PREHASH_ChildAgentUpdate; -extern char * _PREHASH_ToID; -extern char * _PREHASH_ViewerPort; extern char * _PREHASH_IsOwnerGroup; extern char * _PREHASH_AgentHeightWidth; extern char * _PREHASH_VerticalAngle; extern char * _PREHASH_WearableType; extern char * _PREHASH_AggregatePermNextOwner; extern char * _PREHASH_ShowInList; -extern char * _PREHASH_PositionSuggestion; extern char * _PREHASH_UpdateParcel; -extern char * _PREHASH_ClearAgentSessions; extern char * _PREHASH_SetAlwaysRun; extern char * _PREHASH_NVPair; extern char * _PREHASH_SearchType; extern char * _PREHASH_ObjectSpinStart; extern char * _PREHASH_UseEstateSun; -extern char * _PREHASH_LogoutBlock; -extern char * _PREHASH_RelayLogControl; extern char * _PREHASH_RegionID; extern char * _PREHASH_AbuseRegionID; extern char * _PREHASH_Creator; @@ -514,14 +469,12 @@ extern char * _PREHASH_DirEventsReply; extern char * _PREHASH_EventInfoReply; extern char * _PREHASH_UserInfoReply; extern char * _PREHASH_PathRadiusOffset; -extern char * _PREHASH_SessionInfo; extern char * _PREHASH_TextureData; extern char * _PREHASH_ChatPass; extern char * _PREHASH_TargetID; extern char * _PREHASH_DefaultPayPrice; extern char * _PREHASH_UserLocation; extern char * _PREHASH_MaxPrims; -extern char * _PREHASH_RegionIP; extern char * _PREHASH_LandmarkID; extern char * _PREHASH_InitiateDownload; extern char * _PREHASH_Name; @@ -529,18 +482,13 @@ extern char * _PREHASH_OtherCleanTime; extern char * _PREHASH_ParcelSetOtherCleanTime; extern char * _PREHASH_TeleportPriceExponent; extern char * _PREHASH_Gain; -extern char * _PREHASH_VelX; extern char * _PREHASH_PacketAck; extern char * _PREHASH_PathSkew; -extern char * _PREHASH_Negative; -extern char * _PREHASH_VelY; extern char * _PREHASH_SimulatorShutdownRequest; extern char * _PREHASH_NearestLandingRegionRequest; -extern char * _PREHASH_VelZ; extern char * _PREHASH_OtherID; extern char * _PREHASH_MemberID; extern char * _PREHASH_MapLayerRequest; -extern char * _PREHASH_PatchVersion; extern char * _PREHASH_ObjectScale; extern char * _PREHASH_TargetIP; extern char * _PREHASH_Redo; @@ -583,27 +531,20 @@ extern char * _PREHASH_Perp; extern char * _PREHASH_Code; extern char * _PREHASH_InvType; extern char * _PREHASH_AgentFOV; -extern char * _PREHASH_BulkMoneyTransfer; extern char * _PREHASH_Audible; extern char * _PREHASH_AuctionData; extern char * _PREHASH_IDBlock; -extern char * _PREHASH_ReputationData; extern char * _PREHASH_West; extern char * _PREHASH_Undo; extern char * _PREHASH_TotalNumItems; extern char * _PREHASH_Info; extern char * _PREHASH_Area; -extern char * _PREHASH_Behavior; extern char * _PREHASH_SimCrashed; extern char * _PREHASH_Text; -extern char * _PREHASH_AgentToNewRegion; extern char * _PREHASH_PriceGroupCreate; extern char * _PREHASH_ObjectShape; extern char * _PREHASH_GroupRoleDataReply; -extern char * _PREHASH_PosX; -extern char * _PREHASH_PosY; extern char * _PREHASH_MuteCRC; -extern char * _PREHASH_PosZ; extern char * _PREHASH_Size; extern char * _PREHASH_FromAddress; extern char * _PREHASH_Body; @@ -621,16 +562,14 @@ extern char * _PREHASH_Stat; extern char * _PREHASH_SoundID; extern char * _PREHASH_Item; extern char * _PREHASH_User; -extern char * _PREHASH_RemoteInfos; extern char * _PREHASH_Prey; -extern char * _PREHASH_UsecSinceStart; extern char * _PREHASH_RayStart; +extern char * _PREHASH_UsecSinceStart; extern char * _PREHASH_ParcelData; extern char * _PREHASH_CameraUpAxis; extern char * _PREHASH_ScriptDialog; extern char * _PREHASH_MasterParcelData; extern char * _PREHASH_Invalid; -extern char * _PREHASH_MinPlace; extern char * _PREHASH_ProfileCurve; extern char * _PREHASH_ParcelAccessListUpdate; extern char * _PREHASH_MuteListUpdate; @@ -649,14 +588,12 @@ extern char * _PREHASH_DeRezObject; extern char * _PREHASH_IsTemporary; extern char * _PREHASH_InsigniaID; extern char * _PREHASH_CheckFlags; -extern char * _PREHASH_TransferPriority; extern char * _PREHASH_EventID; extern char * _PREHASH_Selected; extern char * _PREHASH_FromAgentId; extern char * _PREHASH_Type; extern char * _PREHASH_ChatType; extern char * _PREHASH_ReportData; -extern char * _PREHASH_LeaderBoardData; extern char * _PREHASH_RequestBlock; extern char * _PREHASH_GrantData; extern char * _PREHASH_DetachAttachmentIntoInv; @@ -672,12 +609,9 @@ extern char * _PREHASH_OnlineNotification; extern char * _PREHASH_OfflineNotification; extern char * _PREHASH_SendPostcard; extern char * _PREHASH_RequestFlags; -extern char * _PREHASH_MoneyHistoryRequest; -extern char * _PREHASH_MoneySummaryRequest; extern char * _PREHASH_GroupAccountSummaryRequest; extern char * _PREHASH_GroupVoteHistoryRequest; extern char * _PREHASH_ParamValue; -extern char * _PREHASH_Checksum; extern char * _PREHASH_MaxAgents; extern char * _PREHASH_CreateNewOutfitAttachments; extern char * _PREHASH_RegionHandle; @@ -687,12 +621,10 @@ extern char * _PREHASH_AvatarInterestsUpdate; extern char * _PREHASH_GroupNoticeID; extern char * _PREHASH_ParcelName; extern char * _PREHASH_PriceObjectRent; -extern char * _PREHASH_ConnectAgentToUserserver; -extern char * _PREHASH_ConnectToUserserver; extern char * _PREHASH_OfferCallingCard; -extern char * _PREHASH_AgentAccess; extern char * _PREHASH_AcceptCallingCard; extern char * _PREHASH_DeclineCallingCard; +extern char * _PREHASH_AgentAccess; extern char * _PREHASH_DataHomeLocationReply; extern char * _PREHASH_EventLocationReply; extern char * _PREHASH_TerseDateID; @@ -710,8 +642,8 @@ extern char * _PREHASH_Invoice; extern char * _PREHASH_IntervalDays; extern char * _PREHASH_PathScaleX; extern char * _PREHASH_FromTaskID; -extern char * _PREHASH_TimeInfo; extern char * _PREHASH_PathScaleY; +extern char * _PREHASH_TimeInfo; extern char * _PREHASH_PublicCount; extern char * _PREHASH_ParcelJoin; extern char * _PREHASH_GroupRolesCount; @@ -736,7 +668,6 @@ extern char * _PREHASH_NearestLandingRegionUpdated; extern char * _PREHASH_PassToAgent; extern char * _PREHASH_PreyAgent; extern char * _PREHASH_SimStats; -extern char * _PREHASH_Options; extern char * _PREHASH_LogoutReply; extern char * _PREHASH_FeatureDisabled; extern char * _PREHASH_ObjectLocalID; @@ -747,10 +678,8 @@ extern char * _PREHASH_Destination; extern char * _PREHASH_MasterID; extern char * _PREHASH_TransferData; extern char * _PREHASH_WantToMask; -extern char * _PREHASH_AvatarData; extern char * _PREHASH_ParcelSelectObjects; extern char * _PREHASH_ExtraParams; -extern char * _PREHASH_LogLogin; extern char * _PREHASH_CreatorID; extern char * _PREHASH_Summary; extern char * _PREHASH_BuyObjectInventory; @@ -791,8 +720,8 @@ extern char * _PREHASH_ButtonLabel; extern char * _PREHASH_GranterID; extern char * _PREHASH_WantToText; extern char * _PREHASH_ReportType; -extern char * _PREHASH_DataBlock; extern char * _PREHASH_SimulatorReady; +extern char * _PREHASH_DataBlock; extern char * _PREHASH_AnimationSourceList; extern char * _PREHASH_SubscribeLoad; extern char * _PREHASH_UnsubscribeLoad; @@ -819,9 +748,8 @@ extern char * _PREHASH_Header; extern char * _PREHASH_GestureFlags; extern char * _PREHASH_XferID; extern char * _PREHASH_StatValue; -extern char * _PREHASH_PickID; extern char * _PREHASH_TaskID; -extern char * _PREHASH_GridsPerEdge; +extern char * _PREHASH_PickID; extern char * _PREHASH_RayEnd; extern char * _PREHASH_Throttles; extern char * _PREHASH_RebakeAvatarTextures; @@ -834,30 +762,24 @@ extern char * _PREHASH_Access; extern char * _PREHASH_TitleRoleID; extern char * _PREHASH_SquareMetersCredit; extern char * _PREHASH_Filename; -extern char * _PREHASH_SecuredTemplateChecksumRequest; -extern char * _PREHASH_TemplateChecksumRequest; -extern char * _PREHASH_AgentPresenceRequest; extern char * _PREHASH_ClassifiedInfoRequest; extern char * _PREHASH_ParcelInfoRequest; extern char * _PREHASH_ParcelObjectOwnersRequest; extern char * _PREHASH_TeleportLandmarkRequest; extern char * _PREHASH_EventInfoRequest; -extern char * _PREHASH_ChatFromSimulator; -extern char * _PREHASH_PickInfoRequest; extern char * _PREHASH_MoneyBalanceRequest; extern char * _PREHASH_GroupMembersRequest; extern char * _PREHASH_GroupRoleMembersRequest; +extern char * _PREHASH_ChatFromSimulator; extern char * _PREHASH_OldFolderID; extern char * _PREHASH_UserInfoRequest; extern char * _PREHASH_TextureID; extern char * _PREHASH_ProfileURL; extern char * _PREHASH_Handle; -extern char * _PREHASH_StartParcelRenameAck; extern char * _PREHASH_ButtonIndex; extern char * _PREHASH_GetScriptRunning; extern char * _PREHASH_SetScriptRunning; extern char * _PREHASH_Health; -extern char * _PREHASH_FileID; extern char * _PREHASH_CircuitInfo; extern char * _PREHASH_ObjectBuy; extern char * _PREHASH_ProfileEnd; @@ -882,7 +804,6 @@ extern char * _PREHASH_PingID; extern char * _PREHASH_Change; extern char * _PREHASH_Height; extern char * _PREHASH_Region; -extern char * _PREHASH_MoneyHistoryReply; extern char * _PREHASH_TelehubInfo; extern char * _PREHASH_StateSave; extern char * _PREHASH_RoleData; @@ -893,11 +814,10 @@ extern char * _PREHASH_ParcelGodMarkAsContent; extern char * _PREHASH_UsePhysics; extern char * _PREHASH_RegionDenyTransacted; extern char * _PREHASH_JointType; -extern char * _PREHASH_TaxEstimate; extern char * _PREHASH_ObjectTaxEstimate; extern char * _PREHASH_LightTaxEstimate; -extern char * _PREHASH_TeleportLandingStatusChanged; extern char * _PREHASH_LandTaxEstimate; +extern char * _PREHASH_TeleportLandingStatusChanged; extern char * _PREHASH_GroupTaxEstimate; extern char * _PREHASH_AvgViewerFPS; extern char * _PREHASH_Buttons; @@ -929,8 +849,6 @@ extern char * _PREHASH_WinnerID; extern char * _PREHASH_ChannelType; extern char * _PREHASH_NonExemptMembers; extern char * _PREHASH_Agents; -extern char * _PREHASH_SimulatorStart; -extern char * _PREHASH_Enable; extern char * _PREHASH_MemberData; extern char * _PREHASH_ToGroupID; extern char * _PREHASH_ImageNotInDatabase; @@ -938,27 +856,21 @@ extern char * _PREHASH_StartDate; extern char * _PREHASH_AnimID; extern char * _PREHASH_Serial; extern char * _PREHASH_AbuseRegionName; -extern char * _PREHASH_ControlPort; extern char * _PREHASH_ModifyLand; extern char * _PREHASH_Digest; extern char * _PREHASH_Victim; extern char * _PREHASH_Script; -extern char * _PREHASH_TemplateChecksumReply; extern char * _PREHASH_PickInfoReply; extern char * _PREHASH_MoneyBalanceReply; extern char * _PREHASH_RoutedMoneyBalanceReply; extern char * _PREHASH_RoleID; extern char * _PREHASH_RegionInfo; -extern char * _PREHASH_Sequence; extern char * _PREHASH_GodUpdateRegionInfo; -extern char * _PREHASH_LocalX; -extern char * _PREHASH_LocalY; extern char * _PREHASH_StartAnim; -extern char * _PREHASH_Location; extern char * _PREHASH_Action; +extern char * _PREHASH_Location; extern char * _PREHASH_Rights; extern char * _PREHASH_SearchDir; -extern char * _PREHASH_Active; extern char * _PREHASH_TransferRequest; extern char * _PREHASH_ScriptSensorRequest; extern char * _PREHASH_MoneyTransferRequest; @@ -969,8 +881,6 @@ extern char * _PREHASH_Center; extern char * _PREHASH_SharedData; extern char * _PREHASH_PSBlock; extern char * _PREHASH_UUIDNameBlock; -extern char * _PREHASH_Viewer; -extern char * _PREHASH_GroupNoticeDelete; extern char * _PREHASH_GroupTitleUpdate; extern char * _PREHASH_Method; extern char * _PREHASH_TouchName; @@ -982,11 +892,9 @@ extern char * _PREHASH_GodlikeMessage; extern char * _PREHASH_SystemMessage; extern char * _PREHASH_BodyRotation; extern char * _PREHASH_SearchRegions; -extern char * _PREHASH_Ignore; extern char * _PREHASH_AnimationData; extern char * _PREHASH_StatID; extern char * _PREHASH_ItemID; -extern char * _PREHASH_AvatarStatisticsReply; extern char * _PREHASH_ScriptDialogReply; extern char * _PREHASH_RegionIDAndHandleReply; extern char * _PREHASH_CameraAtOffset; @@ -1011,7 +919,6 @@ extern char * _PREHASH_OldItemID; extern char * _PREHASH_RegionPort; extern char * _PREHASH_PriceEnergyUnit; extern char * _PREHASH_Bitmap; -extern char * _PREHASH_TrackAgentSession; extern char * _PREHASH_CacheMissType; extern char * _PREHASH_VFileID; extern char * _PREHASH_GroupInsigniaID; @@ -1059,7 +966,6 @@ extern char * _PREHASH_MeanCollisionAlert; extern char * _PREHASH_CanAcceptTasks; extern char * _PREHASH_ItemData; extern char * _PREHASH_AnimationList; -extern char * _PREHASH_PassObject; extern char * _PREHASH_Reputation; extern char * _PREHASH_IntValue; extern char * _PREHASH_TargetType; @@ -1082,10 +988,8 @@ extern char * _PREHASH_ParcelBuy; extern char * _PREHASH_DirFindQueryBackend; extern char * _PREHASH_DirPlacesQueryBackend; extern char * _PREHASH_DirClassifiedQueryBackend; -extern char * _PREHASH_DirPicksQueryBackend; extern char * _PREHASH_DirLandQueryBackend; extern char * _PREHASH_DirPopularQueryBackend; -extern char * _PREHASH_LogoutDemand; extern char * _PREHASH_HistoryData; extern char * _PREHASH_SnapshotID; extern char * _PREHASH_Aspect; @@ -1093,7 +997,6 @@ extern char * _PREHASH_ParamSize; extern char * _PREHASH_VoteCast; extern char * _PREHASH_CastsShadows; extern char * _PREHASH_EveryoneMask; -extern char * _PREHASH_SetSunPhase; extern char * _PREHASH_ObjectSpinUpdate; extern char * _PREHASH_MaturePublish; extern char * _PREHASH_UseExistingAsset; @@ -1102,7 +1005,6 @@ extern char * _PREHASH_ParcelLocalID; extern char * _PREHASH_TeleportCancel; extern char * _PREHASH_UnixTime; extern char * _PREHASH_QueryFlags; -extern char * _PREHASH_LastExecFroze; extern char * _PREHASH_AlwaysRun; extern char * _PREHASH_Bottom; extern char * _PREHASH_ButtonData; @@ -1121,7 +1023,6 @@ extern char * _PREHASH_NVPairs; extern char * _PREHASH_GroupNoticesListRequest; extern char * _PREHASH_ParcelAccessListRequest; extern char * _PREHASH_MuteListRequest; -extern char * _PREHASH_StartPeriod; extern char * _PREHASH_RpcChannelRequest; extern char * _PREHASH_LandStatRequest; extern char * _PREHASH_PlacesQuery; @@ -1149,34 +1050,27 @@ extern char * _PREHASH_SnapSelection; extern char * _PREHASH_SoundTrigger; extern char * _PREHASH_TerrainRaiseLimit; extern char * _PREHASH_Quorum; -extern char * _PREHASH_TokenBlock; extern char * _PREHASH_AgentBlock; extern char * _PREHASH_CommandBlock; extern char * _PREHASH_PricePublicObjectDecay; extern char * _PREHASH_SpawnPointPos; -extern char * _PREHASH_AttachedSoundCutoffRadius; extern char * _PREHASH_VolumeDetail; extern char * _PREHASH_FromAgentName; extern char * _PREHASH_Range; extern char * _PREHASH_DirectoryVisibility; extern char * _PREHASH_PublicIP; extern char * _PREHASH_TeleportFailed; -extern char * _PREHASH_OnlineStatusReply; -extern char * _PREHASH_RequestAvatarInfo; extern char * _PREHASH_PreloadSound; extern char * _PREHASH_ScreenshotID; extern char * _PREHASH_CovenantTimestamp; extern char * _PREHASH_OldestUnacked; extern char * _PREHASH_SimulatorIP; -extern char * _PREHASH_ObjectImport; extern char * _PREHASH_Value; extern char * _PREHASH_JointAxisOrAnchor; extern char * _PREHASH_Test0; extern char * _PREHASH_Test1; extern char * _PREHASH_Test2; extern char * _PREHASH_SunPhase; -extern char * _PREHASH_Place; -extern char * _PREHASH_Phase; extern char * _PREHASH_ParcelDivide; extern char * _PREHASH_PriceObjectClaim; extern char * _PREHASH_Field; @@ -1186,7 +1080,6 @@ extern char * _PREHASH_LiveHelpGroupReply; extern char * _PREHASH_Score; extern char * _PREHASH_Image; extern char * _PREHASH_ObjectClickAction; -extern char * _PREHASH_Delta; extern char * _PREHASH_Parameter; extern char * _PREHASH_Flags; extern char * _PREHASH_Plane; @@ -1196,26 +1089,24 @@ extern char * _PREHASH_DirFindQuery; extern char * _PREHASH_Textures; extern char * _PREHASH_EventData; extern char * _PREHASH_Final; +extern char * _PREHASH_System; extern char * _PREHASH_TelehubPos; extern char * _PREHASH_ReportAutosaveCrash; extern char * _PREHASH_CreateTrustedCircuit; extern char * _PREHASH_DenyTrustedCircuit; extern char * _PREHASH_RequestTrustedCircuit; extern char * _PREHASH_Codec; -extern char * _PREHASH_Level; extern char * _PREHASH_Modal; extern char * _PREHASH_ChildAgentUnknown; extern char * _PREHASH_LandingType; extern char * _PREHASH_ScriptRunningReply; -extern char * _PREHASH_MoneyDetailsReply; extern char * _PREHASH_Reply; +extern char * _PREHASH_GroupAccountDetailsReply; extern char * _PREHASH_TelehubRot; -extern char * _PREHASH_RequestFriendship; extern char * _PREHASH_AcceptFriendship; -extern char * _PREHASH_GroupAccountDetailsReply; +extern char * _PREHASH_ItemType; extern char * _PREHASH_DwellInfo; extern char * _PREHASH_AgentResume; -extern char * _PREHASH_ItemType; extern char * _PREHASH_MailFilter; extern char * _PREHASH_Disconnect; extern char * _PREHASH_SimPosition; @@ -1242,7 +1133,6 @@ extern char * _PREHASH_VoteType; extern char * _PREHASH_CategoryID; extern char * _PREHASH_Token; extern char * _PREHASH_AggregatePerms; -extern char * _PREHASH_StartParcelRemoveAck; extern char * _PREHASH_ObjectSelect; extern char * _PREHASH_ForceObjectSelect; extern char * _PREHASH_Price; @@ -1271,7 +1161,6 @@ extern char * _PREHASH_Notes; extern char * _PREHASH_AvatarID; extern char * _PREHASH_FounderID; extern char * _PREHASH_EndPointID; -extern char * _PREHASH_StipendEstimate; extern char * _PREHASH_LocationLookAt; extern char * _PREHASH_Sound; extern char * _PREHASH_Cover; @@ -1291,12 +1180,12 @@ extern char * _PREHASH_ProfileHollow; extern char * _PREHASH_GroupRoleChanges; extern char * _PREHASH_Count; extern char * _PREHASH_South; -extern char * _PREHASH_Entry; extern char * _PREHASH_ObjectUpdateCompressed; extern char * _PREHASH_MuteFlags; extern char * _PREHASH_Group; extern char * _PREHASH_AgentPause; extern char * _PREHASH_LanguagesText; +extern char * _PREHASH_Error; extern char * _PREHASH_InternalScriptMail; extern char * _PREHASH_FindAgent; extern char * _PREHASH_AgentData; @@ -1305,7 +1194,6 @@ extern char * _PREHASH_AssetBlock; extern char * _PREHASH_AcceptNotices; extern char * _PREHASH_SetGroupAcceptNotices; extern char * _PREHASH_CloseCircuit; -extern char * _PREHASH_LogControl; extern char * _PREHASH_TeleportFinish; extern char * _PREHASH_PathRevolutions; extern char * _PREHASH_ClassifiedInfoReply; @@ -1322,7 +1210,6 @@ extern char * _PREHASH_DataHomeLocationRequest; extern char * _PREHASH_EventNotificationAddRequest; extern char * _PREHASH_ParcelDwellRequest; extern char * _PREHASH_EventLocationRequest; -extern char * _PREHASH_EndPeriod; extern char * _PREHASH_SetStartLocationRequest; extern char * _PREHASH_QueryStart; extern char * _PREHASH_EjectData; @@ -1335,7 +1222,6 @@ extern char * _PREHASH_ParcelRelease; extern char * _PREHASH_VFileType; extern char * _PREHASH_EjectGroupMemberReply; extern char * _PREHASH_ImageData; -extern char * _PREHASH_SpaceServerSimulatorTimeMessage; extern char * _PREHASH_SimulatorViewerTimeMessage; extern char * _PREHASH_Rotation; extern char * _PREHASH_Selection; @@ -1343,7 +1229,6 @@ extern char * _PREHASH_TransactionData; extern char * _PREHASH_OperationData; extern char * _PREHASH_ExpirationDate; extern char * _PREHASH_ParcelDeedToGroup; -extern char * _PREHASH_DirPicksReply; extern char * _PREHASH_AvatarPicksReply; extern char * _PREHASH_GroupTitlesReply; extern char * _PREHASH_AgentInfo; @@ -1354,8 +1239,8 @@ extern char * _PREHASH_PassPrice; extern char * _PREHASH_SourceID; extern char * _PREHASH_ChangeUserRights; extern char * _PREHASH_TeleportFlags; -extern char * _PREHASH_AssetData; extern char * _PREHASH_SlaveParcelData; +extern char * _PREHASH_AssetData; extern char * _PREHASH_MultipleObjectUpdate; extern char * _PREHASH_ObjectUpdate; extern char * _PREHASH_ImprovedTerseObjectUpdate; @@ -1371,7 +1256,6 @@ extern char * _PREHASH_TaskLocalID; extern char * _PREHASH_ClaimDate; extern char * _PREHASH_MergeParcel; extern char * _PREHASH_Priority; -extern char * _PREHASH_Building; extern char * _PREHASH_QueryText; extern char * _PREHASH_GroupNoticeAdd; extern char * _PREHASH_ReturnType; @@ -1381,7 +1265,6 @@ extern char * _PREHASH_HeaderData; extern char * _PREHASH_RequestMultipleObjects; extern char * _PREHASH_RetrieveInstantMessages; extern char * _PREHASH_OpenCircuit; -extern char * _PREHASH_SecureSessionID; extern char * _PREHASH_CrossedRegion; extern char * _PREHASH_DirGroupsReply; extern char * _PREHASH_AvatarGroupsReply; @@ -1392,18 +1275,14 @@ extern char * _PREHASH_Position; extern char * _PREHASH_ParentEstate; extern char * _PREHASH_EstateName; extern char * _PREHASH_MuteName; -extern char * _PREHASH_StartParcelRename; -extern char * _PREHASH_BulkParcelRename; extern char * _PREHASH_ParcelRename; extern char * _PREHASH_ViewerFilename; -extern char * _PREHASH_Positive; extern char * _PREHASH_UserReportInternal; extern char * _PREHASH_AvatarPropertiesRequest; extern char * _PREHASH_ParcelPropertiesRequest; extern char * _PREHASH_GroupProfileRequest; extern char * _PREHASH_AgentDataUpdateRequest; extern char * _PREHASH_PriceObjectScaleFactor; -extern char * _PREHASH_DirPicksQuery; extern char * _PREHASH_OpenEnrollment; extern char * _PREHASH_GroupData; extern char * _PREHASH_RequestGodlikePowers; @@ -1414,7 +1293,6 @@ extern char * _PREHASH_Controls; extern char * _PREHASH_FirstDetachAll; extern char * _PREHASH_EstateID; extern char * _PREHASH_ImprovedInstantMessage; -extern char * _PREHASH_AgentQuit; extern char * _PREHASH_CheckParcelSales; extern char * _PREHASH_ParcelSales; extern char * _PREHASH_CurrentInterval; @@ -1431,12 +1309,8 @@ extern char * _PREHASH_OwnerIDs; extern char * _PREHASH_SystemKickUser; extern char * _PREHASH_TransactionTime; extern char * _PREHASH_TimeToLive; -extern char * _PREHASH_StartParcelRemove; -extern char * _PREHASH_BulkParcelRemove; extern char * _PREHASH_OldAgentID; -extern char * _PREHASH_BonusEstimate; extern char * _PREHASH_MusicURL; -extern char * _PREHASH_CompleteLure; extern char * _PREHASH_ParcelPrimBonus; extern char * _PREHASH_EjectUser; extern char * _PREHASH_CoarseLocationUpdate; @@ -1469,10 +1343,6 @@ extern char * _PREHASH_ParcelProperties; extern char * _PREHASH_EstateOwnerID; extern char * _PREHASH_LogoutRequest; extern char * _PREHASH_AssetUploadRequest; -extern char * _PREHASH_ReputationIndividualRequest; -extern char * _PREHASH_MajorVersion; -extern char * _PREHASH_MinorVersion; -extern char * _PREHASH_SimulatorAssign; extern char * _PREHASH_TransactionType; extern char * _PREHASH_AvatarPropertiesUpdate; extern char * _PREHASH_ParcelPropertiesUpdate; @@ -1481,7 +1351,6 @@ extern char * _PREHASH_AbortXfer; extern char * _PREHASH_DeRezAck; extern char * _PREHASH_TakeControls; extern char * _PREHASH_DirLandReply; -extern char * _PREHASH_SpaceLocationTeleportReply; extern char * _PREHASH_MuteType; extern char * _PREHASH_IMViaEMail; extern char * _PREHASH_RentPrice; diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings index 794f869..bc1c7dd 100644 --- a/linden/indra/newview/English.lproj/InfoPlist.strings +++ b/linden/indra/newview/English.lproj/InfoPlist.strings @@ -1,5 +1,5 @@ /* Localized versions of Info.plist keys */ CFBundleName = "Second Life"; -CFBundleShortVersionString = "Second Life version 1.17.3.0"; -CFBundleGetInfoString = "Second Life version 1.17.3.0, Copyright 2004-2007 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 1.18.0.6"; +CFBundleGetInfoString = "Second Life version 1.18.0.6, Copyright 2004-2007 Linden Research, Inc."; diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist index 5d351bb..f4dd8e0 100644 --- a/linden/indra/newview/Info-SecondLife.plist +++ b/linden/indra/newview/Info-SecondLife.plist @@ -32,7 +32,7 @@ CFBundleVersion - 1.17.3.0 + 1.18.0.6 CSResourcesFileMapped diff --git a/linden/indra/newview/app_settings/message.xml b/linden/indra/newview/app_settings/message.xml deleted file mode 100644 index 5402a64..0000000 --- a/linden/indra/newview/app_settings/message.xml +++ /dev/null @@ -1,228 +0,0 @@ - - - - serverDefaults - - - simulator - template - - userserver - template - - spaceserver - template - - dataserver - template - - logDataserver - template - - inventoryDataserver - template - - viewer - template - - - messages - - - - PacketAck - - builder - template - trusted-sender - false - - - OpenCircuit - - builder - template - trusted-sender - false - - - CloseCircuit - - builder - template - trusted-sender - false - - - StartPingCheck - - builder - template - trusted-sender - false - - - CompletePingCheck - - builder - template - trusted-sender - false - - - AddCircuitCode - - builder - template - trusted-sender - true - - - UseCircuitCode - - builder - template - trusted-sender - false - - - CreateTrustedCircuit - - builder - template - trusted-sender - false - - - - ConnectAgentToUserserver - - builder - template - trusted-sender - false - - - - SecuredTemplateChecksumRequest - - builder - template - trusted-sender - false - - - CompleteAgentMovement - - builder - template - trusted-sender - false - - - EconomyDataRequest - - builder - template - trusted-sender - false - - - ViewerEffect - - builder - template - trusted-sender - false - - - - AgentUpdate - - builder - template - trusted-sender - false - - - - ImagePacket - - builder - template - trusted-sender - false - - - LayerData - - builder - template - trusted-sender - false - - - ObjectUpdateCached - - builder - template - trusted-sender - false - - - ObjectUpdateCompressed - - builder - template - trusted-sender - false - - - ObjectUpdate - - builder - template - trusted-sender - false - - - ImprovedTerseObjectUpdate - - builder - template - trusted-sender - false - - - AvatarAnimation - - builder - template - trusted-sender - false - - - AvatarAppearance - - builder - template - trusted-sender - false - - - - diff --git a/linden/indra/newview/files.lst b/linden/indra/newview/files.lst index a4ff014..6c51893 100644 --- a/linden/indra/newview/files.lst +++ b/linden/indra/newview/files.lst @@ -275,9 +275,6 @@ newview/llviewerinventory.cpp newview/llviewerjointattachment.cpp newview/llviewerjoint.cpp newview/llviewerjointmesh.cpp -newview/llviewerjointmesh_sse.cpp -newview/llviewerjointmesh_sse2.cpp -newview/llviewerjointmesh_vec.cpp newview/llviewerjointshape.cpp newview/llviewerjoystick.cpp newview/llviewerkeyboard.cpp diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp index 553c968..307ab6f 100644 --- a/linden/indra/newview/llagent.cpp +++ b/linden/indra/newview/llagent.cpp @@ -5721,7 +5721,6 @@ void LLAgent::requestEnterGodMode() // simulator and userserver need to know about your request sendReliableMessage(); - msg->sendReliable(gUserServer); } void LLAgent::requestLeaveGodMode() @@ -5737,7 +5736,6 @@ void LLAgent::requestLeaveGodMode() // simulator and userserver need to know about your request sendReliableMessage(); - msg->sendReliable(gUserServer); } // wearables diff --git a/linden/indra/newview/llassetuploadresponders.cpp b/linden/indra/newview/llassetuploadresponders.cpp index 79faec1..1d6e27d 100644 --- a/linden/indra/newview/llassetuploadresponders.cpp +++ b/linden/indra/newview/llassetuploadresponders.cpp @@ -1,6 +1,30 @@ -// llassetuploadresponders.cpp -// Copyright 2006, Linden Research, Inc. -// Processes responses received for asset upload requests. +/** + * @file llassetuploadresponders.cpp + * @brief Processes responses received for asset upload requests. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ #include "llviewerprecompiledheaders.h" diff --git a/linden/indra/newview/llassetuploadresponders.h b/linden/indra/newview/llassetuploadresponders.h index ef8cd38..4744d34 100644 --- a/linden/indra/newview/llassetuploadresponders.h +++ b/linden/indra/newview/llassetuploadresponders.h @@ -1,6 +1,30 @@ -// llassetuploadresponders.h -// Copyright 2006, Linden Research, Inc. -// Processes responses received for asset upload requests. +/** + * @file llassetuploadresponders.h + * @brief Processes responses received for asset upload requests. + * + * Copyright (c) 2007-2007, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlife.com/developers/opensource/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at http://secondlife.com/developers/opensource/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + */ #ifndef LL_LLASSETUPLOADRESPONDER_H #define LL_LLASSETUPLOADRESPONDER_H diff --git a/linden/indra/newview/llcontroldef.cpp b/linden/indra/newview/llcontroldef.cpp index e0153d7..7481d99 100644 --- a/linden/indra/newview/llcontroldef.cpp +++ b/linden/indra/newview/llcontroldef.cpp @@ -1317,12 +1317,6 @@ void declare_settings() gSavedSettings.declareBOOL("FlycamAbsolute", FALSE, "Treat Flycam values as absolute positions (not deltas)."); gSavedSettings.declareBOOL("FlycamZoomDirect", FALSE, "Map flycam zoom axis directly to camera zoom."); - // Vector Processor & Math - gSavedSettings.declareBOOL("VectorizePerfTest", TRUE, "Test SSE/vectorization performance and choose fastest version."); - gSavedSettings.declareBOOL("VectorizeEnable", FALSE, "Enable general vector operations and data alignment."); - gSavedSettings.declareBOOL("VectorizeSkin", TRUE, "Enable vector operations for avatar skinning."); - gSavedSettings.declareU32( "VectorizeProcessor", 0, "0=Compiler Default, 1=SSE, 2=SSE2, autodetected", NO_PERSIST); - // // crash_settings.xml // diff --git a/linden/indra/newview/lldrawable.h b/linden/indra/newview/lldrawable.h index e550142..c2cafe3 100644 --- a/linden/indra/newview/lldrawable.h +++ b/linden/indra/newview/lldrawable.h @@ -46,7 +46,6 @@ #include "llviewerobject.h" #include "llrect.h" -class LLCamera; class LLDrawPool; class LLDrawable; class LLFace; diff --git a/linden/indra/newview/lleventpoll.cpp b/linden/indra/newview/lleventpoll.cpp index dd59a06..755c622 100644 --- a/linden/indra/newview/lleventpoll.cpp +++ b/linden/indra/newview/lleventpoll.cpp @@ -36,155 +36,162 @@ #include "llviewerregion.h" #include "message.h" -class LLEventPoll::Impl : LLHTTPClient::Responder +namespace { -public: - static Impl& start(const std::string& pollURL); - void stop(); - -private: - Impl(const std::string& pollURL); - ~Impl(); - - void makeRequest(); - void handleMessage(const LLSD& content); - virtual void error(U32 status, const std::string& reason); - virtual void result(const LLSD& content); - -private: - typedef LLHTTPClient::ResponderPtr Ptr; - - Ptr mPtr; - bool mDone; - - std::string mPollURL; - std::string mSender; - - LLSD mAcknowledge; - - // these are only here for debugging so we can see which poller is which - static int sCount; - int mCount; -}; - -//static -LLEventPoll::Impl& LLEventPoll::Impl::start( - const std::string& pollURL) -{ - Impl* i = new Impl(pollURL); - llinfos << "LLEventPoll::Impl::start <" << i->mCount << "> " - << pollURL << llendl; - return *i; -} - -void LLEventPoll::Impl::stop() -{ - lldebugs << "LLEventPoll::Impl::stop <" << mCount << "> " - << mPollURL << llendl; - // there should be a way to stop a LLHTTPClient request in progress - mDone = true; - mPtr = NULL; -} - -int LLEventPoll::Impl::sCount = 0; - -LLEventPoll::Impl::Impl(const std::string& pollURL) - : mPtr(NULL), mDone(false), - mPollURL(pollURL), - mCount(++sCount) -{ - mPtr = this; - //extract host and port of simulator to set as sender - LLViewerRegion *regionp = gAgent.getRegion(); - if (!regionp) + class LLEventPollResponder : public LLHTTPClient::Responder + { + public: + + static LLHTTPClient::ResponderPtr start(const std::string& pollURL, const LLHost& sender); + void stop(); + + private: + LLEventPollResponder(const std::string& pollURL, const LLHost& sender); + ~LLEventPollResponder(); + + void makeRequest(); + void handleMessage(const LLSD& content); + virtual void error(U32 status, const std::string& reason); + virtual void result(const LLSD& content); + + private: + + bool mDone; + + std::string mPollURL; + std::string mSender; + + LLSD mAcknowledge; + + // these are only here for debugging so we can see which poller is which + static int sCount; + int mCount; + }; + + //static + LLHTTPClient::ResponderPtr LLEventPollResponder::start( + const std::string& pollURL, const LLHost& sender) { - llerrs << "LLEventPoll initialized before region is added." << llendl; + LLHTTPClient::ResponderPtr result = new LLEventPollResponder(pollURL, sender); + llinfos << "LLEventPollResponder::start <" << sCount << "> " + << pollURL << llendl; + return result; } - mSender = regionp->getHost().getIPandPort(); - llinfos << "LLEventPoll initialized with sender " << mSender << llendl; - makeRequest(); -} -LLEventPoll::Impl::~Impl() -{ - lldebugs << "LLEventPoll::Impl::~Impl <" << mCount << "> " - << mPollURL << llendl; -} - -void LLEventPoll::Impl::makeRequest() -{ - LLSD request; - request["ack"] = mAcknowledge; - request["done"] = mDone; - - lldebugs << "LLEventPoll::Impl::makeRequest <" << mCount << "> ack = " - << LLSDXMLStreamer(mAcknowledge) << llendl; - LLHTTPClient::post(mPollURL, request, mPtr); -} + void LLEventPollResponder::stop() + { + llinfos << "LLEventPollResponder::stop <" << mCount << "> " + << mPollURL << llendl; + // there should be a way to stop a LLHTTPClient request in progress + mDone = true; + } -void LLEventPoll::Impl::handleMessage(const LLSD& content) -{ - std::string msg_name = content["message"]; - LLSD message; - message["sender"] = mSender; - message["body"] = content["body"]; - LLMessageSystem::dispatch(msg_name, message); -} + int LLEventPollResponder::sCount = 0; -//virtual -void LLEventPoll::Impl::error(U32 status, const std::string& reason) -{ - if (mDone) return; + LLEventPollResponder::LLEventPollResponder(const std::string& pollURL, const LLHost& sender) + : mDone(false), + mPollURL(pollURL), + mCount(++sCount) + { + //extract host and port of simulator to set as sender + LLViewerRegion *regionp = gAgent.getRegion(); + if (!regionp) + { + llerrs << "LLEventPoll initialized before region is added." << llendl; + } + mSender = sender.getIPandPort(); + llinfos << "LLEventPoll initialized with sender " << mSender << llendl; + makeRequest(); + } - if(status != 499) + LLEventPollResponder::~LLEventPollResponder() { - llwarns << "LLEventPoll::Impl::error: <" << mCount << "> got " - << status << ": " << reason - << (mDone ? " -- done" : "") << llendl; stop(); - return; + lldebugs << "LLEventPollResponder::~Impl <" << mCount << "> " + << mPollURL << llendl; } - makeRequest(); -} + void LLEventPollResponder::makeRequest() + { + LLSD request; + request["ack"] = mAcknowledge; + request["done"] = mDone; + + lldebugs << "LLEventPollResponder::makeRequest <" << mCount << "> ack = " + << LLSDXMLStreamer(mAcknowledge) << llendl; + LLHTTPClient::post(mPollURL, request, this); + } -//virtual -void LLEventPoll::Impl::result(const LLSD& content) -{ - lldebugs << "LLEventPoll::Impl::result <" << mCount << ">" - << (mDone ? " -- done" : "") << llendl; - - if (mDone) return; - - mAcknowledge = content["id"]; - LLSD events = content["events"]; - - if(mAcknowledge.isUndefined()) + void LLEventPollResponder::handleMessage(const LLSD& content) { - llwarns << "LLEventPoll::Impl: id undefined" << llendl; + std::string msg_name = content["message"]; + LLSD message; + message["sender"] = mSender; + message["body"] = content["body"]; + LLMessageSystem::dispatch(msg_name, message); } - - llinfos << "LLEventPoll::Impl::completed <" << mCount << "> " << events.size() << "events (id " - << LLSDXMLStreamer(mAcknowledge) << ")" << llendl; - - LLSD::array_const_iterator i = events.beginArray(); - LLSD::array_const_iterator end = events.endArray(); - for (; i != end; ++i) + + //virtual + void LLEventPollResponder::error(U32 status, const std::string& reason) { - if (i->has("message")) + if (mDone) return; + + if(status != 499) { - handleMessage(*i); + llwarns << "LLEventPollResponder::error: <" << mCount << "> got " + << status << ": " << reason + << (mDone ? " -- done" : "") << llendl; + stop(); + return; } + + makeRequest(); } - - makeRequest(); + + //virtual + void LLEventPollResponder::result(const LLSD& content) + { + lldebugs << "LLEventPollResponder::result <" << mCount << ">" + << (mDone ? " -- done" : "") << llendl; + + if (mDone) return; + + if (!content.get("events") || + !content.get("id")) + { + llwarns << "received event poll with no events or id key" << llendl; + return; + } + + mAcknowledge = content["id"]; + LLSD events = content["events"]; + + if(mAcknowledge.isUndefined()) + { + llwarns << "LLEventPollResponder: id undefined" << llendl; + } + + llinfos << "LLEventPollResponder::completed <" << mCount << "> " << events.size() << "events (id " + << LLSDXMLStreamer(mAcknowledge) << ")" << llendl; + + LLSD::array_const_iterator i = events.beginArray(); + LLSD::array_const_iterator end = events.endArray(); + for (; i != end; ++i) + { + if (i->has("message")) + { + handleMessage(*i); + } + } + + makeRequest(); + } } -LLEventPoll::LLEventPoll(const std::string& pollURL) - : impl(Impl::start(pollURL)) +LLEventPoll::LLEventPoll(const std::string& pollURL, const LLHost& sender) + : mImpl(LLEventPollResponder::start(pollURL, sender)) { } LLEventPoll::~LLEventPoll() { - impl.stop(); } diff --git a/linden/indra/newview/lleventpoll.h b/linden/indra/newview/lleventpoll.h index 4c06a43..a9a533d 100644 --- a/linden/indra/newview/lleventpoll.h +++ b/linden/indra/newview/lleventpoll.h @@ -29,11 +29,13 @@ #ifndef LL_LLEVENTPOLL_H #define LL_LLEVENTPOLL_H +#include "llhttpclient.h" + class LLEventPoll ///< implements the viewer side of server-to-viewer pushed events. { public: - LLEventPoll(const std::string& pollURL); + LLEventPoll(const std::string& pollURL, const LLHost& sender); ///< Start polling the URL. virtual ~LLEventPoll(); @@ -41,8 +43,7 @@ public: private: - class Impl; - Impl& impl; + LLHTTPClient::ResponderPtr mImpl; }; diff --git a/linden/indra/newview/llfloaterimport.cpp b/linden/indra/newview/llfloaterimport.cpp index ed71c1b..c60c571 100644 --- a/linden/indra/newview/llfloaterimport.cpp +++ b/linden/indra/newview/llfloaterimport.cpp @@ -452,6 +452,9 @@ void LLFloaterImport::draw() // static void LLFloaterImport::finishImport(ImportAssetInfo *info) { + // Commenting this code out and removing + // ObjectImport message from the message template + /* llinfos << "Uploading object " << info->FilenameAndPath << "..." << llendl; LLUUID new_file_id; @@ -502,7 +505,7 @@ void LLFloaterImport::finishImport(ImportAssetInfo *info) else { llinfos << "Failed to copy file." << llendl; - } + }*/ } // static diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp index 8e95156..743b06d 100644 --- a/linden/indra/newview/llinventorymodel.cpp +++ b/linden/indra/newview/llinventorymodel.cpp @@ -2112,173 +2112,6 @@ void LLInventoryModel::registerCallbacks(LLMessageSystem* msg) msg->setHandlerFunc("FetchInventoryReply", processFetchInventoryReply); } -/* -//struct LLUpdateInventoryInfo -{ - LLString mFilenameAndPath; - BOOL mIsComplete; -}; - -// static -void LLInventoryModel::processInventoryUpdate(LLMessageSystem* msg, void**) -{ - lldebugs << "LLInventoryModel::processInventoryUpdate()" << llendl; - LLUUID agent_id; - msg->getUUIDFast(_PREHASH_InventoryData, _PREHASH_AgentID, agent_id); - if(agent_id != gAgent.getID()) - { - llwarns << "Got an inventory update for the wrong agent." << llendl; - return; - } - - BOOL is_complete; - msg->getBOOLFast(_PREHASH_InventoryData, _PREHASH_IsComplete, is_complete); - char filename[MAX_STRING]; - msg->getStringFast(_PREHASH_InventoryData, _PREHASH_Filename, MAX_STRING, filename); - - LLUpdateInventoryInfo* info = new LLUpdateInventoryInfo; - info->mFilenameAndPath = gDirUtilp->getExpandedFilename( LL_PATH_TEMP, filename ); - info->mIsComplete = is_complete; - - gXferManager->requestFile(info->mFilenameAndPath, - filename, - LL_PATH_CACHE, // The remote file is in the data directory - gUserServer, - TRUE, // Delete the remote file after the transfer - processInventoryFile, - (void*)info, - LLXferManager::HIGH_PRIORITY); -} - -// static -void LLInventoryModel::processInventoryFile(void** user_data, S32 error_code) -{ - llinfos << "LLInventoryModel::processInventoryFile()" << llendl; - //gInventory.dumpInventory(); - LLUpdateInventoryInfo* info = (LLUpdateInventoryInfo*)user_data; - if(info && (0 == error_code)) - { - if(info->mIsComplete) - { - if(gInventory.isLoaded()) - { - // it's a complete update, and we've already loaded - // everything. Therefore, we need to blow away - // everything. - gInventory.empty(); - } - else - { - // We want to merge with anything that's happened - // before the load. Therefore, we only want to get rid - // of the root category. - gInventory.deleteObject(gAgent.getInventoryRootID()); - } - } - - // decompress if necessary - const char* filename = info->mFilenameAndPath.c_str(); - const char* ext = filename + strlen(filename) - 6; - char dst_filename[LL_MAX_PATH]; - if(0 == strnicmp(ext, "gz", 2)) - { - // it's a gz file. decmpress it. - dst_filename[0] = '\0'; - strncat(dst_filename, filename, (ext - filename)); - strcat(dst_filename, "tmp"); - BOOL success = gunzip_file(filename, dst_filename); - LLFile::remove(filename); - if(!success) - { - llwarns << "Error loading inventory file. Return code: " << error_code << llendl; - LLNotifyBox::showXml("InventoryNetworkCorruption"); - goto exit; - } - filename = dst_filename; - } - -#ifdef DIFF_INVENTORY_FILES - char agent_id_string[UUID_STR_LENGTH]; - char inventory_filename[LL_MAX_PATH]; - gAgent.getID().toString(agent_id_string); - sprintf(inventory_filename, CACHE_FORMAT_STRING, gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); - char buffer[MAX_STRING]; - sprintf(buffer, - "c:/cygwin/bin/diff %s %s", - inventory_filename, - filename); - llinfos << buffer << llendl; - system(buffer); - -#endif - - // load it all up. - gInventory.loadFromFile(filename); - gInventory.buildParentChildMap(); - //gInventory.recalculateCloneInformation(); - gInventory.addChangedMask(LLInventoryObserver::ALL); - if(info->mIsComplete) - { - // Set loaded to true if it's a complete set because it's - // poosible for someone to accept an inventory category - // before they have their complete inventory. If we marked - // it loaded at that point, when the real inventory - // arrived, it would erase (on the client anyway) the - // existence of that inventory. - gInventory.mIsLoaded = TRUE; - - //retrieveIM(gMessageSystem); - llinfos << "complete inventory update" << llendl; - - // If we promised you a message on load, here it is - if (gViewerStats->getStat(LLViewerStats::ST_INVENTORY_TOO_LONG) > 0.0) - { - LLNotifyBox::showXml("InventoryLoaded"); - } - } - else - { - llinfos << "incomplete inventory update" << llendl; - } - gInventory.notifyObservers(); - LLFile::remove(filename); - } - else - { - llwarns << "Eror loading inventory file. Return code: " << error_code - << llendl; - if(error_code == LL_ERR_TCP_TIMEOUT) - { - //llwarns << "Re-requesting inventory" << llendl; - //gInventory.requestFromServer(gAgent.getID()); - } - } - -exit: - delete info; - //gInventory.dumpInventory(); -} - -// static -void LLInventoryModel::processUseCachedInventory(LLMessageSystem* msg, void**) -{ - llinfos << "LLInventoryModel::processUseCachedInventory()" << llendl; - char agent_id_string[UUID_STR_LENGTH]; - gAgent.getID().toString(agent_id_string); - char filename[LL_MAX_PATH]; - sprintf(filename, CACHE_FORMAT_STRING, gDirUtilp->getExpandedFilename(LL_PATH_CACHE,agent_id_string).c_str()); - // We want to merge with anything that's happened before the - // load. Therefore, we only want to get rid of the root category. - gInventory.deleteObject(gAgent.getInventoryRootID()); - gInventory.loadFromFile(filename); - gInventory.buildParentChildMap(); - //gInventory.recalculateCloneInformation(); - gInventory.addChangedMask(LLInventoryObserver::ALL); - gInventory.mIsLoaded = TRUE; - gInventory.notifyObservers(); - //retrieveIM(); -} -*/ // static void LLInventoryModel::processUpdateCreateInventoryItem(LLMessageSystem* msg, void**) diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp index c4fa1dc..d79dcb4 100644 --- a/linden/indra/newview/llpaneldisplay.cpp +++ b/linden/indra/newview/llpaneldisplay.cpp @@ -520,7 +520,6 @@ void LLPanelDisplay2::refreshEnabledState() void LLPanelDisplay2::apply() { - // Anisotropic rendering BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic; LLImageGL::sGlobalUseAnisotropic = childGetValue("ani"); diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp index e2be9fd..0cf8b00 100644 --- a/linden/indra/newview/llselectmgr.cpp +++ b/linden/indra/newview/llselectmgr.cpp @@ -3688,6 +3688,7 @@ void LLSelectMgr::sendDelink() // Hinges //---------------------------------------------------------------------- +/* void LLSelectMgr::sendHinge(U8 type) { if (!mSelectedObjects->getNumNodes()) @@ -3717,7 +3718,7 @@ void LLSelectMgr::sendDehinge() packObjectLocalID, NULL, SEND_ONLY_ROOTS); -} +}*/ void LLSelectMgr::sendSelect() { diff --git a/linden/indra/newview/llselectmgr.h b/linden/indra/newview/llselectmgr.h index 5f76ce2..7eff94a 100644 --- a/linden/indra/newview/llselectmgr.h +++ b/linden/indra/newview/llselectmgr.h @@ -469,8 +469,8 @@ public: void sendDropAttachment(); void sendLink(); void sendDelink(); - void sendHinge(U8 type); - void sendDehinge(); + //void sendHinge(U8 type); + //void sendDehinge(); void sendSelect(); void requestObjectPropertiesFamily(LLViewerObject* object); // asks sim for creator, permissions, resources, etc. diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp index 0130edf..7dbb107 100644 --- a/linden/indra/newview/llstartup.cpp +++ b/linden/indra/newview/llstartup.cpp @@ -50,6 +50,7 @@ #include "llerrorcontrol.h" #include "llfiltersd2xmlrpc.h" #include "llfocusmgr.h" +#include "llhttpsender.h" #include "imageids.h" #include "lllandmark.h" #include "llloginflags.h" @@ -223,7 +224,6 @@ BOOL is_hex_string(U8* str, S32 len); void show_first_run_dialog(); void first_run_dialog_callback(S32 option, void* userdata); void set_startup_status(const F32 frac, const char* string, const char* msg); -void on_userserver_name_resolved( BOOL success, const LLString& host_name, U32 ip, void* userdata ); void login_alert_status(S32 option, void* user_data); void update_app(BOOL mandatory, const std::string& message); void update_dialog_callback(S32 option, void *userdata); @@ -236,7 +236,6 @@ void dialog_choose_gender_first_start(); void callback_choose_gender(S32 option, void* userdata); void init_start_screen(S32 location_id); void release_start_screen(); -void process_connect_to_userserver(LLMessageSystem* msg, void**); void reset_login(); // @@ -246,6 +245,21 @@ void reset_login(); // // local classes // + +namespace +{ + class LLNullHTTPSender : public LLHTTPSender + { + virtual void send(const LLHost& host, + const char* message, const LLSD& body, + LLHTTPClient::ResponderPtr response) const + { + llwarns << " attemped to send " << message << " to " << host + << " with null sender" << llendl; + } + }; +} + class LLGestureInventoryFetchObserver : public LLInventoryFetchObserver { public: @@ -422,7 +436,7 @@ BOOL idle_startup() port = gSavedSettings.getU32("ConnectionPort"); } - LLMessageConfig::initClass("viewer", gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "")); + LLHTTPSender::setDefaultSender(new LLNullHTTPSender()); if(!start_messaging_system( message_template_path, port, @@ -435,6 +449,7 @@ BOOL idle_startup() std::string msg = llformat("Unable to start networking, error %d", gMessageSystem->getErrorCode()); app_early_exit(msg); } + LLMessageConfig::initClass("viewer", gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "")); } else { @@ -452,9 +467,13 @@ BOOL idle_startup() msg->setExceptionFunc(MX_PACKET_TOO_SHORT, invalid_message_callback, NULL); - msg->setExceptionFunc(MX_RAN_OFF_END_OF_PACKET, + + // running off end of a packet is now valid in the case + // when a reader has a newer message template than + // the sender + /*msg->setExceptionFunc(MX_RAN_OFF_END_OF_PACKET, invalid_message_callback, - NULL); + NULL);*/ msg->setExceptionFunc(MX_WROTE_PAST_BUFFER_SIZE, invalid_message_callback, NULL); @@ -476,7 +495,7 @@ BOOL idle_startup() gXferManager->setUseAckThrottling(TRUE); gXferManager->setAckThrottleBPS(xfer_throttle_bps); } - gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS, gUserServer); + gAssetStorage = new LLViewerAssetStorage(msg, gXferManager, gVFS); msg->mPacketRing.setDropPercentage(gPacketDropPercentage); if (gInBandwidth != 0.f) @@ -778,7 +797,6 @@ BOOL idle_startup() gSavedSettings.setS32("ServerChoice", gUserServerChoice); if (gUserServerChoice == USERSERVER_OTHER) { - gUserServer.setHostByName( server_label.c_str() ); snprintf(gUserServerName, MAX_STRING, "%s", server_label.c_str()); /* Flawfinder: ignore */ } } @@ -845,231 +863,15 @@ BOOL idle_startup() // color init must be after saved settings loaded init_colors(); - // Request userserver domain name - set_startup_status(0.05f, "Finding Server Domain Name...", NULL); - - // We're prematurely switching out of this state because the - // userserver name resolver can potentiallly occur before reaching the end of the - // switch statement. Also, if it's done at the bottom, sometimes we will - // skip the userserver resolved step (in the local cases) - djs 09/24/03 - gStartupState++; - timeout.reset(); - - switch( gUserServerChoice ) - { - case USERSERVER_AGNI: - gInProductionGrid = TRUE; - case USERSERVER_DMZ: - case USERSERVER_ADITI: - case USERSERVER_SIVA: - case USERSERVER_SHAKTI: - case USERSERVER_DURGA: - case USERSERVER_SOMA: - case USERSERVER_VAAK: - case USERSERVER_GANGA: - case USERSERVER_UMA: - { - const char* host_name = gUserServerDomainName[gUserServerChoice].mName; - snprintf(gUserServerName, MAX_STRING, "%s", host_name); /* Flawfinder: ignore */ - llinfos << "Resolving " << - gUserServerDomainName[gUserServerChoice].mLabel << - " userserver domain name " << host_name << llendl; - - BOOL requested_domain_name = gAsyncHostByName.startRequest( host_name, on_userserver_name_resolved, NULL ); - if( !requested_domain_name ) - //BOOL resolved_domain_name = gUserServer.setHostByName( host_name ); - //if( !resolved_domain_name ) - { - llwarns << "setHostByName failed" << llendl; - - LLStringBase::format_map_t args; - args["[HOST_NAME]"] = host_name; - - gViewerWindow->alertXml("UnableToConnect", args, login_alert_done ); - reset_login(); - return FALSE; - } - break; - } - - case USERSERVER_LOCAL: - llinfos << "Using local userserver" << llendl; - gUserServer.setAddress( LOOPBACK_ADDRESS_STRING ); - gStartupState = STATE_USERSERVER_RESOLVED; - break; - - case USERSERVER_OTHER: - llinfos << "Userserver set explicitly" << llendl; - gStartupState = STATE_USERSERVER_RESOLVED; - break; - - case USERSERVER_NONE: - default: - llerrs << "No userserver IP address specified" << llendl; - break; - } - return do_normal_idle; - } - - if (STATE_RESOLVING_USERSERVER == gStartupState) - { - // Don't do anything. Wait for LL_WM_HOST_RESOLVED which is handled by LLAsyncHostByName, - // which calls on_userserver_name_resolved, which will push us to the next state. - if (timeout.getElapsedTimeF32() > TIMEOUT_SECONDS*3.f) - { - // Cancel the pending asynchostbyname request - - gViewerWindow->alertXml("CanNotFindServer", - login_alert_status, NULL); - - // Back up to login screen - reset_login(); - gViewerStats->incStat(LLViewerStats::ST_LOGIN_TIMEOUT_COUNT); - } - ms_sleep(1); - return do_normal_idle; - } - - if (STATE_USERSERVER_RESOLVED == gStartupState) - { - if (!gUserServer.isOk()) - { - LLStringBase::format_map_t args; - args["[IP_ADDRESS]"] = u32_to_ip_string( gUserServer.getAddress() ); - - gViewerWindow->alertXml("PleaseSelectServer", args, login_alert_done ); - - reset_login(); - return FALSE; - } - - write_debug("Userserver: "); - char tmp_str[256]; /* Flawfinder: ignore */ - gUserServer.getIPString(tmp_str, 256); - write_debug(tmp_str); - write_debug("\n"); - - gStartupState++; - } - - if (STATE_MESSAGE_TEMPLATE_SEND == gStartupState) - { - set_startup_status(0.10f, "Verifying protocol version...", NULL); - - LLHost mt_host; - if (!gRunLocal) - { - // open up user server circuit (trusted) - gMessageSystem->enableCircuit(gUserServer, TRUE); - mt_host = gUserServer; - } - else - { - mt_host = gAgentSimHost; - } - - llinfos << "Verifying message template..." << llendl; - LLMessageSystem::sendSecureMessageTemplateChecksum(mt_host); - - timeout.reset(); - gStartupState++; - return do_normal_idle; - } - - if (STATE_MESSAGE_TEMPLATE_WAIT == gStartupState) - { - LLMessageSystem* msg = gMessageSystem; - while (msg->checkAllMessages(gFrameCount, gServicePump)) - { - if (msg->isTemplateConfirmed()) - { - BOOL update_available = FALSE; - BOOL mandatory = FALSE; - - if (!LLMessageSystem::doesTemplateMatch()) - { - // Mandatory update -- message template checksum doesn't match - update_available = TRUE; - mandatory = TRUE; - } - - BOOL quit = FALSE; - if (update_available) - { - if (show_connect_box) - { - update_app(mandatory, ""); - gStartupState = STATE_UPDATE_CHECK; - return FALSE; - } - else - { - quit = TRUE; - } - } - - // Bail out and clean up circuit - if (quit) - { - msg->newMessageFast(_PREHASH_CloseCircuit); - msg->sendMessage( msg->getSender() ); - app_force_quit(NULL); - return FALSE; - } - - // If we get here, we've got a compatible message template - if (!mandatory) - { - llinfos << "Message template is current!" << llendl; - } - gStartupState = STATE_LOGIN_AUTH_INIT; - timeout.reset(); - // unregister with the message system so it knows we're no longer expecting this message - msg->setHandlerFuncFast(_PREHASH_TemplateChecksumReply, NULL, NULL); - - msg->newMessageFast(_PREHASH_CloseCircuit); - msg->sendMessage(gUserServer); - msg->disableCircuit(gUserServer); - if (gRunLocal) - { - msg->enableCircuit(gAgentSimHost, TRUE); - - // Don't use a session token, and generate a random user id - gAgentID.generate(); - gAgentSessionID = LLUUID::null; - - // Skip userserver queries. - gStartupState = STATE_WORLD_INIT; - } - } - } - gMessageSystem->processAcks(); - - if (timeout.getElapsedTimeF32() > TIMEOUT_SECONDS) - { - if (timeout_count > MAX_TIMEOUT_COUNT) - { - gViewerWindow->alertXml("SystemMayBeDown", - login_alert_status, - NULL); - - // Back up to login screen - reset_login(); - gViewerStats->incStat(LLViewerStats::ST_LOGIN_TIMEOUT_COUNT); - } - else - { - llinfos << "Resending on timeout" << llendl; - gStartupState--; - timeout_count++; - } - } + // skipping over STATE_UPDATE_CHECK because that just waits for input + gStartupState = STATE_LOGIN_AUTH_INIT; return do_normal_idle; } if (STATE_UPDATE_CHECK == gStartupState) { + // wait for user to give input via dialog box return do_normal_idle; } @@ -1677,9 +1479,7 @@ BOOL idle_startup() // // Initialize classes w/graphics stuff. // - gImageList.doPrefetchImages(); - update_texture_fetch(); - + gImageList.doPrefetchImages(); LLSurface::initClasses(); LLFace::initClass(); @@ -1710,6 +1510,7 @@ BOOL idle_startup() LLViewerRegion *regionp = gWorldp->getRegionFromHandle(first_sim_handle); llinfos << "Adding initial simulator " << regionp->getOriginGlobal() << llendl; + gStartupState = STATE_SEED_GRANTED_WAIT; regionp->setSeedCapability(first_sim_seed_cap); // Set agent's initial region to be the one we just created. @@ -1725,9 +1526,32 @@ BOOL idle_startup() // VEFFECT: Login gWorldp->addRegion(0, gAgentSimHost); gAgent.setRegion(gWorldp->getRegionFromHandle(0)); + + gStartupState = STATE_SEED_CAP_GRANTED; } display_startup(); + return do_normal_idle; + } + + + //--------------------------------------------------------------------- + // Wait for Seed Cap Grant + //--------------------------------------------------------------------- + if(STATE_SEED_GRANTED_WAIT == gStartupState) + { + llinfos << "Waiting for seed grant ...." << llendl; + return do_normal_idle; + } + + + //--------------------------------------------------------------------- + // Seed Capability Granted + // no newMessage calls should happen before this point + //--------------------------------------------------------------------- + if (STATE_SEED_CAP_GRANTED == gStartupState) + { + update_texture_fetch(); // Initialize UI if (!gNoRender) @@ -2195,21 +2019,6 @@ BOOL idle_startup() return do_normal_idle; } - //--------------------------------------------------------------------- - // Assert agent to userserver - //--------------------------------------------------------------------- - if (STATE_CONNECT_USERSERVER == gStartupState) - { - LLMessageSystem* msg = gMessageSystem; - msg->enableCircuit(gUserServer, TRUE); - msg->newMessage("ConnectAgentToUserserver"); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->sendReliable(gUserServer); - gStartupState++; - return do_normal_idle; - } //--------------------------------------------------------------------- // Misc @@ -2334,9 +2143,6 @@ BOOL idle_startup() msg->setHandlerFuncFast(_PREHASH_AttachedSound, process_attached_sound); msg->setHandlerFuncFast(_PREHASH_AttachedSoundGainChange, process_attached_sound_gain_change); //msg->setHandlerFuncFast(_PREHASH_AttachedSoundCutoffRadius, process_attached_sound_cutoff_radius); - msg->setHandlerFunc( - "ConnectToUserserver", - process_connect_to_userserver); llinfos << "Initialization complete" << llendl; gInitializationComplete = TRUE; @@ -2776,31 +2582,6 @@ void set_startup_status(const F32 frac, const char *string, const char* msg) gViewerWindow->setProgressMessage(msg); } -void on_userserver_name_resolved( BOOL success, const LLString& host_name, U32 ip, void* userdata ) -{ - if( STATE_RESOLVING_USERSERVER != gStartupState ) - { - llwarns << "Userserver name callback returned during invalid state!" << llendl; - return; - } - - if( success ) - { - gUserServer.setAddress( ip ); - llinfos << "...Userserver resolved to " << gUserServer << llendl; - gStartupState = STATE_USERSERVER_RESOLVED; - } - else - { - llwarns << "setHostByName failed" << llendl; - - LLStringBase::format_map_t args; - args["[HOST_NAME]"] = host_name; - gViewerWindow->alertXml("SetByHostFail", args, login_alert_done ); - reset_login(); - } -} - void login_alert_status(S32 option, void* user_data) { if (0 == option) @@ -2924,8 +2705,6 @@ void update_dialog_callback(S32 option, void *userdata) LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map); #if LL_WINDOWS - char ip[MAX_STRING]; /* Flawfinder: ignore */ - update_exe_path = gDirUtilp->getTempFilename(); if (update_exe_path.empty()) { @@ -2952,7 +2731,6 @@ void update_dialog_callback(S32 option, void *userdata) app_force_quit(NULL); return; } - u32_to_ip_string(gUserServer.getAddress(), ip); // if a sim name was passed in via command line parameter (typically through a SLURL) if ( LLURLSimString::sInstance.mSimString.length() ) @@ -3080,7 +2858,7 @@ void register_viewer_callbacks(LLMessageSystem* msg) msg->setHandlerFuncFast(_PREHASH_MeanCollisionAlert, process_mean_collision_alert_message, NULL); msg->setHandlerFunc("ViewerFrozenMessage", process_frozen_message); - msg->setHandlerFuncFast(_PREHASH_RequestAvatarInfo, process_avatar_info_request); + //msg->setHandlerFuncFast(_PREHASH_RequestAvatarInfo, process_avatar_info_request); msg->setHandlerFuncFast(_PREHASH_NameValuePair, process_name_value); msg->setHandlerFuncFast(_PREHASH_RemoveNameValuePair, process_remove_name_value); msg->setHandlerFuncFast(_PREHASH_AvatarAnimation, process_avatar_animation); @@ -3944,19 +3722,6 @@ void release_start_screen() gStartImageGL = NULL; } -void process_connect_to_userserver(LLMessageSystem* msg, void**) -{ - // Sent unreliably since if we've become disconnected, the - // userserver will get back to us eventually. By sending reliable, - // we also may accidently induce two separate validations under - // conditions where the userserver is already lagged. - msg->newMessage("ConnectAgentToUserserver"); - msg->nextBlockFast(_PREHASH_AgentData); - msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); - msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); - msg->sendMessage(gUserServer); -} - bool LLStartUp::canGoFullscreen() { return gStartupState >= STATE_WORLD_INIT; diff --git a/linden/indra/newview/llstartup.h b/linden/indra/newview/llstartup.h index 7c54b8c..718d74d 100644 --- a/linden/indra/newview/llstartup.h +++ b/linden/indra/newview/llstartup.h @@ -46,27 +46,20 @@ enum EStartupState{ STATE_LOGIN_SHOW, STATE_LOGIN_WAIT, STATE_LOGIN_CLEANUP, - STATE_RESOLVING_USERSERVER, - STATE_USERSERVER_RESOLVED, - STATE_MESSAGE_TEMPLATE_SEND, - STATE_MESSAGE_TEMPLATE_WAIT, STATE_UPDATE_CHECK, STATE_LOGIN_AUTH_INIT, STATE_LOGIN_AUTHENTICATE, STATE_LOGIN_NO_DATA_YET, STATE_LOGIN_DOWNLOADING, STATE_LOGIN_PROCESS_RESPONSE, - //STATE_USERSERVER_SEND, - //STATE_USERSERVER_WAIT, - //STATE_LOCATION_SEND, - //STATE_LOCATION_WAIT, STATE_WORLD_INIT, + STATE_SEED_GRANTED_WAIT, + STATE_SEED_CAP_GRANTED, STATE_QUICKTIME_INIT, STATE_WORLD_WAIT, STATE_AGENT_SEND, STATE_AGENT_WAIT, STATE_INVENTORY_SEND, - STATE_CONNECT_USERSERVER, STATE_MISC, STATE_PRECACHE, STATE_WEARABLES_WAIT, diff --git a/linden/indra/newview/lltoolbrush.cpp b/linden/indra/newview/lltoolbrush.cpp index a1b9526..98cafa0 100644 --- a/linden/indra/newview/lltoolbrush.cpp +++ b/linden/indra/newview/lltoolbrush.cpp @@ -568,6 +568,7 @@ void LLToolBrushLand::undo() } // static +/* void LLToolBrushLand::redo() { for(LLViewerRegion* regionp = mLastAffectedRegions.getFirstData(); @@ -580,7 +581,7 @@ void LLToolBrushLand::redo() gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); gMessageSystem->sendMessage(regionp->getHost()); } -} +}*/ // static bool LLToolBrushLand::canTerraform(LLViewerRegion* regionp) const diff --git a/linden/indra/newview/lltoolbrush.h b/linden/indra/newview/lltoolbrush.h index e6e4257..97aa13f 100644 --- a/linden/indra/newview/lltoolbrush.h +++ b/linden/indra/newview/lltoolbrush.h @@ -73,7 +73,7 @@ public: virtual void undo(); virtual BOOL canUndo() { return TRUE; } - virtual void redo(); + //virtual void redo(); virtual BOOL canRedo() { return FALSE; } diff --git a/linden/indra/newview/llviewerjointmesh.cpp b/linden/indra/newview/llviewerjointmesh.cpp index 642fa7b..c76990c 100644 --- a/linden/indra/newview/llviewerjointmesh.cpp +++ b/linden/indra/newview/llviewerjointmesh.cpp @@ -31,11 +31,14 @@ //----------------------------------------------------------------------------- #include "llviewerprecompiledheaders.h" +#if LL_WINDOWS // For Intel vector classes + #include "fvec.h" +#endif + #include "imageids.h" #include "llfasttimer.h" #include "llagent.h" -#include "llapr.h" #include "llbox.h" #include "lldrawable.h" #include "lldrawpoolavatar.h" @@ -46,18 +49,12 @@ #include "llglheaders.h" #include "lltexlayer.h" #include "llviewercamera.h" -#include "llviewercontrol.h" #include "llviewerimagelist.h" #include "llviewerjointmesh.h" #include "llvoavatar.h" #include "llsky.h" #include "pipeline.h" #include "llglslshader.h" -#include "llmath.h" -#include "v4math.h" -#include "m3math.h" -#include "m4math.h" - #if !LL_DARWIN && !LL_LINUX extern PFNGLWEIGHTPOINTERARBPROC glWeightPointerARB; @@ -71,7 +68,6 @@ static const U32 sRenderMask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD; - //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // LLViewerJointMesh::LLSkinJoint @@ -124,7 +120,6 @@ BOOL LLSkinJoint::setupSkinJoint( LLViewerJoint *joint) return TRUE; } - //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // LLViewerJointMesh @@ -419,9 +414,9 @@ const S32 NUM_AXES = 3; // rotation Z 0-n // pivot parent 0-n -- child = n+1 -static LLMatrix4 gJointMatUnaligned[32]; -static LLMatrix3 gJointRotUnaligned[32]; -static LLVector4 gJointPivot[32]; +static LLMatrix4 gJointMat[32]; +static LLMatrix3 gJointRot[32]; +static LLVector4 gJointPivot[32]; //----------------------------------------------------------------------------- // uploadJointMatrices() @@ -442,8 +437,8 @@ void LLViewerJointMesh::uploadJointMatrices() { joint_mat *= LLDrawPoolAvatar::getModelView(); } - gJointMatUnaligned[joint_num] = joint_mat; - gJointRotUnaligned[joint_num] = joint_mat.getMat3(); + gJointMat[joint_num] = joint_mat; + gJointRot[joint_num] = joint_mat.getMat3(); } BOOL last_pivot_uploaded = FALSE; @@ -480,8 +475,8 @@ void LLViewerJointMesh::uploadJointMatrices() { LLVector3 pivot; pivot = LLVector3(gJointPivot[i]); - pivot = pivot * gJointRotUnaligned[i]; - gJointMatUnaligned[i].translate(pivot); + pivot = pivot * gJointRot[i]; + gJointMat[i].translate(pivot); } // upload matrices @@ -492,11 +487,11 @@ void LLViewerJointMesh::uploadJointMatrices() for (joint_num = 0; joint_num < reference_mesh->mJointRenderData.count(); joint_num++) { - gJointMatUnaligned[joint_num].transpose(); + gJointMat[joint_num].transpose(); for (S32 axis = 0; axis < NUM_AXES; axis++) { - F32* vector = gJointMatUnaligned[joint_num].mMatrix[axis]; + F32* vector = gJointMat[joint_num].mMatrix[axis]; //glProgramLocalParameter4fvARB(GL_VERTEX_PROGRAM_ARB, LL_CHARACTER_MAX_JOINTS_PER_MESH * axis + joint_num+5, (GLfloat*)vector); U32 offset = LL_CHARACTER_MAX_JOINTS_PER_MESH*axis+joint_num; memcpy(mat+offset*4, vector, sizeof(GLfloat)*4); @@ -908,9 +903,21 @@ BOOL LLViewerJointMesh::updateLOD(F32 pixel_area, BOOL activate) return (valid != activate); } -// static -void LLViewerJointMesh::updateGeometryOriginal(LLFace *mFace, LLPolyMesh *mMesh) + +void LLViewerJointMesh::updateGeometry() { + if (!(mValid + && mMesh + && mFace + && mMesh->hasWeights() + && mFace->mVertexBuffer.notNull() + && LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) == 0)) + { + return; + } + + uploadJointMatrices(); + LLStrider o_vertices; LLStrider o_normals; @@ -951,9 +958,9 @@ void LLViewerJointMesh::updateGeometryOriginal(LLFace *mFace, LLPolyMesh *mMesh) // No lerp required in this case. if (w == 1.0f) { - gBlendMat = gJointMatUnaligned[joint+1]; + gBlendMat = gJointMat[joint+1]; o_vertices[bidx] = coords[index] * gBlendMat; - gBlendRotMat = gJointRotUnaligned[joint+1]; + gBlendRotMat = gJointRot[joint+1]; o_normals[bidx] = normals[index] * gBlendRotMat; continue; } @@ -961,8 +968,8 @@ void LLViewerJointMesh::updateGeometryOriginal(LLFace *mFace, LLPolyMesh *mMesh) // Try to keep all the accesses to the matrix data as close // together as possible. This function is a hot spot on the // Mac. JC - LLMatrix4 &m0 = gJointMatUnaligned[joint+1]; - LLMatrix4 &m1 = gJointMatUnaligned[joint+0]; + LLMatrix4 &m0 = gJointMat[joint+1]; + LLMatrix4 &m1 = gJointMat[joint+0]; gBlendMat.mMatrix[VX][VX] = lerp(m1.mMatrix[VX][VX], m0.mMatrix[VX][VX], w); gBlendMat.mMatrix[VX][VY] = lerp(m1.mMatrix[VX][VY], m0.mMatrix[VX][VY], w); @@ -982,8 +989,8 @@ void LLViewerJointMesh::updateGeometryOriginal(LLFace *mFace, LLPolyMesh *mMesh) o_vertices[bidx] = coords[index] * gBlendMat; - LLMatrix3 &n0 = gJointRotUnaligned[joint+1]; - LLMatrix3 &n1 = gJointRotUnaligned[joint+0]; + LLMatrix3 &n0 = gJointRot[joint+1]; + LLMatrix3 &n1 = gJointRot[joint+0]; gBlendRotMat.mMatrix[VX][VX] = lerp(n1.mMatrix[VX][VX], n0.mMatrix[VX][VX], w); gBlendRotMat.mMatrix[VX][VY] = lerp(n1.mMatrix[VX][VY], n0.mMatrix[VX][VY], w); @@ -1001,161 +1008,6 @@ void LLViewerJointMesh::updateGeometryOriginal(LLFace *mFace, LLPolyMesh *mMesh) } } -const U32 UPDATE_GEOMETRY_CALL_MASK = 0x1FFF; // 8K samples before overflow -const U32 UPDATE_GEOMETRY_CALL_OVERFLOW = ~UPDATE_GEOMETRY_CALL_MASK; -static bool sUpdateGeometryCallPointer = false; -static F64 sUpdateGeometryGlobalTime = 0.0 ; -static F64 sUpdateGeometryElapsedTime = 0.0 ; -static F64 sUpdateGeometryElapsedTimeOff = 0.0 ; -static F64 sUpdateGeometryElapsedTimeOn = 0.0 ; -static F64 sUpdateGeometryRunAvgOff[10]; -static F64 sUpdateGeometryRunAvgOn[10]; -static U32 sUpdateGeometryRunCount = 0 ; -static U32 sUpdateGeometryCalls = 0 ; -static U32 sUpdateGeometryLastProcessor = 0 ; -void (*LLViewerJointMesh::sUpdateGeometryFunc)(LLFace* face, LLPolyMesh* mesh); - -void LLViewerJointMesh::updateGeometry() -{ - extern BOOL gVectorizePerfTest; - extern U32 gVectorizeProcessor; - - if (!(mValid - && mMesh - && mFace - && mMesh->hasWeights() - && mFace->mVertexBuffer.notNull() - && LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) == 0)) - { - return; - } - - if (!gVectorizePerfTest) - { - // Once we've measured performance, just run the specified - // code version. - if(sUpdateGeometryFunc == updateGeometryOriginal) - uploadJointMatrices(); - sUpdateGeometryFunc(mFace, mMesh); - } - else - { - // At startup, measure the amount of time in skinning and choose - // the fastest one. - LLTimer ug_timer ; - - if (sUpdateGeometryCallPointer) - { - if(sUpdateGeometryFunc == updateGeometryOriginal) - uploadJointMatrices(); - // call accelerated version for this processor - sUpdateGeometryFunc(mFace, mMesh); - } - else - { - uploadJointMatrices(); - updateGeometryOriginal(mFace, mMesh); - } - - sUpdateGeometryElapsedTime += ug_timer.getElapsedTimeF64(); - ++sUpdateGeometryCalls; - if(0 != (sUpdateGeometryCalls & UPDATE_GEOMETRY_CALL_OVERFLOW)) - { - F64 time_since_app_start = ug_timer.getElapsedSeconds(); - if(sUpdateGeometryGlobalTime == 0.0 - || sUpdateGeometryLastProcessor != gVectorizeProcessor) - { - sUpdateGeometryGlobalTime = time_since_app_start; - sUpdateGeometryElapsedTime = 0; - sUpdateGeometryCalls = 0; - sUpdateGeometryRunCount = 0; - sUpdateGeometryLastProcessor = gVectorizeProcessor; - sUpdateGeometryCallPointer = false; - return; - } - F64 percent_time_in_function = - ( sUpdateGeometryElapsedTime * 100.0 ) / ( time_since_app_start - sUpdateGeometryGlobalTime ) ; - sUpdateGeometryGlobalTime = time_since_app_start; - if (!sUpdateGeometryCallPointer) - { - // First set of run data is with vectorization off. - sUpdateGeometryCallPointer = true; - llinfos << "profile (avg of " << sUpdateGeometryCalls << " samples) = " - << "vectorize off " << percent_time_in_function - << "% of time with " - << (sUpdateGeometryElapsedTime / (F64)sUpdateGeometryCalls) - << " seconds per call " - << llendl; - sUpdateGeometryRunAvgOff[sUpdateGeometryRunCount] = percent_time_in_function; - sUpdateGeometryElapsedTimeOff += sUpdateGeometryElapsedTime; - sUpdateGeometryCalls = 0; - } - else - { - // Second set of run data is with vectorization on. - sUpdateGeometryCallPointer = false; - llinfos << "profile (avg of " << sUpdateGeometryCalls << " samples) = " - << "VEC on " << percent_time_in_function - << "% of time with " - << (sUpdateGeometryElapsedTime / (F64)sUpdateGeometryCalls) - << " seconds per call " - << llendl; - sUpdateGeometryRunAvgOn[sUpdateGeometryRunCount] = percent_time_in_function ; - sUpdateGeometryElapsedTimeOn += sUpdateGeometryElapsedTime; - - sUpdateGeometryCalls = 0; - sUpdateGeometryRunCount++; - F64 a = 0.0, b = 0.0; - for(U32 i = 0; i 0.0) - { - llinfos << "Vectorization improves avatar skinning performance, " - << "keeping on for future runs." - << llendl; - gSavedSettings.setBOOL("VectorizeSkin", TRUE); - } - else - { - // SIMD decreases performance, fall back to original code - llinfos << "Vectorization decreases avatar skinning performance, " - << "switching back to original code." - << llendl; - - gSavedSettings.setBOOL("VectorizeSkin", FALSE); - } - } - } - sUpdateGeometryElapsedTime = 0.0f; - } - } -} - void LLViewerJointMesh::dump() { if (mValid) diff --git a/linden/indra/newview/llviewerjointmesh.h b/linden/indra/newview/llviewerjointmesh.h index b40daed..f016da6 100644 --- a/linden/indra/newview/llviewerjointmesh.h +++ b/linden/indra/newview/llviewerjointmesh.h @@ -146,22 +146,6 @@ public: /*virtual*/ BOOL isAnimatable() { return FALSE; } void writeCAL3D(apr_file_t* fp, S32 material_num, LLCharacter* characterp); - - // Avatar vertex skinning is a significant performance issue on computers - // with avatar vertex programs turned off (for example, most Macs). We - // therefore have custom versions that use SIMD instructions. - // - // These functions require compiler options for SSE2, SSE, or neither, and - // hence are contained in separate individual .cpp files. JC - static void updateGeometryOriginal(LLFace* face, LLPolyMesh* mesh); - // generic vector code, used for Altivec - static void updateGeometryVectorized(LLFace* face, LLPolyMesh* mesh); - static void updateGeometrySSE(LLFace* face, LLPolyMesh* mesh); - static void updateGeometrySSE2(LLFace* face, LLPolyMesh* mesh); - - // Use a fuction pointer to indicate which version we are running. - static void (*sUpdateGeometryFunc)(LLFace* face, LLPolyMesh* mesh); - private: // Allocate skin data BOOL allocateSkinData( U32 numSkinJoints ); diff --git a/linden/indra/newview/llviewerjointmesh_sse.cpp b/linden/indra/newview/llviewerjointmesh_sse.cpp deleted file mode 100644 index 4e30ce1..0000000 --- a/linden/indra/newview/llviewerjointmesh_sse.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4 class implementation with LLViewerJointMesh class - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -//----------------------------------------------------------------------------- -// Header Files -//----------------------------------------------------------------------------- - -// Do not use precompiled headers, because we need to build this file with -// SSE support, but not the precompiled header file. JC -#include "linden_common.h" - -#include "llviewerjointmesh.h" - -// project includes -#include "llface.h" -#include "llpolymesh.h" - -// library includes -#include "lldarray.h" -#include "llv4math.h" // for LL_VECTORIZE -#include "llv4matrix3.h" -#include "llv4matrix4.h" -#include "v3math.h" - -// *NOTE: SSE must be enabled for this module - -#if LL_VECTORIZE - -static LLV4Matrix4 sJointMat[32]; - -inline void matrix_translate(LLV4Matrix4& m, const LLMatrix4* w, const LLVector3& j) -{ - m.mV[VX] = _mm_loadu_ps(w->mMatrix[VX]); - m.mV[VY] = _mm_loadu_ps(w->mMatrix[VY]); - m.mV[VZ] = _mm_loadu_ps(w->mMatrix[VZ]); - m.mV[VW] = _mm_loadu_ps(w->mMatrix[VW]); - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VX]), m.mV[VX])); // ( ax * vx ) + vw - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VY]), m.mV[VY])); - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VZ]), m.mV[VZ])); -} - -// static -void LLViewerJointMesh::updateGeometrySSE(LLFace *face, LLPolyMesh *mesh) -{ - LLDynamicArray& joint_data = mesh->getReferenceMesh()->mJointRenderData; - - //upload joint pivots/matrices - for(S32 j = 0, jend = joint_data.count(); j < jend ; ++j ) - { - matrix_translate(sJointMat[j], joint_data[j]->mWorldMatrix, - joint_data[j]->mSkinJoint ? - joint_data[j]->mSkinJoint->mRootToJointSkinOffset - : joint_data[j+1]->mSkinJoint->mRootToParentJointSkinOffset); - } - - F32 weight = F32_MAX; - LLV4Matrix4 blend_mat; - - LLStrider o_vertices; - LLStrider o_normals; - - LLVertexBuffer *buffer = face->mVertexBuffer; - buffer->getVertexStrider(o_vertices, mesh->mFaceVertexOffset); - buffer->getNormalStrider(o_normals, mesh->mFaceVertexOffset); - - const F32* weights = mesh->getWeights(); - const LLVector3* coords = mesh->getCoords(); - const LLVector3* normals = mesh->getNormals(); - for (U32 index = 0, index_end = mesh->getNumVertices(); index < index_end; ++index) - { - if( weight != weights[index]) - { - S32 joint = llfloor(weight = weights[index]); - blend_mat.lerp(sJointMat[joint], sJointMat[joint+1], weight - joint); - } - blend_mat.multiply(coords[index], o_vertices[index]); - ((LLV4Matrix3)blend_mat).multiply(normals[index], o_normals[index]); - } -} - -#else - -void LLViewerJointMesh::updateGeometrySSE(LLFace *face, LLPolyMesh *mesh) -{ - LLViewerJointMesh::updateGeometryVectorized(face, mesh); - return; -} - -#endif diff --git a/linden/indra/newview/llviewerjointmesh_sse2.cpp b/linden/indra/newview/llviewerjointmesh_sse2.cpp deleted file mode 100644 index 1c205ae..0000000 --- a/linden/indra/newview/llviewerjointmesh_sse2.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4 class implementation with LLViewerJointMesh class - * - * Copyright (c) 2007-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -//----------------------------------------------------------------------------- -// Header Files -//----------------------------------------------------------------------------- - -// Do not use precompiled headers, because we need to build this file with -// SSE support, but not the precompiled header file. JC -#include "linden_common.h" - -#include "llviewerjointmesh.h" - -// project includes -#include "llface.h" -#include "llpolymesh.h" - -// library includes -#include "lldarray.h" -#include "llstrider.h" -#include "llv4math.h" // for LL_VECTORIZE -#include "llv4matrix3.h" -#include "llv4matrix4.h" -#include "m4math.h" -#include "v3math.h" - -// *NOTE: SSE2 must be enabled for this module - -#if LL_VECTORIZE - -static LLV4Matrix4 sJointMat[32]; - -inline void matrix_translate(LLV4Matrix4& m, const LLMatrix4* w, const LLVector3& j) -{ - m.mV[VX] = _mm_loadu_ps(w->mMatrix[VX]); - m.mV[VY] = _mm_loadu_ps(w->mMatrix[VY]); - m.mV[VZ] = _mm_loadu_ps(w->mMatrix[VZ]); - m.mV[VW] = _mm_loadu_ps(w->mMatrix[VW]); - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VX]), m.mV[VX])); // ( ax * vx ) + vw - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VY]), m.mV[VY])); - m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VZ]), m.mV[VZ])); -} - -// static -void LLViewerJointMesh::updateGeometrySSE2(LLFace *face, LLPolyMesh *mesh) -{ - LLDynamicArray& joint_data = mesh->getReferenceMesh()->mJointRenderData; - - //upload joint pivots/matrices - for(S32 j = 0, jend = joint_data.count(); j < jend ; ++j ) - { - matrix_translate(sJointMat[j], joint_data[j]->mWorldMatrix, - joint_data[j]->mSkinJoint ? - joint_data[j]->mSkinJoint->mRootToJointSkinOffset - : joint_data[j+1]->mSkinJoint->mRootToParentJointSkinOffset); - } - - F32 weight = F32_MAX; - LLV4Matrix4 blend_mat; - - LLStrider o_vertices; - LLStrider o_normals; - - LLVertexBuffer *buffer = face->mVertexBuffer; - buffer->getVertexStrider(o_vertices, mesh->mFaceVertexOffset); - buffer->getNormalStrider(o_normals, mesh->mFaceVertexOffset); - - const F32* weights = mesh->getWeights(); - const LLVector3* coords = mesh->getCoords(); - const LLVector3* normals = mesh->getNormals(); - for (U32 index = 0, index_end = mesh->getNumVertices(); index < index_end; ++index) - { - if( weight != weights[index]) - { - S32 joint = llfloor(weight = weights[index]); - blend_mat.lerp(sJointMat[joint], sJointMat[joint+1], weight - joint); - } - blend_mat.multiply(coords[index], o_vertices[index]); - ((LLV4Matrix3)blend_mat).multiply(normals[index], o_normals[index]); - } -} - -#else - -void LLViewerJointMesh::updateGeometrySSE2(LLFace *face, LLPolyMesh *mesh) -{ - LLViewerJointMesh::updateGeometryVectorized(face, mesh); - return; -} - -#endif diff --git a/linden/indra/newview/llviewerjointmesh_vec.cpp b/linden/indra/newview/llviewerjointmesh_vec.cpp deleted file mode 100644 index 4d52361..0000000 --- a/linden/indra/newview/llviewerjointmesh_vec.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @file llviewerjointmesh.cpp - * @brief LLV4 math class implementation with LLViewerJointMesh class - * - * Copyright (c) 2001-2007, Linden Research, Inc. - * - * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlife.com/developers/opensource/gplv2 - * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at http://secondlife.com/developers/opensource/flossexception - * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. - * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. - */ - -//----------------------------------------------------------------------------- -// Header Files -//----------------------------------------------------------------------------- -#include "llviewerprecompiledheaders.h" - -#include "llviewerjointmesh.h" - -#include "llface.h" -#include "llpolymesh.h" -#include "llv4math.h" -#include "llv4matrix3.h" -#include "llv4matrix4.h" - -// *NOTE: This is the fallback code for vectorized joint mesh skinning. -// For builds that must support non-SSE x86 code (Windows, perhaps Linux) -// SSE code generation should be disabled for this file. -// -// For builds that run on processors that always have SSE (Mac), -// SSE code generation can be enabled. JC - -static LLV4Matrix4 sJointMat[32]; - -// static -void LLViewerJointMesh::updateGeometryVectorized(LLFace *face, LLPolyMesh *mesh) -{ - LLDynamicArray& joint_data = mesh->getReferenceMesh()->mJointRenderData; - S32 j, joint_num, joint_end = joint_data.count(); - LLV4Vector3 pivot; - - //upload joint pivots/matrices - for(j = joint_num = 0; joint_num < joint_end ; ++joint_num ) - { - LLSkinJoint *sj; - const LLMatrix4 * wm = joint_data[joint_num]->mWorldMatrix; - if (NULL == (sj = joint_data[joint_num]->mSkinJoint)) - { - sj = joint_data[++joint_num]->mSkinJoint; - ((LLV4Matrix3)(sJointMat[j] = *wm)).multiply(sj->mRootToParentJointSkinOffset, pivot); - sJointMat[j++].translate(pivot); - wm = joint_data[joint_num]->mWorldMatrix; - } - ((LLV4Matrix3)(sJointMat[j] = *wm)).multiply(sj->mRootToJointSkinOffset, pivot); - sJointMat[j++].translate(pivot); - } - - F32 weight = F32_MAX; - LLV4Matrix4 blend_mat; - - LLStrider o_vertices; - LLStrider o_normals; - - LLVertexBuffer *buffer = face->mVertexBuffer; - buffer->getVertexStrider(o_vertices, mesh->mFaceVertexOffset); - buffer->getNormalStrider(o_normals, mesh->mFaceVertexOffset); - - const F32* weights = mesh->getWeights(); - const LLVector3* coords = mesh->getCoords(); - const LLVector3* normals = mesh->getNormals(); - for (U32 index = 0, index_end = mesh->getNumVertices(); index < index_end; ++index) - { - if( weight != weights[index]) - { - S32 joint = llfloor(weight = weights[index]); - blend_mat.lerp(sJointMat[joint], sJointMat[joint+1], weight - joint); - } - blend_mat.multiply(coords[index], o_vertices[index]); - ((LLV4Matrix3)blend_mat).multiply(normals[index], o_normals[index]); - } -} diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index a142aff..31d10df 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp @@ -278,7 +278,7 @@ void handle_leave_group(void *); // File Menu const char* upload_pick(void* data); void handle_upload(void* data); -void handle_upload_object(void* data); +//void handle_upload_object(void* data); void handle_compress_image(void*); BOOL enable_save_as(void *); @@ -395,11 +395,11 @@ void slow_mo_animations(void *); void handle_disconnect_viewer(void *); void handle_stopall(void*); -void handle_hinge(void*); -void handle_ptop(void*); -void handle_lptop(void*); -void handle_wheel(void*); -void handle_dehinge(void*); +//void handle_hinge(void*); +//void handle_ptop(void*); +//void handle_lptop(void*); +//void handle_wheel(void*); +//void handle_dehinge(void*); BOOL enable_dehinge(void*); void handle_force_delete(void*); void print_object_info(void*); @@ -980,7 +980,6 @@ extern BOOL gDebugClicks; extern BOOL gDebugWindowProc; extern BOOL gDebugTextEditorTips; extern BOOL gDebugSelectMgr; -extern BOOL gVectorizePerfTest; void init_debug_ui_menu(LLMenuGL* menu) { @@ -1190,8 +1189,6 @@ void init_debug_rendering_menu(LLMenuGL* menu) (void*)"ShowDepthBuffer")); sub_menu->append(new LLMenuItemToggleGL("Show Select Buffer", &gDebugSelect)); - sub_menu->append(new LLMenuItemToggleGL("Vectorize Perf Test", &gVectorizePerfTest)); - sub_menu = new LLMenuGL("Render Tests"); sub_menu->append(new LLMenuItemCheckGL("Camera Offset", @@ -4550,36 +4547,36 @@ class LLToolsStopAllAnimations : public view_listener_t } }; -void handle_hinge(void*) -{ - gSelectMgr->sendHinge(1); -} +//void handle_hinge(void*) +//{ +// gSelectMgr->sendHinge(1); +//} -void handle_ptop(void*) -{ - gSelectMgr->sendHinge(2); -} +//void handle_ptop(void*) +//{ +// gSelectMgr->sendHinge(2); +//} -void handle_lptop(void*) -{ - gSelectMgr->sendHinge(3); -} +//void handle_lptop(void*) +//{ +// gSelectMgr->sendHinge(3); +//} -void handle_wheel(void*) -{ - gSelectMgr->sendHinge(4); -} +//void handle_wheel(void*) +//{ +// gSelectMgr->sendHinge(4); +//} -void handle_dehinge(void*) -{ - gSelectMgr->sendDehinge(); -} +//void handle_dehinge(void*) +//{ +// gSelectMgr->sendDehinge(); +//} -BOOL enable_dehinge(void*) -{ - LLViewerObject* obj = gSelectMgr->getSelection()->getFirstEditableObject(); - return obj && !obj->isAttachment(); -} +//BOOL enable_dehinge(void*) +//{ +// LLViewerObject* obj = gSelectMgr->getSelection()->getFirstEditableObject(); +// return obj && !obj->isAttachment(); +//} class LLEditEnableCut : public view_listener_t diff --git a/linden/indra/newview/llviewermenufile.cpp b/linden/indra/newview/llviewermenufile.cpp index 09b2baf..d0b8c73 100644 --- a/linden/indra/newview/llviewermenufile.cpp +++ b/linden/indra/newview/llviewermenufile.cpp @@ -206,6 +206,7 @@ const char* upload_pick(void* data) return filename; } +/* void handle_upload_object(void* data) { const char* filename = upload_pick(data); @@ -215,7 +216,7 @@ void handle_upload_object(void* data) LLFloaterImport* floaterp = new LLFloaterImport(filename); gUICtrlFactory->buildFloater(floaterp, "floater_import.xml"); } -} +}*/ class LLFileUploadImage : public view_listener_t { diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index d9e2927..d45cf34 100644 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp @@ -2338,82 +2338,6 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) } } -/* -void process_agent_to_new_region(LLMessageSystem *mesgsys, void **user_data) -{ -// LLFastTimer t(LLFastTimer::FTM_TEMP8); - - U64 handle; - U32 ip; - U16 port; - LLUUID session_id; - - // Actually, the agent itself should process this message. - // From a "AgentToNewRegion" message - mesgsys->getIPAddrFast(_PREHASH_RegionData, _PREHASH_IP, ip); - mesgsys->getIPPortFast(_PREHASH_RegionData, _PREHASH_Port, port); - mesgsys->getU64Fast(_PREHASH_RegionData, _PREHASH_Handle, handle); - mesgsys->getUUIDFast(_PREHASH_RegionData, _PREHASH_SessionID, session_id); - - if (gAgent.getSessionID() != session_id) - { - llwarns << "Got AgentToNewRegion with invalid session ID, ignoring" << llendl; - return; - } - - LLViewerRegion *regionp; - - F32 x, y; - from_region_handle(handle, &x, &y); - regionp = gWorldp->getRegionFromHandle(handle); - if (!regionp) - { - if (gAgent.getRegion()) - { - llwarns << "current region " << gAgent.getRegion()->getOriginGlobal() << llendl; - } - - llwarns << "Agent being sent to invalid home region: " - << x << ":" << y - << " current pos " << gAgent.getPositionGlobal() - << llendl; - do_disconnect("You were sent to an invalid region."); - return; - - } - - if (regionp == gAgent.getRegion()) - { - llinfos << "Agent being sent to current home region, skipping." << llendl; - return; - } - - - llinfos << "AgentToNewRegion - being sent to " << x << ":" << y - << "" - - LLVector3 shift_vector = regionp->getPosRegionFromGlobal(gAgent.getRegion()->getOriginGlobal()); - - gAgent.setRegion(regionp); - - gObjectList.shiftObjects(shift_vector); - - llinfos << "Changing home region to " << x << ":" << y << llendl; - - // send camera update to new region - - send_agent_update(TRUE, TRUE); - - // set our upstream asset provider to the new simulator - LLHost upstream(ip, port); - gAssetStorage->setUpstream(upstream); - gCacheName->setUpstream(upstream); - - // Not needed, as simulator will always send request as it creates the new - // agent in the new region. - // send_current_avatar_info(); -} -*/ // Simulator we're on is informing the viewer that the agent // is starting to teleport (perhaps to another sim, perhaps to the @@ -3556,6 +3480,7 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data) // This info is requested by the simulator when the agent first logs in // or when it moves into a simulator in which it did not already have // a child agent. +/* void process_avatar_info_request(LLMessageSystem *mesgsys, void **user_data) { llinfos << "process_avatar_info_request()" << llendl; @@ -3563,7 +3488,7 @@ void process_avatar_info_request(LLMessageSystem *mesgsys, void **user_data) // Send the avatar appearance (parameters and texture entry UUIDs) gAgent.sendAgentSetAppearance(); send_agent_update(TRUE, TRUE); -} +}*/ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data) diff --git a/linden/indra/newview/llviewernetwork.h b/linden/indra/newview/llviewernetwork.h index eb9610b..1023182 100644 --- a/linden/indra/newview/llviewernetwork.h +++ b/linden/indra/newview/llviewernetwork.h @@ -59,8 +59,6 @@ struct LLUserServerData const char* mHelperURI; }; -extern LLHost gUserServer; - extern F32 gPacketDropPercentage; extern F32 gInBandwidth; extern F32 gOutBandwidth; diff --git a/linden/indra/newview/llviewerparcelmgr.cpp b/linden/indra/newview/llviewerparcelmgr.cpp index 437a768..ac56681 100644 --- a/linden/indra/newview/llviewerparcelmgr.cpp +++ b/linden/indra/newview/llviewerparcelmgr.cpp @@ -1058,7 +1058,9 @@ public: // for parcel buys S32 mParcelID; - + S32 mPrice; + S32 mArea; + // for land claims F32 mWest; F32 mSouth; @@ -1116,6 +1118,8 @@ LLViewerParcelMgr::ParcelBuyInfo* LLViewerParcelMgr::setupParcelBuy( info->mIsClaim = is_claim; info->mRemoveContribution = remove_contribution; info->mHost = region->getHost(); + info->mPrice = mCurrentParcel->getSalePrice(); + info->mArea = mCurrentParcel->getArea(); if (!is_claim) { @@ -1161,6 +1165,12 @@ void LLViewerParcelMgr::sendParcelBuy(ParcelBuyInfo* info) msg->addF32("East", info->mEast); msg->addF32("North", info->mNorth); } + else // ParcelBuy + { + msg->nextBlock("ParcelData"); + msg->addS32("Price",info->mPrice); + msg->addS32("Area",info->mArea); + } msg->sendReliable(info->mHost); } diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp index 9e05d4f..0f20fd8 100644 --- a/linden/indra/newview/llviewerregion.cpp +++ b/linden/indra/newview/llviewerregion.cpp @@ -51,6 +51,7 @@ #include "llfloaterregioninfo.h" #include "llhttpnode.h" #include "llnetmap.h" +#include "llstartup.h" #include "llviewerobjectlist.h" #include "llviewerparceloverlay.h" #include "llvlmanager.h" @@ -1176,6 +1177,10 @@ void LLViewerRegion::unpackRegionHandshake() setBillableFactor(billable_factor); setCacheID(cache_id); + LLUUID region_id; + msg->getUUID("RegionInfo2", "RegionID", region_id); + setRegionID(region_id); + LLVLComposition *compp = getComposition(); if (compp) { @@ -1252,6 +1257,11 @@ public: { llinfos << "BaseCapabilitiesComplete::error " << statusNum << ": " << reason << llendl; + + if (STATE_SEED_GRANTED_WAIT == gStartupState) + { + gStartupState = STATE_SEED_CAP_GRANTED; + } } void result(const LLSD& content) @@ -1263,6 +1273,11 @@ public: llinfos << "BaseCapabilitiesComplete::result got capability for " << iter->first << llendl; } + + if (STATE_SEED_GRANTED_WAIT == gStartupState) + { + gStartupState = STATE_SEED_CAP_GRANTED; + } } static boost::intrusive_ptr build( @@ -1279,6 +1294,11 @@ private: void LLViewerRegion::setSeedCapability(const std::string& url) { + if (getCapability("Seed") == url) + { + llwarns << "Ignoring duplicate seed capability" << llendl; + return; + } delete mEventPoll; mEventPoll = NULL; @@ -1306,23 +1326,18 @@ void LLViewerRegion::setSeedCapability(const std::string& url) capabilityNames.append("ParcelVoiceInfoRequest"); capabilityNames.append("ChatSessionRequest"); + llinfos << "posting to seed " << url << llendl; + LLHTTPClient::post(url, capabilityNames, BaseCapabilitiesComplete::build(this)); } -static -LLEventPoll* createViewerEventPoll(const std::string& url) -{ - return new LLEventPoll(url); -} - - void LLViewerRegion::setCapability(const std::string& name, const std::string& url) { if(name == "EventQueueGet") { delete mEventPoll; mEventPoll = NULL; - mEventPoll = createViewerEventPoll(url); + mEventPoll = new LLEventPoll(url, getHost()); } else if(name == "UntrustedSimulatorMessage") { @@ -1346,14 +1361,15 @@ std::string LLViewerRegion::getCapability(const std::string& name) const void LLViewerRegion::logActiveCapabilities() const { + int count = 0; CapabilityMap::const_iterator iter; - for (iter = mCapabilities.begin(); iter != mCapabilities.end(); iter++) + for (iter = mCapabilities.begin(); iter != mCapabilities.end(); iter++, count++) { if (!iter->second.empty()) { - // llinfos << "Active capability is " << iter->first << llendl; llinfos << iter->first << " URL is " << iter->second << llendl; } } + llinfos << "Dumped " << count << " entries." << llendl; } diff --git a/linden/indra/newview/llviewerregion.h b/linden/indra/newview/llviewerregion.h index 5b7ce17..8ac5de2 100644 --- a/linden/indra/newview/llviewerregion.h +++ b/linden/indra/newview/llviewerregion.h @@ -196,6 +196,10 @@ public: LLSurface &getLand() const { return *mLandp; } + // set and get the region id + const LLUUID& getRegionID() const { return mRegionID; } + void setRegionID(const LLUUID& region_id) { mRegionID = region_id; } + BOOL pointInRegionGlobal(const LLVector3d &point_global) const; LLVector3 getPosRegionFromGlobal(const LLVector3d &point_global) const; LLVector3 getPosRegionFromAgent(const LLVector3 &agent_pos) const; @@ -270,6 +274,9 @@ protected: U64 mHandle; LLHost mHost; + // The unique ID for this region. + LLUUID mRegionID; + F32 mTimeDilation; // time dilation of physics simulation on simulator // simulator name diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp index 7696431..3c314cd 100644 --- a/linden/indra/newview/llworld.cpp +++ b/linden/indra/newview/llworld.cpp @@ -37,6 +37,7 @@ #include "llviewercontrol.h" #include "lldrawpool.h" #include "llglheaders.h" +#include "llhttpnode.h" #include "llregionhandle.h" #include "llsurface.h" #include "llviewercamera.h" @@ -762,15 +763,6 @@ void LLWorld::printPacketsLost() << " packets lost: " << cdp->getPacketsLost() << llendl; } } - - llinfos << "UserServer:" << llendl; - llinfos << "-----------" << llendl; - - cdp = gMessageSystem->mCircuitInfo.findCircuit(gUserServer); - if (cdp) - { - llinfos << gUserServer << " packets lost: " << cdp->getPacketsLost() << llendl; - } } void LLWorld::processCoarseUpdate(LLMessageSystem* msg, void** user_data) @@ -1043,6 +1035,41 @@ void process_enable_simulator(LLMessageSystem *msg, void **user_data) msg->sendReliable(sim); } +class LLEstablishAgentCommunication : public LLHTTPNode +{ + LOG_CLASS(LLEstablishAgentCommunication); +public: + virtual void describe(Description& desc) const + { + desc.shortInfo("seed capability info for a region"); + desc.postAPI(); + desc.input( + "{ seed-capability: ..., sim-ip: ..., sim-port }"); + desc.source(__FILE__, __LINE__); + } + + virtual void post(ResponsePtr response, const LLSD& context, const LLSD& input) const + { + if (!input["body"].has("agent-id") || + !input["body"].has("sim-ip-and-port") || + !input["body"].has("seed-capability")) + { + llwarns << "invalid parameters" << llendl; + return; + } + + LLHost sim(input["body"]["sim-ip-and-port"].asString()); + + LLViewerRegion* regionp = gWorldp->getRegion(sim); + if (!regionp) + { + llwarns << "Got EstablishAgentCommunication for unknown region " + << sim << llendl; + return; + } + regionp->setSeedCapability(input["body"]["seed-capability"]); + } +}; // disable the circuit to this simulator // Called in response to "DisableSimulator" message. @@ -1095,8 +1122,6 @@ void send_agent_pause() gMessageSystem->sendReliable(regionp->getHost()); } - gMessageSystem->sendReliable(gUserServer); - gObjectList.mWasPaused = TRUE; } @@ -1122,10 +1147,11 @@ void send_agent_resume() gMessageSystem->sendReliable(regionp->getHost()); } - gMessageSystem->sendReliable(gUserServer); - // Reset the FPS counter to avoid an invalid fps gViewerStats->mFPSStat.start(); } +LLHTTPRegistration + gHTTPRegistrationEstablishAgentCommunication( + "/message/EstablishAgentCommunication"); diff --git a/linden/indra/newview/macview.xcodeproj/project.pbxproj b/linden/indra/newview/macview.xcodeproj/project.pbxproj index 059ae5a..08e64b4 100644 --- a/linden/indra/newview/macview.xcodeproj/project.pbxproj +++ b/linden/indra/newview/macview.xcodeproj/project.pbxproj @@ -27,9 +27,6 @@ 1A0201850B7A861200D5C589 /* llblowfishcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02017E0B7A861200D5C589 /* llblowfishcipher.cpp */; }; 1A0201860B7A861200D5C589 /* llnullcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201810B7A861200D5C589 /* llnullcipher.cpp */; }; 1A0201870B7A861200D5C589 /* llxorcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201830B7A861200D5C589 /* llxorcipher.cpp */; }; - 1A0DA5130C3AC07800361F49 /* llviewerjointmesh_vec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0DA5100C3AC07700361F49 /* llviewerjointmesh_vec.cpp */; }; - 1A0DA5140C3AC07800361F49 /* llviewerjointmesh_sse2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0DA5110C3AC07700361F49 /* llviewerjointmesh_sse2.cpp */; }; - 1A0DA5150C3AC07800361F49 /* llviewerjointmesh_sse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0DA5120C3AC07700361F49 /* llviewerjointmesh_sse.cpp */; }; 1A1C61620847AEE6005D7227 /* llvolumemgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C615E0847AEE6005D7227 /* llvolumemgr.cpp */; }; 1A1C61630847AEE6005D7227 /* llvolume.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C615F0847AEE6005D7227 /* llvolume.cpp */; }; 1A1C61760847B307005D7227 /* llvolumemessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C61740847B307005D7227 /* llvolumemessage.cpp */; }; @@ -435,6 +432,7 @@ 88AA282C0C17720D0032DF53 /* libpng12.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88AA282B0C17720D0032DF53 /* libpng12.a */; }; 9104C0CC0778AE0F001EC4F6 /* llpanelmsgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9104C0CB0778AE0F001EC4F6 /* llpanelmsgs.cpp */; }; 910D255306484F1A0034E66F /* llvolumesliderctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910D255206484F1A0034E66F /* llvolumesliderctrl.cpp */; }; + 9117EAA20BF24A6100845BD2 /* llpacketack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9117EAA10BF24A6100845BD2 /* llpacketack.cpp */; }; 9118669B07F4FAF700E3D5BC /* llmediaremotectrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9118669907F4FAF700E3D5BC /* llmediaremotectrl.cpp */; }; 911CAD87075BE87B00CD1090 /* llinventoryview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 911CAD86075BE87B00CD1090 /* llinventoryview.cpp */; }; 911CAD8B075BE90600CD1090 /* llgroupmgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 911CAD8A075BE90600CD1090 /* llgroupmgr.cpp */; }; @@ -539,6 +537,7 @@ 9C1853AE0A91175E00DA7B01 /* llviewercontrol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9C1853AD0A91175E00DA7B01 /* llviewercontrol.cpp */; }; 9C1A4F6D0A8D4BB30037639E /* llsdserialize_xml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD1558240A06BB5F00DE9AE5 /* llsdserialize_xml.cpp */; }; 9C659A870BAB0B6E00D2EB60 /* llmessageconfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9C659A850BAB0B6E00D2EB60 /* llmessageconfig.cpp */; }; + 9CC280FF0BE79737006D8BDC /* llmessagetemplateparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9CC280FE0BE79737006D8BDC /* llmessagetemplateparser.cpp */; }; 9CD49D5709D0BAC100192434 /* llflexibleobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9CD49D5609D0BAC100192434 /* llflexibleobject.cpp */; }; 9CD49D5B09D0BB1500192434 /* lllocalanimationobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9CD49D5909D0BB1500192434 /* lllocalanimationobject.cpp */; }; A241CB7D07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB7B07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp */; }; @@ -821,9 +820,6 @@ 1A0201820B7A861200D5C589 /* llnullcipher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llnullcipher.h; sourceTree = ""; }; 1A0201830B7A861200D5C589 /* llxorcipher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llxorcipher.cpp; sourceTree = ""; }; 1A0201840B7A861200D5C589 /* llxorcipher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llxorcipher.h; sourceTree = ""; }; - 1A0DA5100C3AC07700361F49 /* llviewerjointmesh_vec.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerjointmesh_vec.cpp; sourceTree = ""; }; - 1A0DA5110C3AC07700361F49 /* llviewerjointmesh_sse2.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerjointmesh_sse2.cpp; sourceTree = ""; }; - 1A0DA5120C3AC07700361F49 /* llviewerjointmesh_sse.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerjointmesh_sse.cpp; sourceTree = ""; }; 1A1C615E0847AEE6005D7227 /* llvolumemgr.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvolumemgr.cpp; sourceTree = ""; }; 1A1C615F0847AEE6005D7227 /* llvolume.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvolume.cpp; sourceTree = ""; }; 1A1C61600847AEE6005D7227 /* llvolumemgr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvolumemgr.h; sourceTree = ""; }; @@ -1502,6 +1498,7 @@ 9104C0CB0778AE0F001EC4F6 /* llpanelmsgs.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelmsgs.cpp; sourceTree = ""; }; 9104C0CD0778AE20001EC4F6 /* llpanelmsgs.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpanelmsgs.h; sourceTree = ""; }; 910D255206484F1A0034E66F /* llvolumesliderctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvolumesliderctrl.cpp; sourceTree = ""; }; + 9117EAA10BF24A6100845BD2 /* llpacketack.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpacketack.cpp; sourceTree = ""; }; 9118669907F4FAF700E3D5BC /* llmediaremotectrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmediaremotectrl.cpp; sourceTree = ""; }; 9118669A07F4FAF700E3D5BC /* llmediaremotectrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmediaremotectrl.h; sourceTree = ""; }; 911CAD86075BE87B00CD1090 /* llinventoryview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llinventoryview.cpp; sourceTree = ""; }; @@ -1923,6 +1920,8 @@ 9C659A850BAB0B6E00D2EB60 /* llmessageconfig.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessageconfig.cpp; sourceTree = ""; }; 9C659A860BAB0B6E00D2EB60 /* llmessageconfig.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessageconfig.h; sourceTree = ""; }; 9C67A8440A02BBA60056B4E0 /* gpu_table.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = gpu_table.txt; sourceTree = ""; }; + 9CC280FE0BE79737006D8BDC /* llmessagetemplateparser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessagetemplateparser.cpp; sourceTree = ""; }; + 9CC281000BE79746006D8BDC /* llmessagetemplateparser.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagetemplateparser.h; sourceTree = ""; }; 9CD49D5609D0BAC100192434 /* llflexibleobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llflexibleobject.cpp; sourceTree = ""; }; 9CD49D5809D0BAD600192434 /* llflexibleobject.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llflexibleobject.h; sourceTree = ""; }; 9CD49D5909D0BB1500192434 /* lllocalanimationobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lllocalanimationobject.cpp; sourceTree = ""; }; @@ -2346,9 +2345,6 @@ 26F529A0051F61CD00A80050 /* newview */ = { isa = PBXGroup; children = ( - 1A0DA5100C3AC07700361F49 /* llviewerjointmesh_vec.cpp */, - 1A0DA5110C3AC07700361F49 /* llviewerjointmesh_sse2.cpp */, - 1A0DA5120C3AC07700361F49 /* llviewerjointmesh_sse.cpp */, 26F52A9D051F61DF00A80050 /* head.cpp */, 26F52A41051F61DF00A80050 /* llagent.cpp */, 1A758C910A436FCA00589675 /* llagentdata.cpp */, @@ -2975,6 +2971,9 @@ 619221B8074A9B58005E1F34 /* llmessage */ = { isa = PBXGroup; children = ( + 9117EAA10BF24A6100845BD2 /* llpacketack.cpp */, + 9CC281000BE79746006D8BDC /* llmessagetemplateparser.h */, + 9CC280FE0BE79737006D8BDC /* llmessagetemplateparser.cpp */, 9C659A850BAB0B6E00D2EB60 /* llmessageconfig.cpp */, 9C659A860BAB0B6E00D2EB60 /* llmessageconfig.h */, AA348DF80B0EAB31002C3015 /* llcurl.cpp */, @@ -4097,7 +4096,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# exit on any error\nset -e\n\n# Copy the necessary resources into the build directory.\npython viewer_manifest.py --actions=\"copy\" --configuration=\"${CONFIGURATION}\" \"${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app\"\n"; + shellScript = "# exit on any error\nset -e\n\n# Check that the message template is compatible\npython ../../scripts/template_verifier.py --mode=\"development\"\n\n# Copy the necessary resources into the build directory.\npython viewer_manifest.py --actions=\"copy\" --configuration=\"${CONFIGURATION}\" \"${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app\"\n"; }; FD53B40409BDF9F600BFE3BC /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -4558,12 +4557,10 @@ A3C20E4C0BB0BD12007E872B /* llviewerjoystick.cpp in Sources */, 1A8870D50BCC5A6300E89AA6 /* llinventorytype.cpp in Sources */, 1A8870E50BCC5A9500E89AA6 /* llviewermenufile.cpp in Sources */, + 9CC280FF0BE79737006D8BDC /* llmessagetemplateparser.cpp in Sources */, 88A95BB20C14D5FC0027E363 /* llsrv.cpp in Sources */, 8833693F0C18AF33007F52DA /* llimagepng.cpp in Sources */, 883369400C18AF33007F52DA /* llpngwrapper.cpp in Sources */, - 1A0DA5130C3AC07800361F49 /* llviewerjointmesh_vec.cpp in Sources */, - 1A0DA5140C3AC07800361F49 /* llviewerjointmesh_sse2.cpp in Sources */, - 1A0DA5150C3AC07800361F49 /* llviewerjointmesh_sse.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4739,6 +4736,7 @@ DA9C41140B54B8CA00DD6F44 /* lllivefile.cpp in Sources */, 1A97C4560B8BCF9C00331A24 /* llliveappconfig.cpp in Sources */, 1A9897E90B98E2F4005C45D7 /* llbase32.cpp in Sources */, + 9117EAA20BF24A6100845BD2 /* llpacketack.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/linden/indra/newview/newview.vcproj b/linden/indra/newview/newview.vcproj index a6d4fa5..955d71a 100644 --- a/linden/indra/newview/newview.vcproj +++ b/linden/indra/newview/newview.vcproj @@ -55,7 +55,9 @@ Description="Executing post-build batch file" CommandLine="postbuild.bat debug"/> + Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat debug"/> + Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat release"/> + Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat releasefordownload"/> + Name="VCPreBuildEventTool" + Description="Executing pre-build batch file" + CommandLine="prebuild.bat releasenoopt"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/linden/indra/newview/newview_vc8.vcproj b/linden/indra/newview/newview_vc8.vcproj index 5ba125b..032a6bf 100644 --- a/linden/indra/newview/newview_vc8.vcproj +++ b/linden/indra/newview/newview_vc8.vcproj @@ -25,6 +25,8 @@ > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/linden/indra/newview/postbuild.bat b/linden/indra/newview/postbuild.bat index f0d4a2d..76bedbe 100644 --- a/linden/indra/newview/postbuild.bat +++ b/linden/indra/newview/postbuild.bat @@ -110,5 +110,10 @@ copy ..\..\libraries\i686-win32\lib_release\xul.dll .\ReleaseForDownload\ /y ) goto end +:BuildFailed +echo POSTBUILD FAILED +exit 1 +:end +echo POSTBUILD SUCCESSFUL :end diff --git a/linden/indra/newview/prebuild.bat b/linden/indra/newview/prebuild.bat new file mode 100755 index 0000000..139d810 --- /dev/null +++ b/linden/indra/newview/prebuild.bat @@ -0,0 +1,13 @@ +@echo off + +rem -- Check current message template against the master +"../../scripts/template_verifier.py" --mode="development" +if errorlevel 1 goto BuildFailed +goto end + +:BuildFailed +echo PREBUILD FAILED +exit 1 + +:end +echo PREBUILD SUCCESSFUL diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt index 83fb42f..34b68c6 100644 --- a/linden/indra/newview/releasenotes.txt +++ b/linden/indra/newview/releasenotes.txt @@ -1,3 +1,21 @@ +Release Notes for Second Life 1.18.0(6) July 11, 2007 +===================================== +Changes: +* Message system changes to support transport via TCP (HTTP) as well as UDP. +** More details are available here: http://blog.secondlife.com/2006/12/21/a-big-change-youll-barely-notice/ +** And here: http://blog.secondlife.com/2007/06/25/dia-de-la-liberacion/ +* German language added to the Windows installer +* Updated translations for German language viewer +* Updated translations for Japanese language viewer +* Updated translations for Korean language viewer +* Viewer "channel" (Release, First Look, etc) now visible at login in the lower right corner next to the version number + +Bug fixes: +* Fixed SVC-286: deleted fully-permissive objects owned by others skip trash +* Fixed SVC-251: Death teleport fails when teleporting to a home point you no longer have access to +* Fixed MISC-273: Enrollment fee is incorrectly deducted if you belong to max. # of groups and try to join new ones + + Release Notes for Second Life 1.17.3(0) July 5, 2007 ===================================== Changes: @@ -19,8 +37,18 @@ Bug fixes: * Fixed odd text overlay on About Land > General tab * Fixed format of llOwnerSay chat text + Release Notes for Second Life 1.17.2(0) June 27, 2007 ===================================== +Bug fixes: +* VWR-1369: Creating, re-rezzing, then editing an object results in a viewer crash + +Not for public: +* SL-46373 VWR-1369: Creating, re-rezzing, then editing an object results in a viewer crash + + +Release Notes for Second Life 1.17.1(0) June 25, 2007 +===================================== Changes: * VWR-650: Make "Give money" permissions look different than the other permissions * VWR-427: Added new menu item: Tools > Edit Linked Parts diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc index bd94933..b1992cf 100644 --- a/linden/indra/newview/res/newViewRes.rc +++ b/linden/indra/newview/res/newViewRes.rc @@ -227,8 +227,8 @@ TOOLPIPETTE CURSOR "toolpipette.cur" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,17,3,0 - PRODUCTVERSION 1,17,3,0 + FILEVERSION 1,18,0,6 + PRODUCTVERSION 1,18,0,6 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -245,12 +245,12 @@ BEGIN BEGIN VALUE "CompanyName", "Linden Lab" VALUE "FileDescription", "Second Life" - VALUE "FileVersion", "1.17.3.0" + VALUE "FileVersion", "1.18.0.6" VALUE "InternalName", "Second Life" VALUE "LegalCopyright", "Copyright © 2001-2007, Linden Research, Inc." VALUE "OriginalFilename", "SecondLife.exe" VALUE "ProductName", "Second Life" - VALUE "ProductVersion", "1.17.3.0" + VALUE "ProductVersion", "1.18.0.6" END END BLOCK "VarFileInfo" diff --git a/linden/indra/newview/secondlife setup build vaak.bat b/linden/indra/newview/secondlife setup build vaak.bat index f957918..63cd71c 100644 --- a/linden/indra/newview/secondlife setup build vaak.bat +++ b/linden/indra/newview/secondlife setup build vaak.bat @@ -1,4 +1,4 @@ @rem Invoke the script which preps then runs the installer. @rem This batch file is customized per grid. -@"secondlife setup build.bat" --grid=vaak +@"viewer_manifest.py" --grid=vaak diff --git a/linden/indra/newview/skins/xui/de/floater_about.xml b/linden/indra/newview/skins/xui/de/floater_about.xml index 8cf3fcb..b35a7ee 100644 --- a/linden/indra/newview/skins/xui/de/floater_about.xml +++ b/linden/indra/newview/skins/xui/de/floater_about.xml @@ -1,7 +1,7 @@ - Second Life bringen Ihnen Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW und viele andere. + Second Life wird zu Ihnen gebracht von: Philip, Andrew, Tessa, Cory, Frank, James, Doug, Hunter, Richard, John, Eric, Avi, AaronB, AaronY, Ian, Peter, Mark, Robin, Stephen, Tracy, Ryan, Alberto, Haney, Tanya, JimJ, Dan, Ben, Stephanie, Tim, Evan, Catherine, Colin, Chris, Reuben, Charity, Jeska, James, JonHenry, Kelly, Callum, Char, Daniel, DavidF, Don, Jeff, Lauren, Lee, Michael, Ramzi, Vektor, Steve, TomY, Tess, Kona, Brent, Clarissa, PeterP, Jesse, Annette, Cyn, Blue, Ginsu, Jonathan, Karen, Adam, Nova, Deana, Lizzie, Patsy, DavidK, Isaac, Pathfinder, Monroe, Jill, Benny, Altruima, Rheya, Jennifer, Jack, DaveP, Brad, Mick, Babbage, Elisabeth, Brian, Beth, Data, Ethan, Wendy, Nicole, Sky, Jeffrey, Zero, Coffee, Tesla, Kenny, Makiko, Nigel, Teeple, Lucy, Mia, Dee, Guy, Harry, Liana, Branka, Jimbo, Aura, Vasuda, SarahD, bethanye, Torley, Runitai, MikeS, PaulM, Milo, Hermia, JoeM, Melanie, Rejean, DSmith, SMiller, Susan, Jose, DongYun, Justin, Andrey, Syrah, Donovan, Henrik, Nora, Lexie, AC, Donna, ChrisC, Alex, Leyla, Kyle, Mathew, Devin, Joshua, DanC, Jessica, Harmony, Claudia, Tramel, Glenn, Betsy, Fritz, Jun, Adam, Cassandra, Ken, RyanW und vielen anderen. Vielen Dank den folgenden Einwohnern, die uns geholfen haben, die bisher beste Version zu entwickeln: Kyrah Abattoir, Icesis Anansi, Clifton Antonelli, Nargus Asturias, Justizin Austinmer, Drake Bacon, Bitzer Balderdash, McWheelie Baldwin, SuezanneC Baskerville, Sweetheart Baskerville, Logan Bauer, Malarthi Behemoth, phoenix Behemoth, Eva Bellambi, Samgame Bertrand, Woody Blair, Tin Bling, Bibi Book, Barney Boomslang, Eric Boyer, Chromal Brodsky, Kerian Bunin, Lara Bunin, BigRick Byrd, Jillian Callahan, Hypatia Callisto, Frans Charming, nathalie Christensen, Francis Chung, pizzaguy Clutterbuck, Evo Commons, Entity Cosmo, Grazel Cosmo, Tiger Crossing, Fremont Cunningham, Jaki Daligdig, Sugar Darling, Todd David, Norman Desmoulins, Gxeremio Dimsum, Happy Dimsum, Kim Dingo, Roy Domela, Cory Edo, Delu Elytis, DBDigital Epsilon, Leeza Everett, Garth FairChang, Snowflake Fairymeadow, Khamon Fate, lex Fitzcarraldo, Kitto Flora, Angel Fluffy, CrystalShard Foo, Raudf Fox, Govindira Galatea, Rizpah Galatea, Tre Giles, Gattz Gilman, Kex Godel, Armandi Goodliffe, Tsu Goodliffe, Nickolas Goodman, Damen Gorilla, Nytemyst Grace, Mhaijik Guillaume, Gleeb Gupte, Ebonfire Harbinger, Bethanee Heaney, Jenny Hicks, Sandling Honey, Victoria Jacques, Adso Krogstad, Travis Lambert, simon Lameth, Duffy Langdon, Aaron Levy, Jade Lily, Gwyneth Llewelyn, Lola Lollipop, Michi Lumin, KaiLastOfTheBrunnenG Macdonald, Jesse Malthus, Herry Maltz, Seth Mandelbrot, Raavi Mann, Shirley Marquez, Dnate Mars, Ima Mechanique, Hawk Mendicant, Mercury Metropolitan, Haravikk Mistral, Trent Mondrian, Nexus Nash, Seraph Nephilim, Lewis Nerd, Aurael Neurocam, Lex Neva, Prokofy Neva, Seagel Neville, Kate Nicholas, Didde Nielsen, Richard Noonan, crevan Nori, Maczter Oddfellow, vanler Odets, Fat Ogre, Hamncheese Omlet, Strife Onizuka, Panthar Orlowski, Jessica Ornitz, Ron Overdrive, OmniCron Overlord, Dargon Pacer, Kar Parks, Eloise Pasteur, Caliandris Pendragon, Julianna Pennyfeather, Iron Perth, Shawk Pertwee, Mera Pixel, Elle Pollack, Phoenix Psaltery, Hank Ramos, Jon Ree, Tam Ree, Zi Ree, Jon Rolland, BamBam Sachertorte, kai Sachertorte, Mily Sartre, ice Semple, Desmond Shang, DigiKatt Shaw, Felix Sholokhov, Rhyph Somme, Rain Soothsayer, Oz Spade, squeekachu Spearmann, Wesley Spengler, Belaya Statosky, eltee Statosky, Khashai Steinbeck, Draco Steinhardt, Hope Stilman, Ashen Stygian, Seifert Surface, Gigs Taggart, Dolmere Talamasca, JayJay Talamasca, Becky Tardis, Fenris Tardis, Cubey Terra, Osprey Therian, Millie Thompson, John Toonie, Charlene Trudeau, Lyr Tuppakaka, Indy Turner, Luthien Unsung, Random Unsung, Huns Valen, Valdemar Virgo, Gordon Wendt, Mike Westerburg, Wayfinder Wishbringer, Lee Wormser, Aimee Xia, nimrod Yaffle, Yiffy Yaffle, Elle74 Zaftig und viele andere. @@ -25,6 +25,6 @@ zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler. Alle Rechte vorbehalten. Details siehe licenses.txt. -Ist keine Programmfehler, sondern eine Funktion. +Fehler sind kein Geheimnis, die darf ruhig jeder sehen. diff --git a/linden/indra/newview/skins/xui/de/floater_groups.xml b/linden/indra/newview/skins/xui/de/floater_groups.xml index 837ac90..13037b0 100644 --- a/linden/indra/newview/skins/xui/de/floater_groups.xml +++ b/linden/indra/newview/skins/xui/de/floater_groups.xml @@ -4,7 +4,7 @@ Ihre derzeit aktive Gruppe wird in Fettdruck angezeigt. - Sie gehören zu [COUNT] Gruppen (von maximal [MAX.]). + Sie gehören zu [COUNT] Gruppen (von maximal [MAX]).