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 @@
+
+
+
+
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]).
diff --git a/linden/indra/newview/skins/xui/de/floater_inventory_item_properties.xml b/linden/indra/newview/skins/xui/de/floater_inventory_item_properties.xml
index 3112df9..5e0bcce 100644
--- a/linden/indra/newview/skins/xui/de/floater_inventory_item_properties.xml
+++ b/linden/indra/newview/skins/xui/de/floater_inventory_item_properties.xml
@@ -64,7 +64,7 @@
Original
- Kopieren
+ Kopie
diff --git a/linden/indra/newview/skins/xui/de/floater_tools.xml b/linden/indra/newview/skins/xui/de/floater_tools.xml
index 3622dd2..45c31b1 100644
--- a/linden/indra/newview/skins/xui/de/floater_tools.xml
+++ b/linden/indra/newview/skins/xui/de/floater_tools.xml
@@ -285,7 +285,7 @@
- Box
+ Quader
Zylinder
@@ -294,7 +294,7 @@
Prisma
- Sphäre
+ Kugel
Torus
@@ -307,7 +307,7 @@
- Pfadausschnitt-Beginn und Ende
+ Pfadschnitt Beginn und Ende
@@ -315,7 +315,7 @@
Hohl
- Schräg
+ Versatz
Hohlform
@@ -335,12 +335,12 @@
- Dienstag 15. Aug. 13:47:25 2006
+ Torsion
- Verjüngt
+ Verjüngung
Lochgröße
@@ -348,25 +348,25 @@
- Obere Schicht
+ Verscherung
- Profil abgeschnitten-Beginn und Ende
+ Profilschnitt-Beginn und Ende
- Kräuseln-Beginn und Ende
+ Vertiefung-Beginn und Ende
- Verjüngt
+ Verjüngung
- Radius Delta
+ Spiralform
Umdrehungen
@@ -374,7 +374,7 @@
- Wählen Sie ein Primitivum aus, um Eigenschaften zu bearbeiten.
+ Wählen Sie nur einen einzelnen Baustein aus, um Eigenschaften zu bearbeiten.
Objekteigenschaften bearbeiten:
diff --git a/linden/indra/newview/skins/xui/de/menu_inventory.xml b/linden/indra/newview/skins/xui/de/menu_inventory.xml
index bf8fd28..c8e6b31 100644
--- a/linden/indra/newview/skins/xui/de/menu_inventory.xml
+++ b/linden/indra/newview/skins/xui/de/menu_inventory.xml
@@ -2,8 +2,8 @@
- Farbe für meine Effekte:
+ Meine Effektfarbe:
Sekunden
- Crash-Berichte:
+ Absturzberichte:
Sprache:
- (Erfordert für vollen Effekt Neustart)
+ (Erfordert Programmneustart)
Nie
- Temporär anzeigen
+ Für eine kurze Zeit
Immer
@@ -51,7 +59,7 @@
-
+
<Regionsnamen eingeben>
@@ -67,20 +75,32 @@
+
+ Systemstandard
+
Englisch (English)
+
+ Chinesisch (Chinese)
+
- Deutsch (German)
+ Deutsch (German)
+
+
+ Französisch (Français)
- 日本語 (Japanese)
+ Japanisch (日本語)
- í•œêµì–´ (Korean)
+ Koreanisch (í•œêµì–´)
-
- Chinesisch
+
+ Portugiesisch (Português)
+
+
+ Spanisch (Español)
diff --git a/linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml
index 3ea042c..4bc538d 100644
--- a/linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml
+++ b/linden/indra/newview/skins/xui/de/panel_preferences_graphics3.xml
@@ -48,4 +48,7 @@
(niedriger ist schneller)
+
diff --git a/linden/indra/newview/skins/xui/en-us/floater_about.xml b/linden/indra/newview/skins/xui/en-us/floater_about.xml
index fbfebf0..e9bb109 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_about.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_about.xml
@@ -7,9 +7,9 @@
follows="left|top|right|bottom" font="SansSerifSmall" height="168" left="6"
max_length="65536" mouse_opaque="true" name="credits_editor"
text_color="1, 1, 1, 1" text_readonly_color="1, 1, 1, 1" width="458"
- word_wrap="true">Second Life is brought to you by 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, Spike, Varas, Andy, Luke, RobLa, Chiyo, JohnZ, Dustin, George, Del, PeterP, Migyeong, Matthew, RMullane, CChampion, JTurbin, JamesC, Viola, Lightfoot, Jacqui, Sturm, Adrian, Buttercup, Alfred, Sunil, Alfred, Noel, Irfan, Jill, Yool, Jane, Yuki, Yoz, Matthew, Arthur, Jennifer, Karl, Brian, Ben, Janine, Christopher, Madhavi, Everett, Anthony, Joon, Jake, sean, Adreanne, Stephany, KellyJo, Jeremy, Pramod, Joshua, Sean, Christopher, Amy, Ceren, Katherine, jon, Sudheendra, James, Stephan, Kari, Kartic, Todd, Thomas, Joki, Rebecca, Belinda, Bert, Roger, Bridie, Kristi, Brian, Maria, John, Aric, Nathanel, Melinda, Darrell, Jennifer, Sandy, Greg, Rob, Brad, Chris, Eric, Palmer, Asi, Katja, Lisa, Minda, Jen, Aaron, Bryan, Mark, Jonathan, Jamie, Laurel, William, Matthew, Steve, David, Remy, James, Tim, Lee, Brian, Ashlei, Sam, Mike, Ethan, Austin, Wanda, Paul, Brian, Rachel, Valentyn, Emma Williams, Autum, Steven, Laley, Charles, Jessica and many others.
+ word_wrap="true">Second Life is brought to you by 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, Spike, Varas, Andy, Luke, RobLa, Chiyo, JohnZ, Dustin, George, Del, PeterP, Migyeong, Matthew, RMullane, CChampion, JTurbin, JamesC, Viola, Lightfoot, Jacqui, Sturm, Adrian, Buttercup, Alfred, Sunil, Alfred, Noel, Irfan, Jill, Yool, Jane, Yuki, Yoz, Matthew, Arthur, Jennifer, Karl, Brian, Ben, Janine, Christopher, Madhavi, Everett, Anthony, Joon, Jake, sean, Adreanne, Stephany, KellyJo, Jeremy, Pramod, Joshua, Sean, Christopher, Amy, Ceren, Katherine, jon, Sudheendra, James, Stephan, Kari, Kartic, Todd, Thomas, Joki, Rebecca, Belinda, Bert, Roger, Bridie, Kristi, Brian, Maria, John, Aric, Nathanel, Melinda, Darrell, Jennifer, Sandy, Greg, Rob, Brad, Chris, Eric, Palmer, Asi, Katja, Lisa, Minda, Jen, Aaron, Bryan, Mark, Jonathan, Jamie, Laurel, William, Matthew, Steve, David, Remy, James, Tim, Lee, Brian, Ashlei, Sam, Mike, Ethan, Austin, Wanda, Paul, Brian, Rachel, Valentyn, Emma Williams, Autum, Steven, Laley, Charles, Jessica, Sue, Gillian, CG, Kip, Kristen, Shamiran, Blake, Brett, Erica, Kent, Joel, Plexus, Twilight, Joppa and many others.
-Thank you to the following residents for helping to ensure that this is the best version yet: Hypatia Callisto, Inigo Chamerberlin, Matti Deigan, Jasper Dogpatch, Able Forder, Evy Gardenvale, Bosco Gray, Torben Jensen, Claire Kanno, bebop Kohime, Michael Kyuzo, Sian Lumley, Chase McClure, Lisa McConnell, Alice Obscure, Stumbelina Ophelia, Arenae Rosewood, Joseph Rustamova, Norm Schack, Funk Schnook, Teleio Seferis, Ninnie Stradling, Darzus Strutt, Glory Takashi, Omei Turnbull, Craig Weiland, Johan Yugen, xsdenied Zucker.
+Thank you to the following residents for helping to ensure that this is the best version yet: Gate Bates, Henri Beauchamp, zinoplatinium Burton, Celeste Eerie, Sara Flinker, skyking Heron, sakura Jannings, Arth Karas, Trevor Langdon, tamara Levitsky, Donuma Masala, Keith Mathieson, Ima Mechanique, Venus Medusa, Alice Obscure, Glenn Rotaru, Norm Schack, Singular Seoul, Rhyph Somme, Amy Sukra, Omei Turnbull, Fehan Villota
APR Copyright (C) 2000-2004 The Apache Software Foundation
Cg Copyright (C) 2002, NVIDIA Corporationa.
@@ -30,7 +30,8 @@ zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
All rights reserved. See licenses.txt for details.
-Bananas are the new plywood cubes.
+
+Viva la Liberación!
+ left="32" mouse_opaque="true" name="full_screen_text" v_pad="0" width="300">
Viewer will display full screen when logged in.
-
+
最後ã®æ›´æ–°1969å¹´12月31日水曜日16:00:00
- 地域:
+ 地域:
Leyla
- 所有地:
+ ä¸å‹•ç”£ï¼š
- メイン・ランド
+ メインランド
ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ï¼š
- (ãªã—)
+ (ãªã—)
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ããªã„ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆï¼å†åˆ†å‰²ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆï¼å†åˆ†å‰²ã§ããªã„ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
- 本ä¸å‹•ç”£ã«ã¯ã€ç´„款ã®æä¾›ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã“ã®ä¸å‹•ç”£ã«ã¯ç´„款ãŒã‚ã‚Šã¾ã›ã‚“。
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒã§ãã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ãã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ããªã„ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã€ã¾ãŸã¯å†åˆ†å‰²ãŒã§ãã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã¾ãŸã¯å†åˆ†å‰²ã§ãã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã€ã¾ãŸã¯å†åˆ†å‰²ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆï¼å†åˆ†å‰²ã§ããªã„ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
- シュミレータã®åŸºæœ¬ä½¿ç”¨:
+ シミュレータã®åŸºæœ¬è¦ç´ 使用状æ³ï¼š
- 14055ã®å†…0(14055利用å¯èƒ½ï¼‰
+ 14055ã®ã†ã¡0(14055利用å¯èƒ½ï¼‰
- 区画支æ´ã‚’基本è¦ç´ :
+ 区画ã§ã‚µãƒãƒ¼ãƒˆã•ã‚Œã‚‹åŸºæœ¬è¦ç´ 数:
926
- 区画を基本è¦ç´ :
+ 区画上ã®åŸºæœ¬è¦ç´ 数:
- 0
+ 誤
- 区画所有者ã«ã‚ˆã£ã¦æ‰€æœ‰:
+ 区画オーナーã«ã‚ˆã‚‹æ‰€æœ‰ï¼š
- 0
+ 誤
-
+
- グループã¸è¨å®š:
+ グループã«è¨å®šï¼š
- 0
+ 誤
-
+
- ä»–ã®äººã«ã‚ˆã£ã¦æ‰€æœ‰:
+ 他人ã«ã‚ˆã‚‹æ‰€æœ‰ï¼š
- 0
+ 誤
-
+
é¸æŠžæ¸ˆã¿ï¼æ±ºå®šæ¸ˆã¿ï¼š
- 0
+ 誤
-
- ä»–ã®å±…ä½è€…ã®ã‚ªãƒ–ジェクトã®è‡ªå‹•è¿”å´ (分ã€, オフよã†ã®0 ):
+
+ ä»–ã®ä½äººã®ã‚ªãƒ–ジェクトã®è‡ªå‹•è¿”å´ï¼ˆåˆ†ã€ã‚ªãƒ•ã®è¨å®šã¯0)
- オブジェクト ã®æ‰€æœ‰è€…:
-
-
-
-
+ オブジェクトã®ã‚ªãƒ¼ãƒŠãƒ¼ï¼š
+
+
+
+
-
+ tool_tip="åå‰ã§æŒ¯ã‚Šåˆ†ã‘" />
+
- ä»–ã®å±…ä½è€…ã«ä»¥ä¸‹ã‚’許ã™:
-
-
-
-
-
-
-
+ ä»–ã®ä½äººã«ä»¥ä¸‹ã‚’許å¯ï¼š
+
+
+
+
+
+ オブジェクトã®ä½œæˆï¼š
+
+
+
+
+ オブジェクト・エントリ:
+
+
+
+
+ スクリプト実行:
+
+
+
- 土地ã®ã‚ªãƒ—ション:
+ 土地オプション:
-
-
-
+
+
+
- ã©ã‚“ãªã‚«ãƒ†ã‚´ãƒªã§ã‚‚
+ 全カテゴリー
- Lindenãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³
+ Linden所在地
æˆäºº
- アート & カルãƒãƒ£ãƒ¼
+ アート&カルãƒãƒ£ãƒ¼
ビジãƒã‚¹
@@ -240,13 +250,13 @@
ゲーãƒ
- 仲間
+ ãŸã¾ã‚Šå ´
- æ–°å‚者ã«å¥½æ„çš„
+ æ–°ä½äººã«å¥½æ„çš„
- 公園 & 自然
+ 公園ã¨è‡ªç„¶
ä½å®…用
@@ -258,33 +268,32 @@
ãã®ä»–
-
+ tool_tip="ã‚ãªãŸã®åŒºç”»æƒ…å ±ã¾ãŸã¯ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒæˆäººå‘ã‘ã¨è¦‹ãªã•ã‚Œã¦ã„ã¾ã™ã€‚" />
+
- スナップショット:
+ スナップショット:
-
+
ç€åœ°ç‚¹ï¼šï¼ˆãªã—)
-
+ tool_tip="ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã«ç€åœ°ç‚¹ã‚’è¨å®šã—ã¦ãã ã•ã„。 ã“ã®åœŸåœ°åŒºç”»ã®ä¸ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。" />
+
- テレãƒãƒ¼ãƒˆãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°:
+ テレãƒãƒ¼ãƒˆãƒ»ãƒ«ãƒ¼ãƒˆ:
- ãµã•ã„ã
+ ブãƒãƒƒã‚¯æ¸ˆã¿
- ç€é™¸åœ°ç‚¹
+ ç€åœ°ç‚¹
ã©ã“ã§ã‚‚
@@ -292,53 +301,52 @@
-
+
- 音楽 URL:
+ ミュージックURL:
メディア
テクスãƒãƒ£ãƒ¼ï¼š
- ã“ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã®äº¤æ›:
+ ã“ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã‚’ç½®æ›ï¼š
-
+
- ã“ã®URLã‹ã‚‰ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¤ã:
+ ã“ã® URLã‹ã‚‰ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„:
+ tool_tip="ã“ã®ã‚ªãƒ—ションをãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ã“ã®åŒºç”»ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ã‚¹ã‚±ãƒ¼ãƒ«ãŒè‡ªå‹•çš„ã«è¨å®šã•ã‚Œã¾ã™ã€‚ 動作速度ã¨ç”»è³ªãŒå°‘ã—低下ã™ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ãŒã€ä»–ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã®ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã‚„整列ãŒå¿…è¦ã«ãªã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“。" />
- ã“ã®åŒºç”»ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã®é™å®š:
+ ã“ã®åŒºç”»ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制é™ï¼š
-
-
-
-
+
+
+
+
-
+
-
+
支払ã„状æ³ã«ã‚ˆã‚Šæ‹’å¦ï¼š
-
-
-
diff --git a/linden/indra/newview/skins/xui/ja/floater_animation_preview.xml b/linden/indra/newview/skins/xui/ja/floater_animation_preview.xml
index cb0450d..283fd9e 100644
--- a/linden/indra/newview/skins/xui/ja/floater_animation_preview.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_animation_preview.xml
@@ -1,116 +1,116 @@
- åå‰:
+ åå‰ï¼š
- 説明:
+ 説明:
+ tool_tip="ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã§ä¸Šæ›¸ãå¯èƒ½ãªä»–ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’制御ã—ã¾ã™ã€‚" />
- å…¨ã¦ã‚’å†æ¤œè¨Ž
+ åŒæ™‚進行行動
+ tool_tip="ã‚¢ãƒã‚¿ãƒ¼ãŒæ™®é€šã®è¡Œå‹•ã‚’ã™ã‚‹ã¨ãã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã®å‹•ãをテストã™ã‚‹ãŸã‚ã«ã“れを使ã„ã¾ã™ã€‚">
- ç«‹ã£ã¦ã„ã‚‹
+ ç«‹ã¤
æ©ã
- ç€å¸
+ 座る
飛行
-
-
+ tool_tip="ã“ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ループå†ç”Ÿã—ã¾ã™ã€‚" />
+
+
- 手ã®ãƒãƒ¼ã‚º
+ 手ã®å‹•ã
+ tool_tip="アニメーションã®æ‰‹ã®å‹•ãをコントãƒãƒ¼ãƒ«ã—ã¾ã™ã€‚">
- 広ã’ã‚‹
+ 広ãŒã‚‹
- ãã¤ã‚ã„ã
+ リラックス
両方を指ã™
- 最åˆ
+ 拳
- å·¦ã«ã‚†ã£ãŸã‚Š
+ リラックス左
左を指ã™
- 最åˆã‚’å·¦
+ 拳左
- å³ã«ã‚†ã£ãŸã‚Š
+ リラックスå³
å³ã‚’指ã™
- 最åˆã‚’å³
+ 拳å³
- å³ã«æ•¬ç¤¼
+ 敬礼å³
- タイピング
+ 入力ã™ã‚‹
- 平和ã®æ¨©åˆ©
+ ピース・サインå³
表ç¾
+ tool_tip="アニメーションã®é¡”を表情をコントãƒãƒ¼ãƒ«ã—ã¾ã™ã€‚">
- [ãªã—]
+ [None]
- ã‚ã‚ã‚ã‚ー
+ アーーーーー
- æれる
+ 怖れ
- 怒る
+ 怒り
満é¢ã®ç¬‘ã¿
- 退屈ã—ãŸ
+ 退屈
æ³£ã
- 軽蔑
+ 侮蔑
- æ¥ãšã‹ã—ã„
+ 困惑
- 眉をã²ãã‚ã‚‹
+ ã—ã‹ã‚ã£é¢
ã‚ス
@@ -122,7 +122,7 @@
Plllppt
- 拒絶ã—ãŸ
+ 嫌悪感
悲ã—ã„
@@ -131,32 +131,31 @@
è‚©ã‚’ã™ãã‚ã‚‹
- 笑ã†
+ 笑ã¿
- é©šã
+ é©šã
- ã¾ã°ãŸãã™ã‚‹
+ ウィンク
- 心é…ã™ã‚‹
+ 心é…
-
-
+
+
-
+
- アニメーションファイルをèªã‚€ã“ã¨ãŒä¸å¯èƒ½
-
- Poser 4ã‹ã‚‰ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•ã‚ŒãŸBVHファイルを推奨ã—ã¾ã—ãŸã€‚
+ アニメーション・ファイルをèªã¿è¾¼ã‚ã¾ã›ã‚“。
+
+ Poser 4ã‹ã‚‰ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•ã‚ŒãŸBVHファイルを推奨ã—ã¾ã™ã€‚
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_auction.xml b/linden/indra/newview/skins/xui/ja/floater_auction.xml
index 9a65b50..ba34ec4 100644
--- a/linden/indra/newview/skins/xui/ja/floater_auction.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_auction.xml
@@ -1,18 +1,10 @@
-
-
-
-
- オークション
-
-
- 最åˆã®åœŸåœ°
-
-
+
+
- ã™ã§ã«è²©å£²å¯¾è±¡ã¨ãªã£ã¦ã„る区画ã¯ã€ç«¶å£²ã«ã‹ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ 売り出ã—ä¸ã®åŒºç”»ã¯ã€ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã«å‡ºå“ã§ãã¾ã›ã‚“。
diff --git a/linden/indra/newview/skins/xui/ja/floater_avatar_picker.xml b/linden/indra/newview/skins/xui/ja/floater_avatar_picker.xml
index aa6e40a..71d5643 100644
--- a/linden/indra/newview/skins/xui/ja/floater_avatar_picker.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_avatar_picker.xml
@@ -1,15 +1,15 @@
-
+
- 人åã®ä¸€éƒ¨ã‚’記入ã—ã¦ãã ã•ã„:
+ ä½äººã®åå‰ã®ä¸€éƒ¨ã‚’入力ã—ã¦ãã ã•ã„。
-
+
- ã¾ãŸã¯ã€ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’é¸æŠžï¼š
+ ã¾ãŸã¯ã‚³ãƒ¼ãƒªãƒ³ã‚°ãƒ»ã‚«ãƒ¼ãƒ‰ã‚’é¸æŠžï¼š
- 『[TEXT]ã€ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ '[TEXT]'ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
diff --git a/linden/indra/newview/skins/xui/ja/floater_avatar_textures.xml b/linden/indra/newview/skins/xui/ja/floater_avatar_textures.xml
index ebbcd32..7ae4b6c 100644
--- a/linden/indra/newview/skins/xui/ja/floater_avatar_textures.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_avatar_textures.xml
@@ -1,26 +1,26 @@
-
+
- Baked Textures
+ 構築ã•ã‚ŒãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼
- Composite Textures
+ åˆæˆãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_build_options.xml b/linden/indra/newview/skins/xui/ja/floater_build_options.xml
index a437edb..49348aa 100644
--- a/linden/indra/newview/skins/xui/ja/floater_build_options.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_build_options.xml
@@ -1,8 +1,8 @@
-
-
-
-
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_bumps.xml b/linden/indra/newview/skins/xui/ja/floater_bumps.xml
index 1f06f93..89748b4 100644
--- a/linden/indra/newview/skins/xui/ja/floater_bumps.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_bumps.xml
@@ -1,21 +1,21 @@
-
+
- 検知無ã—
+ 検出ãªã—
- [TIME][FIRST][LAST]ãŒã€ã‚ãªãŸã«ã¶ã¤ã‹ã‚Šã¾ã—ãŸã€‚
+ [TIME] [FIRST] [LAST]ãŒã€ã‚ãªãŸã«ã¶ã¤ã‹ã‚Šã¾ã—ãŸã€‚
- [TIME][FIRST][LAST]ãŒã€ã‚¹ã‚¯ãƒªãƒ—トã§ã‚ãªãŸã‚’プッシュã—ã¾ã—ãŸã€‚
+ [TIME] [FIRST] [LAST]ãŒã€ã‚¹ã‚¯ãƒªãƒ—トã§ã‚ãªãŸã‚’プッシュã—ã¾ã—ãŸã€‚
- [TIME][FIRST][LAST]ãŒã€ã‚ªãƒ–ジェクトã§ã‚ãªãŸã‚’打ã¡ã¾ã—ãŸã€‚
+ [TIME] [FIRST] [LAST]ãŒã€ã‚ªãƒ–ジェクトをã‚ãªãŸã«å½“ã¦ã¾ã—ãŸã€‚
- [TIME][FIRST][LAST]ãŒã€ã‚¹ã‚¯ãƒªãƒ—トをå«ã‚€ã‚ªãƒ–ジェクトã§ã‚ãªãŸã‚’打ã¡ã¾ã—ãŸã€‚
+ [TIME] [FIRST] [LAST]ãŒã€ã‚¹ã‚¯ãƒªãƒ—ト・オブジェクトをã‚ãªãŸã«å½“ã¦ã¾ã—ãŸã€‚
- [TIME][FIRST][LAST]ãŒã€ç‰©ç†çš„オブジェクトã§ã‚ãªãŸã‚’打ã¡ã¾ã—ãŸã€‚
+ [TIME] [FIRST] [LAST]ãŒã€ç‰©ç†ã‚ªãƒ–ジェクトをã‚ãªãŸã«å½“ã¦ã¾ã—ãŸã€‚
diff --git a/linden/indra/newview/skins/xui/ja/floater_buy_contents.xml b/linden/indra/newview/skins/xui/ja/floater_buy_contents.xml
index b13619e..6e882b9 100644
--- a/linden/indra/newview/skins/xui/ja/floater_buy_contents.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_buy_contents.xml
@@ -1,12 +1,12 @@
-
+
- [NAME]å«ã‚€ã®ã¯ï¼š
+ [NAME]ã®å†…容:
- [NAME]ã‹ã‚‰L$[AMOUNT]を購入ã—ã¾ã™ã‹ï¼Ÿ
+ コンテンツを[NAME]ã‹ã‚‰L$[AMOUNT]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_buy_currency.xml b/linden/indra/newview/skins/xui/ja/floater_buy_currency.xml
index 87b348f..3991d09 100644
--- a/linden/indra/newview/skins/xui/ja/floater_buy_currency.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_buy_currency.xml
@@ -1,61 +1,62 @@
-
+
- 購入貨幣:
+ 貨幣を購入:
ç¾åœ¨è³¼å…¥ä¸å¯ï¼š
- ã•ã‚‰ã«é€šè²¨ãŒå¿…è¦ã§ã™ï¼š
+ ã•ã‚‰ã«ãŠé‡‘ãŒå¿…è¦ã§ã™ï¼š
- 何ã‹ãŒæ£ã—ããªã„。
+ 何ã‹å¤‰ã§ã™ã€‚
-
+
- LindeXã¨æŽ¥è§¦ä¸â€¦
+ LindeXã¨ã‚³ãƒ³ã‚¿ã‚¯ãƒˆä¸â€¦
- 為替交æ›ä¸Šã§L$を購入
+ LindeX通貨両替ã§L$を購入
- [NAME]L$[PRICE]
+ [NAME] L$ [PRICE]
- L$ã§è³¼å…¥
+ L$購入
1234
- 約US$[USD]
+ ç´„US$ [USD]
- ã‚ãªãŸã«ã‚ã‚‹ã®ã¯ã€
+ ç¾åœ¨æ‰€æœ‰ã—ã¦ã„ã‚‹ã®ã¯
- L$[AMT]
+ L$ [AMT]
- 購入ã—ã¦ã„ã¾ã™
+ ã‚ãªãŸã¯è³¼ã—よã†ã¨ã—ã¦ã„ã¾ã™
- L$[AMT]
+ L$ [AMT]
- ã‚ãªãŸã®æ®‹é«˜ã¯ã€€
+ ã‚ãªãŸã®æ®‹é«˜ã¯
- L$[AMT]
+ L$ [AMT]
- ã“ã®è³¼å…¥ã‚’確èªã™ã‚‹ãŸã‚ã«ã€é€šè²¨ã ã‘ã§è³¼å…¥ã—ã¾ã™ã€‚
-ã‚ãªãŸã¯ã¾ãŸã‚ªãƒšãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’試ã¿ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ ã“ã®è³¼è²·ã®ç¢ºèªã§ã¯ã€é€šè²¨ã ã‘を購入ã—ã¾ã™ã€‚
+å†æ“作ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚
- å分ãªé€šè²¨ã‚’購入ã—ã¦ã„ã¾ã›ã‚“。購入金é¡ã‚’増やã—ã¦ãã ã•ã„。
+ ã‚ãªãŸãŒè²·ã†ãƒªãƒ³ãƒ‡ãƒ³ãƒ»ãƒ‰ãƒ«ã§ã¯è¶³ã‚Šã¾ã›ã‚“。
+購入é¡ã‚’増やã—ã¦ãã ã•ã„。
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_buy_land.xml b/linden/indra/newview/skins/xui/ja/floater_buy_land.xml
index d8e236d..b229cdd 100644
--- a/linden/indra/newview/skins/xui/ja/floater_buy_land.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_buy_land.xml
@@ -1,109 +1,111 @@
-
+
- 地域:
+ 地域:
- (未知)
+ (ä¸æ˜Žï¼‰
- 所有地:
+ ä¸å‹•ç”£ï¼š
- (未知)
+ (ä¸æ˜Žï¼‰
ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ï¼š
- (未知)
+ (ä¸æ˜Žï¼‰
ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ï¼š
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ãã‚‹ã‹ã©ã†ã‹ã‚ã‹ã‚Šã¾ã›ã‚“。
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒå¯èƒ½ãªå ´åˆã¨ãã†ã§ãªã„å ´åˆãŒã‚ã‚Šã¾ã™ã€‚
çµ±åˆã¾ãŸã¯å†åˆ†å‰²ã•ã‚Œã‚‹å¯èƒ½æ€§ã‚‚ã€ã•ã‚Œãªã„å¯èƒ½æ€§ã‚‚ã‚ã‚Šã¾ã™ã€‚
- ä¸å‹•ç”£ç´„款ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ï¼š
+ ä¸å‹•ç”£ç´„款ã«åŒæ„ã—ã¦ãã ã•ã„:
- ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...
+ ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
区画:
- Scotopteryx 138,204
+ Scotopteryx138,204
- è¦æ¨¡ï¼š
+ サイズ:
- 1024 平方メーター
+ 1024平方メートル
ä¾¡æ ¼ï¼š
- L$ 1500, オブジェクトãŒå«ã¾ã‚ŒãŸ
+ L$1500ã€ã‚ªãƒ–ジェクト込ã¿
- ã“ã®åœŸåœ°ã‚’購入ã™ã‚‹ã“ã¨ã¯ä»¥ä¸‹ã§ã™:
+ ã“ã®åœŸåœ°ã‚’è²·ã†ã¨ï¼š
- 何ã‹ãŒæ£ã—ããªã„。
+ 何ã‹å¤‰ã§ã™ã€‚
-
+
- プレミアメンãƒãƒ¼ã‚·ãƒƒãƒ—ã«ã‚ãªãŸã‚’アップグレードã—ã¾ã™ã€‚
+ プレミアム・メンãƒãƒ¼ã«ã‚¢ãƒƒãƒ—グレード
- プレミアメンãƒãƒ¼ã ã‘ãŒåœŸåœ°ã‚’所有ã—ã¦ã‚ˆã„。
+ 土地をä¿æœ‰ã§ãã‚‹ã®ã¯ãƒ—レミアム・メンãƒãƒ¼ã ã‘ã§ã™ã€‚
- 月払ã„ã§ã€US$9.95ï¼æœˆ
+ 月é¡9.95米ドルã€æœˆæ‰•ã„
- 三ヶ月払ã„ã§ã€US$7.50ï¼æœˆ
+ 月é¡7.50米ドルã€å¹´4回払ã„
- 年払ã„ã§ã€US$6ï¼æœˆ
+ 月é¡6.00米ドルã€å¹´æ‰•ã„
- US$ 40/月毎ã«ã‚ãªãŸã®æœˆæ¯Žã®åœŸåœ°ä½¿ç”¨æ–™é‡‘ã‚’ã‚ã’ã¾ã™ã€‚
+ 毎月ã®åœŸåœ°ä½¿ç”¨æ–™ã‚’US$40ã«å¼•ã上ã’ã¾ã™ã€‚
- ã‚ãªãŸã¯ 1,309 平方メーターã®åœŸåœ°ã‚’ä¿æŒã—ã¦ã„ã¾ã™ã€‚
-ã“ã®åŒºç”»ã¯512平方メーターã®åœŸåœ°ã§ã™ã€‚
+ ã‚ãªãŸã«ã¯1,309平方メートルã®åœŸåœ°ãŒã‚ã‚Šã¾ã™ã€‚
+ã“ã®åŒºç”»ã¯ 512平方メートルã§ã™ã€‚
- 土地代ã¨ã—ã¦Joe一家ã«L$4000 を支払ã„ã¾ã™
+ Joe Residentã«L$4000支払ã£ã¦åœŸåœ°ã‚’購入
- ã‚ãªãŸã¯ L$2,100ã‚’æŒã£ã¦ã„ã¾ã™ã€‚
+ 所æŒé‡‘㯠L$2,100ã§ã™ã€‚
- è¿½åŠ L$ã§è³¼å…¥
+ è¿½åŠ ã§L$ã®è³¼å…¥
1000
- for approx. US$ [AMOUNT2]
+ ç´„US$ [AMOUNT2]
- ã‚ãªãŸã¯ L$2,100ã‚’æŒã£ã¦ã„ã¾ã™ã€‚
+ 所æŒé‡‘㯠L$2,100ã§ã™ã€‚
-
+
-
+
å†è²©å¯èƒ½
@@ -117,56 +119,58 @@
çµ±åˆï¼å†åˆ†å‰²ä¸å¯èƒ½
- ã‚ãªãŸã«ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚°ãƒ«ãƒ¼ãƒ—ã®ãŸã‚ã«åœŸåœ°ã‚’購入ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚°ãƒ«ãƒ¼ãƒ—用ã®åœŸåœ°è³¼å…¥ã‚’許å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。
- 土地ãŒé¸æŠžã•ã‚Œã¦ã„ãªã„
+ 土地ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“。
- 複数ã®ç•°ãªã£ãŸåŒºç”»ã‚’é¸æŠžã—ã¾ã—ãŸã€‚ã“れよりå°ã•ãªã‚¨ãƒªã‚¢ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ 複数ã®åŒºåŸŸãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã™ã€‚
+é¸æŠžé ˜åŸŸã‚’ç‹ã‚ã¦ã¿ã¦ãã ã•ã„。
- ã‚ãªãŸã«ã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚°ãƒ«ãƒ¼ãƒ—ã®ãŸã‚ã«åœŸåœ°ã‚’購入ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚°ãƒ«ãƒ¼ãƒ—用ã®åœŸåœ°è³¼å…¥ã‚’許å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。
- é¸æŠžã•ã‚ŒãŸåŒºç”»ã¯ã€è²©å£²å¯¾è±¡ã§ã¯ã‚ã‚Šã¾ã›ã‚“。
+ é¸æŠžã•ã‚ŒãŸåŒºç”»ã¯è²©å£²å¯¾è±¡å¤–ã§ã™ã€‚
- グループã¯ã™ã§ã«ãã®åŒºç”»ã‚’所有ã—ã¦ã„ã¾ã™ã€‚
+ グループã¯ã™ã§ã«ã“ã®åŒºç”»ã‚’所有ã—ã¦ã„ã¾ã™ã€‚
- ã‚ãªãŸã¯ã€ã™ã§ã«åŒºç”»ã‚’所有ã—ã¦ã„ã¾ã™ã€‚
+ ã‚ãªãŸã¯ã™ã§ã«ã“ã®åŒºç”»ã‚’所有ã—ã¦ã„ã¾ã™ã€‚
- é¸æŠžã•ã‚ŒãŸåŒºç”»ã¯ã€ä»–ã®å›£ä½“ã¸ã®è²©å£²ãŒæ±ºå®šã•ã‚Œã¦ã„ã¾ã™ã€‚
+ é¸æŠžã•ã‚ŒãŸåŒºç”»ã¯ã€ä»–ã®äººã¸ã®è²©å£²ãŒæ±ºã¾ã£ã¦ã„ã¾ã™ã€‚
- é¸æŠžã•ã‚ŒãŸã‚¨ãƒªã‚¢ã«ã¯ã€å…¬å…±ã®åœŸåœ°ã¯ã‚ã‚Šã¾ã›ã‚“。
+ é¸æŠžã•ã‚ŒãŸåœ°åŸŸã«ã€å…¬å…±ã®åœŸåœ°ã¯ã‚ã‚Šã¾ã›ã‚“。
- ä»–ã®ä½¿ç”¨è€…ã«æ‰€æœ‰ã•ã‚ŒãŸåœŸåœ°ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã™ã€‚ã“れよりå°ã•ãªã‚¨ãƒªã‚¢ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ é¸æŠžã—ãŸåœŸåœ°ã¯ã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ‰€æœ‰ã—ã¦ã„ã¾ã™ã€‚
+é¸æŠžé ˜åŸŸã‚’ç‹ã‚ã¦ã¿ã¦ãã ã•ã„。
- 本土地ã¯åˆã‚ã¦åœŸåœ°è³¼å…¥ã‚’ã™ã‚‹äººã®ãŸã‚ã«ç¢ºä¿ã•ã‚Œã¦ã„ã¾ã™ã€‚
-グループã®ãŸã‚ã«è³¼å…¥ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ ã“ã‚Œã¯åˆã‚ã¦åœŸåœ°ã‚’購入ã™ã‚‹äººç”¨ã®åœŸåœ°ã§ã™ã€‚
+グループ用ã«ã¯è³¼å…¥ã§ãã¾ã›ã‚“。
- 本土地ã¯åˆã‚ã¦åœŸåœ°è³¼å…¥ã‚’ã™ã‚‹äººã®ãŸã‚ã«ç¢ºä¿ã•ã‚Œã¦ã„ã¾ã™ã€‚
-ã‚ãªãŸã¯ã€ã™ã§ã«åœŸåœ°ã‚’所有ã—ã¦ã„ã¾ã™ã€‚
+ ã“ã‚Œã¯åˆã‚ã¦åœŸåœ°ã‚’購入ã™ã‚‹äººç”¨ã®åœŸåœ°ã§ã™ã€‚
+ã‚ãªãŸã¯ã™ã§ã«åœŸåœ°ã‚’æŒã£ã¦ã„ã¾ã™ã€‚
- Processing your purchase...
+ 購入処ç†ä¸...
-(This may take a minute or two.)
+(数分ã‹ã‹ã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ï¼‰
- åœŸåœ°è³¼å…¥æƒ…å ±ã‚’å…¥æ‰‹ä¸ã«ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
+ 土地購入ã®æƒ…å ±å…¥æ‰‹ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒèµ·ãã¾ã—ãŸã€‚
- ã“ã®åœŸåœ°ã‚’購入ã™ã‚‹ã“ã¨ã¯ä»¥ä¸‹ã§ã™:
+ ã“ã®åœŸåœ°ã‚’è²·ã†ã¨ï¼š
- グループã®ãŸã‚ã®åœŸåœ°ã‚’購入ã™ã‚‹
+ グループ用ã«åœŸåœ°ã‚’購入:
ç¾åœ¨è³¼å…¥ä¸å¯ï¼š
@@ -178,54 +182,51 @@
一切必è¦ãªã—
- 土地を所有ã™ã‚‹ã«ã¯ã€ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’アップグレードã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ アカウントをアップグレードã—ãªã„ã¨ã€åœŸåœ°ã‚’所有ã§ãã¾ã›ã‚“。
- ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¯ã€åœŸåœ°æ‰€æœ‰ãŒå¯èƒ½ã§ã™ã€‚
-
-
- ã“ã‚Œã¯ã€ã‚ãªãŸã®åˆã‚ã¦ã®åœŸåœ°è³¼å…¥ã«ãªã‚Šã€ã€Žãƒ•ã‚¡ãƒ¼ã‚¹ãƒˆãƒ»ãƒ©ãƒ³ãƒ‰ã€åŒºç”»ã‚’購入ã§ãる唯一ã®æ©Ÿä¼šã§ã™ã€‚
-
-
- ã“ã‚Œã¯ã€ã‚ãªãŸã®åˆã‚ã¦ã®åœŸåœ°è³¼å…¥ã«ãªã‚Šã¾ã™ãŒã€ã“ã“ã¯åˆã‚ã¦ã®è³¼å…¥è€…ã®ãŸã‚ã«ç¢ºä¿ã•ã‚Œã¦ã„る区画ã§ã¯ã‚ã‚Šã¾ã›ã‚“。より安ã„『ファースト・ランドã€åŒºç”»ã‚’ã€æ¤œç´¢æ©Ÿèƒ½ã§æŽ¢ã™ã“ã¨ãŒã§ãã¾ã™ã€‚
+ ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§åœŸåœ°ã‚’所有ã§ãã¾ã™ã€‚
- ã‚ãªãŸã¯[BUYER]平方メートルã®åœŸåœ°ã‚’ä¿æŒã—ã¦ã„ã¾ã™ã€‚
+ ã‚ãªãŸã¯ [BUYER] 平方メートルã®åœŸåœ°ã‚’所有ã—ã¦ã„ã¾ã™ã€‚
- ã“ã®åœŸåœ°ä»£ã¨ã—ã¦ã€[SELLER]ã«L$[AMOUNT]を支払ã†
+ ã“ã®åœŸåœ°ã®ä»£é‡‘ã¨ã—ã¦ã€[SELLER]ã«L$[AMOUNT]を支払ã†
- Buy L$ [AMOUNT] for approx. US$ [AMOUNT2] ,
+ ç´„US$ [AMOUNT2]ã§L$ [AMOUNT]を購入
- ã“ã®åŒºç”»ã¯[AMOUNT]平方メートルã§ã™ã€‚
+ ã“ã®åŒºç”»ã¯ [AMOUNT] 平方メートルã‚ã‚Šã¾ã™ã€‚
- ã“ã®åœŸåœ°ã¯ä¸€ç‰åœ°ãªãŸã‚ã€[AMOUNT]平方メートルã®ä¾¡æ ¼ã«ãªã‚Šã¾ã™ã€‚
+ ã“ã®åœŸåœ°ã¯ãƒ—レミアムãªã®ã§ã€ [AMOUNT] 平方メートル ã¨ã—ã¦è«‹æ±‚ã•ã‚Œã¾ã™ã€‚
- ã“ã®åœŸåœ°ã¯å€¤ä¸‹ã’ã•ã‚Œã€[AMOUNT]平方メートルã®ä¾¡æ ¼ã«ãªã‚Šã¾ã™ã€‚
+ ã“ã®åœŸåœ°ã¯å€¤ä¸‹ã’ã•ã‚Œã€[AMOUNT]平方メートルã¨ã—ã¦è«‹æ±‚ã•ã‚Œã¾ã™ã€‚
- [AMOUNT]平方メートルã¯ã€[AMOUNT2]オブジェクトをサãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
+ [AMOUNT]平方メートルã§ã‚ã‚Œã°ã€
+[AMOUNT2]個ã®ã‚ªãƒ–ジェクトãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¾ã™ã€‚
- オブジェクトã¨å…±ã«è²©å£²ã•ã‚ŒãŸ
+ オブジェクトã¨å…±ã«è²©å£²æ¸ˆã¿
- グループ[GROUP]ã¯è³¼å…¥å®Œäº†å‰ã«ã€æœ¬åŒºç”»ã‚’ã‚«ãƒãƒ¼ã™ã‚‹ã®ã«å分ãªè³‡é‡‘æä¾›ã¨åœŸåœ°åˆ©ç”¨ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚
+ ã“ã® [GROUP] ãŒåŒºç”»ã®è³¼å…¥æ‰‹ç¶šãを完了ã™ã‚‹ã«ã¯ã€
+ä¾¡æ ¼ã«è¦‹åˆã†ã ã‘ã®å¯„付ã•ã‚ŒãŸåœŸåœ°ã®åˆ©ç”¨å®Ÿç¸¾ãŒ
+å¿…è¦ã§ã™ã€‚
- ã‚ãªãŸã¯L$[AMOUNT]を所有ã—ã¦ã„ã‚‹ãŸã‚ã€ã“ã®åœŸåœ°ã®è³¼å…¥ã«ã¯å分ã§ã™ã€‚
+ ã‚ãªãŸã®æ‰€æŒã™ã‚‹ L$ [AMOUNT]ã§ã€ã“ã®åœŸåœ°ã‚’購入ã§ãã¾ã™ã€‚
- ã‚ãªãŸã¯L$[AMOUNT]ã—ã‹æ‰€æœ‰ã—ã¦ãŠã‚‰ãšã€ã•ã‚‰ã«L$[AMOUNT2]ãŒå¿…è¦ã§ã™ã€‚
+ ã‚ãªãŸã®æ‰€æŒé‡‘㯠L$ [AMOUNT]ã ã‘ã§ã€ã‚ã¨L$ [AMOUNT2] å¿…è¦ã§ã™ã€‚
- 購入後ã€ã‚ãªãŸã®æ®‹é¡ã¯L$[AMOUNT]ã«ãªã‚Šã¾ã™ã€‚
+ 購入後ã€ã‚ãªãŸã®æ®‹é¡ã¯L$[AMOUNT]ã«ãªã‚Šã¾ã™ã€‚
- ã“ã®åœŸåœ°ã‚’入手ã™ã‚‹ã«ã¯ã€å°‘ãªãã¨ã‚‚L$[AMOUNT]を購入ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ ã“ã®åœŸåœ°ã‚’è²·ã†ã«ã¯ã€å°‘ãªãã¨ã‚‚ L$ [AMOUNT] を購入ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
diff --git a/linden/indra/newview/skins/xui/ja/floater_buy_object.xml b/linden/indra/newview/skins/xui/ja/floater_buy_object.xml
index 69b9fde..0f4bf51 100644
--- a/linden/indra/newview/skins/xui/ja/floater_buy_object.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_buy_object.xml
@@ -1,11 +1,11 @@
-
+
- ãã—ã¦ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„:
+ ãŠã‚ˆã³ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„:
- [NAME]ã‹ã‚‰L$[AMOUNT]を購入ã—ã¾ã™ã‹ï¼Ÿ
+ コンテンツを[NAME]ã‹ã‚‰L$[AMOUNT]ã§è³¼å…¥ã—ã¾ã™ã‹ï¼Ÿ
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_chat_history.xml b/linden/indra/newview/skins/xui/ja/floater_chat_history.xml
index 20a7790..b6e7b4b 100644
--- a/linden/indra/newview/skins/xui/ja/floater_chat_history.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_chat_history.xml
@@ -1,6 +1,6 @@
-
-
-
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_choose_group.xml b/linden/indra/newview/skins/xui/ja/floater_choose_group.xml
index 1406b38..08c91f1 100644
--- a/linden/indra/newview/skins/xui/ja/floater_choose_group.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_choose_group.xml
@@ -1,8 +1,8 @@
- グループをé¸æŠž:
+ グループをé¸æŠžï¼š
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_clothing.xml b/linden/indra/newview/skins/xui/ja/floater_clothing.xml
index 2b5bb5c..5a47a09 100644
--- a/linden/indra/newview/skins/xui/ja/floater_clothing.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_clothing.xml
@@ -1,9 +1,9 @@
-
+
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_color_picker.xml b/linden/indra/newview/skins/xui/ja/floater_color_picker.xml
index ba051d3..8047e49 100644
--- a/linden/indra/newview/skins/xui/ja/floater_color_picker.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_color_picker.xml
@@ -1,31 +1,31 @@
-
+
- 赤:
+ 赤:
- グリーン:
+ 緑:
- é’:
+ é’:
- 色åˆã„:
+ 色相:
- Sat:
+ 色調:
- Lum:
+ è¼åº¦ï¼š
-
+
-
+
- ç¾åœ¨ã®è‰²:
+ ç¾åœ¨ã®è‰²ï¼š
- (ä¿å˜ã™ã‚‹ãŸã‚ã«ä¸‹ã«ãƒ‰ãƒ©ãƒƒã‚°)
+ ドラッグã—ã¦ä¿å˜
diff --git a/linden/indra/newview/skins/xui/ja/floater_critical.xml b/linden/indra/newview/skins/xui/ja/floater_critical.xml
index 9d14939..39f6ee8 100644
--- a/linden/indra/newview/skins/xui/ja/floater_critical.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_critical.xml
@@ -1,12 +1,12 @@
-
-
+
+
- é‡è¦ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
+ クリティカル・メッセージ
- 注æ„æ·±ã次ã®Terms of Serviceã‚’èªã‚“ã§ãã ã•ã„。
+ 次ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’注æ„æ·±ããŠèªã¿ãã ã•ã„。
TOS_TEXT
diff --git a/linden/indra/newview/skins/xui/ja/floater_customize.xml b/linden/indra/newview/skins/xui/ja/floater_customize.xml
index 4564843..9310d97 100644
--- a/linden/indra/newview/skins/xui/ja/floater_customize.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_customize.xml
@@ -1,464 +1,467 @@
-
+
-
-
-
-
-
+
-
+
+
+
+ 女性
+
+
+ 男性
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„体型をアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„形をæŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
-
-
- 女性
-
-
- 男性
-
-
-
-
-
-
+
+
-
-
+
+
+
-
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„スã‚ンをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„スã‚ンをæŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
-
-
-
-
-
-
-
-
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
+
+
+
+
+
+
+
-
+
+
+
-
-
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„髪型をアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„髪型をæŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
-
-
-
+
+
-
+
-
-
+
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- æ–°ã—ã„眼をアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„眼をæŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
-
+
+
+
+
+
+
+
-
+
+
+
-
+
-
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„シャツをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„シャツをæŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
-
-
+
+
-
+
-
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„手袋をアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„ズボンをæŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
-
-
-
-
-
-
-
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„é´ã‚’ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„é´ã‚’æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
+
-
-
-
-
+
-
+
-
+
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„é´ä¸‹ã‚’ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„é´ä¸‹ã‚’æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
+
-
-
-
-
-
+ tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã" />
+
+
-
+
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„ジャケットをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„上ç€ã‚’æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
-
-
+
-
-
-
-
+ tool_tip="写真をクリックã—ã¦é¸æŠž" />
+
+
+
-
+
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„手袋をアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„手袋をæŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
+
-
-
-
-
-
+ tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã" />
+
+
-
+
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„下ç€ã‚’ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„下ç€ã‚’æŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
+
-
-
-
-
-
+ tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã" />
+
+
-
+
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„パンツをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„パンツをæŒã¡ç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
+
-
-
-
-
-
+ tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã" />
+
+
-
+
+
+
[DESC]
- [DESC]:修æ£ä¸å¯èƒ½
+ [DESC]: ä¿®æ£ã§ãã¾ã›ã‚“。
- [DESC]:ãƒãƒ¼ãƒ‰ä¸â€¦
+ [DESC]: ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- [DESC]:装ç€ã•ã‚Œãªã„
+ [DESC]: 未装ç€ã€‚
- [PATH]ã«å˜åœ¨
+ [PATH]ã«æ‰€åœ¨
- ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ã€æ–°ã—ã„スカートをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚æ–°ãŸã«ä¸€ã‹ã‚‰ä½œè£½ã—ã¦ã€è£…ç€ã™ã‚‹äº‹ã‚‚出æ¥ã¾ã™ã€‚
+ æ–°ã—ã„スカートをæŒç‰©ã‹ã‚‰ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦è£…ç€ã—ã¾ã—ょã†ã€‚
+ 完全ã«æ–°è¦ã®çŠ¶æ…‹ã‹ã‚‰ä½œæˆã—ã¦è£…ç€ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- ã‚ãªãŸã«ã¯è£…ç€å¯èƒ½ã«ä¿®æ£ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã“ã®æœã®ä¿®æ£ã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
+
-
+ tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã" />
+
+
+
+
+
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_directory.xml b/linden/indra/newview/skins/xui/ja/floater_directory.xml
index f4d0093..402aeed 100644
--- a/linden/indra/newview/skins/xui/ja/floater_directory.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_directory.xml
@@ -1,238 +1,233 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
- 見ã¤ã‘ã‚‹:
+ 検索:
-
-
-
+
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
- 見ã¤ã‘ã‚‹:
+ 検索:
-
+
- ã©ã‚“ãªã‚«ãƒ†ã‚´ãƒªã§ã‚‚
+ 全カテゴリー
ショッピング
- 土地賃貸
+ 借地
- 所有地賃貸
+ 貸物件
特別ãªã‚¢ãƒˆãƒ©ã‚¯ã‚·ãƒ§ãƒ³
- æ–°ã—ã„製å“
+ 新製å“
雇用
- 望んã
+ 求人
サービス
- 個人ã®
+ 個人
-
-
-
-
-
-
-
+
+
-
-
+
+
- æ–°ç€äº‹é …ã®é€šçŸ¥
+ 進行ä¸ã¨è¿‘日予定
日付
-
+
6/6
-
+
+ tool_tip="今日ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’表示" />
- カテゴリ:
+ カテゴリー:
- åå‰/説明:
+ åå‰ï¼èª¬æ˜Ž:
- å…¨ã¦
+ ã™ã¹ã¦
- 話ã—åˆã„
+ ディスカッション
スãƒãƒ¼ãƒ„
- 生ã®éŸ³æ¥½
+ 生演å¥
- å–引ã®
+ 商æ¥ç›®çš„
- 夜éŠã³/娯楽
+ 夜éŠã³ï¼ã‚¨ãƒ³ã‚¿ãƒ¼ãƒ†ã‚¤ãƒ³ãƒ¡ãƒ³ãƒˆ
- ゲーム/内容
+ ゲームï¼ã‚³ãƒ³ãƒ†ã‚¹ãƒˆ
- ペジェントショー
+ ショー
教育
- 芸術ã¨æ–‡åŒ–
+ アートã¨ã‚«ãƒ«ãƒãƒ£ãƒ¼
- ãƒãƒ£ãƒªãƒ†ã‚£ãƒ¼/支æ´ã‚°ãƒ«ãƒ¼ãƒ—
+ ãƒãƒ£ãƒªãƒ†ã‚£ï¼ã‚µãƒãƒ¼ãƒˆãƒ»ã‚°ãƒ«ãƒ¼ãƒ—
- 種々雑多
+ ãã®ä»–
-
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
- 交通é‡ã‚„ã€ãã“ã§äººã€…ãŒéŽã”ã™æ™‚é–“ã‹ã‚‰è¨ˆæ¸¬ã—ã¦ã€ã“れらã¯ä¸–ç•Œã§ä¸€ç•ªäººæ°—ã®ã‚ã‚‹å ´æ‰€ã§ã™ã€‚
+ 交通é‡ã‚„人々ã®æ»žåœ¨æ™‚é–“ã‹ã‚‰è¦‹ã¦ã€ã“れらã¯ä¸–ç•Œã§ã‚‚
+大変人気ã®ã‚ã‚‹å ´æ‰€ã§ã™ã€‚
-
-
-
-
-
-
+
+
-
-
+
+
+
+
- å…¨ã¦ã®ã‚¿ã‚¤ãƒ—
+ 全種類
オークション
-
- 売り出ã—
+
+ 売り出㗠– メインランド
-
- 最åˆã®åœŸåœ°
+
+ 売り出㗠– ä¸å‹•ç”£
- PG & Mature
+ PGã¨æˆäºº
- PG ã®ã¿
+ PGã®ã¿
- æˆäººã®ã¿
+ æˆäººå°‚用
-
+
- 土地ã¯Linden ドル(L$)ã§ç›´æŽ¥ã‹ã€ã¾ãŸã¯L$ ã¾ãŸã¯US$ã«ã‚ˆã‚‹ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã§è³¼å…¥ã§ãã¾ã™ã€‚
-直接購入ã™ã‚‹ã«ã¯ã€ãã®åœŸåœ°ã‚’訪れã€ãã—ã¦ã‚¿ã‚¤ãƒˆãƒ«ãƒãƒ¼ä¸Šã®å ´æ‰€ã®åå‰ã‚’クリックã—ã¾ã™ã€‚
+ 土地ã¯L$ã§ç›´æŽ¥è²·ã†ã‹ã€L$建ã¾ãŸã¯US$建ã®ã‚ªãƒ¼ã‚¯ã‚·ãƒ§ãƒ³ã§è²·ãˆã¾ã™ã€‚
+直接購買ã¯åœŸåœ°ã«è¡Œãタイトル・ãƒãƒ¼ã®åœŸåœ°ã®åå‰ã‚’クリックã—ã¦ãã ã•ã„。
-
-
-
-
+
+
+
+
-
-
+
+
+
+
- 見ã¤ã‘ã‚‹:
+ 検索:
-
+
- ã©ã‚“ãªã‚«ãƒ†ã‚´ãƒªã§ã‚‚
+ 全カテゴリー
- Lindenãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³
+ Linden所在地
æˆäºº
- アート & カルãƒãƒ£ãƒ¼
+ アート&カルãƒãƒ£ãƒ¼
ビジãƒã‚¹
@@ -244,13 +239,13 @@
ゲーãƒ
- 仲間
+ ãŸã¾ã‚Šå ´
- æ–°å‚者ã«å¥½æ„çš„
+ æ–°ä½äººã«å¥½æ„çš„
- 公園 & 自然
+ 公園ã¨è‡ªç„¶
ä½å®…用
@@ -263,35 +258,41 @@
-
-
-
-
+
+
-
-
+
+
+
+
- 見ã¤ã‘ã‚‹:
+ 検索:
-
-
-
-
-
+
-
-
+
+
+
+
- 見ã¤ã‘ã‚‹:
+ 検索:
+
+
+
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_friends.xml b/linden/indra/newview/skins/xui/ja/floater_friends.xml
index 1cbbd27..7a858a8 100644
--- a/linden/indra/newview/skins/xui/ja/floater_friends.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_friends.xml
@@ -1,19 +1,34 @@
-
-
-
+
+
+
+
+
+
+ フレンドをé¸æŠžã—ã¦æ¨©é™ã‚’変更...
+
+
+
+
+
+ 権é™ã®å¤‰æ›´å‡¦ç†ä¸...
+
+
+
+
+ tool_tip="ä½äººã«ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—を贈りã¾ã™ã€‚" />
+
-
-
-
-
+ tool_tip="リンデン・ドル(L$)をフレンドã«è´ˆã‚‹" />
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_gesture.xml b/linden/indra/newview/skins/xui/ja/floater_gesture.xml
index 0ef9cab..1a412c4 100644
--- a/linden/indra/newview/skins/xui/ja/floater_gesture.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_gesture.xml
@@ -1,18 +1,17 @@
-
+
- トリガã®èªžå¥ã‚’ãƒãƒ£ãƒƒãƒˆã™ã‚‹ã‹ã€ã¾ãŸã¯ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³
-ã¨éŸ³ã®æ¼”å¥ã®ãŸã‚ã®ã‚ーを押ã—ã¾ã™ã€‚
+ フレーズã®ä½¿ç”¨ã¾ãŸã¯ã‚ーを押ã—ã¦å‹•ç”»ã¨éŸ³ã‚’å†ç”Ÿã—ã¾ã™ã€‚
-
-
+
+
-
+
-
-
+
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_god_tools.xml b/linden/indra/newview/skins/xui/ja/floater_god_tools.xml
index d8769ec..7524356 100644
--- a/linden/indra/newview/skins/xui/ja/floater_god_tools.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_god_tools.xml
@@ -2,10 +2,11 @@
-
-
+
@@ -14,30 +15,31 @@
-
+
+ tool_tip="ä½äººãŒãƒ†ãƒ¬ãƒãƒ¼ãƒˆã§åŽ»ã£ãŸã¨ãã€å½¼ã‚‰ã®ãƒ›ãƒ¼ãƒ を目的地ã«ãƒªã‚»ãƒƒãƒˆã™ã‚‹ã€‚" />
+ tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã§ãƒ€ãƒ¡ãƒ¼ã‚¸ã‚’有効化ã—ã¾ã™ã€‚" />
-
+ tool_tip="ã“ã®è¨å®šã«ã‚ˆã‚Šã€ã“ã®åœ°åŸŸå†…ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯è¨ˆç®—をオフã«ã—ã¾ã™ã€‚" />
+
-
-
-
+ tool_tip="ã“ã‚ŒãŒã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹åœ°åŸŸã§ã‚‚切り替ãˆ" />
+
+
+
- ä¸å‹•ç”£ï¼©ï¼¤ï¼š
+ ä¸å‹•ç”£ID:
親ID:
@@ -51,69 +53,71 @@
- グリッドã«å†æ¡ˆå†…ã™ã‚‹ï¼š
+ グリッドã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆï¼š
- 請求ã§ãã‚‹è¦å› :
+ 請求率:
- 平方メートル当ãŸã‚ŠL$:
+ 平方メートル当ãŸã‚ŠL$:
-
+
+ tool_tip="上記ã®å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¾ã™ã€‚" />
+ tool_tip="土地ツールã§åœ°åŸŸå…¨ä½“ã‚’é¸æŠžã—ã¦ãã ã•ã„。" />
+ tool_tip="Gzip状態を自動ä¿å˜ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ä¿å˜ã—ã¾ã™ã€‚" />
シムå:
- ウェールズ語
+ ウェルシュ
-
-
-
+
+
+
+ tool_tip="上記ã®å¤‰æ›´ã‚’é©ç”¨ã™ã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¾ã™ã€‚" />
- (対象無ã—)
+ (対象ãªã—)
+ tool_tip="ã“ã®åœ°åŸŸã«ãŠã„ã¦å¯¾è±¡ãŒæ‰€æœ‰ã—ã¦ã„ãªã„スクリプト・オブジェクトをã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã€‚ (コピーç¦æ¢ï¼‰ã‚ªãƒ–ジェクトã¯è¿”å´ã•ã‚Œã¾ã™ã€‚" />
-
+
-
-
+ tool_tip="ã“ã®åœ°åŸŸã«ãŠã„ã¦å¯¾è±¡ãŒæ‰€æœ‰ã—ã¦ã„るオブジェクトをã™ã¹ã¦å‰Šé™¤ã—ã¾ã™ã€‚ (コピーç¦æ¢ï¼‰ã‚ªãƒ–ジェクトã¯è¿”å´ã•ã‚Œã¾ã™ã€‚" />
+
+
+ tool_tip="ã™ã¹ã¦ã®ã‚¹ã‚¯ãƒªãƒ—トã¨ãれらã®ä½¿ç”¨å›žæ•°ã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚" />
-
+
目的地:
@@ -136,10 +140,10 @@
スクリプト<回数>ã€ï¼œã‚ªãƒ—ション・パターン>
- オブジェクト<模様>
+ オブジェクト<パターン>
- <asset_id>を表示
+ rez <asset_id>
diff --git a/linden/indra/newview/skins/xui/ja/floater_group_info.xml b/linden/indra/newview/skins/xui/ja/floater_group_info.xml
index 3b01350..9330ca0 100644
--- a/linden/indra/newview/skins/xui/ja/floater_group_info.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_group_info.xml
@@ -1,78 +1,78 @@
-
+
- グループ:
+ ã‚°ãƒ«ãƒ¼ãƒ—æƒ…å ±
- グループã¯ã‚ãªãŸã®å‹é”ã¨ä¸€ç·’ã«å”力ã™ã‚‹ã«ã¯æ¥½ã—ã„方法ã§ã™ã€‚
+ グループを活用ã™ã‚Œã°ã€ãƒ•ãƒ¬ãƒ³ãƒ‰ãŸã¡ã¨ã®ã‚³ãƒ©ãƒœãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã‚’楽ã—ã進ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
- グループã¯å½¹è·ã€è¨˜ç« ã¨æŠ•ç¥¨æ¨©ã‚’ã‚ãªãŸã«æŒãŸã›ã¾ã™ã€‚
+ グループã«ã¯ã€ã‚¿ã‚¤ãƒˆãƒ«ã€è¨˜ç« ã€æŠ•ç¥¨ã‚·ã‚¹ãƒ†ãƒ ãŒã‚ã‚Šã¾ã™ã€‚
- ã ã‚Œã§ã‚‚グループを作æˆã—ã¦ã‚ˆã„ã§ã™ã€‚å„個人ã¯15 グループã¾ã§å±žã—ã¦ã‚ˆã„ã§ã™ã€‚
+ グループã¯èª°ã«ã§ã‚‚作æˆã§ãã¾ã™ã€‚ å„人ãŒæ‰€å±žã§ãるグループã®æœ€å¤§æ•°ã¯15ã§ã™ã€‚
- グループã¯å°‘ãªãã¨ã‚‚3人ã®æ´»å‹•ä¸ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’æŒã¤å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ グループをアクティブã«ä¿ã¤ã«ã¯ã€3人以上ã®ãƒ¡ãƒ³ãƒãƒ¼ãŒå¿…è¦ã§ã™ã€‚
- グループã®ä¾¡æ ¼ L$100を作æˆ
+ グループ作æˆã«ã¯L$100ã‹ã‹ã‚Šã¾ã™ã€‚
- åå‰:
+ åå‰ï¼š
- 創始者:
+ 創è¨è€…:
- 支部:
+ 特権:
-
-
-
+
+
+
+ tool_tip="ã‚ãªãŸã®ãƒ—ãƒãƒ•ã‚¡ã‚¤ãƒ«æƒ…å ±ã¯æˆäººå‘ã‘ã¨è¦‹ãªã•ã‚Œã¦ã„ã¾ã™ã€‚" />
-
+
- グループã§ã®å½¹è·
+ グループ・タイトル
- グループã¯ç‰¹åˆ¥ãªå½¹è·ã‚’æŒã¤ã“ã¨ãŒã§ãるオフィサーã¨ãƒ¡ãƒ³ãƒãƒ¼ã®ä¸¡æ–¹ã‚’æŒã¤ã“ã¨ãŒã§ãã¾ã™ã€‚
+ グループã«ã¯ã€ã‚ªãƒ•ã‚£ã‚µãƒ¼ã¨ãƒ¡ãƒ³ãƒãƒ¼ã‚’å«ã‚ã‚‹ã“ã¨ãŒã§ãã€ãã®ä¸¡æ–¹ã«ç‰¹åˆ¥ãªã‚¿ã‚¤ãƒˆãƒ«ã‚’æŒãŸã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
- ã“れらã®è·åã¯ã€ä¸–ç•Œä¸ã€ãƒãƒ£ãƒƒãƒˆã®ä¸ã€ãã—ã¦IMä¸ã§ã®å½¼ã‚‰ã®åå‰ã®å‰ã«ç¾ã‚Œã¾ã™ã€‚
+ ã“れらã®è‚©æ›¸ãã¯ã€ä¸–界やãƒãƒ£ãƒƒãƒˆã‚„IMã§ã€åå‰ã®å‰ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
- オフィサーã®å½¹è·:
+ オフィサーã®è‚©æ›¸ã:
- メンãƒãƒ¼ã®å½¹è·:
+ メンãƒãƒ¼ãƒ»ã‚¿ã‚¤ãƒˆãƒ«ï¼š
- グループã®è¨˜ç« ã‚’è¨å®šã™ã‚‹ãŸã‚ã«ã‚ãªãŸã®åœ¨åº«ç›®éŒ²ã®ãã¨ã«ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã‚’ドラックã™ã‚‹ã€‚
+ テクスãƒãƒ£ãƒ¼ã‚’æŒã¡ç‰©ã®å¤–ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®è¨˜ç« ã‚’è¨å®šã—ã¾ã™ã€‚
-
+
- グループメンãƒãƒ¼
+ グループ・メンãƒãƒ¼
- ç¾åœ¨ã®ã‚°ãƒ«ãƒ¼ãƒ—オフィサーã¨ãƒ¡ãƒ³ãƒãƒ¼
+ ç¾åœ¨ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚ªãƒ•ã‚£ã‚µãƒ¼ã¨ãƒ¡ãƒ³ãƒãƒ¼
- åå‰ã‚’クリックã—ã¦ã€ãƒ¡ãƒ³ãƒãƒ¼ãƒ—ãƒãƒ•ã‚¡ã‚¤ãƒ«ã‚’見る。
+ メンãƒãƒ¼ã®ãƒ—ãƒãƒ•ã‚£ãƒ¼ãƒ«ã‚’表示ã™ã‚‹ã«ã¯ã€åå‰ã‚’クリックã—ã¾ã™ã€‚
- オフィサー:
+ オフィサー:
- メンãƒãƒ¼:
+ メンãƒãƒ¼ï¼š
@@ -84,197 +84,196 @@
グループé¸æŒ™
- Start Election ボタンを押ã—ã¦ã€æ–°ã—ã„é¸æŒ™ã‚’始ã‚ã¾ã™ã€‚
-候補者ã¯ã™ã¹ã¦ã‚ªãƒ•ã‚£ã‚µãƒ¼ã§ãªã„グループメンãƒãƒ¼ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚
+ [é¸æŒ™é–‹å§‹]ボタンを押ã™ã¨ã€æ–°ã—ã„é¸æŒ™ãŒé–‹å§‹ã•ã‚Œã¾ã™ã€‚
+候補者ã«ã¯ã€ã‚ªãƒ•ã‚£ã‚µãƒ¼ä»¥å¤–ã®å…¨ãƒ¡ãƒ³ãƒãƒ¼ãŒå«ã¾ã‚Œã¾ã™ã€‚
- 候補:
+ 候補者:
-
-
+
+
- 定数:
+ 定足数:
- 111 人ã®ç·ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã®å†…
+ グループ・メンãƒãƒ¼ç·æ•°111ã®ã†ã¡ã€‚
- 大多数:
+ 多数派:
- éŽåŠæ•°
+ å˜ç´”éŽåŠæ•°
- 2/3 Majority
+ 2/3以上ã®å¤šæ•°
- æº€å ´ä¸€è‡´
+ 全員一致
- æŒç¶šæ™‚é–“:
+ 継続期間:
- æ—¥
+ 日数
- é¸æŒ™é–‹å§‹:
+ é¸æŒ™é–‹å§‹ï¼š
- é¸æŒ™çµ‚了:
+ é¸æŒ™çµ‚了:
- グループã®æ案
+ グループã®å•é¡Œæèµ·
- 進行ä¸ã®æ案ã¯ã‚ã‚Šã¾ã›ã‚“。
-Create Proposal ボタンを押ã—ã¦ã€æ–°ã—ã„æ案を作æˆã—ã¾ã™ã€‚
+ ç¾åœ¨ã€æœ‰åŠ¹ãªå•é¡Œæèµ·ã¯ã‚ã‚Šã¾ã›ã‚“。 [å•é¡Œæ起を作æˆ]ボタンをクリックã—ã¦ã€æ–°ã—ã„
+å•é¡Œã‚’æèµ·ã—ã¦ãã ã•ã„。
- æ案:
+ æ案:
-
-
+
-
+
- 定数:
+ 定足数:
- 111 人ã®ç·ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã®å†…
+ グループ・メンãƒãƒ¼ç·æ•°111ã®ã†ã¡ã€‚
- 大多数:
+ 多数派:
- éŽåŠæ•°
+ å˜ç´”éŽåŠæ•°
- 2/3 Majority
+ 2/3以上ã®å¤šæ•°
- æº€å ´ä¸€è‡´
+ 全員一致
- æŒç¶šæ™‚é–“:
+ 継続期間:
- æ—¥
+ 日数
- 投票開始:
+ 投票開始:
- 投票終了:
+ 投票終了:
- グループã®æŠ•ç¥¨å±¥æ´
+ グループ投票履æ´
- ã‚ãªãŸã¯ã€ã“ã®æŠ•ç¥¨ã‚’é¸æŠžã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦éŽåŽ»ã®ã‚°ãƒ«ãƒ¼ãƒ—投票ã®çµæžœã‚’ã¿ã¦ã‚‚良ã„ã§ã™ã€‚
+ 投票終了をé¸æŠžã™ã‚‹ã¨ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®éŽåŽ»ã®æŠ•ç¥¨çµæžœã‚’表示ã§ãã¾ã™ã€‚
- View Itemを押ã™ã€‚
+ [アイテムを表示]を押ã—ã¾ã™ã€‚
- éŽåŽ»ã®æŠ•ç¥¨:
+ éŽåŽ»ã®æŠ•ç¥¨ï¼š
- 投票ã®çµæžœ:
+ 投票çµæžœï¼š
-
-
+
- Group Invitations
+ グループ招待
- 招待状ã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’介ã—ã¦é€ã‚‰ã‚Œã¾ã™ã€‚
+ 招待状ãŒã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ»ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§é€ã‚‰ã‚Œã¾ã™ã€‚
- è¿½åŠ ãƒœã‚¿ãƒ³ã‚’ã‚¯ãƒªãƒƒã‚¯ã—ã¦ã€ãƒªã‚¹ãƒˆã«ä½¿ç”¨è€…ã‚’è¿½åŠ ã—ã¾ã™ã€‚
+ ユーザーをリストã«åŠ ãˆã‚‹ã«ã¯ã€è¿½åŠ ボタンを押ã—ã¾ã™ã€‚
- オフィサー:
+ オフィサー:
-
+
- メンãƒãƒ¼:
+ メンãƒãƒ¼ï¼š
-
+
- 料金をサインアップ:
+ å‚åŠ è²»ç”¨ï¼š
-
+
- グループãŒæ‰€æœ‰ã™ã‚‹åœŸåœ°
+ グループã®ä¿æœ‰åœ°
- Total Contributed Land:
+ 寄付ã•ã‚ŒãŸåœŸåœ°ã®åˆè¨ˆ
- Total Land In Use:
+ 土地利用ã®åˆè¨ˆ:
- 土地ã®ä½¿ç”¨å¯èƒ½æ€§:
+ 利用å¯ã®åœŸåœ°ï¼š
-
+
- è¦å‘Š: グループã¯åºƒã™ãŽã‚‹åœŸåœ°ã‚’ä¿æŒã—ã¦ã„ã¾ã™ã€‚グループメンãƒãƒ¼ã¯ã‚‚ã£ã¨å¯„与ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ è¦å‘Šï¼š グループã¯åœŸåœ°ã‚’æŒã¡ã™ãŽã¦ã„ã¾ã™ã€‚ グループã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€å¯„付を増やã—ã¦ãã ã•ã„。
-
+
-
+
-
-
-
-
+
-
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_groups.xml b/linden/indra/newview/skins/xui/ja/floater_groups.xml
index 2dbdfb6..b3d7fbb 100644
--- a/linden/indra/newview/skins/xui/ja/floater_groups.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_groups.xml
@@ -1,15 +1,15 @@
- ã‚ãªãŸã®ç¾åœ¨ã®æ´»å‹•ã‚°ãƒ«ãƒ¼ãƒ—ã¯å¤ªå—ã§è¡¨ã‚ã•ã‚Œã¾ã™ã€‚
+ ç¾åœ¨ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–・グループを太å—表示。
- ã‚ãªãŸã¯[COUNT]グループã«æ‰€å±žã—ã¦ã„ã¾ã™ã€‚(最大[MAX])
+ ã‚ãªãŸã®æ‰€å±žã‚°ãƒ«ãƒ¼ãƒ—数: [COUNT] (上é™æ•° [MAX])
-
+
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_html.xml b/linden/indra/newview/skins/xui/ja/floater_html.xml
index 82692d7..7a5d740 100644
--- a/linden/indra/newview/skins/xui/ja/floater_html.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_html.xml
@@ -1,12 +1,16 @@
-
-
-
-
-
-
-
-
- 進行ä¸ã®ãƒ†ã‚ストã¯ã“ã“ã«è¡Œãã¾ã™
+
+
+
+ インワールド・ヘルプ:
+
+
+ http://www.secondlife.com/app/support/inworld.html
+
+
+ è¿½åŠ ãƒ˜ãƒ«ãƒ—
+
+
+ http://www.secondlife.com/app/support/support.html
diff --git a/linden/indra/newview/skins/xui/ja/floater_html_help.xml b/linden/indra/newview/skins/xui/ja/floater_html_help.xml
index 93d69c0..9b13474 100644
--- a/linden/indra/newview/skins/xui/ja/floater_html_help.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_html_help.xml
@@ -5,6 +5,6 @@
- 終了
+ 完了
diff --git a/linden/indra/newview/skins/xui/ja/floater_im.xml b/linden/indra/newview/skins/xui/ja/floater_im.xml
index dd099dc..78d5dd2 100644
--- a/linden/indra/newview/skins/xui/ja/floater_im.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_im.xml
@@ -1,9 +1,30 @@
- ã‚ãªãŸãŒã€æœ¬ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®å”¯ä¸€ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã™ã€‚
+ ã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ã„るユーザーã¯ã‚ãªãŸã ã‘ã§ã™ã€‚
- [FIRST][LAST]ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ã™
+ [FIRST] [LAST]ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ã™ã€‚
+
+
+ è¦æ±‚ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚後ã§ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
+
+
+ ã‚ãªãŸã«ã¯å……分ãªæ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+
+
+ リクエストã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã‚‚ã†ãƒ˜ãƒ«ãƒ—セッションã«ã¯ã„ã¾ã›ã‚“。
+
+
+ ...ã¨ã®ãƒãƒ£ãƒƒãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã«ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‚’è¿½åŠ ä¸...
+
+
+ IMãƒãƒ£ãƒƒãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®ç›¸æ‰‹
+
+
+ ã®ã‚¯ãƒªã‚¨ãƒ¼ã‚¿ãƒ¼ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ
+
+
+ ã‚ãªãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚
diff --git a/linden/indra/newview/skins/xui/ja/floater_image_preview.xml b/linden/indra/newview/skins/xui/ja/floater_image_preview.xml
index 3fdb33f..69f59ba 100644
--- a/linden/indra/newview/skins/xui/ja/floater_image_preview.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_image_preview.xml
@@ -1,17 +1,17 @@
- åå‰:
+ åå‰ï¼š
- 説明:
+ 説明:
- 以下ã¨ã—ã¦ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’å†æ¤œè¨Ž:
+ イメージã®ï¾Œï¾Ÿï¾šï¾‹ï¾žï½ï½°ï¼š
-
+
- イメージ
+ ç”»åƒ
髪
@@ -39,10 +39,10 @@
- イメージをèªã‚€ã“ã¨ãŒä¸å¯èƒ½ã§ã™ã€‚
-
- 24 ビット Targaã¨ã—ã¦ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’ä¿å˜ã™ã‚‹ã“ã¨ã‚’試ã¿ã¾ã™(.tga)。
+ ç”»åƒã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“。
+
+ 24ビット Targa (.tga)ã¨ã—ã¦ç”»åƒã‚’ä¿å˜ã—ã¦ã¿ã¦ãã ã•ã„。
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_import.xml b/linden/indra/newview/skins/xui/ja/floater_import.xml
index 00a1332..8da31b8 100644
--- a/linden/indra/newview/skins/xui/ja/floater_import.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_import.xml
@@ -1,17 +1,17 @@
- åå‰:
+ åå‰ï¼š
- 説明:
+ 説明:
- アップãƒãƒ¼ãƒ‰ã®ãŸã‚ã®ãƒ•ã‚¡ã‚¤ãƒ«:
+ アップãƒãƒ¼ãƒ‰ã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ï¼š
-
-
+
+
- イメージã®å†æ¤œè¨Ž:
+ ç”»åƒãƒ—レビュー:
diff --git a/linden/indra/newview/skins/xui/ja/floater_instant_message.xml b/linden/indra/newview/skins/xui/ja/floater_instant_message.xml
index 74926b8..6779407 100644
--- a/linden/indra/newview/skins/xui/ja/floater_instant_message.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_instant_message.xml
@@ -1,15 +1,24 @@
-
-
+
+
+
- ***よã†ã“ãライブ・ヘルプã¸ï¼ ã“ã“ã§ã¯ä»²é–“ã§ã‚る皆ã•ã‚“ã«ã€ã™ã°ã‚‰ã—ã„ボランティアé”ãŒSecond Lifeã®ã‚µãƒãƒ¼ãƒˆã‚’ã—ã¾ã™ï¼*** ã¾ãšåˆã‚ã«F1を押ã—ã€SLヘルプページをãƒã‚§ãƒƒã‚¯ã—ã¦ãã ã•ã„。 ãã“ã§å›žç”ãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã¯è³ªå•ã‚’入力ã—ã€æ‰‹ã®ç©ºã„ãŸãƒ˜ãƒ«ãƒ‘ーãŒå¿œç”ã™ã‚‹ã¾ã§ã€æ•°åˆ†ãŠæŒã¡ãã ã•ã„。 終了ã™ã‚‹ã¾ã§ã€ãƒ©ã‚¤ãƒ–・ヘルプã¯é–‰ã˜ãªã„ã§ãã ã•ã„。返ç”ãŒãªã„å ´åˆã¯æ™‚é–“ã‚’ãŠã„ã¦ã€å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。 注æ„:ライブ・ヘルパーã¯ã€ŽLindenã€ãŒè‹—å—ã§ã‚ã‚‹å ´åˆã‚’除ãã€Lindenã®å¾“æ¥å“¡ã§ã¯ãªã„ãŸã‚ã€å›žç”ã¯éžå…¬å¼ãªã‚‚ã®ã¨ã¿ãªã—ã¾ã™ã€‚
+ ***ヘルプリクエストã¸ã‚ˆã†ã“ã***
+ã¾ãšF1ã‚ーを押ã™ã‹ã€ã¾ãŸã¯çŸ¥è˜ãƒ™ãƒ¼ã‚¹ï¼ˆhttp://secondlife.com/knowledgebase/)ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦SLヘルプページを開ã„ã¦ãã ã•ã„。
+回ç”ãŒè¦‹ã¤ã‹ã‚‰ãªã‘ã‚Œã°ã€è³ªå•ã‚’入力ã—ã¦ãƒ˜ãƒ«ãƒ‘ーã®æ‰‹ãŒç©ºãã¾ã§ã€æ•°åˆ†ç¨‹åº¦ãŠå¾…ã¡ãã ã•ã„。
+-=-=- å¿œç”時間ã¯ä¸€å®šã§ã¯ãªãã€ç‰¹ã«ãƒ”ークタイムã¯å¤§ãã変動ã—ã¾ã™ã€‚-=-=-
- Instant Message with [NAME]
+ [NAME]ã¨ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ»ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸
- [NAME] is typing...
+ [NAME]ã¯å…¥åŠ›ä¸...
+
+
+ [NAME]ã¨ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’開始ã—ã¾ã™ã€‚ãŠå¾…ã¡ãã ã•ã„。
diff --git a/linden/indra/newview/skins/xui/ja/floater_inventory.xml b/linden/indra/newview/skins/xui/ja/floater_inventory.xml
index dcd7013..d7390d0 100644
--- a/linden/indra/newview/skins/xui/ja/floater_inventory.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_inventory.xml
@@ -1,24 +1,22 @@
-
+
-
-
-
-
+
+
+
-
-
-
+
+
-
+
@@ -32,19 +30,17 @@
-
+
-
-
-
-
-
+
+
+
+
-
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_inventory_item_properties.xml b/linden/indra/newview/skins/xui/ja/floater_inventory_item_properties.xml
index 9b53c5d..04d5b7e 100644
--- a/linden/indra/newview/skins/xui/ja/floater_inventory_item_properties.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_inventory_item_properties.xml
@@ -1,37 +1,37 @@
-
+
- åå‰:
+ åå‰ï¼š
- 説明:
+ 説明:
- 創作者:
+ クリエーター
Nicole Linden
-
+
- 所有者:
+ オーナー:
Thrax Linden
-
+
- ç²å¾—:
+ 入手:
- 2006年 5月 24日水曜日12:50:46
+ 2006年5月24日水曜日12:50:46
- ã‚ãªãŸã¯å¯èƒ½:
+ ã§ãã‚‹ã“ã¨ã¯ï¼š
-
+
-
+
B:
@@ -45,20 +45,20 @@
E:
- N:
+ N:
-
-
+
+
- 次ã®æ‰€æœ‰è€…ãŒå¯èƒ½:
+ 次ã®ã‚ªãƒ¼ãƒŠãƒ¼ãŒå®Ÿè¡Œã§ãã‚‹æ“作:
-
+
-
+
- é …ç›®ã‚’ä½œã‚‹:
+ アイテムã«ãƒžãƒ¼ã‚¯ï¼š
-
+
オリジナル
@@ -68,6 +68,6 @@
- ä¾¡æ ¼: L$
+ 料金:L$
diff --git a/linden/indra/newview/skins/xui/ja/floater_inventory_view_finder.xml b/linden/indra/newview/skins/xui/ja/floater_inventory_view_finder.xml
index 0626d82..92475aa 100644
--- a/linden/indra/newview/skins/xui/ja/floater_inventory_view_finder.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_inventory_view_finder.xml
@@ -1,8 +1,8 @@
-
+
-
-
+
+
@@ -11,14 +11,14 @@
-
+
-
-
+
+
ï¼ã¾ãŸã¯ï¼
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_land_holdings.xml b/linden/indra/newview/skins/xui/ja/floater_land_holdings.xml
index f61ccd3..32b9e3e 100644
--- a/linden/indra/newview/skins/xui/ja/floater_land_holdings.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_land_holdings.xml
@@ -1,5 +1,5 @@
-
+
@@ -10,30 +10,30 @@
tool_tip="ã“ã®åœŸåœ°ã®ä¸å¿ƒã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ" />
+ tool_tip="ã“ã®åœŸåœ°ã‚’世界地図ã«è¡¨ç¤ºã—ã¾ã™ã€‚" />
- ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å¯„è´ˆ:
+ ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—ã¸ã®è²¢çŒ®ï¼š
- 土地ä¿æœ‰è€…ã«ç¾è¡Œã®æ”¯æ‰•ã„計画を許å¯:
+ ç¾åœ¨ã®æ”¯æ‰•ã„プランã§ã®è¨±å¯ã•ã‚ŒãŸä¿æœ‰åœ°ï¼š
- 0 平方メーター
+ 0平方メートル
- ç¾åœ¨ã®åœŸåœ°ä¿æœ‰è€…:
+ ç¾åœ¨ã®ä¿æœ‰åœ°ï¼š
- 0 平方メーター
+ 0平方メートル
- 土地ã®è³¼å…¥ã‚ˆã†ã«ä½¿ç”¨å¯èƒ½:
+ 土地購入å¯ï¼š
- 0 平方メーター
+ 0平方メートル
diff --git a/linden/indra/newview/skins/xui/ja/floater_live_lsleditor.xml b/linden/indra/newview/skins/xui/ja/floater_live_lsleditor.xml
index 715ca47..60ffe6e 100644
--- a/linden/indra/newview/skins/xui/ja/floater_live_lsleditor.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_live_lsleditor.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_moveview.xml b/linden/indra/newview/skins/xui/ja/floater_moveview.xml
index 23221e3..c40a1d9 100644
--- a/linden/indra/newview/skins/xui/ja/floater_moveview.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_moveview.xml
@@ -1,15 +1,15 @@
-
-
+
+
+ tool_tip="ジャンプã¾ãŸã¯ä¸Šæ˜‡" />
-
+ tool_tip="ã—ゃãŒã‚€ã¾ãŸã¯ä¸‹é™" />
+
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_mute.xml b/linden/indra/newview/skins/xui/ja/floater_mute.xml
index 68a8cbb..506bdd2 100644
--- a/linden/indra/newview/skins/xui/ja/floater_mute.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_mute.xml
@@ -1,14 +1,13 @@
+ title="ミュートã•ã‚ŒãŸä½äººãŠã‚ˆã³ã‚ªãƒ–ジェクト">
-
-
+
+ tool_tip="ä½äººã¾ãŸã¯ã‚ªãƒ–ジェクトをミュート・リストã‹ã‚‰å‰Šé™¤" />
diff --git a/linden/indra/newview/skins/xui/ja/floater_name_description.xml b/linden/indra/newview/skins/xui/ja/floater_name_description.xml
index 839ce43..5e38a8a 100644
--- a/linden/indra/newview/skins/xui/ja/floater_name_description.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_name_description.xml
@@ -1,11 +1,11 @@
- åå‰:
+ åå‰ï¼š
- 説明:
+ 説明:
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_new_im.xml b/linden/indra/newview/skins/xui/ja/floater_new_im.xml
index 57c5d70..d87b79c 100644
--- a/linden/indra/newview/skins/xui/ja/floater_new_im.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_new_im.xml
@@ -1,9 +1,9 @@
-
+
- [FIRST][LAST]
+ [FIRST] [LAST]
(オンライン)
diff --git a/linden/indra/newview/skins/xui/ja/floater_new_outfit_dialog.xml b/linden/indra/newview/skins/xui/ja/floater_new_outfit_dialog.xml
index 41dfed4..231d12a 100644
--- a/linden/indra/newview/skins/xui/ja/floater_new_outfit_dialog.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_new_outfit_dialog.xml
@@ -1,20 +1,20 @@
-
+
-
-
+
+
-
-
+
+
@@ -48,25 +48,28 @@
-
+
- æ–°ã—ã„æœè£…ã‚’ã¤ãã‚‹
+ æ–°ã—ã„æœè£…を作æˆ
- æœè£…ã¯ã€æœã¨èº«ä½“部ä½ã‚’å«ã‚€ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã§ã™ã€‚装ç€ã™ã‚‹ã«ã¯ã€æœè£…フォルダーをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ãã ã•ã„。
-『新ã—ã„æœè£…作æˆã€ã¯ã€æ–°ã—ã„フォルダーを作æˆã—ã€ç¾åœ¨è£…ç€ã—ã¦ã„るアイテムã®ã‚³ãƒ”ーをä¿å˜ã—ã¾ã™ã€‚
+ æœè£…フォルダã«ã¯ã€æœã¨èº«ä½“部ä½ãŒå«ã¾ã‚Œã¾ã™ã€‚
+æœãªã©ã‚’装ç€ã™ã‚‹ã«ã¯ã€æœè£…フォルダをアãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¾ã™ã€‚
+
+[æ–°ã—ã„æœè£…を作æˆ]ã§ã¯ã€æ–°ã—ã„フォルダを作æˆã—ã€
+ç¾åœ¨è£…ç€ã—ã¦ã„るアイテムã®ã‚³ãƒ”ーをä¿å˜ã—ã¾ã™ã€‚
- フォルダーå:
+ フォルダå:
- æœè£…ã«å«ã‚€ã‚¢ã‚¤ãƒ†ãƒ :
+ æœè£…ã«å«ã‚るアイテム:
身体部ä½ï¼š
@@ -75,7 +78,7 @@
æœï¼š
- 付属å“:
+ 添付物:
オプション:
diff --git a/linden/indra/newview/skins/xui/ja/floater_openobject.xml b/linden/indra/newview/skins/xui/ja/floater_openobject.xml
index 588b72d..3abda50 100644
--- a/linden/indra/newview/skins/xui/ja/floater_openobject.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_openobject.xml
@@ -1,10 +1,10 @@
- [DESC]:
+ [DESC]:
-
diff --git a/linden/indra/newview/skins/xui/ja/floater_pay.xml b/linden/indra/newview/skins/xui/ja/floater_pay.xml
index 8f8c50f..114cb90 100644
--- a/linden/indra/newview/skins/xui/ja/floater_pay.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_pay.xml
@@ -1,19 +1,19 @@
-
-
-
-
+
+
+
+
-
+
- å±…ä½è€…ã«æ”¯æ‰•ã„:
+ 支払ã„先:
- [FIRST][LAST]
+ [FIRST] [LAST]
- 一発払ã„:
+ 一括払ã„:
金é¡ï¼š
diff --git a/linden/indra/newview/skins/xui/ja/floater_pay_object.xml b/linden/indra/newview/skins/xui/ja/floater_pay_object.xml
index cf0e5c5..6ad9c7c 100644
--- a/linden/indra/newview/skins/xui/ja/floater_pay_object.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_pay_object.xml
@@ -1,30 +1,30 @@
- 支払ã„グループ:
+ グループã¸ã®æ”¯æ‰•ã„:
- å±…ä½è€…ã«æ”¯æ‰•ã„:
+ ä½äººã¸ã®æ”¯æ‰•ã„:
- [FIRST][LAST]
+ [FIRST] [LAST]
- オブジェクト経由:
+ オブジェクトを介ã—ã¦ï¼š
- …
+ ...
- 一発払ã„:
+ 一括払ã„:
金é¡ï¼š
-
-
-
-
+
+
+
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_postcard.xml b/linden/indra/newview/skins/xui/ja/floater_postcard.xml
index dbdaf33..283e674 100644
--- a/linden/indra/newview/skins/xui/ja/floater_postcard.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_postcard.xml
@@ -1,28 +1,28 @@
-
+
- å—é ˜è€…ã®Eメール:
+ ä½äººã®é›»åメール:
- ã‚ãªãŸã®Eメール:
+ ã‚ãªãŸã®Eメール::
- ã‚ãªãŸã®åå‰:
+ ã‚ãªãŸã®åå‰ï¼š
- 主体:
+ 件å:
- Mメッセージ:
+ メッセージ:
-
+
+ tool_tip="ã“ã®ãƒã‚¹ãƒˆã‚«ãƒ¼ãƒ‰ã«ã¯æˆäººå‘ã‘内容ãŒå«ã¾ã‚Œã¾ã™ã€‚" />
- ã‚ãªãŸã®ãƒã‚¹ãƒˆã‚«ãƒ¼ãƒ‰ã®å—é ˜è€…ãŒSLã«åŠ å…¥ã—ãŸå ´åˆã«ã¯ã€ã‚ãªãŸã¯ç´¹ä»‹ãƒœãƒ¼ãƒŠãƒ«ã‚’もらãˆã¾ã™ã€‚
+ ã‚ãªãŸã®ãƒã‚¹ãƒˆã‚«ãƒ¼ãƒ‰ã®å—信者ãŒSLã«å‚åŠ ã™ã‚‹ã¨ã€ã‚ãªãŸã¯ç´¹ä»‹ãƒœãƒ¼ãƒŠã‚¹ã‚’å—ã‘å–ã‚Šã¾ã™ã€‚
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_preferences.xml b/linden/indra/newview/skins/xui/ja/floater_preferences.xml
index d3dbf32..f454940 100644
--- a/linden/indra/newview/skins/xui/ja/floater_preferences.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_preferences.xml
@@ -1,7 +1,8 @@
-
-
-
+
+
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_animation.xml b/linden/indra/newview/skins/xui/ja/floater_preview_animation.xml
index ff8d2e8..dfb90f2 100644
--- a/linden/indra/newview/skins/xui/ja/floater_preview_animation.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_preview_animation.xml
@@ -1,11 +1,10 @@
-
+
- 説明:
+ 説明:
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_embedded_texture.xml b/linden/indra/newview/skins/xui/ja/floater_preview_embedded_texture.xml
index e25f5ea..5ca4550 100644
--- a/linden/indra/newview/skins/xui/ja/floater_preview_embedded_texture.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_preview_embedded_texture.xml
@@ -1,8 +1,7 @@
-
-
+
+
- 採寸:[WIDTH]×[HEIGHT]
+ 寸法:[HEIGHT]x[WIDTH]
diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_existing_landmark.xml b/linden/indra/newview/skins/xui/ja/floater_preview_existing_landmark.xml
index f50f898..544669c 100644
--- a/linden/indra/newview/skins/xui/ja/floater_preview_existing_landmark.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_preview_existing_landmark.xml
@@ -1,8 +1,7 @@
-
+
- 説明:
+ 説明:
diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_gesture.xml b/linden/indra/newview/skins/xui/ja/floater_preview_gesture.xml
index 7d10829..a92400a 100644
--- a/linden/indra/newview/skins/xui/ja/floater_preview_gesture.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_preview_gesture.xml
@@ -1,19 +1,19 @@
-
+
- 説明:
+ 説明:
- トリガー:
+ トリガー:
- 入れ替ãˆã‚‹ï¼š
+ tool_tip="トリガー・ワードをã“れらã®å˜èªžã«ç½®ãæ›ãˆã¾ã™ã€‚ ãŸã¨ãˆã°ã€ãƒˆãƒªã‚¬ãƒ¼'hello'ã‚’'Howdy'ã«ç½®æ›ã™ã‚‹ã¨ã€'I wanted to say hello'ã¨ã„ã†ãƒãƒ£ãƒƒãƒˆæ–‡ãŒ'I wanted to say howdy'ã«å¤‰ã‚ã‚Šã€ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã«ã‚‚ç½®æ›ãŒåæ˜ ã•ã‚Œã¾ã™ã€‚">
+ ç½®æ›ï¼š
+ tool_tip="トリガー・ワードをã“れらã®å˜èªžã«ç½®ãæ›ãˆã¾ã™ã€‚ ãŸã¨ãˆã°ã€ãƒˆãƒªã‚¬ãƒ¼'hello'ã‚’'Howdy'ã«ç½®æ›ã™ã‚‹ã¨ã€'I wanted to say hello'ã¨ã„ã†ãƒãƒ£ãƒƒãƒˆæ–‡ãŒ'I wanted to say howdy'ã«å¤‰ã‚ã‚Šã€ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã«ã‚‚ç½®æ›ãŒåæ˜ ã•ã‚Œã¾ã™ã€‚" />
- ショートカットã‚ー:
+ ショートカット・ã‚ー:
@@ -21,27 +21,28 @@
ライブラリ:
- 工程:
+ æ‰‹é †ï¼š
-
+
- ã‚ãªãŸãŒå¾…æ©Ÿã‚¹ãƒ†ãƒƒãƒ—ã‚’è¿½åŠ ã—ãªã„é™ã‚Šã¯ã€å…¨ã¦ã®ã‚¹ãƒ†ãƒƒãƒ—ã¯åŒæ™‚ã«è¡Œã‚ã‚Œã¾ã™ã€‚
+ å¾…æ©Ÿã‚¹ãƒ†ãƒƒãƒ—ã‚’è¿½åŠ ã—ãªã„é™ã‚Šã€
+ã™ã¹ã¦ã®ã‚¹ãƒ†ãƒƒãƒ—ãŒåŒæ™‚ã«è¡Œã‚ã‚Œã¾ã™ã€‚
- スタート
+ 開始
åœæ¢
-
-
+
+
+ tool_tip="アクティブ・ジェスãƒãƒ£ãƒ¼ã¯ã€ãƒˆãƒªã‚¬ãƒ¼ãƒ»ãƒ•ãƒ¬ãƒ¼ã‚ºã‚’使ã†ã‹ã€ã¾ãŸã¯ãƒ›ãƒƒãƒˆãƒ»ã‚ーを押ã™ã“ã¨ã«ã‚ˆã£ã¦ãƒˆãƒªã‚¬ãƒ¼ã§ãã¾ã™ã€‚ 1ã¤ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆãƒ»ã‚ーã«2ã¤ä»¥ä¸Šã®ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸå ´åˆã€ãã®ã‚¸ã‚§ã‚¹ãƒãƒ£ãƒ¼ã¯ä¸¡æ–¹ã¨ã‚‚アクティブã§ã¯ãªããªã‚Šã¾ã™ã€‚" />
diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml b/linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml
index 4869ad6..152f3b0 100644
--- a/linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_preview_new_landmark.xml
@@ -1,10 +1,9 @@
-
+
-
+
- 説明:
+ 説明:
diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_notecard.xml b/linden/indra/newview/skins/xui/ja/floater_preview_notecard.xml
index 989c8b2..0ba3013 100644
--- a/linden/indra/newview/skins/xui/ja/floater_preview_notecard.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_preview_notecard.xml
@@ -2,9 +2,9 @@
- 説明:
+ 説明:
- ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...
+ ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_notecard_keep_discard.xml b/linden/indra/newview/skins/xui/ja/floater_preview_notecard_keep_discard.xml
index 427f1b0..d56d221 100644
--- a/linden/indra/newview/skins/xui/ja/floater_preview_notecard_keep_discard.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_preview_notecard_keep_discard.xml
@@ -1,11 +1,11 @@
-
+
- ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...
+ ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- 説明:
+ 説明:
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_sound.xml b/linden/indra/newview/skins/xui/ja/floater_preview_sound.xml
index efd5d32..d455d4c 100644
--- a/linden/indra/newview/skins/xui/ja/floater_preview_sound.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_preview_sound.xml
@@ -1,12 +1,11 @@
-
+
- 説明:
+ 説明:
-
-
+
+ tool_tip="ã“ã®ã‚µã‚¦ãƒ³ãƒ‰ã‚’自分専用ã«å†ç”Ÿã—ã¾ã™ã€‚" />
diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_texture.xml b/linden/indra/newview/skins/xui/ja/floater_preview_texture.xml
index 0eb6e37..affcc51 100644
--- a/linden/indra/newview/skins/xui/ja/floater_preview_texture.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_preview_texture.xml
@@ -1,10 +1,9 @@
-
+
- 説明:
+ 説明:
- 採寸:[WIDTH]×[HEIGHT]
+ 寸法:[HEIGHT]x[WIDTH]
diff --git a/linden/indra/newview/skins/xui/ja/floater_preview_texture_keep_discard.xml b/linden/indra/newview/skins/xui/ja/floater_preview_texture_keep_discard.xml
index 6dd5249..1cf2d8e 100644
--- a/linden/indra/newview/skins/xui/ja/floater_preview_texture_keep_discard.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_preview_texture_keep_discard.xml
@@ -1,11 +1,11 @@
-
+
- 説明:
+ 説明:
-
-
+
+
- 採寸:[WIDTH]×[HEIGHT]
+ 寸法:[HEIGHT]x[WIDTH]
diff --git a/linden/indra/newview/skins/xui/ja/floater_price_for_listing.xml b/linden/indra/newview/skins/xui/ja/floater_price_for_listing.xml
index 073c6f1..eb1362b 100644
--- a/linden/indra/newview/skins/xui/ja/floater_price_for_listing.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_price_for_listing.xml
@@ -1,17 +1,17 @@
-
+
- ã‚ãªãŸã®æ¡ˆå†…広告ã¯ãã‚ŒãŒè¡¨ç¤ºã•ã‚ŒãŸæ—¥ä»˜
-ã‹ã‚‰ä¸€é€±é–“ä¹—ã‚Šã¾ã™ã€‚
+ クラシファイド広告ã¯1週間ã«
+ã‚ãŸã‚Šã€æŽ²è¼‰ã•ã‚Œã¾ã™ã€‚
-案内広告リストã§ã®ã‚ãªãŸã®åºƒå‘Šã®ä½ç½®ã¯
-ã‚ãªãŸãŒã„ãら支払ã†ã“ã¨ã‚’é¸æŠžã—ãŸã‹ã«é–¢ã‚ã‚Šã¾ã™ã€‚
-最も高ã支払ã‚ã‚ŒãŸåºƒå‘Šã¯ãƒªã‚¹ãƒˆã®ãƒˆãƒƒãƒ—ã«è¡Œãã€
-ãã—ã¦æ¤œç´¢ã§ã‚‚ã‚ˆã‚Šé »ç¹ã«ç¾ã‚Œã¾ã™ã€‚
+広告ã®æŽ²è¼‰é †ã¯ã€æ”¯æ‰•ã†åºƒå‘Šæ–™ã«
+よりã¾ã™ã€‚広告料ãŒæœ€ã‚‚高ã„広告ãŒ
+最åˆã«æŽ²è¼‰ã•ã‚Œã€æ¤œç´¢çµæžœã§ã‚‚
+上ä½ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
- 広告用ã®ä¾¡æ ¼(L$):
+ 広告料金(L$):
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_profile.xml b/linden/indra/newview/skins/xui/ja/floater_profile.xml
index b88fe4b..6ba8988 100644
--- a/linden/indra/newview/skins/xui/ja/floater_profile.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_profile.xml
@@ -1,2 +1,2 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_rate.xml b/linden/indra/newview/skins/xui/ja/floater_rate.xml
index 83bd4b8..7d26296 100644
--- a/linden/indra/newview/skins/xui/ja/floater_rate.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_rate.xml
@@ -1,11 +1,11 @@
-
+
ãƒã‚¸ãƒ†ã‚£ãƒ–
- 無評価
+ 評価ãªã—
@@ -13,7 +13,7 @@
ãƒã‚¸ãƒ†ã‚£ãƒ–
- 無評価
+ 評価ãªã—
@@ -21,24 +21,24 @@
ãƒã‚¸ãƒ†ã‚£ãƒ–
- 無評価
+ 評価ãªã—
-
+
- 全体的ãªæ…‹åº¦ï¼š
+ 全体的ãªè¡Œå‹•ï¼š
- 容姿ã®ã‚¹ã‚ル (æœã€è£…飾å“):
+ 容姿ã®ã‚¹ã‚ル(æœã¨è£…飾å“):
å»ºé€ ç‰©ã®ã‚¹ã‚ル:
- Mメッセージ:
+ メッセージ:
- 費用:å„評価を変更ã™ã‚‹ã«ã¯L$[COST] 全体費用:L$[TOTAL]
+ 費用:å„評価を変更ã™ã‚‹ã«ã¯L$[TOTAL] 全体費用:L$[COST].
diff --git a/linden/indra/newview/skins/xui/ja/floater_report_abuse.xml b/linden/indra/newview/skins/xui/ja/floater_report_abuse.xml
index fe3e0a0..7f3a7f2 100644
--- a/linden/indra/newview/skins/xui/ja/floater_report_abuse.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_report_abuse.xml
@@ -1,26 +1,37 @@
-
+
- レãƒãƒ¼ã‚¿:
+ å ±å‘Šè€…ï¼š
- シュミレータ:
+ 地域:
- ä½ç½®:
+ ä½ç½®ï¼š
-
+
+
+
+ ボタンを使ã£ã¦ã‚ªãƒ–ジェクトをé¸æŠžï¼š
+
+
+ åå‰ï¼š
+
+
+ オーナー:
+
- カテゴリをé¸æŠž
+ カテゴリーをé¸æŠž
éžè¨±å®¹
- ãƒãƒ©ã‚¹ãƒ¡ãƒ³ãƒˆ
+ å«ŒãŒã‚‰ã›
攻撃
@@ -41,37 +52,28 @@
ãã®ä»–
-
-
- ボタンをクリックã—ã¦ã‹ã‚‰ã‚ªãƒ–ジェクト:
-
-
- åå‰:
-
-
- 所有者:
-
- å«ŒãŒã‚‰ã›ã‚’行為者å:
+ 迷惑ユーザーã®åå‰ï¼š
+ tool_tip="å«ŒãŒã‚‰ã›ã‚’ã—ãŸäººã®åå‰ã‚’リストã‹ã‚‰é¸æŠžã—ã¦ãã ã•ã„。" />
- å«ŒãŒã‚‰ã›ç®‡æ‰€ï¼š
+ å«ŒãŒã‚‰ã›ã®èµ·ããŸå ´æ‰€ï¼š
- ã¾ã¨ã‚:
+ 概è¦ï¼š
- 詳細:
+ 詳細:
- 日付ã€ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã€å«ŒãŒã‚‰ã›ç‰¹å¾´ã€é–¢é€£ã™ã‚‹ä¼šè©±ï¼IMテã‚ストã«é–¢ã—ã€æ˜Žç¢ºã«ã—ã¦ãã ã•ã„。ã¾ãŸã€å¯èƒ½ã§ã‚ã‚Œã°ã€ã‚ªãƒ–ジェクトをé¸æŠžã—ã¦ãã ã•ã„。
+ 日付ã€ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã€å«ŒãŒã‚‰ã›ã®æ€§è³ªã€é–¢é€£ã™ã‚‹ä¼šè©±ã‚„
+IMテã‚ストを示ã—å¯èƒ½ãªå ´åˆã¯ã‚ªãƒ–ジェクトをé¸æŠžã—ã¾ã™ã€‚
- 注æ„:未完æˆã®å ±å‘Šã¯èª¿æŸ»ã•ã‚Œã¾ã›ã‚“。
+ 注æ„:ä¸å®Œå…¨ãªå ±å‘Šã¯èª¿æŸ»ã•ã‚Œã¾ã›ã‚“。
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_report_bug.xml b/linden/indra/newview/skins/xui/ja/floater_report_bug.xml
index 4c01e02..7558d57 100644
--- a/linden/indra/newview/skins/xui/ja/floater_report_bug.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_report_bug.xml
@@ -1,70 +1,70 @@
- レãƒãƒ¼ã‚¿:
+ å ±å‘Šè€…ï¼š
- シュミレータ:
+ ï½¼ï¾ï½ï¾šï½°ï¾€ï¼š
- ä½ç½®:
+ ä½ç½®ï¼š
- ボタンをクリックã—ã¦ã‹ã‚‰ã€ã‚ªãƒ–ジェクトをé¸æŠžã—ã¦ãã ã•ã„:
+ ボタンを使ã£ã¦ã‚ªãƒ–ジェクトをé¸æŠžï¼š
+ tool_tip="オブジェクト・ピッカー - ã“ã®å ±å‘Šã®ä¸»é¡Œã¨ãªã‚‹ã‚ªãƒ–ジェクトを特定" />
- åå‰:
+ åå‰ï¼š
- 所有者:
+ オーナー:
-
+
- カテゴリ:
+ カテゴリー:
- カテゴリをé¸æŠž
+ カテゴリーをé¸æŠž
- ビルディング
+ å»ºé€ ç‰©
- æ€§æ ¼
+ ã‚ャラクター
- ãƒãƒ£ãƒƒãƒˆ/IM
+ ãƒãƒ£ãƒƒãƒˆï¼IM
- 文書化
+ 文書
- é–‹æ‹“ã™ã‚‹
+ 開発ã™ã‚‹
- グラフィックス
+ 表示
- 在庫目録
+ æŒã¡ç‰©
- é…延
+ ラグ
- 紛失コンテント
+ コンテンツãªã—
リンデン・ドル(L$)
- 許å¯
+ 権é™
- 物ç†å¦
+ 物ç†çš„作用
スクリプト
@@ -73,33 +73,33 @@
音
- 固定給
+ 給金
- ユーザーインターフェース
+ ユーザー・インターフェース
- 種々雑多
+ ãã®ä»–
- ã¾ã¨ã‚:
+ 概è¦ï¼š
- 詳細:
+ 詳細:(ã§ãã‚‹ã ã‘詳ã—ã„æƒ…å ±ã‚’æä¾›ã—ã¦ãã ã•ã„)
- ãƒã‚°ã‚’å†ç”Ÿã™ã‚‹ã‚¹ãƒ†ãƒƒãƒ—:
+ ãƒã‚°ã‚’å†ç¾ã™ã‚‹æ‰‹é †ï¼š
-観察ã•ã‚ŒãŸçµæžœ:
+観察çµæžœï¼š
-期待ã•ã‚ŒãŸçµæžœ:
+予測çµæžœï¼š
- If this bug allows you to do something you should not be able
-to do, especially if it impacts performance or security, please
-select the 'Exploit' category. Thank you!
+ 補足:レãƒãƒ¼ãƒˆãŒä¸å®Œå…¨ã§ã‚ã‚‹å ´åˆã¯èª¿æŸ»ã•ã‚Œã¾ã›ã‚“。
+ã“ã®ãƒã‚°ã«ã‚ˆã£ã¦æœ¬æ¥ã§ããªã„ã“ã¨ãŒå¯èƒ½ã«ãªã‚‹å ´åˆã€ç‰¹ã«ãƒ‘フォーマンスやセã‚ュリティã«å½±éŸ¿ã‚’与ãˆã‚‹å ´åˆã«ã¯ã€
+[é•å]カテゴリーをé¸æŠžã—ã¦ãã ã•ã„。よã‚ã—ããŠé¡˜ã„ã—ã¾ã™ã€‚
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_script_debug.xml b/linden/indra/newview/skins/xui/ja/floater_script_debug.xml
index c5148bc..0c53d05 100644
--- a/linden/indra/newview/skins/xui/ja/floater_script_debug.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_script_debug.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_script_ed_panel.xml b/linden/indra/newview/skins/xui/ja/floater_script_ed_panel.xml
index f0863a4..1e56220 100644
--- a/linden/indra/newview/skins/xui/ja/floater_script_ed_panel.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_script_ed_panel.xml
@@ -1,13 +1,13 @@
-
- ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...
+ ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
+
-
+
@@ -17,13 +17,14 @@
-
-
+
+
-
+
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_script_preview.xml b/linden/indra/newview/skins/xui/ja/floater_script_preview.xml
index 6495b1c..4cf4851 100644
--- a/linden/indra/newview/skins/xui/ja/floater_script_preview.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_script_preview.xml
@@ -1,6 +1,6 @@
- 説明:
+ 説明:
diff --git a/linden/indra/newview/skins/xui/ja/floater_script_queue.xml b/linden/indra/newview/skins/xui/ja/floater_script_queue.xml
index 2f21b34..7c4979a 100644
--- a/linden/indra/newview/skins/xui/ja/floater_script_queue.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_script_queue.xml
@@ -1,4 +1,4 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_script_search.xml b/linden/indra/newview/skins/xui/ja/floater_script_search.xml
index 306798b..2accc0f 100644
--- a/linden/indra/newview/skins/xui/ja/floater_script_search.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_script_search.xml
@@ -1,13 +1,13 @@
-
+
-
-
+
+
検索
- 入れ替ãˆã‚‹
+ ç½®æ›
diff --git a/linden/indra/newview/skins/xui/ja/floater_sell_land.xml b/linden/indra/newview/skins/xui/ja/floater_sell_land.xml
index 4032918..4b8650a 100644
--- a/linden/indra/newview/skins/xui/ja/floater_sell_land.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_sell_land.xml
@@ -7,35 +7,35 @@
区画å
- è¦æ¨¡ï¼š
+ サイズ:
[AREA]平方メートル
- 本区画を販売ã™ã‚‹ã«ã¯ï¼š
+ ã“ã®åŒºç”»ã‚’販売ã™ã‚‹ã«ã¯:
- ä¾¡æ ¼ã‚’æ±ºå®šï¼š
+ ä¾¡æ ¼ã‚’è¨å®šï¼š
ã“ã®åœŸåœ°ã«å¯¾ã™ã‚‹é©åˆ‡ãªä¾¡æ ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。
- L$
+ L$
- (一平方メートル当ãŸã‚ŠL$[PER_METER])
+ (1平方メートル当ãŸã‚ŠL$ [PER_METER])
- 土地販売先:
+ 土地ã®è²©å£²å…ˆï¼š
- 誰ã«ã§ã‚‚販売ã™ã‚‹ã®ã‹ã€ç‰¹å®šã®è³¼å…¥è€…ã«è²©å£²ã™ã‚‹ã®ã‹é¸æŠžã—ã¦ãã ã•ã„。
+ 誰ã«ã§ã‚‚販売ã™ã‚‹ã‹ã€ç‰¹å®šã®è³¼å…¥è€…ã«ã®ã¿è²©å£²ã™ã‚‹ã‹ã‚’é¸æŠžã—ã¦ãã ã•ã„。
- ï¼ï¼ä¸€ã¤ã‚’é¸æŠžï¼ï¼
+ ï¼ï¼1ã¤é¸æŠžï¼ï¼
誰ã§ã‚‚
@@ -44,25 +44,25 @@
特定ユーザー:
-
+
- 土地ã¨ä¸€ç·’ã«ã‚ªãƒ–ジェクトも売りã¾ã™ã‹ï¼Ÿ
+ 土地ã¨å…±ã«ã‚ªãƒ–ジェクトを販売ã—ã¾ã™ã‹ï¼Ÿ
- Land owner's transferable objects on parcel will change ownership.
+ 区画上ã«ã‚る土地オーナーã®è²æ¸¡å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€æ‰€æœ‰æ¨©ãŒå¤‰æ›´ã•ã‚Œã¾ã™ã€‚
- ã„ã„ãˆã€ã‚ªãƒ–ジェクトã®æ‰€æœ‰æ¨©ã‚’ç¶æŒã—ã¾ã™
+ ã„ã„ãˆã€ã‚ªãƒ–ジェクト所有権をä¿æŒã—ã¾ã™
- ã¯ã„ã€ã‚ªãƒ–ジェクトを土地ã”ã¨å£²å´ã—ã¾ã™
+ ã¯ã„ã€åœŸåœ°ã¨ä¸€ç·’ã«ã‚ªãƒ–ジェクトを売りã¾ã™ã€‚
- 一言メモ:返å“・交æ›ã¯å‡ºæ¥ã¾ã›ã‚“。
+ 注æ„:返å“や交æ›ã¯ã§ãã¾ã›ã‚“。
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_settings_debug.xml b/linden/indra/newview/skins/xui/ja/floater_settings_debug.xml
index 30ef985..1de3763 100644
--- a/linden/indra/newview/skins/xui/ja/floater_settings_debug.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_settings_debug.xml
@@ -2,14 +2,16 @@
- æ£è§£
+ æ£
- 誤り
+ 誤
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_snapshot.xml b/linden/indra/newview/skins/xui/ja/floater_snapshot.xml
index 6a2a2af..e94d585 100644
--- a/linden/indra/newview/skins/xui/ja/floater_snapshot.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_snapshot.xml
@@ -1,23 +1,23 @@
-
+
- 何ãŒã—ãŸã„ã§ã™ã‹ã€‚
+ 何をã—ãŸã„ã§ã™ã‹ï¼Ÿ
-
+
- ãƒã‚¹ãƒˆã‚«ãƒ¼ãƒ‰ã‚’é€ã‚‹
+ ãƒã‚¹ãƒˆã‚«ãƒ¼ãƒ‰é€ä¿¡
- スナップショットをアップãƒãƒ¼ãƒ‰ã™ã‚‹
+ アップãƒãƒ¼ãƒ‰
- スナップショットをãƒãƒ¼ãƒ‰ãƒ‡ã‚£ã‚¹ã‚¯ã«ä¿å˜
+ ãƒãƒ¼ãƒ‰ãƒ»ãƒ‰ãƒ©ã‚¤ãƒ–ã«ä¿å˜
- ã©ã‚“ãªå¯¸æ³•ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ãŒå¿…è¦ã§ã™ã‹ã€‚
+ ã©ã‚“ãªå¤§ãã•ã®ç”»åƒãŒå¿…è¦ã§ã™ã‹ï¼Ÿ
-
+
640x480
@@ -34,24 +34,24 @@
カスタãƒ
-
+
ç¾åœ¨ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦
- å°åž‹ (128x128)
+ å°ï¼ˆ128x128)
- ä¸åž‹ (256x256)
+ ä¸ï¼ˆ256x256)
- 大型 (512x512)
+ 大(512x512)
カスタãƒ
-
+
ç¾åœ¨ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦
@@ -79,11 +79,11 @@
-
+
- ç²å¾—:
+ キャプï¾ï½¬ï¼š
-
+
色
@@ -91,24 +91,24 @@
æ·±ã•
- オグジェクト・マット
+ オグジェクトã®ã¤ã‚„消ã—
- ファイルサイズ:[SIZE]
+ ファイル サイズ:[SIZE]
-
-
-
-
-
+
+
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_sound_preview.xml b/linden/indra/newview/skins/xui/ja/floater_sound_preview.xml
index 05040ed..2faa30a 100644
--- a/linden/indra/newview/skins/xui/ja/floater_sound_preview.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_sound_preview.xml
@@ -1,16 +1,16 @@
- åå‰:
+ åå‰ï¼š
- 説明:
+ 説明:
-
-
+
+
- ビットレート (kbps):
+ ビットレート(kbps):
diff --git a/linden/indra/newview/skins/xui/ja/floater_telehub.xml b/linden/indra/newview/skins/xui/ja/floater_telehub.xml
index fda2bce..9570d40 100644
--- a/linden/indra/newview/skins/xui/ja/floater_telehub.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_telehub.xml
@@ -1,28 +1,28 @@
- [OBJECT]ã«æŽ¥ç¶šã•ã‚ŒãŸãƒ†ãƒ¬ãƒãƒ–
+ 物体[OBJECT]ã«æŽ¥ç¶šã•ã‚ŒãŸãƒ†ãƒ¬ãƒãƒ–
- テレãƒãƒ–ãŒæŽ¥ç¶šã•ã‚Œã¦ã„ãªã„
+ テレãƒãƒ–未接続
- 除外ã™ã‚‹ã«ã¯ã€Žåˆ‡æ–ã€ã‚’クリックã—ã¦ãã ã•ã„。
+ [切æ–]をクリックã—ã¦å‰Šé™¤ã—ã¾ã™ã€‚
- オブジェクトをé¸æŠžã—ã€ã€Žãƒ†ãƒ¬ãƒãƒ–ã«æŽ¥ç¶šã€ã‚’クリックã—ã¦ãã ã•ã„。
+ 物体をé¸æŠžã—[テレãƒãƒ–ã®æŽ¥ç¶šã€ã‚’クリックã™ã‚‹
-
+
- 産åµãƒã‚¤ãƒ³ãƒˆ (ä½ç½®, オブジェクトã§ã¯ãªã„:
+ 出ç¾åœ°ç‚¹ï¼ˆç‰©ä½“ã§ã¯ãªãä½ç½®ï¼‰
-
-
+
+
- オブジェクトをé¸æŠžã—ã€Addをクリックã—ä½ç½®ã‚’指定ã™ã‚‹ã€‚
-ãã‚Œã‹ã‚‰ã‚ªãƒ–ジェクトを移動ã¾ãŸã¯å‰Šé™¤ã—ã¦ã‚‚よã„。
-ä½ç½®ã¯ãƒ†ãƒ¬ãƒãƒ–センターã«ç›¸å¯¾ã—ã¦ã„る。
-リストã®é …目をé¸æŠžã—ã€ä¸–ç•Œä¸ã®ä½ç½®ã‚’示ã—ã¾ã™ã€‚
+ 物体をé¸æŠžã—[è¿½åŠ ]をクリックã—ä½ç½®ã‚’指定。
+物体を移動ã¾ãŸã¯å‰Šé™¤ã§ãる。
+ä½ç½®ã¯ãƒ†ãƒ¬ãƒãƒ–・センターãŒåŸºæº–ã®ç›¸å¯¾ä½ç½®ã€‚
+リスト内å“目をé¸æŠžã—ワールド内ä½ç½®ã‚’示ã™ã€‚
diff --git a/linden/indra/newview/skins/xui/ja/floater_texture_ctrl.xml b/linden/indra/newview/skins/xui/ja/floater_texture_ctrl.xml
index e9b2a0c..871a5c3 100644
--- a/linden/indra/newview/skins/xui/ja/floater_texture_ctrl.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_texture_ctrl.xml
@@ -1,17 +1,17 @@
-
+
- 複数ã®
+ 複数
- 採寸:512×512
+ 寸法:512Â~512
-
+
-
-
+
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_tools.xml b/linden/indra/newview/skins/xui/ja/floater_tools.xml
index 3644b8b..d60ff80 100644
--- a/linden/indra/newview/skins/xui/ja/floater_tools.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_tools.xml
@@ -6,7 +6,7 @@
- 移動ã™ã‚‹
+ 移動
@@ -14,32 +14,33 @@
- 生æˆ
+ 作æˆ
土地
-
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
- ルーラーモード:
+ ルーラー・モード:
- ドラッグã¯ç§»å‹•ã€ã‚·ãƒ•ãƒˆãƒ‰ãƒ©ãƒƒã‚°ã§ã‚³ãƒ”ー
+ 移動ã™ã‚‹ã«ã¯ãƒ‰ãƒ©ãƒƒã‚°ã€ã‚³ãƒ”ーã™ã‚‹ã«ã¯Shiftã‚ーを押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚°
@@ -62,97 +63,94 @@
-
+
-
-
+
+
-
+
å°
- ä¸é–“
+ ä¸
大
-
-
-
-
+
+
+
+
- åå‰:
+ åå‰ï¼š
- 説明:
+ 説明:
- 創作者:
+ クリエーター
Thrax Linden
-
- 所有者:
+ オーナー:
Thrax Linden
-
- グループ:
+ グループ:
- The Lindens
+ Linden家
- 1オブジェクトã€1基本è¦ç´
+ 1オブジェクトã€1プリãƒ
- 許å¯ï¼š
+ 権é™
- ã“ã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ ã“ã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã™ã€‚
-
+
- 証書を作æˆã—ã¦è²æ¸¡ã™ã‚‹...
+ è²æ¸¡...
- è²æ¸¡ã™ã‚‹
+ è²æ¸¡
-
-
-
-
+
+
+
- ä¾¡æ ¼: L$
+ 料金:L$
@@ -166,26 +164,26 @@
- 次ã®æ‰€æœ‰è€…ãŒå¯èƒ½:
+ 次ã®ã‚ªãƒ¼ãƒŠãƒ¼ãŒå®Ÿè¡Œã§ãã‚‹æ“作:
-
+
-
+
- 左クリックã ã£ãŸå ´åˆï¼š
+ 左クリックã™ã‚‹ã¨ï¼š
- 触るï¼æŽ´ã‚€ï¼ˆãƒ‡ãƒ•ã‚©ãƒ«ãƒˆï¼‰
+ 触るï¼ã¤ã‹ã‚€ (デフォルト)
オブジェクトã«åº§ã‚‹
- オブジエクトã®è³¼å…¥
+ オブジェクトを購入
- オブジェクトã®ä»£é‡‘を払ã†
+ オブジェクトã¸ã®æ”¯æ‰•ã„
é–‹ã
@@ -204,42 +202,42 @@
E:
- N:
+ N:
F:
- ã“ã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ ã“ã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã™ã€‚
- ã“れらã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ ã“れらã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã™ã€‚
- ã“ã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ ã“ã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã›ã‚“。
- ã“れらã®ã‚ªãƒ–ジェクトを修æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ ã“れらã®ã‚ªãƒ–ジェクトã¯ä¿®æ£ã§ãã¾ã›ã‚“。
- 許å¯ã‚’è¨å®šã™ã‚‹ã«ã¯ã€ã‚ªãƒ–ジェクト全体をé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ 権é™ã‚’è¨å®šã™ã‚‹ã«ã¯ã€ã‚ªãƒ–ジェクト全体をé¸æŠžã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
- パラメーターを編集ã™ã‚‹ã«ã¯ã€ä¸€ã¤ã®åŸºæœ¬è¦ç´ ã®ã¿é¸æŠžã—ã¦ãã ã•ã„。
+ パラメーターを編集ã™ã‚‹ã«ã¯ã€åŸºæœ¬è¦ç´ ã‚’1ã¤ã ã‘é¸æŠžã—ã¦ãã ã•ã„。
オブジェクトã®ãƒ‘ラメーターを編集:
-
+
-
+
+ tool_tip="オブジェクトåŒå£«ã®è¡çªã¾ãŸã¯ã‚ªãƒ–ジェクトã¨ã‚¢ãƒã‚¿ãƒ¼ã®è¡çªã‚’回é¿" />
ä½ç½®ï¼ˆãƒ¡ãƒ¼ãƒˆãƒ«ï¼‰
@@ -247,7 +245,7 @@
- è¦æ¨¡ï¼ˆãƒ¡ãƒ¼ãƒˆãƒ«ï¼‰
+ サイズ(メートル)
@@ -285,7 +283,7 @@
- å»ºé€ ç‰©ãƒ–ãƒãƒƒã‚¯ã‚¿ã‚¤ãƒ—
+ å»ºé€ ç‰©ãƒ–ãƒãƒƒã‚¯ãƒ»ã‚¿ã‚¤ãƒ—
@@ -311,12 +309,12 @@
- パス・カット開始ã¨çµ‚了
+ パス・カットã®å§‹ç‚¹ã¨çµ‚点
- ä¸ç©ºã®å½¢
+ ä¸ç©º
傾斜
@@ -339,7 +337,7 @@
- æ»ã‚Šã®é–‹å§‹ãŠã‚ˆã³çµ‚了
+ ã²ãã‚Šã®å§‹ã¾ã‚Šã¨çµ‚ã‚ã‚Š
@@ -357,10 +355,10 @@
- プãƒãƒ•ã‚¡ã‚¤ãƒ«ã‚«ãƒƒãƒˆé–‹å§‹ãŠã‚ˆã³çµ‚了
+ プãƒãƒ•ã‚£ãƒ¼ãƒ«ãƒ»ã‚«ãƒƒãƒˆã®å§‹ç‚¹ã¨çµ‚点
- ã•ã–ãªã¿ã®ã¯ã˜ã‚ã¨çµ‚ã‚ã‚Š
+ ã•ã–ãªã¿ã®å§‹ç‚¹ã¨çµ‚点
@@ -378,39 +376,39 @@
- 特徴を編集ã™ã‚‹ã«ã¯ã€ä¸€ã¤ã®åŸºæœ¬è¦ç´ ã®ã¿é¸æŠžã—ã¦ãã ã•ã„。
+ 特徴を編集ã™ã‚‹ã«ã¯ã€åŸºæœ¬è¦ç´ ã‚’1ã¤ã ã‘é¸æŠžã—ã¦ãã ã•ã„。
オブジェクトã®ç‰¹å¾´ã‚’編集:
+ tool_tip="Z軸をä¸å¿ƒã¨ã™ã‚‹ã‚ªãƒ–ジェクトã®æŠ˜ã‚Œæ›²ãŒã‚Šã‚’有効ã«ã™ã‚‹ (クライアントå´ã®ã¿ï¼‰" />
-
-
-
-
+
+
+
色
-
+ tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã" />
+
+ tool_tip="写真をクリックã—ã¦é¸æŠž" />
+ tool_tip="カラー・ピッカーをクリックã—ã¦é–‹ã" />
- é€æ˜Žåº¦ ï¼…
+ é€éŽåº¦ %
@@ -432,13 +430,13 @@
ãªã—
- 低ã„
+ 低
- ä¸é–“
+ ä¸
- 高ã„
+ 高
@@ -458,13 +456,13 @@
木目調
- 樹皮
+ 木ã®çš®
レンガ
- ãƒã‚§ãƒƒã‚¯
+ ãƒã‚§ãƒƒã‚«ãƒ¼
コンクリート
@@ -482,7 +480,7 @@
ç ‚åˆ©
- ペトリディッシュ
+ ペトリ
羽目æ¿
@@ -497,57 +495,60 @@
å¸ã„è¾¼ã¿
- 織り
+ 織目
- フェース毎ã«ç¹°ã‚Šè¿”ã™
+ é¡”ã”ã¨ã«ç¹°ã‚Šè¿”ã™
-
+
回転(度)
- メートル毎ã«ç¹°ã‚Šè¿”ã™
+ メートルã”ã¨ã«ç¹°ã‚Šè¿”ã™
- フェース毎ã«ç¹°ã‚Šè¿”ã™
+ é¡”ã”ã¨ã«ç¹°ã‚Šè¿”ã™
- メートル毎ã«ç¹°ã‚Šè¿”ã™
+ メートルã”ã¨ã«ç¹°ã‚Šè¿”ã™
ãšã‚Œ
-
+
- メディア・テクスãƒãƒ£ãƒ¼ã‚’æƒãˆã¦ãã ã•ã„。(ã¯ã˜ã‚ã«èªã¿è¾¼ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™)
+ メディア・テクスãƒãƒ£ãƒ¼ã‚’æƒãˆã‚‹
+(最åˆã«ãƒãƒ¼ãƒ‰ã™ã‚‹ã“ã¨ï¼‰
-
-
+
+
- ä¾¡æ ¼ï¼š[AREA]平方メートルã‚ãŸã‚ŠL$[PRICE]
+ ä¾¡æ ¼ï¼š[AREA]平方メートルã‚ãŸã‚ŠL$[PRICE]
- エリア:[AREA]平方メートル
+ é¢ç©ï¼š[AREA]平方メートル
-
-
-
-
+
+
+
diff --git a/linden/indra/newview/skins/xui/ja/floater_top_objects.xml b/linden/indra/newview/skins/xui/ja/floater_top_objects.xml
index 9a25562..879e2d8 100644
--- a/linden/indra/newview/skins/xui/ja/floater_top_objects.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_top_objects.xml
@@ -1,36 +1,36 @@
-
+
- ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...
+ ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
-
-
-
-
+
+
+
+
- オブジェクト ID::
+ 物体ID:
-
+
- オブジェクトå:
+ 物体å:
-
+
所有者å:
-
-
-
-
-
-
+
+
+
+
+
+
- 上部スクリプト
+ トップ・スクリプト
- [COUNT]スクリプトã¯å…¨ä½“ã§[TIME]分ã‹ã‹ã‚Šã¾ã™
+ [COUNT]スクリプト全体ã®å®Ÿè¡Œæ™‚é–“ã¯[TIME]ミリ秒。
時間
@@ -39,12 +39,12 @@
上部コライダー
- 上部[COUNT]ã®ã‚ªãƒ–ジェクトã¯ã€å¤šãã®æ½œåœ¨çš„ãªè¡çªã‚’経験ã—ã¦ã„ã¾ã™ã€‚
+ 上ä½[COUNT]個ã®ç‰©ä½“ã¯å¤šãã®è¡çªå¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
- 得点
+ æ•°
- 何も見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ 何も見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
diff --git a/linden/indra/newview/skins/xui/ja/floater_tos.xml b/linden/indra/newview/skins/xui/ja/floater_tos.xml
index 1ceb1c4..ee01a2b 100644
--- a/linden/indra/newview/skins/xui/ja/floater_tos.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_tos.xml
@@ -1,21 +1,21 @@
-
-
+
+
- サービスè¦ç´„ã«åŒæ„ã—ã¾ã›ã‚“
+ 利用è¦ç´„ã«åŒæ„ã—ã¾ã›ã‚“
- サービスè¦ç´„ã«åŒæ„ã—ã¾ã™
+ 利用è¦ç´„ã«åŒæ„ã—ã¾ã™
- Terms of Service Agreement
+ 利用è¦ç´„
- 注æ„æ·±ã次ã®Terms of Serviceã‚’èªã‚“ã§ãã ã•ã„。Second Lifeã«ãƒã‚¯ã‚¤ãƒ³ã‚’続ã‘ã‚‹å ´åˆã«ã¯ã€
-ã“ã®åŒæ„ã‚’å—ã‘入れる必è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ 以下ã®åˆ©ç”¨è¦ç´„を注æ„æ·±ããŠèªã¿ãã ã•ã„。 SecondLifeã¸ãƒã‚°ã‚¤ãƒ³ã™ã‚‹ã«ã¯ã€
+è¦ç´„ã«åŒæ„ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。
TOS_TEXT
diff --git a/linden/indra/newview/skins/xui/ja/floater_wearable_save_as.xml b/linden/indra/newview/skins/xui/ja/floater_wearable_save_as.xml
index 044e4a6..8286d29 100644
--- a/linden/indra/newview/skins/xui/ja/floater_wearable_save_as.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_wearable_save_as.xml
@@ -1,11 +1,11 @@
-
+
- 別åã§ä¿å˜ï¼š
+ アイテムを別åã§ä¿å˜ï¼š
- æ–°ã—ã„[DESC]
+ æ–°è¦[DESC]
diff --git a/linden/indra/newview/skins/xui/ja/floater_world_map.xml b/linden/indra/newview/skins/xui/ja/floater_world_map.xml
index 7977123..0b3f6e4 100644
--- a/linden/indra/newview/skins/xui/ja/floater_world_map.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_world_map.xml
@@ -2,10 +2,10 @@
-
+
- 土地ã®å£²ã‚Šå‡ºã—
+ 売り出ã—ä¸ã®åœŸåœ°
オークション
@@ -16,10 +16,10 @@
ホーãƒ
-
+
- 分類
+ クラシファイド広告
@@ -35,11 +35,11 @@
- 評判ãŒã„ã„
+ 人気
- 土地ã®å£²ã‚Šå‡ºã—
+ 売り出ã—ä¸ã®åœŸåœ°
@@ -50,21 +50,21 @@
イベント(M)
-
+
- ç§ã®å‹é”
+ 自分ã®ãƒ•ãƒ¬ãƒ³ãƒ‰
-
- ç§ã®ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯
+ 自分ã®ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯
-
- 地域åã§æ¤œç´¢
-
-
+
+
検索çµæžœï¼š
@@ -73,20 +73,22 @@
- ä½ç½®:
+ ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ï¼š
-
-
-
+
+
+
-
+
-
-
+
+
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/menu_inventory.xml b/linden/indra/newview/skins/xui/ja/menu_inventory.xml
index 03cf428..7c1d910 100644
--- a/linden/indra/newview/skins/xui/ja/menu_inventory.xml
+++ b/linden/indra/newview/skins/xui/ja/menu_inventory.xml
@@ -2,15 +2,16 @@
-
-
-
+
+
+
-
+
+
-
+
@@ -24,44 +25,42 @@
-
+
-
+
-
-
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
+
-
+
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml b/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml
index 385db68..0b84492 100644
--- a/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml
+++ b/linden/indra/newview/skins/xui/ja/menu_pie_avatar.xml
@@ -1,15 +1,17 @@
-
+
-
+
+
-
-
-
-
-
+
+
+
+
+
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/menu_pie_land.xml b/linden/indra/newview/skins/xui/ja/menu_pie_land.xml
index 8b9a527..8e9c571 100644
--- a/linden/indra/newview/skins/xui/ja/menu_pie_land.xml
+++ b/linden/indra/newview/skins/xui/ja/menu_pie_land.xml
@@ -1,10 +1,10 @@
-
-
-
+
+
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/menu_pie_object.xml b/linden/indra/newview/skins/xui/ja/menu_pie_object.xml
index 883a79b..64a8190 100644
--- a/linden/indra/newview/skins/xui/ja/menu_pie_object.xml
+++ b/linden/indra/newview/skins/xui/ja/menu_pie_object.xml
@@ -1,23 +1,26 @@
-
+
-
+
-
+
-
-
+
+
-
-
-
+
+
+
+
+
+
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/menu_pie_self.xml b/linden/indra/newview/skins/xui/ja/menu_pie_self.xml
index d6c3a73..8ffa8bb 100644
--- a/linden/indra/newview/skins/xui/ja/menu_pie_self.xml
+++ b/linden/indra/newview/skins/xui/ja/menu_pie_self.xml
@@ -1,12 +1,12 @@
-
-
-
+
+
+
-
+
-
+
@@ -14,16 +14,16 @@
-
-
-
-
+
+
+
+
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/menu_viewer.xml b/linden/indra/newview/skins/xui/ja/menu_viewer.xml
index 0dac342..137fea8 100644
--- a/linden/indra/newview/skins/xui/ja/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/ja/menu_viewer.xml
@@ -2,24 +2,24 @@
-
-
-
+
+
-
+
-
-
-
+
+
@@ -31,7 +31,6 @@
-
@@ -42,94 +41,88 @@
-
-
+
+
-
+
-
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
+
-
-
+
-
-
-
-
-
+
+
+
+
-
+
-
+
-
-
-
-
+
+
-
-
+
@@ -137,19 +130,18 @@
-
+
-
-
-
+
+
+
-
-
+
+
-
+
-
-
+
@@ -158,14 +150,12 @@
-
-
-
-
+
+
-
+
-
+
@@ -177,58 +167,58 @@
-
-
+
-
-
+
+
-
+
-
+
-
-
+
-
-
-
-
-
+
+
-
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
-
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/notify.xml b/linden/indra/newview/skins/xui/ja/notify.xml
index 6c5253f..50273bf 100644
--- a/linden/indra/newview/skins/xui/ja/notify.xml
+++ b/linden/indra/newview/skins/xui/ja/notify.xml
@@ -22,87 +22,92 @@
- 紛失ã—ãŸæœï¼èº«ä½“部ä½ã‚’デフォルトã«ç½®ãæ›ãˆã¾ã™
+ æ¬ è½ã—ã¦ã„ã‚‹æœï¼èº«ä½“部ä½ã‚’デフォルトã«ç½®æ›ã—ã¾ã™ã€‚
- [FIRST][LAST]ãŒã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã«ãªã‚Šã¾ã—ãŸ
+ [FIRST] [LAST]ã¯ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã§ã™ã€‚
- [FIRST][LAST]ãŒã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã«ãªã‚Šã¾ã—ãŸ
+ [FIRST] [LAST]ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã§ã™ã€‚
- You cannot add yourself as a friend.
+ 自分自身をフレンドã«ã¯ã§ãã¾ã›ã‚“。
- ゲーム内ã¨Webサイトã®ã‚¹ãƒŠãƒƒãƒ—ショットをアップãƒãƒ¼ãƒ‰ã—ã¦ã„ã¾ã™â€¦ï¼ˆ5分程度ã‹ã‹ã‚Šã¾ã™ï¼‰
+ インワールドã¨ã‚¦ã‚§ãƒ–・サイトã®ã‚¹ãƒŠãƒƒãƒ—ショットをアップãƒãƒ¼ãƒ‰ä¸ã§ã™...
+(所è¦æ™‚間:約5分)
- You paid L$[AMOUNT] to upload.
+ アップãƒãƒ¼ãƒ‰ã« L$[AMOUNT] 支払ã„ã¾ã—ãŸã€‚
- ゲーム内ã®ã‚¹ãƒŠãƒƒãƒ—ショットをアップãƒãƒ¼ãƒ‰ã—ã¦ã„ã¾ã™â€¦ï¼ˆ1分程度ã‹ã‹ã‚Šã¾ã™ï¼‰
+ インワールドã®ã‚¹ãƒŠãƒƒãƒ—ショットをアップãƒãƒ¼ãƒ‰ä¸...
+(所è¦æ™‚間:約1分)
- ウェブサイトã®ã‚¹ãƒŠãƒƒãƒ—ショットã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ¸ˆã¿
+ Web site snapshot upload done.
- ゲーム内スナップショットã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰æ¸ˆã¿
+ インワールドã§ã®ã‚¹ãƒŠãƒƒãƒ—ショットã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ãŒå®Œäº†ã—ã¾ã—ãŸã€‚
- Terrain.rawをダウンãƒãƒ¼ãƒ‰æ¸ˆã¿
+ raw地形ãŒãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸ
- ã‚ãªãŸã®æ‰€å±žã—ã¦ã„るグループ数ãŒä¸Šé™ã«é”ã—ã¾ã—ãŸã€‚æ–°ãŸãªã‚°ãƒ«ãƒ¼ãƒ—を作æˆã™ã‚‹å‰ã«ã€æœ€ä½Žä¸€ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰è„±é€€ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ ã‚ãªãŸã¯ã™ã§ã«æœ€å¤§é™ã®æ•°ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å±žã—ã¦ã„ã¾ã™ã€‚ 1ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰æŠœã‘ãªã„ã¨æ–°ã—ã„グループを作るã“ã¨ã¯ã§ãã¾ã›ã‚“。
- ジェスãƒãƒ£ãƒ¼ãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚ã‚Šã¾ã›ã‚“
+ ジェスãƒãƒ£ãƒ¼ãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚ã‚Šã¾ã›ã‚“。
- ジェスãƒãƒ£ãƒ¼ã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ ジェスãƒãƒ£ãƒ¼ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。
+ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
- ã‚ãªãŸã®æŒã¡ç‰©ãŒèªã¿è¾¼ã¾ã‚Œã¾ã™ã€‚
+ æŒã¡ç‰©ãŒãƒãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸã€‚
- データベースã«ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ãŒã‚ã‚Šã¾ã›ã‚“
+ データベースã«ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ãŒã‚ã‚Šã¾ã›ã‚“。
- ランドマークをèªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ ランドマークをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。 ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
- ã‚ãªãŸã®Caps Lockã‚ーãŒã‚ªãƒ³ã«ãªã£ã¦ã„ã¾ã™ã€‚ã‚ãªãŸã®å…¥åŠ›ã™ã‚‹ãƒ‘スワードã«å½±éŸ¿ã‚’与ãˆã‚‹ãŸã‚ã€ã‚ªãƒ•ã«ã™ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚
+ コンピューター㮠Caps Lockã‚ーãŒ
+有効ã«ãªã£ã¦ã„ã¾ã™ã€‚パスワード入力ã«
+影響ã™ã‚‹ã®ã§è§£é™¤ã—ã¾ã—ょã†ã€‚
@@ -112,12 +117,13 @@
- ノートカード閲覧ã®ãŸã‚ã®è¨±å¯ãŒä¸å分ã§ã™ã€‚
+ ノートカードを閲覧ã™ã‚‹ã«ã¯æ¨©é™ãŒä¸å分ã§ã™ã€‚
- ノートカードをèªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ ノートカードをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。
+ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
@@ -127,112 +133,120 @@
- スクリプト閲覧ã®ãŸã‚ã®è¨±å¯ãŒä¸å分ã§ã™ã€‚
+ スクリプトを閲覧ã™ã‚‹ã«ã¯æ¨©é™ãŒä¸å分ã§ã™ã€‚
- スクリプトをèªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ スクリプトをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“。 ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
- ã‚ãªãŸãŒæä¾›ã™ã‚‹å®Œå…¨ãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€ã¾ã ãƒãƒ¼ã‚«ãƒ«ã§ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰ã€å†åº¦ã€ã“れらã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’æä¾›ã—ã¦ãã ã•ã„。
+ ã‚ãªãŸã®æä¾›ã™ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã€ã“ã®å ´æ‰€ã§ã¯ã¾ã
+全部æƒã„ã¾ã›ã‚“。 å°‘ã—ã—ã¦ã‹ã‚‰ã€ã‚‚ã†ä¸€åº¦
+試ã—ã¦ãã ã•ã„。
- ä¿è·ã•ã‚ŒãŸã‚«ãƒ†ã‚´ãƒªã®ä¿®æ£ã¯ã§ãã¾ã›ã‚“
+ ä¿è·ã•ã‚ŒãŸã‚«ãƒ†ã‚´ãƒªãƒ¼ã¯ä¿®æ£ã§ãã¾ã›ã‚“。
- ä¿è·ã•ã‚ŒãŸã‚«ãƒ†ã‚´ãƒªã®ç§»å‹•ã¯ã§ãã¾ã›ã‚“
+ ä¿è·ã•ã‚ŒãŸã‚«ãƒ†ã‚´ãƒªãƒ¼ã¯å‰Šé™¤ã§ãã¾ã›ã‚“。
- [FIRST][LAST]ã«ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’ã‚ã’ã¾ã—ãŸã€‚
+ ã‚ãªãŸã¯[FIRST] [LAST]ã«ã‚³ãƒ¼ãƒªãƒ³ã‚°ãƒ»ã‚«ãƒ¼ãƒ‰ã‚’贈りã¾ã—ãŸã€‚
- [FIRST][LAST]ã«ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—を申ã—è¾¼ã¿ã¾ã—ãŸã€‚
+ ã‚ãªãŸã¯[FIRST] [LAST]ã«ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—を贈りã¾ã—ãŸã€‚
- オブジェクトã®ãƒ‡ãƒ¼ã‚¿ã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¦ã„る最ä¸ã¯ã€è³¼å…¥ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ オブジェクトデータã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ä¸ã¯è³¼å…¥ã§ãã¾ã›ã‚“。
+ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
- オブジェクト・データをダウンãƒãƒ¼ãƒ‰ä¸ã¯ã€ãƒªãƒ³ã‚¯ã§ãã¾ã›ã‚“。å†åº¦ã€è©¦ã¿ã¦ãã ã•ã„。
+ オブジェクトデータã®ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ä¸ã¯ãƒªãƒ³ã‚¯ã§ãã¾ã›ã‚“。
+ã‚‚ã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。
- åŒæ™‚ã«ã€ç•°ãªã£ãŸæ‰€æœ‰è€…ã®ã‚ªãƒ–ジェクトを購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。å˜ä¸€ã®ã‚ªãƒ–ジェクトをé¸æŠžã—ã¦ãã ã•ã„。
+ 複数ã®ã‚ªãƒ¼ãƒŠãƒ¼ã‹ã‚‰åŒæ™‚ã«ã‚ªãƒ–ジェクトを購入ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+å˜ä¸€ã®ã‚ªãƒ–ジェクトをé¸æŠžã—ã¦ãã ã•ã„。
- オブジェクトã¯è²©å£²å¯¾è±¡ã§ã¯ã‚ã‚Šã¾ã›ã‚“
+ オブジェクトã¯è²©å£²å¯¾è±¡ã§ã¯ã‚ã‚Šã¾ã›ã‚“。
- レベル[LEVEL]ã® God Modeã«å…¥ã‚Šã¾ã—ãŸã€‚
+ レベル[LEVEL]ã®ã‚´ãƒƒãƒ‰ãƒ»ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚Šã¾ã™
- レベル[LEVEL]ã®God Modeを離脱ã—ã¾ã™ã€‚
+ レベル[LEVEL]ã®ã‚´ãƒƒãƒ‰ãƒ»ãƒ¢ãƒ¼ãƒ‰ã‚’解除
- ã‚ãªãŸã«ã¯ã‚³ãƒ”ー許å¯ãŒãªã‹ã£ãŸãŸã‚ã€ã‚³ãƒ”ーã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ コピー権é™ãŒãªã„ãŸã‚ã€ã‚³ãƒ”ーãŒå¤±æ•—ã—ã¾ã—ãŸã€‚
- [NAME]ã¯æ¸¡ã•ã‚ŒãŸæŒã¡ç‰©ã‚’å—ã‘å–ã‚Šã¾ã—ãŸã€‚
+ [NAME]ã¯ã€æŒã¡ç‰©ã®æ供をå—ã‘入れã¾ã—ãŸã€‚
- [NAME]ã¯æ¸¡ã•ã‚ŒãŸæŒã¡ç‰©ã‚’å´ä¸‹ã—ã¾ã—ãŸ
+ [NAME]ã¯ã€æŒã¡ç‰©ã®æ供をæ–ã‚Šã¾ã—ãŸã€‚
- [NAME][MESSAGE]
+ [NAME]: [MESSAGE]
- ã‚ãªãŸã®ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã¯å—ã‘å–られã¾ã—ãŸ
+ コーリング・カードãŒå—ç†ã•ã‚Œã¾ã—ãŸã€‚
- ã‚ãªãŸã®ã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã¯å´ä¸‹ã•ã‚Œã¾ã—ãŸ
+ コーリング・カードãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚
- 今ã€ã‚ãªãŸã¯ã€æœ¬åœŸã«åˆ°é”ã—ã¾ã—㟠『[NAME]ã€ã¨è¨€ã†ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ç”»é¢å³ä¸‹ã«ã‚ã‚‹æŒã¡ç‰©ãƒœã‚¿ãƒ³ã‚’クリックã—ã€ãƒ©ãƒ³ãƒ‰ãƒžãƒ¼ã‚¯ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。ランドマークをダブルクリックã—ã€ãã“ã«è¡ŒããŸã‚ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’ã—ã¦ãã ã•ã„。
+ メインランドã«åˆ°é”ã—ã¾ã—ãŸã€‚ç”»é¢å³ä¸‹ã«ã‚ã‚‹[æŒã¡ç‰©]ボタンをクリックã—ã€[ランドマーク]フォルダをé¸æŠžã™ã‚‹ã¨ã€ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³[NAME]ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ランドマークをダブルクリックã—ãŸå¾Œã€[テレãƒãƒ¼ãƒˆ]をクリックã—ã¦ã€ãã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã«ç§»å‹•ã—ã¦ãã ã•ã„。
- 今ã€ã‚ãªãŸã¯ãƒ¡ã‚¤ãƒ³ãƒ»ãƒ©ãƒ³ãƒ‰ã«åˆ°é”ã—ã¾ã—ãŸã€‚ ä½äººã®ã€Ž[NAME]ã€ã¨æŽ¥è§¦ã™ã‚‹ã®ã«ã¯ã€ç”»é¢å³ä¸‹ã«ã‚ã‚‹æŒã¡ç‰©ãƒœã‚¿ãƒ³ã‚’クリックã—ã€ã‚³ãƒ¼ãƒªãƒ³ã‚°ãƒ»ã‚«ãƒ¼ãƒ‰ãƒ»ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„。カードをダブルクリックã—ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ»ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’クリックã—ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã—ã¦ãã ã•ã„。
+ メインランドã«åˆ°ç€ã—ã¾ã—ãŸã€‚ç”»é¢å³ä¸‹ã«ã‚ã‚‹[æŒã¡ç‰©ãƒœã‚¿ãƒ³]をクリックã—ã€[コーリング・カード]フォルダをé¸æŠžã™ã‚‹ã¨ã€ä½äºº[NAME]ã¨ã‚³ãƒ³ã‚¿ã‚¯ãƒˆã§ãã¾ã™ã€‚
+カードをダブルクリックã—ãŸå¾Œã€[インスタント・メッセージ]をクリックã—ã¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã—ã¦ãã ã•ã„。
- サーãƒã®å¢ƒç•Œã‚’越ãˆã¦åœŸåœ°ã‚’é¸æŠžã™ã‚‹ã“ã¯ã§ãã¾ã›ã‚“。もã£ã¨å°ã•ãªåœŸåœ°ã‚’é¸æŠžã—ã¦ãã ã•ã„。
+ サーãƒãƒ¼ã®å¢ƒç•Œã‚’越ãˆã¦åœŸåœ°ã‚’é¸æŠžã™ã‚‹ã“ã¨ã§ãã¾ã›ã‚“。
+ã‚‚ã£ã¨å°ã•ãªåœŸåœ°ã‚’é¸æŠžã—ã¦ãã ã•ã„。
@@ -242,26 +256,26 @@
- [NAME]ã¯æŠ•ç¥¨ã®ç”³è«‹ã‚’ã—ã¦ã„ã¾ã™ï¼š
+ [NAME] ã¯æŠ•ç¥¨ã®ç”³è«‹ã‚’ã—ã¦ã„ã¾ã™ï¼š
[MESSAGE]
- [NAME]ã¯é¸æŒ™ã‚’ã¯ã˜ã‚ã¾ã—ãŸï¼š
+ [NAME] ã¯é¸æŒ™ã‚’始ã‚ã¾ã—ãŸï¼š
[MESSAGE]
@@ -271,7 +285,7 @@
- Event Notification:
+ イベント通知:
[NAME]
[DATE]
@@ -280,126 +294,139 @@
テレãƒãƒ¼ãƒˆ
- ãƒã‚¤ãƒ©ã‚¤ãƒˆã•ã‚ŒãŸå…¨ã¦ã®ã‚ªãƒ–ジェクトãŒã€æœ¬åŒºç”»ã®è³¼å…¥è€…ã«è²æ¸¡ã•ã‚Œã¾ã™ã€‚
-è²æ¸¡ã•ã‚Œã‚‹æ¨¹æœ¨ã‚„æ¤ç‰©ã¯ã€ãƒã‚¤ãƒ©ã‚¤ãƒˆã•ã‚Œã¾ã›ã‚“。
+ ã“ã®åŒºç”»ä¸Šã«å˜åœ¨ã™ã‚‹ã‚ªãƒ–ジェクトã®ã†ã¡ã€ã“ã®åŒºç”»ã®è³¼å…¥è€…ã«è²æ¸¡ã•ã‚Œã‚‹ã‚ªãƒ–ジェクトãŒã™ã¹ã¦å¼·èª¿è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+
+
+*è²æ¸¡ã•ã‚Œã‚‹æ¨¹æœ¨ã‚„æ¤ç‰©ã¯ã€å¼·èª¿è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“。
- åŒã˜ãƒˆãƒªã‚¬ãƒ¼ã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ™ãƒ¼ãƒˆã•ã‚Œãªã„ジェスãƒãƒ£ãƒ¼ï¼š
+ åŒã˜ãƒˆãƒªã‚¬ãƒ¼ã§ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã—ãªã„ジェスãƒãƒ£ãƒ¼ï¼š
[NAMES]
- ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãŒä¸å®‰å®šãªãŸã‚ã€æŒã¡ç‰©ã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã‚Œã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šãŒæ‚ªã„ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚
+ ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯éšœå®³ã®ãŸã‚ã€æŒã¡ç‰©ã‚’èªã¿è¾¼ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ ã“ã‚Œã¯ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶šã«å•é¡ŒãŒã‚ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã¾ã™ã€‚
- Apple社ã®QuickTimeãŒã‚ãªãŸã®ã‚·ã‚¹ãƒ†ãƒ ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ãªã„よã†ã§ã™ã€‚
-ストリーミング・メディアã®å†ç”Ÿã‚’è¡Œã„ãŸã„å ´åˆã¯ã€QuickTimeã®ã‚µã‚¤ãƒˆï¼ˆhttp://www.apple.com/quicktime)ã§ã€QuickTime Playerをインストールã—ã¦ãã ã•ã„。
+ Apple社ã®QuickTimeãŒã‚·ã‚¹ãƒ†ãƒ ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ãªã„ã¨æ€ã‚ã‚Œã¾ã™ã€‚
+ストリーミング・メディアã®å†ç”Ÿã‚’è¡Œã„ãŸã„å ´åˆã¯ã€QuickTimeã®ã‚µã‚¤ãƒˆï¼ˆhttp://www.apple.com/quicktime)ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¦ã€QuickTime Playerをインストールã—ã¦ãã ã•ã„。
- é¸æŠžã•ã‚ŒãŸåœŸåœ°ä¸Šã«ã‚ã£ãŸã€ã‚ãªãŸæ‰€æœ‰ã®ã‚ªãƒ–ジェクトã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
+ é¸æŠžã•ã‚ŒãŸåœŸåœ°ã®åŒºç”»ä¸Šã«ã‚ã£ãŸã‚ãªãŸã®ã‚ªãƒ–ジェクトã¯
+ã‚ãªãŸã®æŒã¡ç‰©ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
- é¸æŠžã•ã‚ŒãŸåœŸåœ°ä¸Šã«ã‚ã£ãŸã€[FIRST][LAST]所有ã®ã‚ªãƒ–ジェクトã¯ã€å½¼ï¼å½¼å¥³ã®æŒã¡ç‰©ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
+ é¸æŠžã•ã‚Œã¦ã„る土地ã®åŒºç”»ä¸Šã«ã‚ã£ãŸ
+ [FIRST] [LAST]ãŒæ‰€æœ‰ã™ã‚‹ã‚ªãƒ–ジェクトã¯
+オーナーã®æŒã¡ç‰©ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
- é¸æŠžã•ã‚ŒãŸåœŸåœ°ä¸Šã«ã‚ã£ãŸã€å±…ä½è€…『[NAME]ã€æ‰€æœ‰ã®ã‚ªãƒ–ジェクトã¯ã€æ‰€æœ‰è€…ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
+ é¸æŠžã•ã‚ŒãŸåœŸåœ°ã®åŒºç”»ä¸Šã«ã‚ã‚Šã€ä½äººã®
+[NAME]ã®æ‰€æœ‰ã ã£ãŸã‚ªãƒ–ジェクトã¯
+オーナーã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
- é¸æŠžã•ã‚ŒãŸåœŸåœ°ä¸Šã«ã‚ã£ãŸã€ã‚°ãƒ«ãƒ¼ãƒ—[GROUPNAME]共有ã®ã‚ªãƒ–ジェクトã¯ã€ãã‚Œãžã‚Œã®æ‰€æœ‰è€…ã®æŒã¡ç‰©ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚è²æ¸¡å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€ä»¥å‰ã®æ‰€æœ‰è€…ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚グループã«è²æ¸¡ã•ã‚ŒãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚
+ é¸æŠžã•ã‚Œã¦ã„る区画上ã«ã‚ã‚Šã€[GROUPNAME] ã¨ã„ã†ã‚°ãƒ«ãƒ¼ãƒ—ã¨å…±æœ‰ã ã£ãŸã‚ªãƒ–ジェクトã¯ã€ã‚ªãƒ¼ãƒŠãƒ¼ã®æŒã¡ç‰©ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
+è²æ¸¡ã•ã‚Œã¦ã„ãŸè²æ¸¡å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€å‰ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
+グループã«è²æ¸¡ã•ã‚Œã¦ã„ãŸè²æ¸¡ä¸å¯èƒ½ãªã‚ªãƒ–ジェクトã¯ã€å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚
- é¸æŠžã•ã‚ŒãŸåœŸåœ°ä¸Šã«ã‚ã£ãŸã€ã‚ãªãŸãŒæ‰€æœ‰ã—ã¦ã„ãªã„オブジェクトã¯ã€æ‰€æœ‰è€…ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
+ é¸æŠžã•ã‚ŒãŸåœŸåœ°ã®åŒºç”»ä¸Šã«ã‚ã‚Šã€ã‚ãªãŸã®æ‰€æœ‰ã§ã€Œãªã‹ã£ãŸã€ã‚ªãƒ–ジェクトã¯ã€æœ¬æ¥ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«è¿”å´ã•ã‚Œã¾ã—ãŸã€‚
- ã“ã®åœŸåœ°ã¯ãƒ€ãƒ¡ãƒ¼ã‚¸ãŒæœ‰åŠ¹ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚ (『安全ã§ã¯ãªã„ã€ï¼‰
-怪我をã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ã‚‚ã—ã€ã‚ãªãŸãŒæ»äº¡ã—ãŸå ´åˆã¯ã€ã‚ãªãŸã®ãƒ›ãƒ¼ãƒ ã«è»¢é€ã•ã‚Œã¾ã™ã€‚
+ ã“ã®åœŸåœ°ã¯ãƒ€ãƒ¡ãƒ¼ã‚¸ãŒæœ‰åŠ¹ï¼ˆã€Œå®‰å…¨ã§ã¯ãªã„ã€ï¼‰ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚
+ケガをã™ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 命をè½ã¨ã—ãŸå ´åˆã¯ã€ãƒ›ãƒ¼ãƒ ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã•ã‚Œã¾ã™ã€‚
- ã“ã®åœŸåœ°ã§ã¯ã€é£›è¡ŒãŒç„¡åŠ¹ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚ (『飛行ç¦æ¢ã€ï¼‰
-ã“ã“ã§ã¯ã€é£›è¡Œã§ãã¾ã›ã‚“。
+ ã“ã®åœŸåœ°ã¯é£›è¡ŒãŒç„¡åŠ¹ï¼ˆã€Œé£›è¡Œç¦æ¢ã€ï¼‰ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚
+ã“ã“ã§é£›ã¶ã“ã¨ã¯ã§ãã¾ã›ã‚“。
- 本土地ã¯ã€ã€Žll PushObject制é™ã€ãŒè¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚土地ã®ã‚ªãƒ¼ãƒŠãƒ¼ä»¥å¤–ã€ã“ã“ã§ä»–者をプッシュã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ ã“ã®åœŸåœ°ã¯ã€ŒllPushObjectを制é™ã€ã§ã™ã€‚
+土地所有者ã§ãªã„é™ã‚Šã€ã“ã“ã§ä»–人をプッシュã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
- ã“ã®åœŸåœ°ã¯å»ºé€ 無効ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚ï¼ˆã€Žå»ºé€ ä¸å¯ã€ï¼‰
-ã“ã“ã§ã¯ã€ã‚ªãƒ–ジェクトを形æˆã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ ã“ã®åœŸåœ°ã¯å»ºé€ ç„¡åŠ¹ï¼ˆã€Œå»ºé€ ä¸å¯ã€ï¼‰ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚
+ã“ã“ã§ã‚ªãƒ–ジェクトを作るã“ã¨ã¯ã§ãã¾ã›ã‚“。
- 管ç†è€…ã«ã‚ˆã‚Šã€æœ¬åœ°åŸŸã§ã®ã‚¹ã‚¯ãƒªãƒ—トãŒä¸€æ™‚çš„ã«åœæ¢ã—ã¾ã—ãŸ
+ 管ç†è€…ãŒã“ã®åœ°åŸŸå†…ã®ã‚¹ã‚¯ãƒªãƒ—トを一時åœæ¢ã•ã›ã¾ã—ãŸã€‚
- 本地域ã¯ã€ã„ã‹ãªã‚‹ã‚¹ã‚¯ãƒªãƒ—トも起動ã—ã¾ã›ã‚“。
+ ã“ã®åœ°åŸŸã¯ã‚¹ã‚¯ãƒªãƒ—トを1ã¤ã‚‚èµ·å‹•ã—ã¦ã„ã¾ã›ã‚“。
- ã“ã®åœŸåœ°ã§ã¯ã€å¤–部スクリプトãŒç„¡åŠ¹ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚(『外部スクリプトç¦æ¢ã€ï¼‰åœŸåœ°ã‚ªãƒ¼ãƒŠãƒ¼ã«å±žã™ã‚‹ç‰©ã‚’除ãã€ã‚¹ã‚¯ãƒªãƒ—トã¯èµ·å‹•ã—ã¾ã›ã‚“。
+ ã“ã®åœŸåœ°ã§ã¯å¤–部スクリプトãŒç„¡åŠ¹ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ã€‚
+(「外部スクリプトç¦æ¢ã€ï¼‰
+土地所有者以外ã®ã‚¹ã‚¯ãƒªãƒ—トã¯èµ·å‹•ã§ãã¾ã›ã‚“。
- オブジェクトã¯è¡¨é¢ä¸Šã«ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã®è¡¨ç¤ºã‚’希望ã—ã¦ã„ã¾ã™ï¼š[URL]
+ オブジェクトã®è¡¨é¢ã«ã¯ã€ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–・ページãŒè¡¨ç¤ºã•ã‚Œã¾ã™ï¼š
+[URL]
- ã‚ãªãŸãŒã„る地域ã®å…¬å…±ã®åœŸåœ°ã‚’主張ã™ã‚‹ã“ã¨ã®ã¿ã§ãã¾ã™ã€‚
+ 自分ãŒã„る地域ã§ã®ã¿å…¬å…±ã®åœŸåœ°ã‚’ç²å¾—ã§ãã¾ã™ã€‚
- [FIRST][LAST]ã«ã‚ˆã‚Šæ‰€æœ‰ã•ã‚Œã¦ã„るオブジェクトã®[OBJECTFROMNAME]ãŒã€ã‚ãªãŸã«ã€Ž[OBJECTNAME]ã€ã¨ã„ã†[OBJECTTYPE]を与ãˆã¾ã—ãŸ
+ [FIRST] [LAST]ã«ã‚ˆã‚Šæ‰€æœ‰ã•ã‚Œã¦ã„るオブジェクト[OBJECTFROMNAME]ãŒã€ã‚ãªãŸã«[OBJECTNAME]ã¨ã„ã†åå‰ã®[OBJECTTYPE]を与ãˆã¾ã—ãŸã€‚
- (未知ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ï¼‰ã«ã‚ˆã‚Šæ‰€æœ‰ã•ã‚Œã¦ã„るオブジェクトã®[OBJECTFROMNAME]ãŒã€ã‚ãªãŸã«ã€Ž[OBJECTNAME]ã€ã¨ã„ã†[OBJECTTYPE]を与ãˆã¾ã—ãŸã€‚
+ (未知ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ï¼‰ã«ã‚ˆã‚Šæ‰€æœ‰ã•ã‚Œã¦ã„るオブジェクト[OBJECTFROMNAME]ãŒã€ã‚ãªãŸã«[OBJECTNAME]ã¨ã„ã†åå‰ã®[OBJECTTYPE]を与ãˆã¾ã—ãŸã€‚
- [NAME]ã¯ã€ã‚ãªãŸã«ã€Ž[OBJECTNAME]ã€ã¨ã„ã†[OBJECTTYPE]を与ãˆã¾ã—ãŸã€‚
+ [NAME]ã¯ã€ã‚ãªãŸã«[OBJECTNAME]ã¨ã„ã†åå‰ã®[OBJECTTYPE]を与ãˆã¾ã—ãŸã€‚
- [NAME]ã¯ã€ã‚ãªãŸã‚’オフィサーã¨ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚å‚åŠ è²»ç”¨ã¯ã‹ã‹ã‚Šã¾ã›ã‚“。
+ [NAME]ã¯ã€ã‚ãªãŸã‚’オフィサー
+ã¨ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚
+å‚åŠ è²»ç”¨ã¯ã‹ã‹ã‚Šã¾ã›ã‚“。
+
[MESSAGE]
- [NAME]ã¯ã€ã‚ãªãŸã‚’一般メンãƒãƒ¼ã¨ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚グループã¸ã®å‚åŠ è²»ç”¨ã¯L$[COST]ã§ã™ã€‚
+ [NAME]ã¯ã€ã‚ãªãŸã‚’一般メンãƒãƒ¼ã¨ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚
+グループã¸ã®å‚åŠ è²»ç”¨ã¯L$[COST]
+ã§ã™ã€‚
[MESSAGE]
- [NAME]ã¯ã€ã‚ãªãŸã‚’一般メンãƒãƒ¼ã¨ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚å‚åŠ è²»ç”¨ã¯ã‹ã‹ã‚Šã¾ã›ã‚“。
+ [NAME]ã¯ã€ã‚ãªãŸã‚’一般メンãƒãƒ¼ã¨ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚
+å‚åŠ è²»ç”¨ã¯ã‹ã‹ã‚Šã¾ã›ã‚“。
+
[MESSAGE]
- [NAME] has offered to teleport you
-to his or her location:
+ [NAME]ã¯ã‚ãªãŸã‚’テレãƒãƒ¼ãƒˆ
+ã§å‘¼ã³å¯„ã›ã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ï¼š
[MESSAGE]
@@ -497,7 +531,7 @@ to his or her location:
テレãƒãƒ¼ãƒˆ
@@ -506,110 +540,115 @@ to his or her location:
[URL]
- [NAME] is offering friendship.
+ [NAME] ã¯ã€ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—ã‚’è´ˆã£ã¦ã„ã¾ã™ã€‚
- By default, you will be able to
-see each other's online status.
+ デフォルトã§ãŠäº’ã„ã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ»ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’見るã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
- [NAME]ã¯ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—ã‚’å—ã‘入れã¾ã—ãŸã€‚
+ [NAME]ã¯ã€ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—ã‚’å—ã‘入れã¾ã—ãŸã€‚
- [NAME]ã¯ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—ã‚’å´ä¸‹ã—ã¾ã—ãŸ
+ [NAME]ã¯ã€ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—ã‚’æ–ã‚Šã¾ã—ãŸã€‚
- [FIRST][LAST]ãŒã‚³ãƒ¼ãƒªãƒ³ã‚°ã‚«ãƒ¼ãƒ‰ã‚’申ã—出ã¦ã„ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€ã‚ãªãŸã®æŒã¡ç‰©ã«ãƒ–ックマークãŒè¿½åŠ ã•ã‚Œã€ã“ã®å±…ä½è€…ã«ã™ã°ã‚„ãIMã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ [FIRST] [LAST]ãŒã‚³ãƒ¼ãƒªãƒ³ã‚°ãƒ»ã‚«ãƒ¼ãƒ‰ã‚’è´ˆã£ã¦ã„ã¾ã™ã€‚
+ã“ã‚Œã«ã‚ˆã‚Šã€ã‚ãªãŸã®æŒã¡ç‰©ã«ãƒ–ックマークãŒè¿½åŠ ã•ã‚Œã€
+ã“ã®ä½äººã«ã™ã°ã‚„ãIMã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
- ã“ã®åœ°åŸŸã¯[MINUTES]分以内ã«å†èµ·å‹•ã‚’ã—ã¾ã™ã€‚ã“ã®ã¾ã¾ç•™ã¾ã£ãŸå ´åˆã¯ã€ãƒã‚°ã‚¢ã‚¦ãƒˆã•ã›ã‚‰ã‚Œã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã¯[MINUTES]分後ã«ãƒªã‚¹ã‚¿ãƒ¼ãƒˆã•ã‚Œã¾ã™ã€‚
+ã“ã®åœ°åŸŸã®å¤–ã«å‡ºãªã„ã¨ã€å¼·åˆ¶ãƒã‚°ã‚¢ã‚¦ãƒˆã«ãªã‚Šã¾ã™ã€‚
- ã“ã®åœ°åŸŸã¯[SECONDS]秒以内ã«å†èµ·å‹•ã‚’ã—ã¾ã™ã€‚ã“ã®ã¾ã¾ç•™ã¾ã£ãŸå ´åˆã€ãƒã‚°ã‚¢ã‚¦ãƒˆã•ã›ã‚‰ã‚Œã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã¯[SECONDS]秒後ã«ãƒªã‚¹ã‚¿ãƒ¼ãƒˆã•ã‚Œã¾ã™ã€‚
+ã“ã®åœ°åŸŸã®å¤–ã«å‡ºãªã„ã¨ã€å¼·åˆ¶ãƒã‚°ã‚¢ã‚¦ãƒˆã«ãªã‚Šã¾ã™ã€‚
- ウェブページ[URL]ã‚’èªã¿è¾¼ã¿ã¾ã™ã‹ï¼Ÿ
+ ウェブ・ページ[URL]ã‚’ãƒãƒ¼ãƒ‰ã—ã¾ã™ã‹ï¼Ÿ
+
[MESSAGE]
-オブジェクトã‹ã‚‰: [OBJECTNAME], 所有者:[NAME]
+
+ãƒãƒ¼ãƒ‰å…ƒã®ã‚ªãƒ–ジェクト:[OBJECTNAME]ã€ã‚ªãƒ¼ãƒŠãƒ¼ï¼š[NAME]?
- [TYPE]ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚
-ã‚ãªãŸãŒè³¼å…¥ã—ãŸæœ¬ã‚¢ã‚¤ãƒ†ãƒ ã®è²©å£²è€…ã«é€šçŸ¥ã—ã¦ãã ã•ã„。
+ [TYPE]ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ã“ã®ã‚¢ã‚¤ãƒ†ãƒ を購入ã—ãŸè²©å£²è€…ã«é€šçŸ¥ã—ã¦ãã ã•ã„。
- [DESC]ã¨ã„ã†åã®[TYPE]ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚
-ã‚ãªãŸãŒè³¼å…¥ã—ãŸæœ¬ã‚¢ã‚¤ãƒ†ãƒ ã®è²©å£²è€…ã«é€šçŸ¥ã—ã¦ãã ã•ã„。
+ [DESC]ã¨ã„ã†åå‰ã®[TYPE]ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+本アイテムを購入ã—ãŸè²©å£²è€…ã«é€šçŸ¥ã—ã¦ãã ã•ã„。
- データベースã«[TYPE]ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ データベースã«[TYPE]ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
- データベースã«[DESC]ã¨ã„ã†åã®[TYPE]ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ データベースã«[DESC]ã¨ã„ã†åå‰ã®[TYPE]ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
- Take Linden dollars (L$) from you
+ Lindenドル(L$)を徴åŽã—ã¾ã™ã€‚
- ã‚ãªãŸã®åˆ¶å¾¡å…¥åŠ›ã«å¾“ã„行動ã—ã¦ãã ã•ã„
+ 制御入力ã«å¯¾å¿œ
- ã‚ãªãŸã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«å…¥åŠ›ã‚’å†å¯¾å¿œã•ã›ã¦ãã ã•ã„。
+ コントãƒãƒ¼ãƒ«å…¥åŠ›ã®å†ãƒžãƒƒãƒ”ング
- ã‚ãªãŸã®ã‚¢ãƒã‚¿ãƒ¼ã®ã‚’アニメーションã—ã¾ã™
+ ã‚¢ãƒã‚¿ãƒ¼ã«å‹•ãã‚’ã¤ã‘ã‚‹
@@ -619,27 +658,27 @@ see each other's online status.
- 所有権をリリースã—ã€å…¬é–‹ã—ã¦ãã ã•ã„。
+ 所有権を解放ã—ã¦å…¬å…±åœ°ã«
- ä»–ã®ã‚ªãƒ–ジェクトã¨ã®ãƒªãƒ³ã‚¯ã€ã¾ãŸã¯ãƒªãƒ³ã‚¯è§£é™¤ã‚’è¡Œã„ã¾ã™ã€‚
+ ä»–ã®ã‚ªãƒ–ジェクトã¨ã®ãƒªãƒ³ã‚¯ã®è¨å®šã¨è§£é™¤
- ä»–ã®ã‚ªãƒ–ジェクトã¨ã®ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã®è¿½åŠ ã€å‰Šé™¤ã‚’ã—ã¦ãã ã•ã„。
+ ä»–ã®ã‚ªãƒ–ジェクトã¨ã®ã‚¸ãƒ§ã‚¤ãƒ³ãƒˆã®è¿½åŠ ã¨å‰Šé™¤
- 許å¯ã‚’変更
+ 権é™ã‚’変更
- カメラを追跡ã—ã¦ãã ã•ã„
+ カメラã§è¿½è·¡ã—ã¦ãã ã•ã„
@@ -649,10 +688,10 @@ see each other's online status.
- '[OBJECTNAME]', an object owned by '[NAME]', would like to:
-
+ '[NAME]'ãŒæ‰€æœ‰ã™ã‚‹ã‚ªãƒ–ジェクト'[OBJECTNAME]'を:
+
[QUESTIONS]
-Is this OK?
+よã‚ã—ã„ã§ã™ã‹ï¼Ÿ
- [FIRST][LAST]ã®ã€[TITLE]
-『[MESSAGE]
+ [FIRST] [LAST]'ã®'[TITLE]'
+[MESSAGE]
- [GROUPNAME]ã®ã€Ž[TITLE]
-『[MESSAGE]
+ [GROUPNAME]'ã®'[TITLE]'
+[MESSAGE]
- You just received L$[AMOUNT].
-Objects and other users may give you L$.
-Your balance is shown in the
-upper-right corner of the screen.
+ 今ã€L$[AMOUNT]ã‚’å—ã‘å–ã‚Šã¾ã—ãŸã€‚
+オブジェクトã¨ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚ãªãŸã«ãŠé‡‘を払ã†
+ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。ã‚ãªãŸã®æ®‹é«˜ã¯
+ç”»é¢ã®å³ä¸Šã«è¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚
- ãŸã£ãŸä»Šã€L$[AMOUNT]を支払ã„ã¾ã—ãŸã€‚
-L$残é¡ã¯ç”»é¢å³ä¸Šè§’ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+ 今ã€L$[AMOUNT]を支払ã„ã¾ã—ãŸã€‚
+ã‚ãªãŸã®æ®‹é«˜ã¯ç”»é¢ã®å³ä¸Šã«
+表示ã•ã‚Œã¦ã„ã¾ã™ã€‚
ã‚ãªãŸã¯åº§ã£ã¦ã„ã¾ã™ã€‚
-矢å°ã‚ー(ã¾ãŸã¯AWSD)を使用ã—ã€è¡¨ç¤ºã‚’切り替ãˆã¦ãã ã•ã„。立ã¡ä¸ŠãŒã‚‹éš›ã¯ã€Žç«‹ã¡ä¸ŠãŒã‚‹ã€ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ãã ã•ã„。
+矢å°(ã¾ãŸã¯ AWSD)ã®ã‚ーを使ã£ã¦è¦–点を変ãˆã¾ã™ã€‚
+ç«‹ã¡ä¸ŠãŒã‚‹ã«ã¯[ç«‹ã¡ä¸ŠãŒã‚‹]をクリックã—ã¾ã™ã€‚
- 地図をスクãƒãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ã‚¯ãƒªãƒƒã‚¯ã—ドラッグã—ã¦ãã ã•ã„。
-ダブルクリックã§ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
-å³ã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã‚’使用ã—ã€ç‰©ã‚’見ã¤ã‘ã€ç•°ãªã‚‹èƒŒæ™¯ã‚’表示ã—ã¦ãã ã•ã„
+ 地図をスクãƒãƒ¼ãƒ«ã™ã‚‹ã«ã¯ã€ã‚¯ãƒªãƒƒã‚¯ã—ã¦ãƒ‰ãƒ©ãƒƒã‚°ã—ã¾ã™ã€‚
+テレãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ãƒ€ãƒ–ルクリックã—ã¾ã™ã€‚
+å³å´ã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«ã‚’使用ã™ã‚‹ã¨ã€ç‰©ã‚’見ã¤ã‘ãŸã‚Šã€
+別ã®èƒŒæ™¯ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
- ã‚ãªãŸã¯[SECOND_LIFE]ã®ã„ãã¤ã‹ã®ã‚¨ãƒªã‚¢ã«ã€æ–°ãŸãªã‚ªãƒ–ジェクトを作製ã™ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚左上部ã®ãƒ„ールを使用ã—ã€Ctrlã¾ãŸã¯Altを押ã—続ã‘ã€ã™ã°ã‚„ãツールを切りæ›ãˆã¦ã¿ã¦ãã ã•ã„。Escを押ã—ã¦ã€æ§‹ç¯‰ã‚’ä¸æ¢ã—ã¾ã™ã€‚
+ [SECOND_LIFE]ã«ã¯ã€æ–°ã—ã„オブジェクトを作るã“ã¨ãŒã§ãる地域ãŒã‚ã‚Šã¾ã™ã€‚
+作æˆã«ã¯ç”»é¢ä¸Šéƒ¨å·¦ã®ãƒ„ールãŒä½¿ãˆã€Ctrl ã‚ーや
+ Alt ã‚ーを押ã—ãŸã¾ã¾ã«ã™ã‚Œã°ç´ æ—©ãツールを切り替ãˆã‚‰ã‚Œã¾ã™ã€‚
+ Escã‚ーを押ã™ã¨ã€ä½œæˆã¯çµ‚了ã—ã¾ã™ã€‚
- 左クリックã¯ç‰¹åˆ¥ãªã‚ªãƒ–ジェクトã¸ã®å¹²æ¸‰ã«ä½¿ç”¨ã—ã¾ã™ã€‚マウス・ãƒã‚¤ãƒ³ã‚¿ãŒæ‰‹ã®ãƒžãƒ¼ã‚¯ã«å¤‰ã‚ã‚‹ã¨ã€ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦ã®å‹•ä½œãŒè¡Œãˆã¾ã™ã€‚ å³ã‚¯ãƒªãƒƒã‚¯ã¯ã€å¸¸ã«ã‚ãªãŸã®å‹•ä½œãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’表示ã—ã¾ã™ã€‚
+ 左クリックã«ã‚ˆã‚Šã€ç‰¹åˆ¥ãªã‚ªãƒ–ジェクトをæ“作ã§ãã¾ã™ã€‚
+マウス・ãƒã‚¤ãƒ³ã‚¿ãŒæ‰‹ã®ãƒžãƒ¼ã‚¯ã«å¤‰ã‚ã‚‹å ´åˆã€
+ãƒã‚¤ãƒ³ãƒˆã—ã¦ã„るオブジェクトをæ“作ã§ãã¾ã™ã€‚
+å³ã‚¯ãƒªãƒƒã‚¯ã«ã‚ˆã‚Šã€å®Ÿè¡Œå¯èƒ½ãªæ“作ã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
- ã‚ãªãŸã¯ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã—ãŸã€‚ ç¾åœ¨ã€ã‚ãªãŸã®ç›®çš„地ã«ä¸€ç•ªè¿‘ã„インフォ・ãƒãƒ–ã«ã„ã¾ã™ã€‚ã‚ãªãŸã®ç›®çš„地ã¯ã€èƒŒã®é«˜ã„赤ã„ç›®å°ã§ãƒžãƒ¼ã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚
+ ã‚ãªãŸã¯ãŸã£ãŸä»Šã€ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã—ã¾ã—ãŸã€‚
+ã‚ãªãŸã®ç›®çš„地ã«ä¸€ç•ªè¿‘ã„インフォãƒãƒ–ã«ã„ã¾ã™ã€‚
+目的地ã¯ã€èƒŒã®é«˜ã„赤ã„標è˜ã§ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚
- オブジェクトã«ã‚ˆã‚Šã€ã‚ãªãŸã®ç§»å‹•ã‚ーãŒæ“作ã•ã‚Œã¾ã™ã€‚ 矢å°ã‚ーã€ã‚‚ã—ãã¯AWSDã§ã€å‹•ä½œã‚’確ã‹ã‚ã¦ãã ã•ã„。ã„ãã¤ã‹ã®ã‚ªãƒ–ジェクト(例ã€éŠƒï¼‰ã‚’使用ã™ã‚‹å ´åˆã€ãƒžã‚¦ã‚¹ãƒ«ãƒƒã‚¯ã«ç§»è¡Œã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚マウスルックã¸ã®ç§»è¡Œã¯ã€ŽMã€ã‚’押ã—ã¦ãã ã•ã„。
+ ã‚ãªãŸã®ç§»å‹•ã‚ーをオブジェクトãŒæ“作ã—ã¦ã„ã¾ã™ã€‚
+矢å°ã‹AWSDã®ã‚ーã§å‹•ä½œã‚’確èªã—ã¦ãã ã•ã„。
+銃ãªã©ã®ã‚ªãƒ–ジェクトã ã¨ã€ãƒžã‚¦ã‚¹ãƒ«ãƒƒã‚¯ã«ç§»è¡Œã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+Mã‚ーを押ã—ã¦ç§»è¡Œã—ã¾ã™ã€‚
- ã‚ãªãŸã¯è‡ªåˆ†ã®å®¹å§¿ã‚’変更ã—ã¦ã„ã¾ã™ã€‚ 回転や拡大表示ã™ã‚‹ã«ã¯ã€çŸ¢å°ã‚ーを使用ã—ã¦ãã ã•ã„。 作æ¥å¾Œã€ã‚ãªãŸã®å®¹å§¿ã‚’ä¿å˜ã™ã‚‹å ´åˆã¯ã€Žå…¨ã¦ä¿å˜ã€ã‚’押ã—ã¦ã€çµ‚了ã—ã¦ãã ã•ã„。 自分ã®å®¹å§¿ã¯ã€å¥½ããªã ã‘変更ã™ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚
+ ã‚ãªãŸã¯å®¹å§¿ã‚’編集ä¸ã§ã™ã€‚
+回転ã€ã‚ºãƒ¼ãƒ ã™ã‚‹ã«ã¯çŸ¢å°ã‚ーを使ã„ã¾ã™ã€‚
+編集ãŒçµ‚ã‚ã£ãŸã‚‰[å…¨ã¦ã‚’ä¿å˜]をクリックã—ã¦
+容姿をä¿å˜ã—ã€çµ‚了ã—ã¾ã™ã€‚
+容姿ã®ç·¨é›†ã¯ä½•åº¦ã§ã‚‚è¡Œãˆã¾ã™ã€‚
- ã“ã‚Œã¯ã€ã‚ãªãŸã®æŒã¡ç‰©ä¸€è¦§ã§ã™ã€‚オブジェクトã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã€æ´‹æœã€ãã®ä»–ã‚ãªãŸãŒæ‰€æœ‰ã™ã‚‹ç‰©ãŒå«ã¾ã‚Œã¾ã™ã€‚
-*ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚„æ ¼ç´ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’ã€è‡ªåˆ†è‡ªèº«ã«ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§è£…ç€ã§ãã¾ã™ã€‚
-*オブジェクトを地é¢ã«ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§ã€ä¸–ç•Œã«å‡ºç¾ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
-*ノートカードをèªã‚€ã«ã¯ã€ãƒ€ãƒ–ルクリックã—ã¦ãã ã•ã„。
+ ã“ã‚Œã¯ã€ã‚ªãƒ–ジェクトã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã€æœã€ãã®ä»–ã®æ‰€æœ‰ç‰©ãŒã™ã¹ã¦å…¥ã£ãŸæŒã¡ç‰©ã§ã™ã€‚
+*オブジェクトやæœè£…フォルダを装ç€ã™ã‚‹ã«ã¯ã€ãƒžã‚¦ã‚¹ã§ã‚¢ãƒã‚¿ãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¾ã™ã€‚
+*オブジェクトを世界ã«æŒã¡è¾¼ã‚€ã«ã¯ã€åœ°é¢ã®ä¸Šã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¾ã™ã€‚
+*ノートカードをèªã‚€ã«ã¯ã€ãƒ€ãƒ–ルクリックã—ã¾ã™ã€‚
- ã“ã“ã¯ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹åœ°åŸŸã§ã™ã€‚
-ã‚ãªãŸãŒä½œæˆã—ãŸã‚ªãƒ–ジェクトã¯ã€ã‚¨ãƒªã‚¢ã‚’離れãŸå¾Œã«å‰Šé™¤ã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ã¾ãŸã€ã“ã“ã§ã¯å¤ªå¹³æ´‹æ™‚é–“ã®åˆå‰[TIME]時ã‹ã‚‰[HOURS]時間毎ã«ã€åœ°åŸŸå†…ã®ã‚ªãƒ–ジェクトãŒæ¶ˆåŽ»ã•ã‚Œã¾ã™ã€‚
-サンドボックス地域ã«ã¯ã€é€šå¸¸ã®åœ°åŸŸã¨åŒºåˆ¥ã™ã‚‹ç‚ºã®ã‚µã‚¤ãƒ³ãŒã‚ã‚Šã¾ã™ã€‚
+ ã“ã“ã¯ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ã§ã™ã€‚
+ã‚ãªãŸãŒã“ã“ã§ä½œã£ãŸã‚ªãƒ–ジェクトã¯ã‚ãªãŸãŒ
+ç«‹ã¡åŽ»ã£ãŸå¾Œã€å‰Šé™¤ã•ã‚Œã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。サンドボックスã¯å®šæœŸçš„ã«æ¸…掃ã•ã‚Œã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ã€ç”»é¢ä¸Šéƒ¨ã€åœ°åŸŸåã®éš£ã®æƒ…å ±ã‚’å‚ç…§ã—ã¦ãã ã•ã„。
+
+サンドボックスã¯ä¸€èˆ¬çš„ã§ãªãã€ç›®å°ã®ã‚µã‚¤ãƒ³ãŒã¤ã„ã¦ã„ã¾ã™ã€‚.
- 本オブジェクトã¯ãƒ•ãƒ¬ã‚シブルã§ã™ã€‚ フレã‚シブル・オブジェクトã¯ã€ç‰©ç†çš„ã§ãªã„ã“ã¨ã‚‚ã‚ã‚Šã€ãƒ•ãƒ¬ã‚シブルã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã§è§£é™¤ã•ã‚Œã‚‹ã¾ã§ã€ãƒ•ã‚¡ãƒ³ãƒˆãƒ 属性ã§å˜åœ¨ã—ã¾ã™ã€‚
+ ã“ã®ã‚ªãƒ–ジェクト㯠フレã‚シブルã§ã™ã€‚
+フレã‚シブル・ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã®ãƒã‚§ãƒƒã‚¯ãŒå¤–ã•ã‚Œã‚‹ã¾ã§ã¯ã€ã‚ªãƒ–ジェクトã¯
+物ç†çš„ã§ãªãファントムã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。
- You may only select up to [MAX_SELECT] items
-from this list.
+ ã“ã®ãƒªã‚¹ãƒˆã‹ã‚‰ã€ [MAX_SELECT] 個ã¾ã§ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’
+é¸æŠžã§ãã¾ã™ã€‚
diff --git a/linden/indra/newview/skins/xui/ja/panel_avatar.xml b/linden/indra/newview/skins/xui/ja/panel_avatar.xml
index 1def618..3a63a84 100644
--- a/linden/indra/newview/skins/xui/ja/panel_avatar.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_avatar.xml
@@ -1,13 +1,13 @@
-
+
[ACCTTYPE]
[PAYMENTINFO]
- å±…ä½è€…
+ ä½äºº
トライアル
@@ -16,165 +16,166 @@
特権メンãƒãƒ¼
- Linden Lab 従æ¥å“¡
+ Linden Lab従æ¥å“¡
- 支払ã„æƒ…å ±ãŒä½¿ç”¨ã•ã‚Œã¦ã„ã‚‹
+ 使用ã™ã‚‹æ”¯æ‰•ã„æƒ…å ±
- 支払ã„æƒ…å ±ã®ç™»éŒ²ãŒã‚ã‚‹
+ 支払ã„æƒ…å ±ç™»éŒ²æ¸ˆã¿
- 支払ã„æƒ…å ±ã®ç™»éŒ²ãŒãªã„
+ 支払ã„æƒ…å ±æœªç™»éŒ²
- åå‰:
+ åå‰ï¼š
- オンライン:ã¯ã„
-
-
- オンライン:ã„ã„ãˆ
-
-
- オンライン:ä¸æ˜Ž
+ ç¾åœ¨ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ä¸
- ボーン
+ 生年月日:
- アカウント:
+ アカウント:
- パートナー:
+ tool_tip="Second Lifeパートナーã§ã™ã€‚ è¨å®šæ–¹æ³•ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€www.secondlife.com/partnerã‚’å‚ç…§ã—ã¦ãã ã•ã„。">
+ パートナー:
+
- [FIRST][LAST]
+ tool_tip="Second Lifeパートナーã§ã™ã€‚ è¨å®šæ–¹æ³•ã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€www.secondlife.com/partnerã‚’å‚ç…§ã—ã¦ãã ã•ã„。">
+ [FIRST] [LAST]
- 写真:
+ 写真:
-
+
- 率:
+ 評価:
- グループ:
+ グループ:
- ã¤ã„ã¦:
+ æƒ…å ±ï¼š
- (500 æ–‡å—)
+ (500å—)
- é …ç›®ã‚’ä¸Žãˆã‚‹:
+ å“目を贈る:
- ã“ã“ã«åœ¨åº«ç›®éŒ²ã®é …目をè½ã¨ã—ã¾ã™ã€‚
+ tool_tip="ã“ã®äººã«æŒã¡ç‰©å“目を与ãˆã‚‹ã«ã¯ã€ã“ã“ã«ãƒ‰ãƒãƒƒãƒ—ã—ã¾ã™">
+ æŒã¡ç‰©ã‚¢ã‚¤ãƒ†ãƒ ã‚’ã“ã“ã«ãƒ‰ãƒãƒƒãƒ—ã—ã¾ã™
-
+
-
+
+
-
-
-
+
+
-
+
- 終了
+ 完了
- ç§ã®æœ›ã¿:
+ ã—ãŸã„ã“ã¨ï¼š
-
-
+
+
-
-
-
+
+
+
- 技能:
+ スã‚ル:
-
-
-
-
-
+
+
+
+
+
- Languages:
+ 言語:
-
+
- Second Lifeã®ä¸ã®ã‚ãªãŸã®ãŠæ°—ã«å…¥ã‚Šã®å ´æ‰€ã«ã¤ã„ã¦ã¿ã‚“ãªã«è©±ã—ã¦ãã ã•ã„。
+ Second Lifeã®ãŠæ°—入りã®å ´æ‰€ã‚’皆ã«è©±ã—ã¦ãã ã•ã„
+
+ ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
+
-
+
- Second Lifeã®æ¡ˆå†…広告ã®ãƒªã‚¹ãƒˆã«åºƒå‘Šã‚’載ã›ã¾ã™ã€‚
+ SecondLifeã®ã‚¯ãƒ©ã‚·ãƒ•ã‚¡ã‚¤ãƒ‰ãƒªã‚¹ãƒˆã«åºƒå‘Šã‚’載ã›ã¾ã™ã€‚
+
+ ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
+
-
+
- 写真:
+ 写真:
-
+
- æƒ…å ±:
+ æƒ…å ±ï¼š
- (250 æ–‡å—)
+ (250å—)
-
+
- Use this space to record your notes about this person. Keep track
-of trades in progress, joint projects, etc. Only you can see these
-notes. This person cannot see them, nor can other people.
+ ã“ã®ã‚¹ãƒšãƒ¼ã‚¹ã«ã€ã“ã®äººç‰©ã«é–¢ã™ã‚‹ãƒ¡ãƒ¢ã‚’記録ã—ã¾ã™ã€‚ 進行ä¸ã®å–引ã€
+å…±åŒãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆãªã©ã‚’記録。メモを見るã“ã¨ãŒã§ãã‚‹ã®ã¯
+ã‚ãªãŸã ã‘ã§ã™ã€‚ 本人をå«ã‚ãŸä»–ã®äººã¯ã€ãƒ¡ãƒ¢ã‚’見るã“ã¨ãŒã§ãã¾ã›ã‚“。
-
-
-
-
+
+
+
+
+ tool_tip="ã“ã®ä½äººã®ã‚«ã‚¹ã‚¿ãƒžãƒ¼ãƒ»ã‚µãƒ¼ãƒ“ス・ツールを開ãã¾ã™ã€‚" />
地図上ã§ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’表示ã—ã¾ã™ã€‚
-ã‚ãªãŸãŒç›¸æ‰‹ã¨ãƒ•ãƒ¬ãƒ³ãƒ‰ç™»éŒ²ã‚’è¡Œã£ã¦ãªã„ãŸã‚ã€è¡¨ç¤ºã§ãã¾ã›ã‚“。
+ã‚ãªãŸãŒç›¸æ‰‹ã¨ãƒ•ãƒ¬ãƒ³ãƒ‰ã‚·ãƒƒãƒ—を交ã‚ã—ã¦ã„ãªã„ãŸã‚ã€
+表示ã§ãã¾ã›ã‚“。
地図上ã§ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’表示ã—ã¾ã™ã€‚
@@ -187,9 +188,10 @@ notes. This person cannot see them, nor can other people.
ã‚ãªãŸã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã«å¼·åˆ¶ãƒ†ãƒ¬ãƒãƒ¼ãƒˆ
- ã‚ãªãŸã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã«ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’申ã—出ã¾ã™ã€‚オリエンテーション・アイランドを去るã¾ã§ã¯ç„¡åŠ¹ã§ã™ã€‚
+ ã‚ãªãŸã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¸ã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’贈りã¾ã™ã€‚
+ã‚ãªãŸãŒã‚ªãƒªã‚¨ãƒ³ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ãƒ»ã‚¢ã‚¤ãƒ©ãƒ³ãƒ‰ã‚’去るã¾ã§ç„¡åŠ¹ã§ã™ã€‚
- ã‚ãªãŸã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¸ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’申ã—出ã¾ã™ã€‚
+ ã‚ãªãŸã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã¸ã®ãƒ†ãƒ¬ãƒãƒ¼ãƒˆã‚’贈りã¾ã™ã€‚
diff --git a/linden/indra/newview/skins/xui/ja/panel_avatar_classified.xml b/linden/indra/newview/skins/xui/ja/panel_avatar_classified.xml
index 7ac999a..5c2aad8 100644
--- a/linden/indra/newview/skins/xui/ja/panel_avatar_classified.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_avatar_classified.xml
@@ -1,25 +1,25 @@
-
+
+ tool_tip="クラシファイド広告用ã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ã‚ãªãŸã®ç¾åœ¨ä½ç½®ã«è¨å®šã—ã¦ãã ã•ã„。" />
- 広告掲載済ã¿ï¼šç™ºè¡Œã¯ã•ã‚Œã¦ã„ãªã„
+ tool_tip="広告料を多ã払ã†ã»ã©ã€åºƒå‘Šã®æŽ²è¼‰é †ã¯ä¸ŠãŒã‚Šã¾ã™ã€‚">
+ 広告掲載:未発行
- クリック:
+ tool_tip="ã“ã®ã‚¯ãƒ©ã‚·ãƒ•ã‚¡ã‚¤ãƒ‰åºƒå‘ŠæŽ²è¼‰ä»¥é™ã®ã€å„ボタンã®ç·ã‚¯ãƒªãƒƒã‚¯æ•°">
+ クリック:
-
-
+
+
- Ad placed: [DATE], Paid L$[AMT] for listing.
+ 広告掲載:[DATE]ã€L$[AMT] 支払ã„済ã¿
diff --git a/linden/indra/newview/skins/xui/ja/panel_avatar_pick.xml b/linden/indra/newview/skins/xui/ja/panel_avatar_pick.xml
index 791786f..a897e61 100644
--- a/linden/indra/newview/skins/xui/ja/panel_avatar_pick.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_avatar_pick.xml
@@ -1,10 +1,10 @@
-
-
+
+
- 仕分ã‘:
+ 振り分ã‘:
-
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_chat_bar.xml b/linden/indra/newview/skins/xui/ja/panel_chat_bar.xml
index fd669ea..6e1af21 100644
--- a/linden/indra/newview/skins/xui/ja/panel_chat_bar.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_chat_bar.xml
@@ -1,10 +1,12 @@
-
-
-
-
+
+
+
+
ジェスãƒãƒ£ãƒ¼
diff --git a/linden/indra/newview/skins/xui/ja/panel_classified.xml b/linden/indra/newview/skins/xui/ja/panel_classified.xml
index 8638d25..f7d04de 100644
--- a/linden/indra/newview/skins/xui/ja/panel_classified.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_classified.xml
@@ -1,14 +1,14 @@
-
+
+ tool_tip="クラシファイド広告用ã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’ã‚ãªãŸã®ç¾åœ¨ä½ç½®ã«è¨å®šã—ã¦ãã ã•ã„。" />
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_event.xml b/linden/indra/newview/skins/xui/ja/panel_event.xml
index d883387..f654c14 100644
--- a/linden/indra/newview/skins/xui/ja/panel_event.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_event.xml
@@ -1,58 +1,58 @@
- åå‰:
+ åå‰ï¼š
- (ãªã—)
+ (ãªã—)
- タイプ:
+ 入力ã™ã‚‹:
- (ãªã—)
+ (ãªã—)
- æˆäººå‘ã‘コンテンツ:
+ æˆäººå‘ã‘コンテンツ:
- (未知)
+ (ä¸æ˜Žï¼‰
- 日付:
+ 日付:
- (ãªã—)
+ (ãªã—)
- イベントæŒç¶šæ™‚é–“:
+ イベント期間:
- (ãªã—)
+ (ãªã—)
- よã¦å‹•ã:
+ 実行者/物:
- (ãªã—)
+ (ãªã—)
- ä½ç½®:
+ ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ï¼š
- (ãªã—)
+ (ãªã—)
- ã‚«ãƒãƒ¼ãƒãƒ£ãƒ¼ã‚¸:
+ ã‚«ãƒãƒ¼ãƒ»ãƒãƒ£ãƒ¼ã‚¸ï¼š
- (ãªã—)
+ (ãªã—)
- 説明:
+ 説明:
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_group.xml b/linden/indra/newview/skins/xui/ja/panel_group.xml
index a784d5f..ae1aa3a 100644
--- a/linden/indra/newview/skins/xui/ja/panel_group.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_group.xml
@@ -1,14 +1,13 @@
- ç¾åœ¨ã®ã‚¿ãƒ–ã«ãŠã‘る未é©ç”¨ã®å¤‰æ›´ãŒã‚ã‚Šã¾ã™ã€‚
+ ç¾åœ¨ã®ã‚¿ãƒ–ã«ã€æœªé©ç”¨ã®å¤‰æ›´ãŒã‚ã‚Šã¾ã™ã€‚
ã“れらã®å¤‰æ›´ã‚’é©ç”¨ã—ã¾ã™ã‹ï¼Ÿ
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_group_finder.xml b/linden/indra/newview/skins/xui/ja/panel_group_finder.xml
index f3b4f39..e4c51c7 100644
--- a/linden/indra/newview/skins/xui/ja/panel_group_finder.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_group_finder.xml
@@ -1,7 +1,7 @@
-
+
- ç¾åœ¨ã®ã‚¿ãƒ–ã«ãŠã‘る未é©ç”¨ã®å¤‰æ›´ãŒã‚ã‚Šã¾ã™ã€‚
+ ç¾åœ¨ã®ã‚¿ãƒ–ã«ã€æœªé©ç”¨ã®å¤‰æ›´ãŒã‚ã‚Šã¾ã™ã€‚
ã“れらã®å¤‰æ›´ã‚’é©ç”¨ã—ã¾ã™ã‹ï¼Ÿ
diff --git a/linden/indra/newview/skins/xui/ja/panel_group_general.xml b/linden/indra/newview/skins/xui/ja/panel_group_general.xml
index 329b421..4f896a9 100644
--- a/linden/indra/newview/skins/xui/ja/panel_group_general.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_group_general.xml
@@ -1,15 +1,18 @@
- 『一般タブã€ã«ã¯ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«é–¢ã™ã‚‹ä¸€èˆ¬æƒ…å ±ã€ã‚ªãƒ¼ãƒŠãƒ¼ã‚„å¯è¦–メンãƒãƒ¼ã®ãƒªã‚¹ãƒˆã€ä¸€èˆ¬çš„ãªã‚°ãƒ«ãƒ¼ãƒ—嗜好ã€ãŠã‚ˆã³ãƒ¡ãƒ³ãƒãƒ¼ã®ã‚ªãƒ—ションãŒå«ã¾ã‚Œã¾ã™ã€‚
-オプション上ã§ãƒžã‚¦ã‚¹ã‚’å‹•ã‹ã™ã¨ã€ã•ã‚‰ã«ãƒ˜ãƒ«ãƒ—ãŒå¾—られã¾ã™ã€‚
+ [一般]タブã«ã¯ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«é–¢ã™ã‚‹
+ä¸€èˆ¬æƒ…å ±ã€ã‚ªãƒ¼ãƒŠãƒ¼ã¨è¡¨ç¤ºå¯èƒ½ãªãƒ¡ãƒ³ãƒãƒ¼ã®ãƒªã‚¹ãƒˆ
+一般的ãª[グループ環境è¨å®š]ã€ãƒ¡ãƒ³ãƒãƒ¼ã®ã‚ªãƒ—ションãŒå«ã¾ã‚Œã¾ã™ã€‚
+
+オプションã®ä¸Šã§ãƒžã‚¦ã‚¹ã‚«ãƒ¼ã‚½ãƒ«ã‚’å‹•ã‹ã™ã¨ã€ãƒ˜ãƒ«ãƒ—æƒ…å ±ã‚’å¾—ã‚‰ã‚Œã¾ã™ã€‚
- ã‚ãªãŸã®æ–°ã—ã„グループåを記入ã—ã¦ãã ã•ã„
+ æ–°ã—ã„グループåã‚’ã“ã“ã«å…¥åŠ›ã—ã¦ãã ã•ã„。
- ã‚ãªãŸã®æ–°ã—ã„グループåを記入ã—ã¦ãã ã•ã„
+ æ–°ã—ã„グループåã‚’ã“ã“ã«å…¥åŠ›ã—ã¦ãã ã•ã„。
創è¨è€…
@@ -21,18 +24,18 @@
グループ特権
+ tool_tip="写真をクリックã—ã¦é¸æŠž" />
グループ特権
-
オーナーã¨å¯è¦–メンãƒãƒ¼
- (オーナーã¯å¤ªå—ã§è¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ï¼‰
+ (オーナーã¯å¤ªå—)
@@ -40,35 +43,36 @@
- メンãƒãƒ¼ãƒ‡ãƒ¼ã‚¿ã‚’検索
+ メンãƒãƒ¼ãƒ»ãƒ‡ãƒ¼ã‚¿ã‚’検索
- ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å½¢æˆã™ã‚‹ã«ã¯L$100ã‹ã‹ã‚Šã¾ã™ã€‚本当ã«ã€æœ¬å½“ã«ã€æœ¬å½“ã«L$100を費やã—ã¦ã€ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を作りã¾ã™ã‹ï¼Ÿ
+ ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä½œæˆã«ã¯L$100ã‹ã‹ã‚Šã¾ã™ã€‚
+ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä½œæˆã«L$100ã‚‚ã®ãŠé‡‘ã‚’ã‹ã‘ã¦ã‚‚ã‹ã¾ã„ã¾ã›ã‚“ã‹ï¼Ÿ æ…Žé‡ã«åˆ¤æ–ã—ã¦ãã ã•ã„。
- グループ嗜好
+ グループã®ç’°å¢ƒè¨å®š
-
-
-
+
+
+
+ tool_tip="ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¸ã®å‚åŠ ã«å…¥ä¼šè²»ã‚’å¿…é ˆã¨ã™ã‚‹ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚" />
-
+ tool_tip="「入会費ã€ãŒãƒã‚§ãƒƒã‚¯ã•ã‚Œã¦ã„ã‚‹å ´åˆã€æ–°è¦ä¼šå“¡ã¯å…¥ä¼šæ™‚ã«ã“ã®è²»ç”¨ã‚’支払ã†å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" />
+
- 自分ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–・タイトル
+ ç§ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–・タイトル
+ tool_tip="グループã‹ã‚‰ã®é€šçŸ¥ã‚’ã‚ãªãŸãŒå—ä¿¡ã™ã‚‹ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚ ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒã‚¹ãƒ‘ム行為をã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã®ãƒœãƒƒã‚¯ã‚¹ã®ãƒã‚§ãƒƒã‚¯ã‚’外ã—ã¦ãã ã•ã„。" />
diff --git a/linden/indra/newview/skins/xui/ja/panel_group_invite.xml b/linden/indra/newview/skins/xui/ja/panel_group_invite.xml
index 948166f..cd6b780 100644
--- a/linden/indra/newview/skins/xui/ja/panel_group_invite.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_group_invite.xml
@@ -1,18 +1,20 @@
-
+
- ã‚ãªãŸã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã€ä¸€åº¦ã«è¤‡æ•°ã®äººã‚’招待ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚『リストã‹ã‚‰äººã‚’é¸ã¶ã€ã‚’クリックã—ã¦ã€ä½œæ¥ã‚’始ã‚ã¾ã™ã€‚
+ 複数ã®ä½äººã‚’é¸æŠžã—ã¦ã€ã‚°ãƒ«ãƒ¼ãƒ—ã«
+招待ã§ãã¾ã™ã€‚ [リストã‹ã‚‰
+人をé¸ã¶]をクリックã—ã¦ãã ã•ã„。
-
+
-
+ tool_tip="複数ã®ä½äººã‚’é¸æŠžã™ã‚‹ã«ã¯ã€Ctrlã‚ーを押ã—ãªãŒã‚‰ä½äººåをクリックã—ã¾ã™ã€‚" />
+
- 割り当ã¦ã‚‹å½¹å‰²ã‚’é¸æŠžã—ã¦ãã ã•ã„:
+ 割り当ã¦å…ˆã®å½¹å‰²ã‚’é¸æŠžï¼š
-
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_group_land_money.xml b/linden/indra/newview/skins/xui/ja/panel_group_land_money.xml
index 9cdd86e..362d810 100644
--- a/linden/indra/newview/skins/xui/ja/panel_group_land_money.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_group_land_money.xml
@@ -1,17 +1,21 @@
-
+
- グループãŒæ‰€æœ‰ã—ã¦ã„る土地ã¯ã€è³‡é‡‘æ´åŠ©è©³ç´°ã¨ã¨ã‚‚ã«ä¸€è¦§åŒ–ã•ã‚Œã¾ã™ã€‚土地利用ã®åˆè¨ˆãŒã€å…¨ä½“ã®è³‡é‡‘æ´åŠ©ã¨åŒç‰ã¾ãŸã¯ä»¥ä¸‹ã«ãªã‚‹ã¨è¦å‘ŠãŒç¾ã‚Œã¾ã™ã€‚プランニングã€è©³ç´°ã€è²©å£²ã‚¿ãƒ–ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—財政ã«é–¢ã™ã‚‹æƒ…å ±ã‚’æä¾›ã—ã¾ã™ã€‚
+ グループ所有ã®åŒºç”»ãŒè³‡é‡‘æä¾›ã®è©³ç´°ã¨å…±ã«ãƒªã‚¹ãƒˆã«ç¤ºã•ã‚Œã¾ã™ã€‚
+ 土地利用ã®åˆè¨ˆãŒã€
+資金æä¾›ã®åˆè¨ˆä»¥ä¸‹ã«ãªã‚‹ã¾ã§è¦å‘ŠãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+ プランニングã€è©³ç´°ã€è²©å£²ã®å„タブã«ã¯ã€
+グループ財政ã«é–¢ã™ã‚‹æƒ…å ±ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
- ã‚ãªãŸã«ã¯ã‚°ãƒ«ãƒ¼ãƒ—所有ã®åœŸåœ°ã‚’閲覧ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—所有ã®åœŸåœ°è¡¨ç¤ºã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
- ã‚ãªãŸã«ã¯ã‚°ãƒ«ãƒ¼ãƒ—ä¼šè¨ˆæƒ…å ±ã‚’é–²è¦§ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。
+ ã‚ãªãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¼šè¨ˆæƒ…å ±ã®è¡¨ç¤ºã‚’許ã•ã‚Œã¦ã„ã¾ã›ã‚“。
- グループãŒæ‰€æœ‰ã™ã‚‹åœŸåœ°
+ グループã®ä¿æœ‰åœ°
@@ -22,40 +26,40 @@
- 資金æä¾›åˆè¨ˆï¼š
+ 寄付ç·é¡ï¼š
- 0 平方メーター
+ 0平方メートル
- Total Land In Use:
+ 土地利用ã®åˆè¨ˆï¼š
- 0 平方メーター
+ 0平方メートル
- 土地ã®ä½¿ç”¨å¯èƒ½æ€§:
+ 利用å¯ã®åœŸåœ°ï¼š
- 0 平方メーター
+ 0平方メートル
ã‚ãªãŸã®è²¢çŒ®ï¼š
- 平方メートル
+ 平方メートル
(待機ä¸ï¼‰
- 使用ã•ã‚Œã¦ã„る土地をサãƒãƒ¼ãƒˆã™ã‚‹ãŸã‚ã«ã€ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€ã•ã‚‰ãªã‚‹åœŸåœ°ã®ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’貢献ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
+ 使用ä¸ã®åœŸåœ°ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã«ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ãŒã•ã‚‰ã«å¤šãã®åœŸåœ°ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’æä¾›ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
- グループL$
+ グループL$
-
+
計算ä¸â€¦
@@ -64,18 +68,18 @@
計算ä¸â€¦
-
-
+
-
+
計算ä¸â€¦
-
-
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_group_notices.xml b/linden/indra/newview/skins/xui/ja/panel_group_notices.xml
index a15ca14..b5fe45c 100644
--- a/linden/indra/newview/skins/xui/ja/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_group_notices.xml
@@ -1,18 +1,22 @@
-
+
- 通知ã¯ã€ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚„添付アイテムをé€ä¿¡ã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—内ã®æ„æ€ä¼é”ã‚’æ—©ãè¡Œãˆã‚‹æ‰‹æ®µã§ã™ã€‚通知ã¯å—信アビリティãŒã‚る役割ã®ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã«ã®ã¿ç™ºä¿¡ã•ã‚Œã¾ã™ã€‚一般タブã§é€šçŸ¥ã‚’オフã«è¨å®šã§ãã¾ã™ã€‚
+ 通知機能を使ã†ã¨ã€ã‚°ãƒ«ãƒ¼ãƒ—内ã§ã™ã°ã‚„ãæƒ…å ±ã‚’ä¼é”ã§ãã¾ã™ã€‚
+複数ã®ã‚ã¦å…ˆã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ã§ãã‚‹ã»ã‹ã€
+å¿…è¦ã«å¿œã˜ã¦ã‚¢ã‚¤ãƒ†ãƒ をメッセージã«æ·»ä»˜ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ 通知ã¯ã€
+å—信アビリティãŒã‚る役割ã®ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ã«ã®ã¿é…ä¿¡ã•ã‚Œã¾ã™ã€‚
+ 通知をオフã«ã™ã‚‹ã«ã¯ã€ä¸€èˆ¬ã‚¿ãƒ–を使ã„ã¾ã™ã€‚
- éŽåŽ»ã®é€šçŸ¥ãŒã‚ã‚Šã¾ã›ã‚“。
+ éŽåŽ»ã®é€šçŸ¥ã¯ã‚ã‚Šã¾ã›ã‚“。
グループ通知アーカイブ
- 通知ã¯30日間ä¿å˜ã•ã‚Œã¾ã™ã€‚閲覧ã—ãŸã„通知をクリックã—ã¦ãã ã•ã„。
-『リストをリフレッシュã€ã®ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ã€æ–°ã—ã„通知をå—ä¿¡ã—ã¦ãã ã•ã„。
+ 通知ã¯ã€30日間ä¿å˜ã•ã‚Œã¾ã™ã€‚ 閲覧ã—ãŸã„通知をクリックã—ã¦ãã ã•ã„。
+æ–°ç€ã®é€šçŸ¥ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã«ã¯ã€[æ›´æ–°]ボタンをクリックã—ã¾ã™ã€‚
@@ -21,47 +25,48 @@
- 何も見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+ 何も見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚
-
+
通知を作æˆ
- 通知をé€ä¿¡ã™ã‚‹ã«ã¯ã€é¡Œåを入力ã—ã¦ãã ã•ã„。
-ã‚ãªãŸã®æŒã¡ç‰©ã‹ã‚‰ãƒ‘ãƒãƒ«ã«ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã“ã®é€šçŸ¥ã«ã‚¢ã‚¤ãƒ†ãƒ を一ã¤ä»˜åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚添付ã•ã‚ŒãŸã‚¢ã‚¤ãƒ†ãƒ ã¯ã€ã‚³ãƒ”ーãŠã‚ˆã³è²æ¸¡å¯èƒ½ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。ã¾ãŸã€ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é€ä¿¡ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ 通知をé€ã‚‹ã«ã¯ã€ä»¶åを入力ã—ã¾ã™ã€‚ æŒã¡ç‰©ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’
+1ã¤ã€ã“ã®ãƒ‘ãƒãƒ«ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã€é€šçŸ¥ã«æ·»ä»˜
+ã§ãã¾ã™ã€‚ 添付ã§ãã‚‹ã®ã¯ã€ã‚³ãƒ”ーã€è²æ¸¡å¯èƒ½ãªã‚¢ã‚¤ãƒ†ãƒ ã§ã€
+フォルダーã«é€ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
- 主体:
+ 件å:
- Mメッセージ:
+ メッセージ:
添付:
-
-
-
+
アーカイブ通知
- æ–°ã—ã„通知をé€ä¿¡ã™ã‚‹ã«ã¯ã€ä¸Šã®ã€Žæ–°ã—ã„通知を作æˆã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¾ã™ã€‚
+ æ–°ã—ã„通知ã®é€ä¿¡ã¯ã€ä¸Šã®[æ–°ã—ã„通知を作æˆã™ã‚‹]をクリックã—ã¦ãã ã•ã„。
- 主体:
+ 件å:
- Mメッセージ:
+ メッセージ:
diff --git a/linden/indra/newview/skins/xui/ja/panel_group_roles.xml b/linden/indra/newview/skins/xui/ja/panel_group_roles.xml
index 3a266b4..b86928f 100644
--- a/linden/indra/newview/skins/xui/ja/panel_group_roles.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_group_roles.xml
@@ -1,13 +1,13 @@
- ç¾åœ¨ã®ã‚µãƒ–・タブã«ãŠã‘る未é©ç”¨ã®å¤‰æ›´ãŒã‚ã‚Šã¾ã™ã€‚
+ ç¾åœ¨ã®ã‚µãƒ–タブã«ã€æœªé©ç”¨ã®å¤‰æ›´ãŒã‚ã‚Šã¾ã™ã€‚
ã“れらã®å¤‰æ›´ã‚’é©ç”¨ã—ã¾ã™ã‹ï¼Ÿ
- 『全員ã€ã¨ã€Žã‚ªãƒ¼ãƒŠãƒ¼ã€ã®å½¹å‰²ã¯ã€ç‰¹åˆ¥ãªãŸã‚削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ 「全員ã€ã¨ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã¯ç‰¹åˆ¥ãªå½¹å‰²ãªã®ã§ã€å‰Šé™¤ã§ãã¾ã›ã‚“。
@@ -15,7 +15,8 @@
メンãƒãƒ¼ã¨å½¹å‰²
- グループメンãƒãƒ¼ã¯ã€ã‚¢ãƒ“リティã¨ã¨ã‚‚ã«å½¹å‰²ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚ã“れらã®è¨å®šã¯ã€ã•ã‚‰ã«å¤§ããªçµ„ç¹”ã®ãŸã‚ã«æŸ”軟性をもãŸã›ã€ç°¡å˜ã«ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+ グループ・メンãƒãƒ¼ã«ã¯ã€å½¹å‰²ã¨èƒ½åŠ›ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ã€‚ ã“ã®è¨å®šã¯ã€
+組織ã®è¦æ¨¡ã«å¿œã˜ã¦æŸ”軟ã‹ã¤å®¹æ˜“ã«ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã§ãã¾ã™ã€‚
@@ -23,80 +24,87 @@
役割
- 下記ã®å½¹å‰²ã‚’é¸æŠžã—ã¦ãã ã•ã„。åå‰ã€èª¬æ˜Žã€ãƒ¡ãƒ³ãƒãƒ¼ã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’ä¿®æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ 下ã«ã‚る役割をé¸æŠžã—ã¦ãã ã•ã„。 役割ã®åå‰ã€èª¬æ˜Žã€ãƒ¡ãƒ³ãƒãƒ¼ãƒ»ã‚¿ã‚¤ãƒˆãƒ«ã‚’ä¿®æ£ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
- ä¸å‹•ç”£ã€ãƒ¡ãƒ³ãƒãƒ¼ã€ãŠã‚ˆã³è¨±å¯ã•ã‚ŒãŸã‚¢ãƒ“リティを見るã«ã¯ã€ä¸‹è¨˜ã®å½¹å‰²ã‚’é¸æŠžã—ã¦ãã ã•ã„
+ 下ã«ã‚る役割をé¸æŠžã™ã‚‹ã¨ã€å½¹å‰²ã®ãƒ—ãƒãƒ‘ティã€ãƒ¡ãƒ³ãƒãƒ¼ã€ãŠã‚ˆã³è¨±å¯ã•ã‚ŒãŸèƒ½åŠ›ã‚’確èªã§ãã¾ã™ã€‚
- 役割ã«ã‚¢ãƒ“リティを割り当ã¦ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
+ ã‚ãªãŸã¯å½¹å‰²ã«èƒ½åŠ›ã‚’割り当ã¦ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚
- 割り当ã¦ã‚‰ã‚ŒãŸã‚¢ãƒ“リティã®é–²è¦§ã¯å¯èƒ½ã§ã™ãŒã€ä¿®æ£ã¯ã§ãã¾ã›ã‚“。
+ ã‚ãªãŸã¯èƒ½åŠ›ã‚’表示ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ãŒã€ä¿®æ£ã—ãŸã‚Šå‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
- アビリティ
+ 能力
- アビリティã®èª¬æ˜Žã€ã¾ãŸã€ã©ã®å½¹å‰²ãŠã‚ˆã³ãƒ¡ãƒ³ãƒãƒ¼ãŒãã®ã‚¢ãƒ“リティを実行ã§ãã‚‹ã‹ã‚’閲覧ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ 能力ã®èª¬æ˜Žã€ã©ã®å½¹å‰²ã¨ãƒ¡ãƒ³ãƒãƒ¼ãŒãã®èƒ½åŠ›ã‚’実行ã§ãã‚‹ã‹ã‚’
+表示ã§ãã¾ã™ã€‚
-
+
-
+
-
+
-
+
- コントãƒãƒ¼ãƒ«ã‚ーを押ã—ãŸã¾ã¾åå‰ã‚’クリックã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ãƒ¡ãƒ³ãƒãƒ¼ã«å‰²ã‚Šå½“ã¦ãŸå½¹å‰²ã‚’è¿½åŠ ã—ãŸã‚Šã€å¤–ã—ãŸã‚Šã€ã¾ãŸã¯ã€è¤‡æ•°ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ ã‚ãªãŸã¯ãƒ¡ãƒ³ãƒãƒ¼ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸå½¹å‰²ã‚’ä»˜åŠ ã€å‰Šé™¤ã§ãã¾ã™ã€‚
+ Ctrlã‚ーを押ã—ãªãŒã‚‰ãƒ¡ãƒ³ãƒãƒ¼åをクリックã™ã‚‹ã¨
+ 複数ã®äººã‚’é¸æŠžã§ãã¾ã™ã€‚
-
+
-
+
-
+
-
+
- 役割ã«ã¯ã€ã‚¿ã‚¤ãƒˆãƒ«ã¨è¡Œä½¿ã§ãるアビリティã®ãƒªã‚¹ãƒˆãŒã‚ã‚Šã¾ã™ã€‚メンãƒãƒ¼ã¯ã€ä¸€ã¤ä»¥ä¸Šã®å½¹å‰²ã«å±žã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚一ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã€ã€Žå…¨å“¡ã€ã¨ã€Žã‚ªãƒ¼ãƒŠãƒ¼ã€ã®å½¹å‰²ã‚’å«ã‚“ã 10ã®å½¹å‰²ã‚’æŒã¤ã“ã¨ãŒã§ãã¾ã™ã€‚
+ 役割ã«ã¯ã‚¿ã‚¤ãƒˆãƒ«ãŒã‚ã‚Šã€ãƒ¡ãƒ³ãƒãƒ¼ãŒè¡Œä½¿å¯èƒ½ãª
+能力ã®ãƒªã‚¹ãƒˆãŒå®šç¾©ã•ã‚Œã¾ã™ã€‚ メンãƒãƒ¼ã¯ã€
+1ã¤ã¾ãŸã¯è¤‡æ•°ã®å½¹å‰²ã«å±žã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 1ã¤ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å¯¾ã—ã€
+「全員ã€ã¨ã€Œã‚ªãƒ¼ãƒŠãƒ¼ã€ã®å½¹å‰²ã‚’å«ã‚ã¦æœ€é«˜ã§10ã®å½¹å‰²ã‚’æŒãŸã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
-
+
-
-
+
+
- アビリティã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—内ã§å½¹å‰²ã®ã‚るメンãƒãƒ¼ã®ã€ç‰¹å®šã®æ“作をå¯èƒ½ã«ã—ã¾ã™ã€‚幅広ã„ãƒãƒ©ã‚¨ãƒ†ã‚£ã®ã‚¢ãƒ“リティãŒç”¨æ„ã•ã‚Œã¦ã„ã¾ã™ã€‚
+ ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—内ã§å½¹å‰²ã‚’与ãˆã‚‰ã‚Œã¦ã„るメンãƒãƒ¼ãŒå®Ÿè¡Œã§ãã‚‹æ“作ã¯ã€
+能力ã«ã‚ˆã£ã¦æ±ºã¾ã‚Šã¾ã™ã€‚ ã•ã¾ã–ã¾ãªèƒ½åŠ›ãŒç”¨æ„ã•ã‚Œã¦ã„ã¾ã™ã€‚
- 割り当ã¦ã‚‰ã‚ŒãŸå½¹å‰²
+ 割当られãŸå½¹å‰²
- 許å¯ã•ã‚ŒãŸã‚¢ãƒ“リティ
+ 許å¯ã•ã‚ŒãŸèƒ½åŠ›
+ tool_tip="許å¯ã•ã‚ŒãŸèƒ½åŠ›ã®è©³ç´°ã¯ã€Œèƒ½åŠ›ã€ã‚¿ãƒ–ã‚’ã”覧ãã ã•ã„。">
@@ -106,13 +114,13 @@
åå‰
- 説明:
+ 説明
従æ¥å“¡
- タイトル
+ 肩書ã
(待機ä¸ï¼‰
@@ -121,16 +129,16 @@
(待機ä¸ï¼‰
- 任命ã•ã‚ŒãŸãƒ¡ãƒ³ãƒãƒ¼
+ 割当られãŸãƒ¡ãƒ³ãƒãƒ¼
- 許å¯ã•ã‚ŒãŸã‚¢ãƒ“リティ
+ tool_tip="ç¾åœ¨é¸æŠžã•ã‚Œã¦ã„る役割ã§å®Ÿè¡Œã§ãる能力ã®ãƒªã‚¹ãƒˆ">
+ 許å¯ã•ã‚ŒãŸèƒ½åŠ›
+ tool_tip="ã“ã®å½¹å‰²ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’グループ外ã®äººã®ä¸€èˆ¬ã‚¿ãƒ–ã«è¡¨ç¤ºã™ã‚‹ã‹ã©ã†ã‹ã‚’è¨å®šã—ã¾ã™ã€‚" />
+ tool_tip="許å¯ã•ã‚ŒãŸèƒ½åŠ›ã®è©³ç´°ã¯ã€Œèƒ½åŠ›ã€ã‚¿ãƒ–ã‚’ã”覧ãã ã•ã„。">
@@ -138,16 +146,16 @@
- 説明:
+ 説明
- ã“ã‚Œã¯ã€Žã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’追放ã€ã®ã‚¢ãƒ“リティã§ã™ã€‚オーナーã®ã¿ã€ä»–ã®ã‚ªãƒ¼ãƒŠãƒ¼ã‚’追放ã§ãã¾ã™ã€‚
+ ã“ã‚Œã¯ã€Œã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ¡ãƒ³ãƒãƒ¼ã‚’追放ã™ã‚‹ã€èƒ½åŠ›ã§ã™ã€‚ オーナーを追放ã§ãã‚‹ã®ã¯ã€åˆ¥ã®ã‚ªãƒ¼ãƒŠãƒ¼ã ã‘ã§ã™ã€‚
- アビリティを伴ã†å½¹å‰²
+ 役割ã¨èƒ½åŠ›
- アビリティã®ã‚るメンãƒãƒ¼
+ 能力ã®ã‚るメンãƒãƒ¼
diff --git a/linden/indra/newview/skins/xui/ja/panel_group_voting.xml b/linden/indra/newview/skins/xui/ja/panel_group_voting.xml
index c0ca9a0..7b9beac 100644
--- a/linden/indra/newview/skins/xui/ja/panel_group_voting.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_group_voting.xml
@@ -1,14 +1,18 @@
-
+
- グループæ案ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—ãŒä½•ã‚’ã—ãŸã„ã®ã‹ã€ã©ã†æ€ã†ã‹ãªã©ã®æ„è˜èª¿æŸ»ã®ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã‚ãªãŸã«é©åˆ‡ãªæ¨©é™ãŒã‚ã‚Œã°ã€æ案を作æˆã—ãŸã‚Šã€æœ‰åŠ¹ãªæ案ã«å¯¾ã—投票ã—ãŸã‚Šã€å¤ã„æ案を閲覧ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ グループã®å•é¡Œæèµ·ã¯ã€
+グループãŒä½•ã‚’ã—ãŸã„ã®ã‹ã€
+特定ã®ã“ã¨ãŒã‚‰ã«é–¢ã—ã¦ã©ã†æ€ã†ã‹ãªã©ã®æ„è˜èª¿æŸ»ã®ãŸã‚ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã‚ãªãŸã«é©åˆ‡ãªæ¨©é™ãŒã‚ã‚Œã°ã€
+å•é¡Œæ起を作æˆã—ãŸã‚Šã€
+公開ä¸ã®å•é¡Œæèµ·ã«å¯¾ã—投票ã—ãŸã‚Šã€å¤ã„å•é¡Œæ起を閲覧ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
- グループæ案を開ã
+ 公開ä¸ã®ã‚°ãƒ«ãƒ¼ãƒ—å•é¡Œæèµ·
- グループæ案を開ã
+ 公開ä¸ã®ã‚°ãƒ«ãƒ¼ãƒ—å•é¡Œæèµ·
æ案を作æˆ
@@ -17,64 +21,64 @@
æ案投票
- ã‚ãªãŸãŒä½œæˆã—よã†ã¨ã—ã¦ã„ã‚‹æ案ã¯ç©ºç™½ã§ã™ã€‚作æˆå‰ã«æ案を記入ã—ã¦ãã ã•ã„。
+ ã‚ãªãŸãŒä½œæˆã—よã†ã¨ã—ã¦ã„ã‚‹å•é¡Œæèµ·ã¯ç™½ç´™ã§ã™ã€‚ 作æˆã™ã‚‹å‰ã«ã€æèµ·ã™ã‚‹å•é¡Œã‚’記入ã—ã¦ãã ã•ã„。
- 投票ã—ãŸã„æ案をダブルクリックã—ã¾ã™ã€‚æ–°ã—ã„æ案を作æˆã™ã‚‹ã«ã¯ä½œæˆãƒœã‚¿ãƒ³ã‚’押ã—ã¾ã™ã€‚
+ 投票ã—ãŸã„æ案をダブルクリックã—ã¾ã™ã€‚æ–°ã—ã„æ案を作æˆã™ã‚‹å ´åˆã¯ã€[æ案を作æˆ]をクリックã—ã¾ã™ã€‚
- æ案:
+ æ案:
-
-
- 定数:
+ 定足数:
- Xã®ç·ã‚°ãƒ«ãƒ¼ãƒ—メンãƒãƒ¼ã®å†…
+ ç·ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ç·æ•°xã®ã†ã¡ã€‚
- æŒç¶šæ™‚é–“:
+ 継続期間:
- æ—¥
+ 日数
- å˜ã«å¤§å¤šæ•°
- 大多数ã®2/3
+ å˜ç´”éŽåŠæ•°
+ 2/3以上ã®å¤šæ•°
æº€å ´ä¸€è‡´
- 投票開始:
+ 投票開始:
- 投票終了:
+ 投票終了:
-
+
-
+
- グループã®æŠ•ç¥¨å±¥æ´
+ グループ投票履æ´
- çµæžœã‚’閲覧ã™ã‚‹ã«ã¯ã€éŽåŽ»ã®æŠ•ç¥¨ã‚„ç¾åœ¨ã®ä¸€ã¤ã‚’é¸æŠžã—ã€ãƒ€ãƒ–ルクリックã—ã¦ã‚¢ã‚¤ãƒ†ãƒ を閲覧を開ãã¾ã™ã€‚
+ çµæžœã‚’確èªã™ã‚‹ã«ã¯ã€[éŽåŽ»ã®æŠ•ç¥¨]をダブルクリックã™ã‚‹ã‹ã€ã„ãšã‚Œã‹ã®æŠ•ç¥¨ã‚’é¸æŠžã—ãŸå¾Œã€[アイテムを表示]をクリックã—ã¾ã™ã€‚
éŽåŽ»ã®æŠ•ç¥¨ 投票終了
-
- 投票ã®çµæžœ:
+ 投票çµæžœï¼š
-
diff --git a/linden/indra/newview/skins/xui/ja/panel_land_covenant.xml b/linden/indra/newview/skins/xui/ja/panel_land_covenant.xml
index c11ffc2..dc8d01d 100644
--- a/linden/indra/newview/skins/xui/ja/panel_land_covenant.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_land_covenant.xml
@@ -1,39 +1,39 @@
-
+
- 地域:
+ 地域:
- (未知)
+ (ä¸æ˜Žï¼‰
- 所有地:
+ ä¸å‹•ç”£ï¼š
- (未知)
+ (ä¸æ˜Žï¼‰
ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ï¼š
- (未知)
+ (ä¸æ˜Žï¼‰
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ãã‚‹ã‹ã©ã†ã‹ã‚ã‹ã‚Šã¾ã›ã‚“。
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒå¯èƒ½ãªå ´åˆã¨ãã†ã§ãªã„å ´åˆãŒã‚ã‚Šã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆï¼å†åˆ†å‰²ãŒã§ãã‚‹ã‹ã©ã†ã‹ã‚ã‹ã‚Šã¾ã›ã‚“。
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆï¼å†åˆ†å‰²ãŒå¯èƒ½ãªå ´åˆã¨ãã†ã§ãªã„å ´åˆãŒã‚ã‚Šã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒã§ãã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ãã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ããªã„ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã€ã¾ãŸã¯å†åˆ†å‰²ãŒã§ãã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã¾ãŸã¯å†åˆ†å‰²ã§ãã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã€ã¾ãŸã¯å†åˆ†å‰²ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆï¼å†åˆ†å‰²ã§ããªã„ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
diff --git a/linden/indra/newview/skins/xui/ja/panel_login.xml b/linden/indra/newview/skins/xui/ja/panel_login.xml
index 2b68724..f00512f 100644
--- a/linden/indra/newview/skins/xui/ja/panel_login.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_login.xml
@@ -4,36 +4,36 @@
http://secondlife.com/app/login/
- å:
+ ファーストãƒãƒ¼ãƒ :
- 姓:
+ ラストãƒãƒ¼ãƒ :
- パスワード:
+ パスワード:
- 開始ä½ç½®:
+ 開始ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ï¼š
- ç§ã®ãƒ›ãƒ¼ãƒ
+ 自宅(ホーム)
- ç§ã®æœ€å¾Œã®ä½ç½®
+ 最後ã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³
-
- <Type region name>
+
+ <地域ã®åå‰å…¥åŠ›>
-
+
- ビューワーã¯ãƒã‚°ã‚¤ãƒ³ã—ãŸæ™‚ã«ãƒ•ãƒ«ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã§è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
+ ãƒã‚°ã‚¤ãƒ³æ™‚ã«ã¯ãƒ•ãƒ«ã‚¹ã‚¯ãƒªãƒ¼ãƒ³è¡¨ç¤ºã«ãªã‚Šã¾ã™
-
+
+
-
1.23.4 (5)
diff --git a/linden/indra/newview/skins/xui/ja/panel_media_remote.xml b/linden/indra/newview/skins/xui/ja/panel_media_remote.xml
index eebb181..57f54a3 100644
--- a/linden/indra/newview/skins/xui/ja/panel_media_remote.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_media_remote.xml
@@ -1,14 +1,13 @@
-
- ムービー・コントãƒãƒ¼ãƒ«
+
+ ムービー
-
+
+
+ tool_tip="メディア・ストリームをå†ç”Ÿ" />
-
+ tool_tip="メデイア・ストリームを一時åœæ¢" />
diff --git a/linden/indra/newview/skins/xui/ja/panel_music_remote.xml b/linden/indra/newview/skins/xui/ja/panel_music_remote.xml
index 653732c..be4545a 100644
--- a/linden/indra/newview/skins/xui/ja/panel_music_remote.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_music_remote.xml
@@ -1,14 +1,13 @@
-
- ミュージック・コントãƒãƒ¼ãƒ«
+
+ ミュージック
-
+
+
+ tool_tip="メディア・ストリームをå†ç”Ÿ" />
-
+ tool_tip="メデイア・ストリームを一時åœæ¢" />
diff --git a/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml b/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml
index 6559425..4b07515 100644
--- a/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_overlaybar.xml
@@ -1,15 +1,14 @@
-
+
-
+ tool_tip="「ãƒãƒ£ãƒƒãƒˆã€ã¨ã€ŒIMã€ãŒéžè¡¨ç¤ºã«ãªã£ã¦ã„ã¾ã™ã€‚ ã“ã“をクリックã—ã¦ãƒ“ジー・モードを解除ã—ã¦ãã ã•ã„。" />
+
+ tool_tip="視界ã®ç§»å‹•ã«ãƒžã‚¦ã‚¹ã‚’使用。 銃をæŒã£ã¦ã„ã‚‹ã¨ãã¯ã€ã‚¯ãƒªãƒƒã‚¯ã§ç™ºç ²" />
+ tool_tip="ç«‹ã¡ä¸ŠãŒã‚‹ã«ã¯ã€ã“ã“をクリックã—ã¾ã™ã€‚" />
diff --git a/linden/indra/newview/skins/xui/ja/panel_place.xml b/linden/indra/newview/skins/xui/ja/panel_place.xml
index 94520eb..6c1851e 100644
--- a/linden/indra/newview/skins/xui/ja/panel_place.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_place.xml
@@ -2,5 +2,5 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_place_small.xml b/linden/indra/newview/skins/xui/ja/panel_place_small.xml
index 94520eb..6c1851e 100644
--- a/linden/indra/newview/skins/xui/ja/panel_place_small.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_place_small.xml
@@ -2,5 +2,5 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_audio.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_audio.xml
index 5185835..7f693e1 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_audio.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_audio.xml
@@ -1,59 +1,57 @@
-
+
- ミューティング:
+ ミュート:
ストリーミング:
-
-
- サウンドエフェクト:
+ サウンド効果:
- 風é‡ï¼š
+ 風ã®éŸ³é‡ï¼š
- æ©å¹…é‡ï¼š
+ 足音:
- UIé‡ï¼š
+ UI音é‡:
-
+
ドップラー効果:
- é éš”è¦å› :
+ è·é›¢ä¿‚数:
- 脱線è¦å› :
+ ãƒãƒ¼ãƒ«ã‚ªãƒ•ï¼š
- Bitrateをデフォルトアップãƒãƒ¼ãƒ‰ï¼š
+ デフォルトUL速度:
- 32 kbps
+ 32kbps
- 64 kbps
+ 64kbps
- 96 kbps
+ 96kbps
- 128 kbps
+ 128kbps
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_chat.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_chat.xml
index 8247355..3ea0999 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_chat.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_chat.xml
@@ -1,59 +1,59 @@
- ãƒãƒ£ãƒƒãƒˆã®ãƒ•ã‚©ãƒ³ãƒˆã‚µã‚¤ã‚º:
+ ãƒãƒ£ãƒƒãƒˆã®ãƒ•ã‚©ãƒ³ãƒˆï¼š
å°
- ä¸é–“
+ ä¸
大
- ãƒãƒ£ãƒƒãƒˆã®è‰²:
+ ãƒãƒ£ãƒƒãƒˆãƒ»ã‚«ãƒ©ãƒ¼ï¼š
-
-
-
-
-
+
+
+
+
+
- ãƒãƒ£ãƒƒãƒˆã®ã‚³ãƒ³ã‚½ãƒ¼ãƒ«:
+ ãƒãƒ£ãƒƒãƒˆãƒ»ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ï¼š
-
+
- (秒)
+ (秒後)
- (# ライン)
+ (行数)
- ãƒãƒ£ãƒƒãƒˆã®ã‚ªãƒ—ション:
+ ãƒãƒ£ãƒƒãƒˆãƒ»ã‚ªãƒ—ション
-
-
-
- ãƒãƒ–ルãƒãƒ£ãƒƒãƒˆ:
+ ãƒãƒ£ãƒƒãƒˆã®å¹ã出ã—:
-
+
- スクリプトã®ã‚¨ãƒ©ãƒ¼:
+ スクリプト・エラー:
-
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml
index bd820ab..dac17d1 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_general.xml
@@ -1,26 +1,46 @@
-
+
+ 自宅(ホーム)
+
+
+ 最後ã®ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³
+
+
+
-
+
+
+ ãªã—
+
+
+ 一時的ã«è¡¨ç¤º
+
+
+ ã„ã¤ã‚‚
+
+
+
-
+
+
-
-
+
-
-
+
+ tool_tip="Second Life内蔵ã§ãªã„ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ»ã‚·ã‚¹ãƒ†ãƒ ã®ã‚«ãƒ©ãƒ¼é¸æŠžã‚’使用" />
- 開始ä½ç½®:
+ 開始ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ï¼š
åå‰ã‚’表示:
@@ -38,51 +58,49 @@
言語:
- (Requires restart for full effect)
+ (完全ã«åæ˜ ã™ã‚‹ã«ã¯å†èµ·å‹•ãŒå¿…è¦ï¼‰
-
-
- 常ã«è¡Œã‚ãªã„
-
-
- 一時的ã«è¡¨ç¤º
-
-
- 常時
-
-
-
-
- <Type region name>
+ <地域ã®åå‰å…¥åŠ›>
- é€ã‚‹å‰ã«å°‹ãã‚‹
+ é€ã‚‹å‰ã«ç¢ºèªã™ã‚‹
常ã«é€ä¿¡
- é€ä»˜ã—ãªã„
+ é€ä¿¡ã—ãªã„
+
+ システム・デフォルト
+
- 英語 (English)
+ 英語
+
+
+ ä¸å›½èªž - ベータ
- Deutsch (German)
+ ドイツ語 - ベータ
+
+
+ フランス語 - ベータ
- 日本語 (Japanese)
+ 日本語 (日本語) – ベータ版
- í•œêµì–´ (Korean)
+ í•œêµì–´ (韓国語) – ベータ版
-
- ä¸å›½èªž
+
+ ãƒãƒ«ãƒˆã‚¬ãƒ«èªž - ベータ
+
+
+ スペイン語 - ベータ
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml
index 028babd..5ac0c95 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml
@@ -1,5 +1,15 @@
-
+
+
+ 表示解åƒåº¦ï¼š
+
+
+
+ 全画é¢ã®ç¸¦æ¨ªæ¯”:
+
+
+ (幅ï¼é«˜ã•ï¼‰
+
4:3(標準CRT)
@@ -11,17 +21,9 @@
16:9(ワイドスクリï¼ãƒ³ï¼‰
-
- 表示解åƒåº¦ï¼š
-
-
- 全画é¢çŽ‡ï¼š
-
-
- (幅ï¼é«˜ã•ï¼‰
-
+
- UIè¦æ¨¡ï¼š
+ UIサイズ:
(メートルã€ä½Žã„ã»ã©é€Ÿã„)
@@ -29,15 +31,13 @@
表示オプション:
-
-
-
+
- [RES_X]×[RES_Y]
+ [RES_X] x [RES_Y]
- [NUM]:[DEN]
+ [NUM]:[DEN]
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml
index 4bb7813..5d14b43 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics2.xml
@@ -1,57 +1,57 @@
-
+
- 色åˆã„:
+ シェーダー:
-
-
+
+
- ã‚¢ãƒã‚¿ãƒ¼ãƒ»ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ï¼š
+ ã‚¢ãƒã‚¿ãƒ¼ã®æ画:
- 通常
+ ノーマル
- 凹凸表示
+ ãƒãƒ³ãƒ—マップ
- 凹凸表示 & ç”Ÿåœ°ç´ æã®è¡¨ç¤º
+ ãƒãƒ³ãƒ—マップã¨æœ
- ライティング細部:
+ ライティング詳細:
- 陽光ã¨æœˆå…‰ã®ã¿
+ 太陽ã¨æœˆã®ã¿
- ãƒãƒ¼ã‚«ãƒ«ãƒ»ãƒ©ã‚¤ãƒˆã®è¿‘ã
+ 近隣ã®ãƒãƒ¼ã‚«ãƒ«ãƒ»ãƒ©ã‚¤ãƒˆ
- é ˜åŸŸè©³ç´°ï¼š
+ 地形詳細:
- 低ã„
+ 低
- 高ã„
+ 高
- オブジェクト・メッシュ詳細:
+ オブジェクトメッシュ:
- フレã‚シブル・メッシュ詳細:
+ フレã‚シブルメッシュ:
- 樹木メッシュ詳細:
+ 樹木メッシュ:
- ã‚¢ãƒã‚¿ãƒ¼ãƒ»ãƒ¡ãƒƒã‚·ãƒ¥è©³ç´°ï¼š
+ ã‚¢ãƒã‚¿ãƒ¼ãƒ¡ãƒƒã‚·ãƒ¥ï¼š
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml
index 07afa5c..542e580 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics3.xml
@@ -1,27 +1,26 @@
-
+
フィルタリング:
-
- (明るã•ã€ä½Žã„ã»ã©æ˜Žã‚‹ã„ã€0ï¼ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¨ã—ã¦ä½¿ç”¨ï¼‰
+ ï¼ï¼ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ï¼ˆæœ€ã‚‚明るã„)
(高ã„ã»ã©æ˜Žã‚‹ã„ã€1.0ãŒãƒ‡ãƒ•ã‚©ãƒ«ãƒˆï¼‰
-
- AGPグラフィックカード:
+
+ VBOを有効化:
-
+
- グラフィックカードメモリ:
+ グラフィックメモリ:
@@ -43,10 +42,10 @@
512MB
-
+
+ tool_tip="æœè£…ã®å¤‰æ›´ã‚’éŽåŽ»ä½•å›žã¾ã§è¡¨ç¤ºã™ã‚‹ã‹" />
(低ã„ã»ã©é€Ÿã„)
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_im.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_im.xml
index 225d137..692ea4c 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_im.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_im.xml
@@ -1,19 +1,24 @@
-
+
- IMã®ã‚ªãƒ—ション:
+ オンライン状態:
+
+
+
+ IMオプション:
- 変更ã™ã‚‹ã®ã«ãƒã‚°ã‚¤ãƒ³ã™ã‚‹
+ 変更時ã«ãƒã‚°ã‚¤ãƒ³
-
-
+
+
-
-
-
-
-
- 使用ä¸ãƒ¢ãƒ¼ãƒ‰ã®å¿œç”:
+
+
+
+
+
+ ビジー・モード応ç”:
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_input.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_input.xml
index ce361d2..d116f88 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_input.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_input.xml
@@ -1,24 +1,24 @@
-
+
- マウスルック・オプション:
+ マウスルック
- マウス感度:
+ 感度:
+
自動飛行オプション:
+
- カメラオプション:
+ カメラ・オプション:
- カメラ起拱点:
+ カメラ応ç”性:
-
-
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_network.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_network.xml
index 3d0e048..ec7db5a 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_network.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_network.xml
@@ -1,28 +1,20 @@
- M最大ãƒãƒ³ãƒ‰å¹…
+ 最大帯域幅:
- kbps (毎秒kビット)
+ Kbps
-
- デスクシャシーサイズ
+
+ ã‚ャッシュ(MB):
-
-
- 50 MB
-
-
- 200 MB
-
-
- 500 MB
-
-
- 1000 MB
-
-
-
+
+
+ ã‚ャッシュã®å ´æ‰€ï¼š
+
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_popups.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_popups.xml
index 97eba4e..d6cd09a 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_popups.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_popups.xml
@@ -1,15 +1,14 @@
-
+
- ãƒãƒƒãƒ—アップを見ã›ãªã„:
+ ãƒãƒƒãƒ—アップを表示ã—ãªã„:
-
- ãƒãƒƒãƒ—アップを見ã›ã‚‹:
+ ãƒãƒƒãƒ—アップを表示:
-
diff --git a/linden/indra/newview/skins/xui/ja/panel_region_covenant.xml b/linden/indra/newview/skins/xui/ja/panel_region_covenant.xml
index 4e569b0..551a5aa 100644
--- a/linden/indra/newview/skins/xui/ja/panel_region_covenant.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_region_covenant.xml
@@ -1,50 +1,51 @@
-
+
- ä¸å‹•ç”£ã®å…¨ã¦ã®åŒºç”»ã«ãŠã„ã¦ç´„æ¬¾æƒ…å ±ã«å¯¾ã™ã‚‹å¤‰æ›´ã¯è¡¨ç¤ºã•ã‚Œã¾ã™
+ ç´„æ¬¾æƒ…å ±ã«å¯¾ã™ã‚‹å¤‰æ›´ã¯ã€ä¸å‹•ç”£å†…ã®ã™ã¹ã¦ã®åŒºç”»ã«ç¤ºã•ã‚Œã¾ã™ã€‚
- 地域:
+ 地域:
- (未知)
+ (ä¸æ˜Žï¼‰
- 所有地:
+ ä¸å‹•ç”£ï¼š
- (未知)
+ (ä¸æ˜Žï¼‰
- ä¸å‹•ç”£ç´„款を変更ã™ã‚‹ã«ã¯ã€ãƒŽãƒ¼ãƒˆã‚«ãƒ¼ãƒ‰ã‚’ドラッグã—ドãƒãƒƒãƒ—ã—ã¦ãã ã•ã„。
+ ノートカードをドラッグ&ドãƒãƒƒãƒ—ã—ã¦
+ã“ã®ä¸å‹•ç”£ã®ç´„款を変更ã—ã¾ã™ã€‚
- ä¸å‹•ç”£ã‚ªãƒ¼ãƒŠãƒ¼ï¼š
+ ä¸å‹•ç”£æ‰€æœ‰è€…:
- (未知)
+ (ä¸æ˜Žï¼‰
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ãã‚‹ã‹ã©ã†ã‹ã‚ã‹ã‚Šã¾ã›ã‚“。
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯å†è²©ãŒå¯èƒ½ãªå ´åˆã¨ä¸å¯èƒ½ãªå ´åˆãŒã‚ã‚Šã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆï¼å†åˆ†å‰²ãŒã§ãã‚‹ã‹ã©ã†ã‹ã‚ã‹ã‚Šã¾ã›ã‚“。
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯çµ±åˆï¼å†åˆ†å‰²ãŒå¯èƒ½ãªå ´åˆã¨ä¸å¯èƒ½ãªå ´åˆãŒã‚ã‚Šã¾ã™ã€‚
- ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...
+ ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒã§ãã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ã§ãã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€å†è²©ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã®è³¼å…¥åœ°ã¯å†è²©ã§ããªã„ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã€ã¾ãŸã¯å†åˆ†å‰²ãŒã§ãã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã®è³¼å…¥åœ°ã¯çµ±åˆã¾ãŸã¯å†åˆ†å‰²ã§ãã¾ã™ã€‚
- ã“ã®åœ°åŸŸã§è³¼å…¥ã—ãŸåœŸåœ°ã¯ã€çµ±åˆã€ã¾ãŸã¯å†åˆ†å‰²ãŒã§ããªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ ã“ã®åœ°åŸŸã®è³¼å…¥åœ°ã¯çµ±åˆï¼å†åˆ†å‰²ã§ããªã„ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚
diff --git a/linden/indra/newview/skins/xui/ja/panel_region_debug.xml b/linden/indra/newview/skins/xui/ja/panel_region_debug.xml
index 5afdb0f..d5d1dbc 100644
--- a/linden/indra/newview/skins/xui/ja/panel_region_debug.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_region_debug.xml
@@ -1,37 +1,35 @@
-
+
- 地域:
+ 地域:
未知
-
+
-
+
-
+
-
-
-
+
-
+
-
+
-
diff --git a/linden/indra/newview/skins/xui/ja/panel_region_estate.xml b/linden/indra/newview/skins/xui/ja/panel_region_estate.xml
index 3378d89..6777d53 100644
--- a/linden/indra/newview/skins/xui/ja/panel_region_estate.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_region_estate.xml
@@ -1,64 +1,65 @@
-
+
- ã“ã®ã‚¿ãƒ–ã®è¨å®šã®å¤‰æ›´ã¯ã“ã®æ‰€æœ‰åœ°ã®ã™ã¹ã¦ã®åœ°åŸŸã«å½±éŸ¿ã—ã¾ã™ã€‚
+ ã“ã®ã‚¿ãƒ–ã®è¨å®šå¤‰æ›´ã§ã€ä¸å‹•ç”£å†…ã®å…¨åœ°åŸŸã«å¤‰æ›´ãŒåæ˜ ã•ã‚Œã¾ã™ã€‚
- 所有地:
+ ä¸å‹•ç”£ï¼š
- (未知)
+ (ä¸æ˜Žï¼‰
- 所有者:
+ 所有者:
- (未知)
+ (ä¸æ˜Žï¼‰
- 所有地マãƒãƒ¼ã‚¸ãƒ£:
+ ä¸å‹•ç”£ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ï¼š
-
-
+
+
-
+
-
-
+
+
-
-
支払ã„状æ³ã«ã‚ˆã‚Šã‚¢ã‚¯ã‚»ã‚¹ã‚’æ‹’å¦ï¼š
-
-
-
+
+
+
+ [Abuse E-mail Beta]
+
- å±…ä½è€…ã«è¨±å¯:
+ 許å¯ã•ã‚ŒãŸä½äººï¼š
-
+
- グループã«è¨±å¯:
+ 許å¯ã•ã‚ŒãŸã‚°ãƒ«ãƒ¼ãƒ—:
-
+
- å±…ä½è€…ã«ç¦æ¢:
+ ç¦æ¢ã•ã‚ŒãŸä½äºº
-
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_region_general.xml b/linden/indra/newview/skins/xui/ja/panel_region_general.xml
index 25d6f4d..2a1cc65 100644
--- a/linden/indra/newview/skins/xui/ja/panel_region_general.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_region_general.xml
@@ -1,29 +1,29 @@
- 地域:
+ 地域:
未知
-
+
-
+
-
+
-
+
-
+
-
- 年齢制é™:
+
+ æˆäººæŒ‡å®šï¼š
@@ -35,10 +35,8 @@
-
-
-
-
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_region_terrain.xml b/linden/indra/newview/skins/xui/ja/panel_region_terrain.xml
index 80e1420..d77f974 100644
--- a/linden/indra/newview/skins/xui/ja/panel_region_terrain.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_region_terrain.xml
@@ -1,30 +1,30 @@
-
+
- 地域:
+ 地域:
未知
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_region_texture.xml b/linden/indra/newview/skins/xui/ja/panel_region_texture.xml
index e3590d1..6527f0f 100644
--- a/linden/indra/newview/skins/xui/ja/panel_region_texture.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_region_texture.xml
@@ -1,16 +1,16 @@
-
+
- 地域:
+ 地域:
未知
-
- 基本テクスãƒãƒ£ãƒ¼ (128x128ã‚’è¦æ±‚, 24 ビット .tga ファイル)
+
+ 地形ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ (512x512ã€24ビット .tgaファイルãŒå¿…è¦)
- 1 (低)
+ 1(低)
2
@@ -19,54 +19,39 @@
3
- 4 (高)
-
-
- 詳細テクスãƒãƒ£ãƒ¼ (128x128ã‚’è¦æ±‚, 24 ビット .tga ファイル)
+ 4(高)
- 1 (低)
+ テクスãƒãƒ£ãƒ¼æ¨™é«˜ç¯„囲
- 2
+ å—西
- 3
+ 北西
- 4 (高)
+ å—æ±
- Texture Elevation Ranges
+ 北æ±
+
+
+
+
+
+
+
+
- å—西
+ ã“れらã®æ•°å—ã¯ã€ä¸Šè¨˜ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã‚’ブレンドã™ã‚‹ç¯„囲を表ã—ã¾ã™ã€‚
- 北西
+ 計測ã®å˜ä½ã¯ãƒ¡ãƒ¼ãƒˆãƒ«ã§ã€ã€Œä½Žã€ã®å€¤ã¯ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼#1ã®è¡¨ç¤ºé«˜ã•ã®æœ€å¤§å€¤ã§ã™ã€‚
- å—æ±
-
-
- 北æ±
-
-
-
-
-
-
-
-
-
-
- ã“れらã®ä¾¡å€¤ã¯ã€ä¸Šè¨˜ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼ã®ãŸã‚ã®ãƒ–レンドã®ç¯„囲を表ã‚ã—ã¦ã„ã¾ã™ã€‚
-
-
- Mメーターã§æ¸¬ã‚Šã€LOW 値ã¯ã€Texture #1ã®MAXIMUM ã®é«˜ã•ã§ã™ã€‚
-
-
- ãã—ã¦HIGH ã®å€¤ã¯Texture #4ã®MINIMUMã®é«˜ã•ã§ã™ã€‚
+ ãã—ã¦ã€Œé«˜ã€ã®å€¤ã¯ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ¼#4ã®é«˜ã•ã®ä¸‹é™ã¨ãªã‚Šã¾ã™ã€‚
diff --git a/linden/indra/newview/skins/xui/ja/panel_scrolling_param.xml b/linden/indra/newview/skins/xui/ja/panel_scrolling_param.xml
index fe5fd12..b7e334d 100644
--- a/linden/indra/newview/skins/xui/ja/panel_scrolling_param.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_scrolling_param.xml
@@ -1,10 +1,10 @@
- ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...
+ ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
- ãƒãƒ¼ãƒ‡ã‚£ãƒ³ã‚°...
+ ãƒãƒ¼ãƒ‰ä¸ï¼Žï¼Žï¼Ž
diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_chat.xml b/linden/indra/newview/skins/xui/ja/panel_settings_chat.xml
index 75c57c2..34a1a0d 100644
--- a/linden/indra/newview/skins/xui/ja/panel_settings_chat.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_settings_chat.xml
@@ -1,59 +1,58 @@
- ãƒãƒ£ãƒƒãƒˆã®ãƒ•ã‚©ãƒ³ãƒˆã‚µã‚¤ã‚º:
+ ãƒãƒ£ãƒƒãƒˆã®ãƒ•ã‚©ãƒ³ãƒˆï¼š
å°
- ä¸é–“
+ ä¸
大
- ãƒãƒ£ãƒƒãƒˆã®è‰²:
+ ãƒãƒ£ãƒƒãƒˆãƒ»ã‚«ãƒ©ãƒ¼ï¼š
-
+
-
+
- ãƒãƒ£ãƒƒãƒˆã®ã‚³ãƒ³ã‚½ãƒ¼ãƒ«:
+ ãƒãƒ£ãƒƒãƒˆãƒ»ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ï¼š
-
+
- (秒)
+ (秒後)
- (# ライン)
+ (行数)
- ãƒãƒ£ãƒƒãƒˆã®ã‚ªãƒ—ション:
+ ãƒãƒ£ãƒƒãƒˆãƒ»ã‚ªãƒ—ション
-
-
-
- ãƒãƒ–ルãƒãƒ£ãƒƒãƒˆ:
+ ãƒãƒ£ãƒƒãƒˆã®å¹ã出ã—:
-
+
- スクリプトã®ã‚¨ãƒ©ãƒ¼:
+ スクリプト・エラー:
-
diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_im.xml b/linden/indra/newview/skins/xui/ja/panel_settings_im.xml
index 11aec21..39b9b5e 100644
--- a/linden/indra/newview/skins/xui/ja/panel_settings_im.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_settings_im.xml
@@ -1,13 +1,13 @@
- IMã®ã‚ªãƒ—ション:
+ IMオプション:
-
-
+
+
- 使用ä¸ãƒ¢ãƒ¼ãƒ‰ã®å¿œç”:
+ ビジー・モード応ç”:
diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml b/linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml
index 8d86da7..b4c481d 100644
--- a/linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_settings_msgbox.xml
@@ -1,12 +1,12 @@
-
+
- ãƒãƒƒãƒ—アップを見ã›ãªã„:
+ ãƒãƒƒãƒ—アップを表示ã—ãªã„:
-
+
- ãƒãƒƒãƒ—アップを見ã›ã‚‹:
+ ãƒãƒƒãƒ—アップを表示:
-
diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_network.xml b/linden/indra/newview/skins/xui/ja/panel_settings_network.xml
index 076cd51..65fe03d 100644
--- a/linden/indra/newview/skins/xui/ja/panel_settings_network.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_settings_network.xml
@@ -1,59 +1,58 @@
- M最大ãƒãƒ³ãƒ‰å¹…
+ 最大帯域幅:
- kbps (毎秒kビット)
+ Kbps
- デスクシャシーサイズ
+ ディスク・ã‚ャッシュã®ã‚µã‚¤ã‚ºï¼š
- 50 MB
+ 50MB
- 200 MB
+ 200MB
- 500 MB
+ 500MB
- 1000 MB
+ 100MB
-
+
- プãƒã‚ã‚·ã®æ§‹æˆ:
+ プãƒã‚シー構æˆï¼š
+ tool_tip="プãƒã‚シーã®æ§‹æˆã‚’指定" />
- プãƒã‚ã‚·:
+ プãƒã‚シー:
+ tool_tip="使用ã™ã‚‹ãƒ—ãƒã‚ã‚·ã®åå‰ã¾ãŸã¯IPアドレス" />
- ãƒãƒ¼ãƒˆ:
+ ãƒãƒ¼ãƒˆï¼š
-
+
- ソックス:
+ é´ä¸‹ï¼š
- Socks v4
+ é´ä¸‹v4
- Socks v5
+ é´ä¸‹v5
- プãƒã‚ã‚·ãªã—:
+ プãƒã‚シーãŒã‚ã‚Šã¾ã›ã‚“:
+ tool_tip="プãƒã‚シを使用ã—ãªã„åå‰ã¾ãŸã¯IPアドレス" />
diff --git a/linden/indra/newview/skins/xui/ja/panel_settings_web.xml b/linden/indra/newview/skins/xui/ja/panel_settings_web.xml
index 334f7a4..35ea206 100644
--- a/linden/indra/newview/skins/xui/ja/panel_settings_web.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_settings_web.xml
@@ -1,55 +1,54 @@
+ tool_tip="ヘルプã€ã‚¦ã‚§ãƒ–リンクãªã©ã«ã€å¤–部ã®ã‚¦ã‚§ãƒ–・ブラウザーを使用。\nフルスクリーン起動時ã«ã¯æŽ¨å¥¨ã•ã‚Œãªã„。" />
- ホームページをブラウズ:
+ ブラウザーã®ãƒ›ãƒ¼ãƒ ・ページ:
+ tool_tip="åˆã‚ã¦Second Lifeブラウザーを開ããŸã‚ã«è¨ªã‚Œã‚‹ã‚¦ã‚§ãƒ–・ページ" />
- プãƒã‚ã‚·ã®æ§‹æˆ:
+ プãƒã‚シー構æˆï¼š
-
+ tool_tip="内蔵ブラウザー用ã®ãƒ—ãƒã‚シー構æˆã‚’指定" />
- プãƒã‚ã‚·:
+ プãƒã‚シー:
+ tool_tip="使用ã™ã‚‹ãƒ—ãƒã‚ã‚·ã®åå‰ã¾ãŸã¯IPアドレス" />
- ãƒãƒ¼ãƒˆ:
+ ãƒãƒ¼ãƒˆï¼š
-
+
- ソックス:
+ é´ä¸‹ï¼š
- Socks v4
+ é´ä¸‹v4
- Socks v5
+ é´ä¸‹v5
- プãƒã‚ã‚·ãªã—:
+ 次ã«å¯¾å¿œã™ã‚‹ãƒ—ãƒã‚シーãŒã‚ã‚Šã¾ã›ã‚“:
+ tool_tip="プãƒã‚シを使用ã—ãªã„åå‰ã¾ãŸã¯IPアドレス" />
- ä¿¡é ¼ã•ã‚ŒãŸã‚µã‚¤ãƒˆ:
-(ãƒã‚¯ã‚¤ãƒ³ã—ã¦è¦‹ã‚‹)
+ 信用ã§ãるサイト:
+(ãƒã‚°ã‚¤ãƒ³ã—ã¦è¡¨ç¤ºã™ã‚‹)
-
+ tool_tip="ã“ã®ã‚µã‚¤ãƒˆã‚’ä¿¡é ¼ã§ãるサイトã®ãƒªã‚¹ãƒˆã«è¿½åŠ ã™ã‚‹ã€‚" />
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_status_bar.xml b/linden/indra/newview/skins/xui/ja/panel_status_bar.xml
index 35f04c9..e8052bb 100644
--- a/linden/indra/newview/skins/xui/ja/panel_status_bar.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_status_bar.xml
@@ -1,14 +1,14 @@
- ã“ã“ã«åŒºç”»åを記入
+ tool_tip="ã‚ãªãŸãŒç«‹ã£ã¦ã„る土地区画ã®åå‰ã€‚ ã€ŒåœŸåœ°æƒ…å ±ã€ã‚’クリックã—ã¦ãã ã•ã„。">
+ 区画åã¯ã“ã“ã§ã™
- L$
+ L$
-
-
+
+
12:00 AM
-
-
-
-
+
+
+
+
- パケット紛失
+ パケットæ失
- ãƒãƒ³ãƒ‰å¹…
+ 帯域幅
diff --git a/linden/indra/newview/skins/xui/ja/panel_toolbar.xml b/linden/indra/newview/skins/xui/ja/panel_toolbar.xml
index 189e5a3..49c3cb2 100644
--- a/linden/indra/newview/skins/xui/ja/panel_toolbar.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_toolbar.xml
@@ -1,22 +1,21 @@
+ tool_tip="フレンドã¨ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆãƒ»ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" />
-
-
+ tool_tip="è¿‘ãã®äººã¨è©±ã‚’ã—ã¾ã™ã€‚ (Enter)" />
+
+
+ tool_tip="スクリーンショットをディスクã¾ãŸã¯æŒã¡ç‰©ã«ä¿å˜ã—ã¾ã™ã€‚" />
-
-
-
-
+ tool_tip="å ´æ‰€ã€ã‚¤ãƒ™ãƒ³ãƒˆã€äººãªã©ã€ã•ã¾ã–ã¾ãªå¯¾è±¡ã‚’検索ã§ãã¾ã™ã€‚" />
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/ja/panel_top_pick.xml b/linden/indra/newview/skins/xui/ja/panel_top_pick.xml
index 40f6fbf..1fa150b 100644
--- a/linden/indra/newview/skins/xui/ja/panel_top_pick.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_top_pick.xml
@@ -1,10 +1,10 @@
-
+
- 仕分ã‘:
+ 振り分ã‘:
-
+
diff --git a/linden/indra/newview/skins/xui/ja/role_actions.xml b/linden/indra/newview/skins/xui/ja/role_actions.xml
index c5fe1b7..dc3010d 100644
--- a/linden/indra/newview/skins/xui/ja/role_actions.xml
+++ b/linden/indra/newview/skins/xui/ja/role_actions.xml
@@ -1,187 +1,184 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/linden/indra/newview/skins/xui/ja/untranslated.xml b/linden/indra/newview/skins/xui/ja/untranslated.xml
index 27ecfdb..b5fbf58 100644
Binary files a/linden/indra/newview/skins/xui/ja/untranslated.xml and b/linden/indra/newview/skins/xui/ja/untranslated.xml differ
diff --git a/linden/indra/newview/skins/xui/ko/alerts.xml b/linden/indra/newview/skins/xui/ko/alerts.xml
index 88df4f3..f4908ed 100644
--- a/linden/indra/newview/skins/xui/ko/alerts.xml
+++ b/linden/indra/newview/skins/xui/ko/alerts.xml
@@ -1,7 +1,7 @@
-
+
alerts.xmlì— [ALERT_NAME]ì´(ê°€) 없습니다.
-
+
[MOTD]
@@ -826,7 +826,7 @@ www.secondlife.com으로 ì´ë™í•˜ì—¬ 새로운 ê³„ì •ì„ ë§Œë“œì‹œê² ìŠµë‹ˆê¹Œ?
- ë‚˜ì¤‘ì— ì•Œë¦¼' 초기화
+ 'ë‚˜ì¤‘ì— ì•Œë¦¼' 대화 ìž¬ì„¤ì •?
- 잊지 ë§ ê²ƒ: ê´‘ê³ ìˆ˜ìˆ˜ë£ŒëŠ” 환불 ë˜ì§€ ì•ŠìŒ.
+ ê¸°ì–µí• ê²ƒ: ê´‘ê³ ìˆ˜ìˆ˜ë£ŒëŠ” 환불 ë˜ì§€ ì•ŠìŒ.
-ê´‘ê³ ë¥¼ L$[AMOUNT] 지금 게재 í•˜ì‹œê² ìŠµë‹ˆê¹Œ?
+ê´‘ê³ ë¥¼ L$[AMOUNT]ì— ì§€ê¸ˆ 게재 í•˜ì‹œê² ìŠµë‹ˆê¹Œ?
- ìž ì‹œ 기다린 후 ì´ ì§€ì—ì„ ì‹¤í–‰í•˜ëŠ” 서버 처리를 재시작 합니다.지ì—ì˜ ëª¨ë“ ì£¼ë¯¼ë“¤ì€
+ ìž ì‹œ 기다린 후 ì´ ì§€ì—ì„ ì‹¤í–‰í•˜ëŠ” 서버 처리를 재시작 합니다. 지ì—ì˜ ëª¨ë“ ì£¼ë¯¼ë“¤ì€
ì—°ê²° í•´ì œë©ë‹ˆë‹¤.지ì—ì´ í•´ë‹¹ ì§€ì— ë°ì´í„°ë¥¼ ì €ìž¥í•˜ê³
90 ì´ˆ ì´ë‚´ì— ëŒì•„ 와야 합니다.
diff --git a/linden/indra/newview/skins/xui/ko/floater_about.xml b/linden/indra/newview/skins/xui/ko/floater_about.xml
index ec0e1a4..8f25c67 100644
--- a/linden/indra/newview/skins/xui/ko/floater_about.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_about.xml
@@ -22,7 +22,7 @@ SSLeay Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
xmlrpc-epi Copyright (C) 2000 Epinions, Inc.
zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
-All rights reserved. ìžì„¸í•œ ë‚´ìš©ì€ licenses.txt를 참조하ì‹ì‹œì˜¤.
+ì €ìž‘ê¶Œ ë³´ìœ ë¨. ìžì„¸í•œ ë‚´ìš©ì€ licenses.txt를 참조하ì‹ì‹œì˜¤.
diff --git a/linden/indra/newview/skins/xui/ko/floater_about_land.xml b/linden/indra/newview/skins/xui/ko/floater_about_land.xml
index 8c189a0..de13c7f 100644
--- a/linden/indra/newview/skins/xui/ko/floater_about_land.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_about_land.xml
@@ -23,13 +23,13 @@
tool_tip="그룹 ìš´ì˜ì§„ì€ ì´ í† ì§€ê°€ ê·¸ë£¹ì˜ í† ì§€ í• ë‹¹ìœ¼ë¡œ ìœ ì§€ë˜ë„ë¡ í•´ë‹¹ í† ì§€ë¥¼ ê·¸ë£¹ì— ì–‘ë„í• ìˆ˜ 있습니다." />
-
íŒë§¤ 여부:
- 비매용.
+ 비매용
가격: L$[PRICE].
@@ -111,10 +111,10 @@
ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” 재íŒë§¤ í• ìˆ˜ 없습니다.
- ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” ê²°í•©/ë¶„í• ë¶ˆê°€ëŠ¥ 합니다.
+ ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” ê²°í•©/ë¶„í• ì´ ë¶ˆê°€ëŠ¥ 합니다.
- ì´ ì‚¬ìœ ì§€ì— ëŒ€í•´ ì œê³µëœì‹œí–‰ ê·œì¹™ì´ ì—†ìŠµë‹ˆë‹¤.
+ ì´ ì‚¬ìœ ì§€ì— ëŒ€í•´ ì œê³µëœ ì‹œí–‰ ê·œì¹™ì´ ì—†ìŠµë‹ˆë‹¤.
ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” 재íŒë§¤ í• ìˆ˜ 있습니다.
@@ -123,10 +123,10 @@
ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” 재íŒë§¤ í• ìˆ˜ 없습니다.
- ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” ê²°í•© ë˜ëŠ” ë¶„í• ê°€ëŠ¥ 합니다.
+ ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” ê²°í•©/ë¶„í• ì´ ê°€ëŠ¥ 합니다.
- ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” ê²°í•© ë˜ëŠ” ë¶„í• ë¶ˆê°€ëŠ¥ 합니다.
+ ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” ê²°í•© ë˜ëŠ” ë¶„í• ì´
@@ -187,7 +187,7 @@
오브ì 트 ì†Œìœ ì£¼:
-
@@ -222,7 +222,7 @@
í† ì§€ 옵션:
-
+
@@ -288,7 +288,7 @@
í…”ë ˆí¬íŠ¸ ì°©ì‹ ì „í™˜:
+ tool_tip="í…”ë ˆí¬íŠ¸ ì°©ì‹ ì „í™˜ -- í…”ë ˆí¬í„°ë“¤ì„ ë„착지로 어떻게 í•¸ë“¤í• ì§€ ì„ íƒ">
금지ë¨
@@ -310,12 +310,12 @@
í…스처:
- ì´ í…스처를 대체함:
+ ì´ í…스처를:
- ì´ URLì˜ ì»¨í…ì¸ ë¡œ êµì²´:
+ ë‹¤ìŒ URLì˜ ì»¨í…ì¸ ë¡œ êµì²´:
-
+
지불 ìƒíƒœë³„ë¡œ 출입 거부
-
-
-
+
+
+
diff --git a/linden/indra/newview/skins/xui/ko/floater_animation_preview.xml b/linden/indra/newview/skins/xui/ko/floater_animation_preview.xml
index cbf13ec..710e0cc 100644
--- a/linden/indra/newview/skins/xui/ko/floater_animation_preview.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_animation_preview.xml
@@ -40,106 +40,106 @@
펼치기
- ë¦´ë ‰ìŠ¤
+ 힘빼기
- ì (양쪽)
+ 가리키기(양쪽)
- 주먹
+ 주먹ì¥ê¸°
- ë¦´ë ‰ìŠ¤(좌)
+ 힘빼기(좌)
- ì (좌)
+ 가리키기(좌)
- 왼쪽 주먹
+ 주먹ì¥ê¸°(좌)
- ë¦´ë ‰ìŠ¤(ìš°)
+ 힘빼기(우)
- ì (ìš°)
+ 가리키기(우)
- 오른쪽 주먹
+ 주먹ì¥ê¸°(ìš°)
- ê²½ì˜ì— 관한 권리
+ 경례(우)
- ìž…ë ¥
+ 타ì´í”„하기
- í‰í™”ì— ëŒ€í•œ 권리
+ 승리 사ì¸(ìš°)
- 표현
+ í‘œì •
- [None]
+ [ì—†ìŒ]
ì•„-
- ë‘ë ¤ì›€
+ ë‘ë ¤ì›Œí•˜ê¸°
- 화남
+ 화내기
- í™œì§ ì›ƒìŒ
+ í™œì§ ì›ƒê¸°
- 지루함
+ 지루해하기
울기
- 경멸
+ 경멸하기
- 당황함
+ 당황해하기
- í‘œì • 찡그림
+ 찡그리기
- 키스
+ 키스하기
- 웃ìŒ
+ 웃기
Plllppt
- ê±°ì ˆë¨
+ 거부ë˜ê¸°
- 슬픔
+ 슬í¼í•˜ê¸°
- 어깨를 으쓱하기
+ 어깨 으쓱하기
- 미소
+ 미소짓기
- 놀람
+ 놀ë¼ê¸°
- 윙í¬
+ 윙í¬í•˜ê¸°
- ê±±ì •
+ ê±±ì •í•˜ê¸°
-
+
@@ -18,8 +18,8 @@
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ko/floater_clothing.xml b/linden/indra/newview/skins/xui/ko/floater_clothing.xml
index 8c17b7d..d13f35b 100644
--- a/linden/indra/newview/skins/xui/ko/floater_clothing.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_clothing.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ko/floater_color_picker.xml b/linden/indra/newview/skins/xui/ko/floater_color_picker.xml
index 78fb662..bae7b0c 100644
--- a/linden/indra/newview/skins/xui/ko/floater_color_picker.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_color_picker.xml
@@ -1,10 +1,10 @@
- ì 색:
+ 빨강색:
- 녹색:
+ ì´ˆë¡ìƒ‰:
파란색:
diff --git a/linden/indra/newview/skins/xui/ko/floater_customize.xml b/linden/indra/newview/skins/xui/ko/floater_customize.xml
index 9c29b1e..2267eb0 100644
--- a/linden/indra/newview/skins/xui/ko/floater_customize.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_customize.xml
@@ -95,7 +95,7 @@
name="Save As" />
-
+
diff --git a/linden/indra/newview/skins/xui/ko/floater_directory.xml b/linden/indra/newview/skins/xui/ko/floater_directory.xml
index 4bc5b3e..82bc778 100644
--- a/linden/indra/newview/skins/xui/ko/floater_directory.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_directory.xml
@@ -11,15 +11,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -49,10 +49,10 @@
ì‹ ì œí’ˆ
- ì¼ìžë¦¬
+ 구ì§
- 모집
+ ê³ ìš©
서비스
@@ -68,8 +68,8 @@
-
-
+
+
@@ -140,10 +140,10 @@
-
-
+
+
-
+
@@ -155,13 +155,13 @@
- 본 ìž¥ì†Œë“¤ì€ í†µí–‰ëŸ‰(ì‚¬ëžŒë“¤ì´ í•´ë‹¹ 장소ì—ì„œ 보내는 ì‹œê°„ì„ ê¸°ì¤€)ì— ë”°ë¥¸ 가장 ì¸ê¸° 있는 장소들입니다.
+ 본 ìž¥ì†Œë“¤ì€ í†µí–‰ëŸ‰(머무는 시간 기준)ì— ë”°ë¥¸ 가장 ì¸ê¸° 있는 장소들입니다.
-
-
+
+
@@ -196,16 +196,16 @@
- í† ì§€ëŠ” ë¦°ë“ ë‹¬ëŸ¬(L$)ë¡œ ì§ì ‘ 구매, ë˜ëŠ” ë¦°ë“ ë‹¬ëŸ¬(L$)나 US$ë¡œ 경매하여 êµ¬ë§¤í• ìˆ˜ 있습니다.
-ì§ì ‘ êµ¬ë§¤í•˜ë ¤ë©´, í† ì§€ë¥¼ 방문하여 타ì´í‹€ ë°”ì— ìžˆëŠ” 장소 ì´ë¦„ì„ í´ë¦ 하ì‹ì‹œì˜¤!
+ í† ì§€ëŠ” L$ë¡œ ì§ë§¤í•˜ê±°ë‚˜, L$나 US$ë¡œ 경매하여 êµ¬ë§¤í• ìˆ˜ 있습니다.
+ì§ë§¤í•˜ë ¤ë©´, í† ì§€ë¥¼ 방문하여 타ì´í‹€ ë°”ì— ìžˆëŠ” 장소 ì´ë¦„ì„ í´ë¦ 하ì‹ì‹œì˜¤!
-
-
-
-
+
+
+
+
@@ -260,8 +260,8 @@
-
-
+
+
@@ -274,7 +274,7 @@
-
+
@@ -288,8 +288,8 @@
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ko/floater_friends.xml b/linden/indra/newview/skins/xui/ko/floater_friends.xml
index 64ccf19..d42776f 100644
--- a/linden/indra/newview/skins/xui/ko/floater_friends.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_friends.xml
@@ -1,33 +1,33 @@
-
+ tool_tip="ë‹¤ìˆ˜ì˜ ì¹œêµ¬ë¥¼ ì„ íƒí•˜ë ¤ë©´ ì„ íƒí•˜ëŠ” ë™ì•ˆ shift나 Ctrl를 누르ì‹ì‹œì˜¤.">
+
친구를 ì„ íƒí•˜ì—¬ 권한 변경…
-
-
+
-
+ tool_tip="친구가 지ë„ì—ì„œ ë‚´ 위치를 í™•ì¸ ê°€ëŠ¥í•œì§€ 여부를 ì„¤ì •í•©ë‹ˆë‹¤." />
+
권한 변경 중…
+ tool_tip="친구ì—게 ë‚´ 현재 위치로 텔리í¬íŠ¸ë¥¼ ì œê³µí•¨" />
+ tool_tip="친구ì—게 ë¦°ë“ ë‹¬ëŸ¬(L$) 주기" />
diff --git a/linden/indra/newview/skins/xui/ko/floater_gesture.xml b/linden/indra/newview/skins/xui/ko/floater_gesture.xml
index 85e2272..65487cb 100644
--- a/linden/indra/newview/skins/xui/ko/floater_gesture.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_gesture.xml
@@ -1,14 +1,14 @@
- 채팅 ì°½ì— ë°”ë¡œê°€ê¸° 문구를 ìž…ë ¥í•˜ê±°ë‚˜ 키를 눌러 ì• ë‹ˆë©”ì´ì…˜ ë°
-사운드를 재ìƒí•©ë‹ˆë‹¤.
+ 채팅 ì°½ì— ë¬¸êµ¬ë¥¼ ìž…ë ¥/키를 눌러 ì• ë‹ˆë©”ì´ì…˜ ë° ì‚¬ìš´ë“œ 재ìƒ
+
-
-
-
-
+
+
+
+
diff --git a/linden/indra/newview/skins/xui/ko/floater_group_info.xml b/linden/indra/newview/skins/xui/ko/floater_group_info.xml
index 658dc7e..1a4f1a7 100644
--- a/linden/indra/newview/skins/xui/ko/floater_group_info.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_group_info.xml
@@ -139,8 +139,8 @@
ì œì•ˆ:
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ko/floater_groups.xml b/linden/indra/newview/skins/xui/ko/floater_groups.xml
index 4e3b247..d75b51b 100644
--- a/linden/indra/newview/skins/xui/ko/floater_groups.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_groups.xml
@@ -1,10 +1,10 @@
- 현재 í™œë™ ì¤‘ì¸ ê·¸ë£¹ì€ êµµì€ ê¸€ì”¨ë¡œ 표시ë©ë‹ˆë‹¤.
+ 현재 활ë™ì¤‘ì¸ ê·¸ë£¹ì€ êµµì€ ê¸€ì”¨ë¡œ 표시ë©ë‹ˆë‹¤.
- [COUNT] 그룹(최대 [MAX])ì— ì†í•´ 있습니다.
+ [COUNT]ê°œì˜ ê·¸ë£¹(최대 [MAX])ì— ì†í•´ 있습니다.
diff --git a/linden/indra/newview/skins/xui/ko/floater_image_preview.xml b/linden/indra/newview/skins/xui/ko/floater_image_preview.xml
index 8cfa403..350b324 100644
--- a/linden/indra/newview/skins/xui/ko/floater_image_preview.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_image_preview.xml
@@ -14,7 +14,7 @@
ì´ë¯¸ì§€
- 헤어
+ 머리카ë½
여성 머리
@@ -44,7 +44,7 @@
ì´ë¯¸ì§€ 파ì¼ì„ ì½ì„ 수 없습니다.
- ì´ë¯¸ì§€ë¥¼ 24비트 Targa(.tga)ë¡œ ì €ìž¥í•´ë³´ì‹ì‹œì˜¤.
+ ì´ë¯¸ì§€ë¥¼ 24비트 Targa(.tga)ë¡œ ì €ìž¥í•˜ì‹ì‹œì˜¤.
diff --git a/linden/indra/newview/skins/xui/ko/floater_inventory.xml b/linden/indra/newview/skins/xui/ko/floater_inventory.xml
index 16f0125..7821e60 100644
--- a/linden/indra/newview/skins/xui/ko/floater_inventory.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_inventory.xml
@@ -1,8 +1,8 @@
-
-
+
+
@@ -31,7 +31,7 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ko/floater_inventory_view_finder.xml b/linden/indra/newview/skins/xui/ko/floater_inventory_view_finder.xml
index 9f762ac..7b05697 100644
--- a/linden/indra/newview/skins/xui/ko/floater_inventory_view_finder.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_inventory_view_finder.xml
@@ -14,7 +14,7 @@
-
+
- ë˜ëŠ” -
diff --git a/linden/indra/newview/skins/xui/ko/floater_land_holdings.xml b/linden/indra/newview/skins/xui/ko/floater_land_holdings.xml
index 9779e39..59c818b 100644
--- a/linden/indra/newview/skins/xui/ko/floater_land_holdings.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_land_holdings.xml
@@ -1,9 +1,9 @@
-
-
-
+
+
+
-
-
+
+
현재 ê²°ì œìˆ˜ë‹¨ìœ¼ë¡œ 허용ë˜ëŠ” í† ì§€ ë³´ìœ ëŸ‰:
diff --git a/linden/indra/newview/skins/xui/ko/floater_mute.xml b/linden/indra/newview/skins/xui/ko/floater_mute.xml
index eddcef8..6acc4ce 100644
--- a/linden/indra/newview/skins/xui/ko/floater_mute.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_mute.xml
@@ -1,6 +1,6 @@
-
+
-
+
@@ -44,8 +44,8 @@
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ko/floater_preview_gesture.xml b/linden/indra/newview/skins/xui/ko/floater_preview_gesture.xml
index 67b792d..4adc77f 100644
--- a/linden/indra/newview/skins/xui/ko/floater_preview_gesture.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_preview_gesture.xml
@@ -28,8 +28,8 @@
- 사용ìžê°€ 대기 단계를 추가하지 않는 í•œ
-ëª¨ë“ ë‹¨ê³„ëŠ” ë™ì‹œì— ë°œìƒí•©ë‹ˆë‹¤.
+ 사용ìžê°€ 대기단계를 추가하지 않는
+í•œ ëª¨ë“ ë‹¨ê³„ëŠ” ë™ì‹œì— ë°œìƒí•©ë‹ˆë‹¤.
diff --git a/linden/indra/newview/skins/xui/ko/floater_report_abuse.xml b/linden/indra/newview/skins/xui/ko/floater_report_abuse.xml
index 4aa7cea..2b04ceb 100644
--- a/linden/indra/newview/skins/xui/ko/floater_report_abuse.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_report_abuse.xml
@@ -14,7 +14,7 @@
- ë²„íŠ¼ì„ í´ë¦í•œ 후 오브ì 트를 í´ë¦ 하ì‹ì‹œì˜¤:
+ 버튼í´ë¦í›„ 오브ì 트 í´ë¦:
ì´ë¦„:
@@ -23,7 +23,7 @@
ì†Œìœ ìž:
+ tool_tip="ì¹´í…Œê³ ë¦¬ -- ì´ ë¦¬í¬íŠ¸ë¥¼ 가장 잘 설명하는 ì¹´í…Œê³ ë¦¬ ì„ íƒí•¨">
ì¹´í…Œê³ ë¦¬ ì„ íƒ
@@ -64,10 +64,10 @@
요약:
- 세부사í•:
+ 세부:
- ë‚ ì§œ, 위치, ì•…ìš© 종류, ê´€ë ¨ 채팅/ë©”ì‹ ì € í…스트 ë“±ì— ëŒ€í•´
+ ë‚ ì§œ, 위치, ì•…ìš© 종류, ê´€ë ¨ 채팅/ë©”ì‹ ì € í…스트 ë“±ì— ëŒ€í•´
ìžì„¸ížˆ ì ê³ ê°€ëŠ¥í•˜ë‹¤ë©´ 오브ì 트를 ì„ íƒí•˜ì‹ì‹œì˜¤.
diff --git a/linden/indra/newview/skins/xui/ko/floater_report_bug.xml b/linden/indra/newview/skins/xui/ko/floater_report_bug.xml
index ec9779e..2b1a6e7 100644
--- a/linden/indra/newview/skins/xui/ko/floater_report_bug.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_report_bug.xml
@@ -4,13 +4,13 @@
ì‹ ê³ ìž:
- ì‹œë®¬ë ˆì´í„°:
+ 씸:
위치:
- 버튼 ë° ì„ íƒí• 오브ì 트를 차례로 í´ë¦í•˜ì‹ì‹œì˜¤:
+ 버튼과 오브ì 트를 차례로 í´ë¦í•¨:
@@ -21,12 +21,12 @@
ì†Œìœ ìž:
-
+
ì¹´í…Œê³ ë¦¬:
+ tool_tip="ì¹´í…Œê³ ë¦¬ -- ì´ ë¦¬í¬íŠ¸ë¥¼ 가장 잘 설명하는 ì¹´í…Œê³ ë¦¬ ì„ íƒí•¨">
ì¹´í…Œê³ ë¦¬ ì„ íƒ
diff --git a/linden/indra/newview/skins/xui/ko/floater_script_debug.xml b/linden/indra/newview/skins/xui/ko/floater_script_debug.xml
index 86eb10c..d4b5d3f 100644
--- a/linden/indra/newview/skins/xui/ko/floater_script_debug.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_script_debug.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ko/floater_snapshot.xml b/linden/indra/newview/skins/xui/ko/floater_snapshot.xml
index e4702da..17be6f4 100644
--- a/linden/indra/newview/skins/xui/ko/floater_snapshot.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_snapshot.xml
@@ -5,13 +5,13 @@
- 보내기
+ 엽서 보내기
스냅샷 업로드
- ì €ìž¥í•˜ê¸°
+ 하드 ë“œë¼ì´ë¸Œì— ì €ìž¥í•˜ê¸°
diff --git a/linden/indra/newview/skins/xui/ko/floater_telehub.xml b/linden/indra/newview/skins/xui/ko/floater_telehub.xml
index 439018e..f73d939 100644
--- a/linden/indra/newview/skins/xui/ko/floater_telehub.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_telehub.xml
@@ -10,7 +10,7 @@
ì‚ì œí•˜ë ¤ë©´ 'ì—°ê²° í•´ì œ'를 í´ë¦í•©ë‹ˆë‹¤.
- 오브ì 트를 ì„ íƒí•˜ê³ 텔리허브 ì—°ê²°ì„ í´ë¦í•˜ì‹ì‹œì˜¤.
+ 오브ì 트를 ì„ íƒí•˜ê³ 텔리허브 ì—°ê²°ì„ í´ë¦:
@@ -23,6 +23,6 @@
오브ì 트를 ì„ íƒí•˜ê³ 추가를 í´ë¦í•˜ì—¬ 위치를 ì •í•©ë‹ˆë‹¤.
그런 다ìŒ, 오브ì 트를 ì´ë™, ì‚ì œí• ìˆ˜ 있습니다.
위치는 텔리허브 ì„¼í„°ì— ë”°ë¼ ìƒëŒ€ì 입니다.
-월드 위치를 표시하기 위해 목ë¡ì˜ í•ëª©ì„ ì„ íƒí•©ë‹ˆë‹¤.
+월드 위치를 í‘œì‹œí•˜ë ¤ë©´ 목ë¡í•ëª©ì„ ì„ íƒí•©ë‹ˆë‹¤.
diff --git a/linden/indra/newview/skins/xui/ko/floater_world_map.xml b/linden/indra/newview/skins/xui/ko/floater_world_map.xml
index abe0e3f..d26562f 100644
--- a/linden/indra/newview/skins/xui/ko/floater_world_map.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_world_map.xml
@@ -52,7 +52,7 @@
- 내 친구들
+ 친구들
-
+
diff --git a/linden/indra/newview/skins/xui/ko/menu_pie_self.xml b/linden/indra/newview/skins/xui/ko/menu_pie_self.xml
index 8c09290..f759701 100644
--- a/linden/indra/newview/skins/xui/ko/menu_pie_self.xml
+++ b/linden/indra/newview/skins/xui/ko/menu_pie_self.xml
@@ -2,9 +2,9 @@
-
+
-
+
diff --git a/linden/indra/newview/skins/xui/ko/menu_viewer.xml b/linden/indra/newview/skins/xui/ko/menu_viewer.xml
index b82118d..54d0948 100644
--- a/linden/indra/newview/skins/xui/ko/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/ko/menu_viewer.xml
@@ -100,9 +100,9 @@
-
+
-
+
@@ -207,7 +207,7 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ko/notify.xml b/linden/indra/newview/skins/xui/ko/notify.xml
index dccdcdd..d09cec0 100644
--- a/linden/indra/newview/skins/xui/ko/notify.xml
+++ b/linden/indra/newview/skins/xui/ko/notify.xml
@@ -794,7 +794,7 @@ Ctrl ë˜ëŠ” Alt 키를 누른 ìƒíƒœì—ì„œ ì‹ ì†í•˜ê²Œ ë„구를 ì „í™˜í•˜ì‹
ì´ê³³ì€ 오브ì 트, ì°¸ê³ ì¹´ë“œ, 기타 ì†Œìœ ë¬¼ì„ ë³´ê´€í•˜ëŠ” ì¸ë²¤í† 리 입니다.
* 오브ì 트 ë˜ëŠ” 복장 í´ë”를 ìž…ìœ¼ë ¤ë©´ ìžì‹ ì˜ ì•„ë°”íƒ€ë¡œ 드래그합니다.
-* 오브ì 트를 ì¸ë²¤í† 리로 부터 êº¼ë‚´ë ¤ë©´ 땅으로 드래그합니다.
+* 오브ì 트를 ì¸ë²¤í† 리로 부터 êº¼ë‚´ë ¤ë©´ 바닥으로 드래그합니다.
* 노트 카드를 ì½ìœ¼ë ¤ë©´ ë”블í´ë¦í•©ë‹ˆë‹¤.
diff --git a/linden/indra/newview/skins/xui/ko/panel_avatar.xml b/linden/indra/newview/skins/xui/ko/panel_avatar.xml
index baf1a04..47d5a22 100644
--- a/linden/indra/newview/skins/xui/ko/panel_avatar.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_avatar.xml
@@ -34,7 +34,7 @@
현재 온ë¼ì¸
- 탄ìƒ:
+ 출ìƒ:
ê³„ì •:
@@ -97,7 +97,7 @@
- 내 관심사:
+ 관심사:
@@ -108,7 +108,7 @@
- ë‚´ ê¸°ìˆ :
+ ê¸°ìˆ :
@@ -122,7 +122,7 @@
- 세컨드ë¼ì´í”„ì—ì„œ 가장 ì¦ê²¨ì°¾ëŠ” ìž¥ì†Œì— ëŒ€í•´ ì•Œë ¤ì£¼ì‹ì‹œì˜¤.
+ 세컨드ë¼ì´í”„ì—ì„œ 가장 ì¦ê²¨ì°¾ëŠ” 장소를 ì•Œë ¤ì£¼ì‹ì‹œì˜¤.
@@ -155,8 +155,8 @@
ì´ ê³µëž€ì„ ì‚¬ìš©í•˜ì—¬ ì´ ì‚¬ëžŒì— ê´€í•œ ì°¸ê³ ì •ë³´ë¥¼ 기ë¡í•©ë‹ˆë‹¤. 진행 중ì¸
-거래, ê³µë™ í”„ë¡œì 트 ë“±ì„ ì¶”ì 합니다. 사용ìžëŠ” ì´ëŸ¬í•œ
-ì°¸ê³ ì •ë³´ë§Œ ë³¼ 수 있습니다. ì´ ì‚¬ëžŒì€ ì°¸ê³ ì •ë³´ë¥¼ ë³¼ 수 없으며 다른 ì‚¬ëžŒë“¤ë„ ë§ˆì°¬ê°€ì§€ìž…ë‹ˆë‹¤.
+거래, ê³µë™ í”„ë¡œì 트 ë“±ì„ ì¶”ì 합니다. 사용ìžë§Œì´ ì´ëŸ¬í•œ ì°¸ê³ ì •ë³´ë¥¼
+ë³¼ 수 있습니다. ì´ ì‚¬ëžŒì´ë‚˜ 다른 ì‚¬ëžŒì€ ì°¸ê³ ì •ë³´ë¥¼ ë³¼ 수 없습니다.
diff --git a/linden/indra/newview/skins/xui/ko/panel_group_general.xml b/linden/indra/newview/skins/xui/ko/panel_group_general.xml
index d427ddb..20a83b5 100644
--- a/linden/indra/newview/skins/xui/ko/panel_group_general.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_group_general.xml
@@ -9,10 +9,10 @@
- 새 그룹 ì´ë¦„ì„ ì—¬ê¸°ì— ìž…ë ¥
+ 새 그룹 ì´ë¦„ ìž…ë ¥
- 새 그룹 ì´ë¦„ì„ ì—¬ê¸°ì— ìž…ë ¥
+ 새 그룹 ì´ë¦„ ìž…ë ¥
설립ìž
@@ -37,9 +37,9 @@
(ì†Œìœ ì£¼ëŠ” êµµì€ ê¸€ì”¨ë¡œ 표시)
-
-
-
+
+
+
íšŒì› ë°ì´í„°ë¥¼ ê°€ì ¸ì˜¤ëŠ” 중
@@ -66,10 +66,10 @@
tool_tip="그룹 ì •ë³´ë¥¼ ì„±ì¸ ì „ìš©ìœ¼ë¡œ ê°„ì£¼í• ì§€ë¥¼ 여부를 ì„¤ì •í•©ë‹ˆë‹¤." />
- 보여질 타ì´í‹€
+ í™œì„±í™”ëœ íƒ€ì´í‹€
+ tool_tip="ì´ ê·¸ë£¹ì´ í™œì„±í™”ë˜ì—ˆì„ ë•Œ ì•„ë°”íƒ€ì˜ ì´ë¦„ íƒì— 타ì´í‹€ì´ ë³´ì´ë„ë¡ ì„¤ì •í•©ë‹ˆë‹¤." />
diff --git a/linden/indra/newview/skins/xui/ko/panel_group_invite.xml b/linden/indra/newview/skins/xui/ko/panel_group_invite.xml
index 47a39f7..8d1f853 100644
--- a/linden/indra/newview/skins/xui/ko/panel_group_invite.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_group_invite.xml
@@ -14,7 +14,7 @@
í• ë‹¹í• ì—í• ì„ ì„ íƒ í•˜ì‹ì‹œì˜¤:
+ tool_tip="회ì›ì„ í• ë‹¹í• ìˆ˜ 있게 í—ˆê°€ëœ ì—í• ëª©ë¡ì—ì„œ ì„ íƒí•©ë‹ˆë‹¤." />
diff --git a/linden/indra/newview/skins/xui/ko/panel_group_land_money.xml b/linden/indra/newview/skins/xui/ko/panel_group_land_money.xml
index 77f9301..dacabea 100644
--- a/linden/indra/newview/skins/xui/ko/panel_group_land_money.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_group_land_money.xml
@@ -17,9 +17,9 @@
그룹 ì†Œìœ í† ì§€
-
-
-
+
+
+
diff --git a/linden/indra/newview/skins/xui/ko/panel_group_notices.xml b/linden/indra/newview/skins/xui/ko/panel_group_notices.xml
index 9682eea..7edb35b 100644
--- a/linden/indra/newview/skins/xui/ko/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_group_notices.xml
@@ -21,9 +21,9 @@
-
-
-
+
+
+
발견ë˜ì§€ ì•ŠìŒ.
@@ -37,10 +37,10 @@
공지 만들기
- 공지를 ì „ì†¡í•˜ë ¤ë©´ ì œëª©ì„ ìž…ë ¥í•´ì•¼ 합니다. ì¸ë²¤í† 리ì—ì„œ ì´ ì°½ìœ¼ë¡œ
-ì•„ì´í…œì„ 드래그하여 공지 ìž‘ì„±ì°½ì— ë‹¨ì¼ ì•„ì´í…œì„ ì²¨ë¶€í• ìˆ˜
-있습니다. 첨부한 ì•„ì´í…œì€ 복사 ë° ì „ì†¡í• ìˆ˜ 있지만
-ì „ì²´ í´ë”를 ì „ì†¡í• ìˆ˜ëŠ” 없습니다.
+ 공지를 ì „ì†¡í•˜ë ¤ë©´ ì œëª©ì„ ìž…ë ¥í•´ì•¼ 합니다. ì¸ë²¤í† 리ì—ì„œ
+ì´ ì°½ìœ¼ë¡œ ì•„ì´í…œì„ 드래그하여 공지 ìž‘ì„±ì°½ì— ë‹¨ì¼ ì•„ì´í…œì„
+ì²¨ë¶€í• ìˆ˜ 있습니다. 첨부한 ì•„ì´í…œì€ 복사 ë° ì „ì†¡í•
+수 있지만 ì „ì²´ í´ë”를 ì „ì†¡í• ìˆ˜ëŠ” 없습니다.
ì œëª©:
@@ -55,7 +55,7 @@
name="remove_attachment" />
+ tool_tip="ì¸ë²¤í† 리 ì•„ì´í…œì„ 공지와 함께 ë³´ë‚´ë ¤ë©´ 메시지 박스로 드래그하ì‹ì‹œì˜¤. 공지와 함께 ë³´ë‚´ë ¤ë©´ 복사와 ì „ì†¡í• ê¶Œë¦¬ë¥¼ 허가받아야 합니다." />
diff --git a/linden/indra/newview/skins/xui/ko/panel_group_roles.xml b/linden/indra/newview/skins/xui/ko/panel_group_roles.xml
index 0a9070a..2cbc3f5 100644
--- a/linden/indra/newview/skins/xui/ko/panel_group_roles.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_group_roles.xml
@@ -50,12 +50,12 @@
-
-
-
+
+
+
-
+
회ì›ì—게 í• ë‹¹ëœ ì—í• ì„ ì¶”ê°€ ë˜ëŠ” ì œê±°í• ìˆ˜ 있습니다.
Ctrl 키를 누른 ìƒíƒœë¡œ 해당하는 íšŒì› ì´ë¦„ì„ í´ë¦í•˜ë©´
@@ -66,9 +66,9 @@
-
-
-
+
+
+
@@ -81,7 +81,7 @@
-
+
@@ -103,7 +103,7 @@
+ tool_tip="ê°œê°œì˜ í—ˆìš©ëœ ê¶Œí•œ 세부사í•ì€ 권한 íƒì„ ì°¸ê³ í•˜ì‹ì‹œì˜¤.">
@@ -137,7 +137,7 @@
+ tool_tip="ê°œê°œì˜ í—ˆìš©ëœ ê¶Œí•œ 세부사í•ì€ 권한 íƒì„ ì°¸ê³ í•˜ì‹ì‹œì˜¤.">
diff --git a/linden/indra/newview/skins/xui/ko/panel_group_voting.xml b/linden/indra/newview/skins/xui/ko/panel_group_voting.xml
index d18865a..53070b3 100644
--- a/linden/indra/newview/skins/xui/ko/panel_group_voting.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_group_voting.xml
@@ -21,7 +21,7 @@
ì œì•ˆ 투표
- ë§Œë“¤ë ¤ëŠ” ì œì•ˆì€ ë¹„ì–´ 있습니다. ì œì•ˆì„ ë§Œë“¤ê¸° ì „ì— ìž‘ì„±í•˜ì…”ì•¼ 합니다.
+ ìž‘ì„±í•˜ê³ ìž í•˜ëŠ” ì œì•ˆì´ ë¹„ì–´ 있습니다. ì œì•ˆì„ í•˜ê¸°ì „ì— ìž‘ì„±í•˜ì…”ì•¼ 합니다.
íˆ¬í‘œí•˜ë ¤ëŠ” ì œì•ˆì„ ë”블 í´ë¦í•˜ê±°ë‚˜ 만들기를 눌러 새로운 ì œì•ˆì„ ìƒì„±í•©ë‹ˆë‹¤.
@@ -49,7 +49,7 @@
ì¼
-
+
단순 과반수
2/3 과반수
만장ì¼ì¹˜
@@ -62,14 +62,14 @@
-
-
+
+
그룹 투표 기ë¡
- 지난 투표를 ë”블 í´ë¦í•˜ê±°ë‚˜ 하나를 ì„ íƒí•˜ê³ 결과보기를 í´ë¦í•˜ì—¬ 결과를 봅니다.
+ ê³¼ê±°ì˜ íˆ¬í‘œë¥¼ ë”블 í´ë¦í•˜ê±°ë‚˜ 하나를 ì„ íƒí•˜ê³ ì•„ì´í…œë³´ê¸°ë¥¼ í´ë¦í•©ë‹ˆë‹¤.
ê³¼ê±°ì˜ íˆ¬í‘œ 투표 종료
diff --git a/linden/indra/newview/skins/xui/ko/panel_land_covenant.xml b/linden/indra/newview/skins/xui/ko/panel_land_covenant.xml
index 1dc1268..550ae3f 100644
--- a/linden/indra/newview/skins/xui/ko/panel_land_covenant.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_land_covenant.xml
@@ -19,10 +19,10 @@
(ì•Œ 수 ì—†ìŒ)
- ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” 재íŒë§¤ í• ìˆ˜ 없는 ê²½ìš°ë„ ìžˆìŠµë‹ˆë‹¤.
+ ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” 재íŒë§¤ í• ìˆ˜ ì—†ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.
- ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” ê²°í•© ë˜ëŠ” ë¶„í• í• ìˆ˜ 없는 ê²½ìš°ë„ ìžˆìŠµë‹ˆë‹¤.
+ ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” ê²°í•©/ë¶„í• í• ìˆ˜ ì—†ì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.
ì´ ì§€ì—ì—ì„œ 구매한 í† ì§€ëŠ” 재íŒë§¤ í• ìˆ˜ 있습니다.
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_audio.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_audio.xml
index fd6e8b3..17f738f 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_audio.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_audio.xml
@@ -24,8 +24,8 @@
메뉴 효과ìŒ:
-
-
+
+
ë„플러 효과:
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_chat.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_chat.xml
index 358d551..93a36de 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_chat.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_chat.xml
@@ -15,19 +15,19 @@
- ê¸€ìž ìƒ‰:
+ 채팅색:
-
+
콘솔:
- (ì´ˆ)
+ (초뒤)
(#í–‰)
@@ -37,14 +37,14 @@
옵션:
-
-
+
- ë§í’ì„ ì±„íŒ…:
+ 물방울 채팅:
-
+
스í¬ë¦½íŠ¸ 오류:
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml
index d6bfebf..6746cb2 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_general.xml
@@ -20,19 +20,19 @@
í•ìƒ
-
-
+
+
-
+
-
시작 위치:
@@ -41,7 +41,7 @@
ì´ë¦„ 표시:
- ë‚´ 효과를 위한 색ìƒ:
+ ìƒ‰ìƒ íš¨ê³¼:
ì´ˆ
@@ -53,7 +53,7 @@
언어:
- (ìž¬ì‹œë™ í•„ìš”)
+ (다시 시작하ì‹ì‹œì˜¤.)
<지ì—명 ìž…ë ¥>
@@ -86,16 +86,16 @@
불어(French) – ë² íƒ€
- ì¼ë³¸ì–´ (Japanese) - Beta
+ ì¼ë³¸ì–´ (Japanese) - ë² íƒ€
- í•œêµì–´ (Korean) - Beta
+ í•œêµì–´ (Korean) - ë² íƒ€
í¬ë¥´íˆ¬ê°ˆì–´ â€“ë² íƒ€
- Español (스페ì¸ì–´) - ë² íƒ€
+ 스페ì¸ì–´ (Español) - ë² íƒ€
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml
index 06c3ec1..142f7c8 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_graphics2.xml
@@ -1,11 +1,11 @@
-
+
ì‰ì´ë”:
-
+
아바타 ë Œë”ë§:
@@ -43,15 +43,15 @@
- 오브ì 트 메쉬 디테ì¼:
+ 오브ì 트 그물 세부사í•:
- í”Œë ‰ì‹œë¸” 메쉬 디테ì¼:
+ ì‹ ì¶•ì 그물 세부사í•:
- 나무 메쉬 디테ì¼:
+ 나무 그물 세부사í•:
- 아바타 메쉬 디테ì¼:
+ 아바타 그물 세부사í•:
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml
index c03812d..7eca4c4 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_graphics3.xml
@@ -41,7 +41,7 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_im.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_im.xml
index 54e2dac..ffdeee6 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_im.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_im.xml
@@ -1,9 +1,9 @@
- 프로필 온ë¼ì¸ ìƒíƒœ:
+ 온ë¼ì¸ ìƒíƒœ 프로필:
-
+
ë©”ì‹ ì € 옵션:
@@ -15,9 +15,9 @@
-
+
- 부재중 답변:
+ 통화중 답변 모드:
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_input.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_input.xml
index befc9b4..c5aef21 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_input.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_input.xml
@@ -1,5 +1,5 @@
-
+
1ì¸ì¹ ì‹œì 옵션:
@@ -17,9 +17,9 @@
ì¹´ë©”ë¼ ì‹ ì¶•ì„±:
-
-
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_network.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_network.xml
index e1210fb..06539d7 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_network.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_network.xml
@@ -14,7 +14,7 @@
ë””ìŠ¤í¬ ìºì‹œ 위치:
-
+
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_popups.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_popups.xml
index 87b9c1e..0e26606 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_popups.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_popups.xml
@@ -5,9 +5,9 @@
- í—ˆìš©ëœ íŒì—…:
+ ì œê³µëœ ë…¸íŠ¸ì¹´ë“œ, í…스ì³, 랜드마í¬:
-
diff --git a/linden/indra/newview/skins/xui/ko/panel_region_debug.xml b/linden/indra/newview/skins/xui/ko/panel_region_debug.xml
index abe8d8d..11998fe 100644
--- a/linden/indra/newview/skins/xui/ko/panel_region_debug.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_region_debug.xml
@@ -17,8 +17,8 @@
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ko/panel_region_general.xml b/linden/indra/newview/skins/xui/ko/panel_region_general.xml
index 69b8b30..adb9083 100644
--- a/linden/indra/newview/skins/xui/ko/panel_region_general.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_region_general.xml
@@ -35,8 +35,8 @@
-
-
+
+
diff --git a/linden/indra/newview/skins/xui/ko/panel_region_terrain.xml b/linden/indra/newview/skins/xui/ko/panel_region_terrain.xml
index 4cc8f57..774d333 100644
--- a/linden/indra/newview/skins/xui/ko/panel_region_terrain.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_region_terrain.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/linden/indra/newview/skins/xui/ko/panel_region_texture.xml b/linden/indra/newview/skins/xui/ko/panel_region_texture.xml
index 6443b36..855e0c2 100644
--- a/linden/indra/newview/skins/xui/ko/panel_region_texture.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_region_texture.xml
@@ -48,7 +48,7 @@
ì´ ê°’ë“¤ì€ ìœ„ í…ìŠ¤ì²˜ì˜ í˜¼í•© 범위를 나타냅니다.
- 미터법으로 ì¸¡ì •í•˜ì—¬ ìµœì € ê°’ì€ í…스처 1ë²ˆì˜ ìµœê³ ë†’ì´ì´ìž„
+ 미터법으로 ì¸¡ì •í•˜ì—¬ ìµœì € ê°’ì€ í…스처 1ë²ˆì˜ ìµœê³ ë†’ì´ìž„
ìµœê³ ê°’ì€ í…스처 4ë²ˆì˜ ìµœì € 높ì´ìž…니다.
diff --git a/linden/indra/newview/viewer.cpp b/linden/indra/newview/viewer.cpp
index 48108bd..9bfa373 100644
--- a/linden/indra/newview/viewer.cpp
+++ b/linden/indra/newview/viewer.cpp
@@ -205,7 +205,6 @@
#include "llviewerbuild.h"
#include "llviewercamera.h"
#include "llviewercontrol.h"
-#include "llviewerjointmesh.h"
#include "llviewerimagelist.h"
#include "llviewerkeyboard.h"
#include "llviewermenu.h"
@@ -322,6 +321,9 @@ LLString gDisabledMessage;
BOOL gHideLinks = FALSE;
// This is whether or not we are connect to a production grid.
+// HACK/TEMP - the code that used to set this based on the userserver selection
+// is gone, so there is no code that currently sets this to TRUE. Since we don't
+// want to ship as "FALSE", hardcoding it to TRUE for now. Please fix.
BOOL gInProductionGrid = FALSE;
//#define APPLE_PREVIEW // Define this if you're doing a preview build on the Mac
@@ -929,6 +931,11 @@ int main( int argc, char **argv )
}
}
+ if (!strcmp(gUserServerName, gUserServerDomainName[USERSERVER_AGNI].mName))
+ {
+ gInProductionGrid = TRUE;
+ }
+
//
// Start of the application
//
@@ -966,7 +973,6 @@ int main( int argc, char **argv )
// Set up some defaults...
gSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, DEFAULT_SETTINGS_FILE);
gOldSettingsFileName = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, LEGACY_DEFAULT_SETTINGS_FILE);
- gUserServer.setPort(DEFAULT_USER_SERVER_PORT);
/////////////////////////////////////////
//
@@ -1078,10 +1084,8 @@ int main( int argc, char **argv )
// Initialize apple menubar and various callbacks
init_apple_menu(gSecondLife.c_str());
-#if __ppc__
// If the CPU doesn't have Altivec (i.e. it's not at least a G4), don't go any further.
- // Only test PowerPC - all Intel Macs have SSE.
- if(!gSysCPU.hasAltivec())
+ if(!gSysCPU.hasSSE())
{
std::ostringstream msg;
msg << gSecondLife << " requires a processor with AltiVec (G4 or later).";
@@ -1092,7 +1096,6 @@ int main( int argc, char **argv )
remove_marker_file();
return 1;
}
-#endif
#endif // LL_DARWIN
@@ -3101,36 +3104,7 @@ void user_logout()
LLMessageSystem* msg = gMessageSystem;
if (msg)
{
-/* if (gSavedSettings.getBOOL("LoggedIn") )
- {
- // bleah - we can't use llinfos inside a signal handler
- //llinfos << "Sending logout message" << llendl;
-
- msg->newMessage("LogoutDemand");
- msg->nextBlockFast(_PREHASH_LogoutBlock);
- msg->addUUIDFast(_PREHASH_SessionID, gAgentSessionID );
- msg->sendMessage(gUserServer);
-*/
gSavedSettings.setBOOL("LoggedIn", FALSE);
-// }
- /* This message has been removed and functionality moved into logoutrequest
-
- if (gAgent.getRegion())
- {
- msg->newMessageFast(_PREHASH_AgentQuit);
- msg->nextBlockFast(_PREHASH_AgentData);
- msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
- msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
- gAgent.sendMessage();
- }
- */
-
- // Go through all of the regions we know about...
-/* if (gWorldp)
- {
- gWorldp->disconnectRegions();
- }*/
-
}
gDoneLogout = TRUE;
}
@@ -3404,15 +3378,7 @@ void update_statistics(U32 frame_count)
gViewerStats->mTexturePacketsStat.addValue(LLViewerImageList::sTexturePackets);
- cdp = gMessageSystem->mCircuitInfo.findCircuit(gUserServer);
- if (cdp)
- {
- gViewerStats->mUserserverPingStat.addValue(cdp->getPingDelay());
- }
- else
- {
- gViewerStats->mUserserverPingStat.addValue(10000);
- }
+ gViewerStats->mUserserverPingStat.addValue(0); // userserver doesn't exist, therefore ping time is always awesome
// log when the LibXUL (aka Mozilla) widget is used and opened so we can monitor framerate changes
#if LL_LIBXUL_ENABLED
@@ -4998,89 +4964,6 @@ class LLRenderLightingDetailListener: public LLSimpleListener
};
static LLRenderLightingDetailListener render_lighting_detail_listener;
-
-//-------------------------------------------------------------------
-//-------------------------------------------------------------------
-// Vector Performance Options
-//-------------------------------------------------------------------
-//-------------------------------------------------------------------
-
-// Initially, we test the performance of the vectorization code, then
-// turn it off if it ends up being slower. JC
-BOOL gVectorizePerfTest = TRUE;
-BOOL gVectorizeEnable = FALSE;
-U32 gVectorizeProcessor = 0;
-BOOL gVectorizeSkin = FALSE;
-
-void update_vector_performances(void)
-{
- char *vp;
-
- switch(gVectorizeProcessor)
- {
- case 2: vp = "SSE2"; break; // *TODO: replace the magic #s
- case 1: vp = "SSE"; break;
- default: vp = "COMPILER DEFAULT"; break;
- }
- llinfos << "Vectorization : " << ( gVectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ;
- llinfos << "Vector Processor : " << vp << llendl ;
- llinfos << "Vectorized Skinning : " << ( gVectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ;
-
- if(gVectorizeEnable && gVectorizeSkin)
- {
- switch(gVectorizeProcessor)
- {
- case 2:
- LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE2;
- break;
- case 1:
- LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE;
- break;
- default:
- LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryVectorized;
- break;
- }
- }
- else
- {
- LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryOriginal;
- }
-}
-
-
-class LLVectorizationEnableListener: public LLSimpleListener
-{
- bool handleEvent(LLPointer event, const LLSD& userdata)
- {
- gVectorizeEnable = event->getValue().asBoolean();
- update_vector_performances();
- return true;
- }
-};
-static LLVectorizationEnableListener vectorization_enable_listener;
-
-class LLVectorizeSkinListener: public LLSimpleListener
-{
- bool handleEvent(LLPointer event, const LLSD& userdata)
- {
- gVectorizeSkin = event->getValue().asBoolean();
- update_vector_performances();
- return true;
- }
-};
-static LLVectorizeSkinListener vectorize_skin_listener;
-
-class LLVectorProcessorListener: public LLSimpleListener
-{
- bool handleEvent(LLPointer event, const LLSD& userdata)
- {
- gVectorizeProcessor = event->getValue().asInteger();
- update_vector_performances();
- return true;
- }
-};
-static LLVectorProcessorListener vector_processor_listener;
-
// Use these strictly for things that are constructed at startup,
// or for things that are performance critical. JC
void saved_settings_to_globals()
@@ -5132,38 +5015,6 @@ void saved_settings_to_globals()
gHandleKeysAsync = gSavedSettings.getBOOL("AsyncKeyboard");
LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips");
- if (gSysCPU.hasAltivec())
- {
- gSavedSettings.setBOOL("VectorizeEnable", TRUE );
- gSavedSettings.setU32("VectorizeProcessor", 0 );
- }
- else
- if (gSysCPU.hasSSE2())
- {
- gSavedSettings.setBOOL("VectorizeEnable", TRUE );
- gSavedSettings.setU32("VectorizeProcessor", 2 );
- }
- else
- if (gSysCPU.hasSSE())
- {
- gSavedSettings.setBOOL("VectorizeEnable", TRUE );
- gSavedSettings.setU32("VectorizeProcessor", 1 );
- }
- else
- {
- // Don't bother testing or running if CPU doesn't support it. JC
- gSavedSettings.setBOOL("VectorizePerfTest", FALSE );
- gSavedSettings.setBOOL("VectorizeEnable", FALSE );
- gSavedSettings.setU32("VectorizeProcessor", 0 );
- gSavedSettings.setBOOL("VectorizeSkin", FALSE);
- }
-
- gVectorizePerfTest = gSavedSettings.getBOOL("VectorizePerfTest");
- gVectorizeEnable = gSavedSettings.getBOOL("VectorizeEnable");
- gVectorizeProcessor = gSavedSettings.getU32("VectorizeProcessor");
- gVectorizeSkin = gSavedSettings.getBOOL("VectorizeSkin");
- update_vector_performances();
-
// Into a global in case we corrupt the list on crash.
gCrashBehavior = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
@@ -5210,9 +5061,6 @@ void saved_settings_to_globals()
gSavedSettings.getControl("FlycamAxis4")->addListener(&joystick_listener);
gSavedSettings.getControl("FlycamAxis5")->addListener(&joystick_listener);
gSavedSettings.getControl("FlycamAxis6")->addListener(&joystick_listener);
- gSavedSettings.getControl("VectorizeEnable")->addListener(&vectorization_enable_listener);
- gSavedSettings.getControl("VectorizeProcessor")->addListener(&vector_processor_listener);
- gSavedSettings.getControl("VectorizeSkin")->addListener(&vectorize_skin_listener);
// gAgent.init() also loads from saved settings.
}
@@ -5828,28 +5676,10 @@ int parse_args(int argc, char **argv)
gUserServerChoice = USERSERVER_OTHER;
ip_string.assign( argv[j] );
LLString::trim(ip_string);
- gUserServer.setHostByName( ip_string.c_str() );
snprintf(gUserServerName, MAX_STRING, "%s", ip_string.c_str()); /* Flawfinder: ignore */
}
gConnectToSomething = TRUE;
}
- else if (!strcmp(argv[j], "-space") && (++j < argc))
- {
- if (!strcmp(argv[j], "-"))
- {
- gUserServerChoice = USERSERVER_LOCAL;
- }
- else
- {
- gUserServerChoice = USERSERVER_OTHER;
- ip_string.assign( argv[j] );
- LLString::trim(ip_string);
- gUserServer.setAddress( ip_string.c_str() );
- }
- gConnectToSomething = TRUE;
-
- llinfos << "Argument -space is deprecated, use -user instead" << llendl;
- }
else if (!strcmp(argv[j], "-loginuri") && (++j < argc))
{
gLoginURIs.push_back(utf8str_trim(argv[j]));
@@ -5921,7 +5751,6 @@ int parse_args(int argc, char **argv)
else if (!strcmp(argv[j], "-local"))
{
gConnectToSomething = FALSE;
- gUserServer.invalidate();
gRunLocal = TRUE;
}
else if(!strcmp(argv[j], "-noinvlib"))
@@ -6345,7 +6174,6 @@ void disconnect_viewer(void *)
gWorldp = NULL;
cleanup_xfer_manager();
- gUserServer.invalidate();
gDisconnected = TRUE;
}
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index e66af2a..ccd6c6e 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -40,6 +40,7 @@ class ViewerManifest(LLManifest):
super(ViewerManifest, self).construct()
self.exclude("*.svn*")
self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg")
+ self.path(src="../../etc/message.xml", dst="app_settings/message.xml")
if self.prefix(src="app_settings"):
self.exclude("logcontrol.xml")
diff --git a/linden/indra/test/MacTester.xcodeproj/project.pbxproj b/linden/indra/test/MacTester.xcodeproj/project.pbxproj
index 76bdc0a..1aad040 100644
--- a/linden/indra/test/MacTester.xcodeproj/project.pbxproj
+++ b/linden/indra/test/MacTester.xcodeproj/project.pbxproj
@@ -241,7 +241,7 @@
38A8BF620A18C31D00814862 /* metaproperty.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = metaproperty.cpp; sourceTree = ""; };
38A8BF690A18C38800814862 /* reflective.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = reflective.h; sourceTree = ""; };
38A8BF740A18C42900814862 /* reflective.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = reflective.cpp; sourceTree = ""; };
- 8DD76F6C0486A84900D96B5E /* MacTester */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = MacTester; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8DD76F6C0486A84900D96B5E /* MacTester */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = MacTester; sourceTree = BUILT_PRODUCTS_DIR; };
91469E7F0B4486F20009E8F9 /* llmime.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmime.cpp; sourceTree = ""; };
91469E800B4486F20009E8F9 /* llmime.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmime.h; sourceTree = ""; };
91469E830B44870B0009E8F9 /* llmime_tut.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmime_tut.cpp; sourceTree = ""; };
diff --git a/linden/indra/test/blowfish.pl b/linden/indra/test/blowfish.pl
index 7940d87..30f41dc 100755
--- a/linden/indra/test/blowfish.pl
+++ b/linden/indra/test/blowfish.pl
@@ -1,4 +1,9 @@
#!/usr/bin/perl
+#
+# Test Perl Crypt::CBC Blowfish algorithm and initial parameter settings
+# for compatibility with OpenSSL's Blowfish algorithm/settings.
+#
+# Used by outbound LSL email (openssl C library) and mailglue (Perl library)
use strict;
use warnings;
diff --git a/linden/indra/test/files.lst b/linden/indra/test/files.lst
index 74f8879..8063bfd 100644
--- a/linden/indra/test/files.lst
+++ b/linden/indra/test/files.lst
@@ -4,24 +4,45 @@ test/io.cpp
test/llapp_tut.cpp
test/llbase64_tut.cpp
test/llblowfish_tut.cpp
+test/llbuffer_tut.cpp
+test/lldate_tut.cpp
test/llerror_tut.cpp
+test/llhost_tut.cpp
test/llhttpclient_tut.cpp
test/llhttpnode_tut.cpp
test/llinventoryparcel_tut.cpp
test/lliohttpserver_tut.cpp
+test/lljoint_tut.cpp
test/llmime_tut.cpp
test/llmessageconfig_tut.cpp
+test/llmessagetemplateparser_tut.cpp
+test/llnamevalue_tut.cpp
+test/llpermissions_tut.cpp
test/llpipeutil.cpp
+test/llquaternion_tut.cpp
test/llrandom_tut.cpp
+test/llsaleinfo_tut.cpp
test/llsdmessagebuilder_tut.cpp
test/llsdmessagereader_tut.cpp
test/llsd_new_tut.cpp
test/llsdserialize_tut.cpp
+test/llsdutil_tut.cpp
test/llservicebuilder_tut.cpp
+test/llstreamtools_tut.cpp
+test/lltemplatemessagebuilder_tut.cpp
test/lltiming_tut.cpp
test/lltut.cpp
test/lluri_tut.cpp
+test/lluuidhashmap_tut.cpp
test/llxfer_tut.cpp
test/math.cpp
+test/message_tut.cpp
test/reflection_tut.cpp
test/test.cpp
+test/v2math_tut.cpp
+test/v3color_tut.cpp
+test/v3dmath_tut.cpp
+test/v3math_tut.cpp
+test/v4color_tut.cpp
+test/v4coloru_tut.cpp
+test/v4math_tut.cpp
diff --git a/linden/indra/test/inventory.cpp b/linden/indra/test/inventory.cpp
index 0539910..944647f 100644
--- a/linden/indra/test/inventory.cpp
+++ b/linden/indra/test/inventory.cpp
@@ -28,12 +28,6 @@
* COMPLETENESS OR PERFORMANCE.
*/
-/**
- *
- * THOROUGH_DESCRIPTION of inventory.cpp
- *
- */
-
#include "linden_common.h"
#include "lltut.h"
#include "llinventory.h"
@@ -102,67 +96,438 @@ namespace tut
typedef inventory_test::object inventory_object;
tut::inventory_test inv("llinventory");
+//***class LLInventoryType***//
+
+
template<> template<>
void inventory_object::test<1>()
{
+ LLInventoryType::EType retType = LLInventoryType::lookup("sound");
+ ensure("1.LLInventoryType::lookup(char*) failed", retType == LLInventoryType::IT_SOUND);
+
+ retType = LLInventoryType::lookup("snapshot");
+ ensure("2.LLInventoryType::lookup(char*) failed", retType == LLInventoryType::IT_SNAPSHOT);
+ }
+
+ template<> template<>
+ void inventory_object::test<2>()
+ {
+ const char* retType = LLInventoryType::lookup(LLInventoryType::IT_CALLINGCARD);
+ ensure("1.LLInventoryType::lookup(EType) failed", 0 == strcmp(retType, "callcard"));
+
+ retType = LLInventoryType::lookup(LLInventoryType::IT_LANDMARK);
+ ensure("2.LLInventoryType::lookup(EType) failed", 0 == strcmp(retType, "landmark"));
+
+ }
+
+ template<> template<>
+ void inventory_object::test<3>()
+ {
+ static const char* retType = LLInventoryType::lookupHumanReadable(LLInventoryType::IT_CALLINGCARD);
+ ensure("1.LLInventoryType::lookupHumanReadable(EType) failed", 0 == strcmp(retType, "calling card"));
+
+ retType = LLInventoryType::lookupHumanReadable(LLInventoryType::IT_LANDMARK);
+ ensure("2.LLInventoryType::lookupHumanReadable(EType) failed", 0 == strcmp(retType, "landmark"));
+ }
+
+ template<> template<>
+ void inventory_object::test<4>()
+ {
+ static LLInventoryType::EType retType = LLInventoryType::defaultForAssetType(LLAssetType::AT_TEXTURE);
+ ensure("1.LLInventoryType::defaultForAssetType(LLAssetType EType) failed", retType == LLInventoryType::IT_TEXTURE);
+
+ retType = LLInventoryType::defaultForAssetType(LLAssetType::AT_LANDMARK);
+ ensure("2.LLInventoryType::defaultForAssetType(LLAssetType EType) failed", retType == LLInventoryType::IT_LANDMARK);
+ }
+
+//*****class LLInventoryItem*****//
+
+ template<> template<>
+ void inventory_object::test<5>()
+ {
LLPointer src = create_random_inventory_item();
LLSD sd = ll_create_sd_from_inventory_item(src);
//llinfos << "sd: " << *sd << llendl;
- LLPointer dst;
+ LLPointer dst = ll_create_item_from_sd(sd);
+ ensure_equals("1.item id::getUUID() failed", dst->getUUID(), src->getUUID());
+ ensure_equals("2.parent::getParentUUID() failed", dst->getParentUUID(), src->getParentUUID());
+ ensure_equals("3.name::getName() failed", dst->getName(), src->getName());
+ ensure_equals("4.type::getType() failed", dst->getType(), src->getType());
+
+ ensure_equals("5.permissions::getPermissions() failed", dst->getPermissions(), src->getPermissions());
+ ensure_equals("6.description::getDescription() failed", dst->getDescription(), src->getDescription());
+ ensure_equals("7.sale type::getSaleType() failed", dst->getSaleInfo().getSaleType(), src->getSaleInfo().getSaleType());
+ ensure_equals("8.sale price::getSalePrice() failed", dst->getSaleInfo().getSalePrice(), src->getSaleInfo().getSalePrice());
+ ensure_equals("9.asset id::getAssetUUID() failed", dst->getAssetUUID(), src->getAssetUUID());
+ ensure_equals("10.inventory type::getInventoryType() failed", dst->getInventoryType(), src->getInventoryType());
+ ensure_equals("11.flags::getFlags() failed", dst->getFlags(), src->getFlags());
+ ensure_equals("12.creation::getCreationDate() failed", dst->getCreationDate(), src->getCreationDate());
+
+ LLUUID new_item_id, new_parent_id;
+ new_item_id.generate();
+ src->setUUID(new_item_id);
+
+ new_parent_id.generate();
+ src->setParent(new_parent_id);
+
+ LLString new_name = "LindenLab";
+ src->rename(new_name);
+
+ src->setType(LLAssetType::AT_SOUND);
+
+ LLUUID new_asset_id;
+ new_asset_id.generate();
+
+ src->setAssetUUID(new_asset_id);
+ LLString new_desc = "SecondLife Testing";
+ src->setDescription(new_desc);
+
+ S32 new_price = rand();
+ LLSaleInfo new_sale_info(LLSaleInfo::FS_COPY, new_price);
+ src->setSaleInfo(new_sale_info);
+
+ U32 new_flags = rand();
+ S32 new_creation = time(NULL);
+
+ LLPermissions new_perm;
+
+ LLUUID new_creator_id;
+ new_creator_id.generate();
+
+ LLUUID new_owner_id;
+ new_owner_id.generate();
+
+ LLUUID last_owner_id;
+ last_owner_id.generate();
+
+ LLUUID new_group_id;
+ new_group_id.generate();
+ new_perm.init(new_creator_id, new_owner_id, last_owner_id, new_group_id);
+ new_perm.initMasks(PERM_ALL, PERM_ALL, PERM_COPY, PERM_COPY, PERM_MODIFY | PERM_COPY);
+ src->setPermissions(new_perm);
+
+ src->setInventoryType(LLInventoryType::IT_SOUND);
+ src->setFlags(new_flags);
+ src->setCreationDate(new_creation);
+
+ sd = ll_create_sd_from_inventory_item(src);
+ //llinfos << "sd: " << *sd << llendl;
dst = ll_create_item_from_sd(sd);
- ensure_equals("item id", dst->getUUID(), src->getUUID());
- ensure_equals("parent", dst->getParentUUID(), src->getParentUUID());
- ensure_equals("name", dst->getName(), src->getName());
- ensure_equals("type", dst->getType(), src->getType());
- ensure_equals(
- "permissions",
- dst->getPermissions(),
- src->getPermissions());
- ensure_equals(
- "description",
- dst->getDescription(),
- src->getDescription());
- ensure_equals(
- "sale type",
- dst->getSaleInfo().getSaleType(),
- src->getSaleInfo().getSaleType());
- ensure_equals(
- "sale price",
- dst->getSaleInfo().getSalePrice(),
- src->getSaleInfo().getSalePrice());
- ensure_equals("asset id", dst->getAssetUUID(), src->getAssetUUID());
- ensure_equals(
- "inventory type",
- dst->getInventoryType(),
- src->getInventoryType());
- ensure_equals("flags", dst->getFlags(), src->getFlags());
- ensure_equals(
- "creation",
- dst->getCreationDate(),
- src->getCreationDate());
+ ensure_equals("13.item id::getUUID() failed", dst->getUUID(), src->getUUID());
+ ensure_equals("14.parent::getParentUUID() failed", dst->getParentUUID(), src->getParentUUID());
+ ensure_equals("15.name::getName() failed", dst->getName(), src->getName());
+ ensure_equals("16.type::getType() failed", dst->getType(), src->getType());
+
+ ensure_equals("17.permissions::getPermissions() failed", dst->getPermissions(), src->getPermissions());
+ ensure_equals("18.description::getDescription() failed", dst->getDescription(), src->getDescription());
+ ensure_equals("19.sale type::getSaleType() failed type", dst->getSaleInfo().getSaleType(), src->getSaleInfo().getSaleType());
+ ensure_equals("20.sale price::getSalePrice() failed price", dst->getSaleInfo().getSalePrice(), src->getSaleInfo().getSalePrice());
+ ensure_equals("21.asset id::getAssetUUID() failed id", dst->getAssetUUID(), src->getAssetUUID());
+ ensure_equals("22.inventory type::getInventoryType() failed type", dst->getInventoryType(), src->getInventoryType());
+ ensure_equals("23.flags::getFlags() failed", dst->getFlags(), src->getFlags());
+ ensure_equals("24.creation::getCreationDate() failed", dst->getCreationDate(), src->getCreationDate());
+
}
template<> template<>
- void inventory_object::test<2>()
+ void inventory_object::test<6>()
+ {
+ LLPointer src = create_random_inventory_item();
+
+ LLUUID new_item_id, new_parent_id;
+ new_item_id.generate();
+ src->setUUID(new_item_id);
+
+ new_parent_id.generate();
+ src->setParent(new_parent_id);
+
+ LLString new_name = "LindenLab";
+ src->rename(new_name);
+
+ src->setType(LLAssetType::AT_SOUND);
+
+ LLUUID new_asset_id;
+ new_asset_id.generate();
+
+ src->setAssetUUID(new_asset_id);
+ LLString new_desc = "SecondLife Testing";
+ src->setDescription(new_desc);
+
+ S32 new_price = rand();
+ LLSaleInfo new_sale_info(LLSaleInfo::FS_COPY, new_price);
+ src->setSaleInfo(new_sale_info);
+
+ U32 new_flags = rand();
+ S32 new_creation = time(NULL);
+
+ LLPermissions new_perm;
+
+ LLUUID new_creator_id;
+ new_creator_id.generate();
+
+ LLUUID new_owner_id;
+ new_owner_id.generate();
+
+ LLUUID last_owner_id;
+ last_owner_id.generate();
+
+ LLUUID new_group_id;
+ new_group_id.generate();
+ new_perm.init(new_creator_id, new_owner_id, last_owner_id, new_group_id);
+ new_perm.initMasks(PERM_ALL, PERM_ALL, PERM_COPY, PERM_COPY, PERM_MODIFY | PERM_COPY);
+ src->setPermissions(new_perm);
+
+ src->setInventoryType(LLInventoryType::IT_SOUND);
+ src->setFlags(new_flags);
+ src->setCreationDate(new_creation);
+
+ LLSD sd = ll_create_sd_from_inventory_item(src);
+ LLPointer dst = ll_create_item_from_sd(sd);
+
+
+ LLPointer src1 = create_random_inventory_item();
+ src1->copy(src);
+ src1->clone(src);
+
+ ensure_equals("1.item id::getUUID() failed", dst->getUUID(), src1->getUUID());
+ ensure_equals("2.parent::getParentUUID() failed", dst->getParentUUID(), src1->getParentUUID());
+ ensure_equals("3.name::getName() failed", dst->getName(), src1->getName());
+ ensure_equals("4.type::getType() failed", dst->getType(), src1->getType());
+
+ ensure_equals("5.permissions::getPermissions() failed", dst->getPermissions(), src1->getPermissions());
+ ensure_equals("6.description::getDescription() failed", dst->getDescription(), src1->getDescription());
+ ensure_equals("7.sale type::getSaleType() failed type", dst->getSaleInfo().getSaleType(), src1->getSaleInfo().getSaleType());
+ ensure_equals("8.sale price::getSalePrice() failed price", dst->getSaleInfo().getSalePrice(), src1->getSaleInfo().getSalePrice());
+ ensure_equals("9.asset id::getAssetUUID() failed id", dst->getAssetUUID(), src1->getAssetUUID());
+ ensure_equals("10.inventory type::getInventoryType() failed type", dst->getInventoryType(), src1->getInventoryType());
+ ensure_equals("11.flags::getFlags() failed", dst->getFlags(), src1->getFlags());
+ ensure_equals("12.creation::getCreationDate() failed", dst->getCreationDate(), src1->getCreationDate());
+
+ LLPointer src2;
+ src1->clone(src2);
+
+ ensure_not_equals("13.item id::getUUID() failed", src1->getUUID(), src2->getUUID());
+ ensure_equals("14.parent::getParentUUID() failed", src2->getParentUUID(), src1->getParentUUID());
+ ensure_equals("15.name::getName() failed", src2->getName(), src1->getName());
+ ensure_equals("16.type::getType() failed", src2->getType(), src1->getType());
+
+ ensure_equals("17.permissions::getPermissions() failed", src2->getPermissions(), src1->getPermissions());
+ ensure_equals("18.description::getDescription() failed", src2->getDescription(), src1->getDescription());
+ ensure_equals("19.sale type::getSaleType() failed type", src2->getSaleInfo().getSaleType(), src1->getSaleInfo().getSaleType());
+ ensure_equals("20.sale price::getSalePrice() failed price", src2->getSaleInfo().getSalePrice(), src1->getSaleInfo().getSalePrice());
+ ensure_equals("21.asset id::getAssetUUID() failed id", src2->getAssetUUID(), src1->getAssetUUID());
+ ensure_equals("22.inventory type::getInventoryType() failed type", src2->getInventoryType(), src1->getInventoryType());
+ ensure_equals("23.flags::getFlags() failed", src2->getFlags(), src1->getFlags());
+ ensure_equals("24.creation::getCreationDate() failed", src2->getCreationDate(), src1->getCreationDate());
+
+
+ }
+
+ template<> template<>
+ void inventory_object::test<7>()
+ {
+ FILE* fp = fopen("linden_file.dat","w+");
+ if(!fp)
+ {
+ llerrs << "file could not be opened\n" << llendl;
+ return;
+ }
+
+ LLPointer src1 = create_random_inventory_item();
+ src1->exportFile(fp, TRUE);
+ fclose(fp);
+
+ LLPointer src2 = new LLInventoryItem();
+ fp = fopen("linden_file.dat","r+");
+ if(!fp)
+ {
+ llerrs << "file could not be opened\n" << llendl;
+ return;
+ }
+
+ src2->importFile(fp);
+ fclose(fp);
+
+ ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID());
+ ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID());
+ ensure_equals("3.permissions::getPermissions() failed", src1->getPermissions(), src2->getPermissions());
+ ensure_equals("4.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice());
+ ensure_equals("5.asset id::getAssetUUID() failed id", src1->getAssetUUID(), src2->getAssetUUID());
+ ensure_equals("6.type::getType() failed", src1->getType(), src2->getType());
+ ensure_equals("7.inventory type::getInventoryType() failed type", src1->getInventoryType(), src2->getInventoryType());
+ ensure_equals("8.name::getName() failed", src1->getName(), src2->getName());
+ ensure_equals("9.description::getDescription() failed", src1->getDescription(), src2->getDescription());
+ ensure_equals("10.creation::getCreationDate() failed", src1->getCreationDate(), src2->getCreationDate());
+
+ }
+
+ template<> template<>
+ void inventory_object::test<8>()
+ {
+
+ LLPointer src1 = create_random_inventory_item();
+
+ std::ostringstream ostream;
+ src1->exportLegacyStream(ostream, TRUE);
+
+ std::istringstream istream(ostream.str());
+ LLPointer src2 = new LLInventoryItem();
+ src2->importLegacyStream(istream);
+
+ ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID());
+ ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID());
+ ensure_equals("3.permissions::getPermissions() failed", src1->getPermissions(), src2->getPermissions());
+ ensure_equals("4.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice());
+ ensure_equals("5.asset id::getAssetUUID() failed id", src1->getAssetUUID(), src2->getAssetUUID());
+ ensure_equals("6.type::getType() failed", src1->getType(), src2->getType());
+ ensure_equals("7.inventory type::getInventoryType() failed type", src1->getInventoryType(), src2->getInventoryType());
+ ensure_equals("8.name::getName() failed", src1->getName(), src2->getName());
+ ensure_equals("9.description::getDescription() failed", src1->getDescription(), src2->getDescription());
+ ensure_equals("10.creation::getCreationDate() failed", src1->getCreationDate(), src2->getCreationDate());
+
+
+ }
+
+ template<> template<>
+ void inventory_object::test<9>()
+ {
+// exportFileXML seg-faults for some reason. LLXMLNode is teh suck.
+#if 0
+ LLPointer src1 = create_random_inventory_item();
+ LLXMLNode* x_node = src1->exportFileXML(TRUE);
+
+ LLPointer src2 = new LLInventoryItem();
+ src2->importXML(x_node);
+ ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID());
+ ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID());
+ ensure_equals("3.permissions::getPermissions() failed", src1->getPermissions(), src2->getPermissions());
+ ensure_equals("4.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice());
+ ensure_equals("5.asset id::getAssetUUID() failed id", src1->getAssetUUID(), src2->getAssetUUID());
+ ensure_equals("6.type::getType() failed", src1->getType(), src2->getType());
+ ensure_equals("7.inventory type::getInventoryType() failed type", src1->getInventoryType(), src2->getInventoryType());
+ ensure_equals("8.name::getName() failed", src1->getName(), src2->getName());
+ ensure_equals("9.description::getDescription() failed", src1->getDescription(), src2->getDescription());
+ ensure_equals("10.creation::getCreationDate() failed", src1->getCreationDate(), src2->getCreationDate());
+#endif
+ }
+
+ template<> template<>
+ void inventory_object::test<10>()
+ {
+ LLPointer src1 = create_random_inventory_item();
+ U8* bin_bucket = new U8[300];
+ S32 bin_bucket_size = src1->packBinaryBucket(bin_bucket, NULL);
+
+ LLPointer src2 = new LLInventoryItem();
+ src2->unpackBinaryBucket(bin_bucket, bin_bucket_size);
+
+ ensure_equals("1.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice());
+ ensure_equals("2.sale type::getSaleType() failed type", src1->getSaleInfo().getSaleType(), src2->getSaleInfo().getSaleType());
+ ensure_equals("3.type::getType() failed", src1->getType(), src2->getType());
+ ensure_equals("4.inventory type::getInventoryType() failed type", src1->getInventoryType(), src2->getInventoryType());
+ ensure_equals("5.name::getName() failed", src1->getName(), src2->getName());
+ ensure_equals("6.description::getDescription() failed", src1->getDescription(), src2->getDescription());
+ ensure_equals("7.flags::getFlags() failed", src1->getFlags(), src2->getFlags());
+
+ }
+
+ template<> template<>
+ void inventory_object::test<11>()
+ {
+ LLPointer src1 = create_random_inventory_item();
+ LLSD retSd = src1->asLLSD();
+ LLPointer src2 = new LLInventoryItem();
+ src2->fromLLSD(retSd);
+
+ ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID());
+ ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID());
+ ensure_equals("3.permissions::getPermissions() failed", src1->getPermissions(), src2->getPermissions());
+ ensure_equals("4.asset id::getAssetUUID() failed id", src1->getAssetUUID(), src2->getAssetUUID());
+ ensure_equals("5.type::getType() failed", src1->getType(), src2->getType());
+ ensure_equals("6.inventory type::getInventoryType() failed type", src1->getInventoryType(), src2->getInventoryType());
+ ensure_equals("7.flags::getFlags() failed", src1->getFlags(), src2->getFlags());
+ ensure_equals("8.sale type::getSaleType() failed type", src1->getSaleInfo().getSaleType(), src2->getSaleInfo().getSaleType());
+ ensure_equals("9.sale price::getSalePrice() failed price", src1->getSaleInfo().getSalePrice(), src2->getSaleInfo().getSalePrice());
+ ensure_equals("10.name::getName() failed", src1->getName(), src2->getName());
+ ensure_equals("11.description::getDescription() failed", src1->getDescription(), src2->getDescription());
+
+
+ skip_fail("12.creation::getCreationDate()");
+ ensure_equals("12.creation::getCreationDate() failed", src1->getCreationDate(), src2->getCreationDate());
+ }
+
+//******class LLInventoryCategory*******//
+
+ template<> template<>
+ void inventory_object::test<12>()
{
LLPointer src = create_random_inventory_cat();
LLSD sd = ll_create_sd_from_inventory_category(src);
LLPointer dst = ll_create_category_from_sd(sd);
- ensure_equals("item id", dst->getUUID(), src->getUUID());
- ensure_equals("parent", dst->getParentUUID(), src->getParentUUID());
- ensure_equals("name", dst->getName(), src->getName());
- ensure_equals("type", dst->getType(), src->getType());
- ensure_equals(
- "preferred type",
- dst->getPreferredType(),
- src->getPreferredType());
+
+ ensure_equals("1.item id::getUUID() failed", dst->getUUID(), src->getUUID());
+ ensure_equals("2.parent::getParentUUID() failed", dst->getParentUUID(), src->getParentUUID());
+ ensure_equals("3.name::getName() failed", dst->getName(), src->getName());
+ ensure_equals("4.type::getType() failed", dst->getType(), src->getType());
+ ensure_equals("5.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType());
+
+ src->setPreferredType( LLAssetType::AT_TEXTURE);
+ sd = ll_create_sd_from_inventory_category(src);
+ dst = ll_create_category_from_sd(sd);
+ ensure_equals("6.preferred type::getPreferredType() failed", dst->getPreferredType(), src->getPreferredType());
+
+
}
-/*
template<> template<>
- void inventory_object::test<3>()
+ void inventory_object::test<13>()
+ {
+ FILE* fp = fopen("linden_file.dat","w");
+ if(!fp)
+ {
+ llerrs << "file coudnt be opened\n" << llendl;
+ return;
+ }
+
+ LLPointer src1 = create_random_inventory_cat();
+ src1->exportFile(fp, TRUE);
+ fclose(fp);
+
+ LLPointer src2 = new LLInventoryCategory();
+ fp = fopen("linden_file.dat","r");
+ if(!fp)
+ {
+ llerrs << "file coudnt be opened\n" << llendl;
+ return;
+ }
+
+ src2->importFile(fp);
+ fclose(fp);
+
+ ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID());
+ ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID());
+ ensure_equals("3.type::getType() failed", src1->getType(), src2->getType());
+ ensure_equals("4.preferred type::getPreferredType() failed", src1->getPreferredType(), src2->getPreferredType());
+ ensure_equals("5.name::getName() failed", src1->getName(), src2->getName());
+ }
+
+ template<> template<>
+ void inventory_object::test<14>()
{
+ LLPointer src1 = create_random_inventory_cat();
+
+ std::ostringstream ostream;
+ src1->exportLegacyStream(ostream, TRUE);
+
+ std::istringstream istream(ostream.str());
+ LLPointer src2 = new LLInventoryCategory();
+ src2->importLegacyStream(istream);
+
+ ensure_equals("1.item id::getUUID() failed", src1->getUUID(), src2->getUUID());
+ ensure_equals("2.parent::getParentUUID() failed", src1->getParentUUID(), src2->getParentUUID());
+ ensure_equals("3.type::getType() failed", src1->getType(), src2->getType());
+ ensure_equals("4.preferred type::getPreferredType() failed", src1->getPreferredType(), src2->getPreferredType());
+ ensure_equals("5.name::getName() failed", src1->getName(), src2->getName());
}
-*/
}
diff --git a/linden/indra/test/llbitpack_tut.cpp b/linden/indra/test/llbitpack_tut.cpp
index 1040a96..71e4a4d 100644
--- a/linden/indra/test/llbitpack_tut.cpp
+++ b/linden/indra/test/llbitpack_tut.cpp
@@ -1,11 +1,12 @@
/**
* @file llbitpack_tut.cpp
* @author Adroit
- * @date February 2007
+ * @date 2007-02
* @brief llstreamtools test cases.
*
* 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
diff --git a/linden/indra/test/llbuffer_tut.cpp b/linden/indra/test/llbuffer_tut.cpp
new file mode 100644
index 0000000..bf58abb
--- /dev/null
+++ b/linden/indra/test/llbuffer_tut.cpp
@@ -0,0 +1,270 @@
+/**
+ * @file llbuffer_tut.cpp
+ * @author Adroit
+ * @date 2007-03
+ * @brief llbuffer test cases.
+ *
+ * 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
+#include "lltut.h"
+#include "llbuffer.h"
+#include "llmemtype.h"
+
+namespace tut
+{
+ struct buffer
+ {
+ };
+
+ typedef test_group buffer_t;
+ typedef buffer_t::object buffer_object_t;
+ tut::buffer_t tut_buffer("buffer");
+
+ template<> template<>
+ void buffer_object_t::test<1>()
+ {
+ LLChannelDescriptors channelDescriptors;
+ ensure("in() and out() functions Failed", (0 == channelDescriptors.in() && 1 == channelDescriptors.out()));
+
+ S32 val = 50;
+ LLChannelDescriptors channelDescriptors1(val);
+ ensure("LLChannelDescriptors in() and out() functions Failed", (50 == channelDescriptors1.in() && 51 == channelDescriptors1.out()));
+ }
+
+ template<> template<>
+ void buffer_object_t::test<2>()
+ {
+ LLSegment segment;
+ ensure("LLSegment get functions failed", (0 == segment.getChannel() && NULL == segment.data() && 0 == segment.size()));
+ segment.setChannel(50);
+ ensure_equals("LLSegment setChannel() function failed", segment.getChannel(), 50);
+ ensure("LLSegment isOnChannel() function failed", (TRUE == segment.isOnChannel(50)));
+ }
+
+ template<> template<>
+ void buffer_object_t::test<3>()
+ {
+ S32 channel = 30;
+ const char str[] = "SecondLife";
+ S32 len = sizeof(str);
+ LLSegment segment(channel, (U8*)str, len);
+ ensure("LLSegment get functions failed", (30 == segment.getChannel() && len == segment.size() && (U8*)str == segment.data()));
+ ensure_memory_matches("LLSegment::data() failed", segment.data(), segment.size(), (U8*)str, len);
+ ensure("LLSegment isOnChannel() function failed", (TRUE == segment.isOnChannel(channel)));
+ }
+
+ template<> template<>
+ void buffer_object_t::test<4>()
+ {
+ S32 channel = 50;
+ S32 bigSize = 16384*2;
+ char str[] = "SecondLife";
+ S32 smallSize = sizeof(str);
+
+ LLSegment segment;
+ LLHeapBuffer buf; // use default size of DEFAULT_HEAP_BUFFER_SIZE = 16384
+
+ S32 requestSize;
+
+ requestSize = 16384-1;
+ ensure("1. LLHeapBuffer createSegment failed", (TRUE == buf.createSegment(channel, requestSize, segment)) && segment.size() == requestSize);
+ // second request for remainign 1 byte
+
+ requestSize = 1;
+ ensure("2. LLHeapBuffer createSegment failed", (TRUE == buf.createSegment(channel, requestSize, segment)) && segment.size() == requestSize);
+
+ // it should fail now.
+ requestSize = 1;
+ ensure("3. LLHeapBuffer createSegment failed", (FALSE == buf.createSegment(channel, requestSize, segment)));
+
+ LLHeapBuffer buf1(bigSize);
+
+ // requst for more than default size but less than total sizeit should fail now.
+ requestSize = 16384 + 1;
+ ensure("4. LLHeapBuffer createSegment failed", (TRUE == buf1.createSegment(channel, requestSize, segment)) && segment.size() == requestSize);
+
+ LLHeapBuffer buf2((U8*) str, smallSize);
+ requestSize = smallSize;
+ ensure("5. LLHeapBuffer createSegment failed", (TRUE == buf2.createSegment(channel, requestSize, segment)) && segment.size() == requestSize && memcmp(segment.data(), (U8*) str, requestSize) == 0);
+ requestSize = smallSize+1;
+ ensure("6. LLHeapBuffer createSegment failed", (FALSE == buf2.createSegment(channel, requestSize, segment)));
+ }
+
+ //makeChannelConsumer()
+ template<> template<>
+ void buffer_object_t::test<5>()
+ {
+ LLChannelDescriptors inchannelDescriptors(20);
+ LLChannelDescriptors outchannelDescriptors = LLBufferArray::makeChannelConsumer(inchannelDescriptors);
+ ensure("LLBufferArray::makeChannelConsumer() function Failed", (21 == outchannelDescriptors.in()));
+ }
+
+ template<> template<>
+ void buffer_object_t::test<6>()
+ {
+ LLBufferArray bufferArray;
+ const char array[] = "SecondLife";
+ S32 len = strlen(array);
+ LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
+ bufferArray.append(channelDescriptors.in(), (U8*)array, len);
+ S32 count = bufferArray.countAfter(channelDescriptors.in(), NULL);
+ ensure_equals("Appended size is:", count, len);
+ }
+
+ //append() and prepend()
+ template<> template<>
+ void buffer_object_t::test<7>()
+ {
+ LLBufferArray bufferArray;
+ const char array[] = "SecondLife";
+ S32 len = strlen(array);
+ const char array1[] = "LindenLabs";
+ S32 len1 = strlen(array1);
+
+ std::string str(array1);
+ str.append(array);
+
+ LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
+ bufferArray.append(channelDescriptors.in(), (U8*)array, len);
+ bufferArray.prepend(channelDescriptors.in(), (U8*)array1, len1);
+ char buf[100];
+ S32 len2 = 20;
+ bufferArray.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2);
+ ensure_equals("readAfter length failed", len2, 20);
+
+ buf[len2] = '\0';
+ ensure_equals("readAfter/prepend/append failed", buf, str);
+ }
+
+ //append()
+ template<> template<>
+ void buffer_object_t::test<8>()
+ {
+ LLBufferArray bufferArray;
+ const char array[] = "SecondLife";
+ S32 len = strlen(array);
+ const char array1[] = "LindenLabs";
+ S32 len1 = strlen(array1);
+
+ std::string str(array);
+ str.append(array1);
+
+ LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
+ bufferArray.append(channelDescriptors.in(), (U8*)array, len);
+ bufferArray.append(channelDescriptors.in(), (U8*)array1, len1);
+ char buf[100];
+ S32 len2 = 20;
+ bufferArray.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2);
+ ensure_equals("readAfter length failed", len2, 20);
+
+ buf[len2] = '\0';
+ ensure_equals("readAfter/append/append failed", buf, str);
+ }
+
+ template<> template<>
+ void buffer_object_t::test<9>()
+ {
+ LLBufferArray bufferArray;
+ const char array[] = "SecondLife";
+ S32 len = strlen(array) + 1;
+ std::string str(array);
+ LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
+ bufferArray.append(channelDescriptors.in(), (U8*)array, len);
+ LLBufferArray bufferArray1;
+ ensure("Contents are not copied and the source buffer is not empty", (1 == bufferArray1.takeContents(bufferArray)));
+
+ char buf[100];
+ S32 len2 = len;
+ bufferArray1.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2);
+ ensure_equals("takeContents failed to copy", buf, str);
+ }
+
+ //seek()
+ template<> template<>
+ void buffer_object_t::test<10>()
+ {
+ const char array[] = "SecondLife is a Virtual World";
+ S32 len = strlen(array);
+ LLBufferArray bufferArray;
+ bufferArray.append(0, (U8*)array, len);
+
+ char buf[255];
+ S32 len1 = 16;
+ U8* last = bufferArray.readAfter(0, 0, (U8*)buf, len1);
+ buf[len1] = '\0';
+ last = bufferArray.seek(0, last, -2);
+
+ len1 = 15;
+ last = bufferArray.readAfter(0, last, (U8*)buf, len1);
+ buf[len1] = '\0';
+ std::string str(buf);
+ ensure_equals("Seek does'nt worked", str, std::string("a Virtual World"));
+ }
+
+ template<> template<>
+ void buffer_object_t::test<11>()
+ {
+ const char array[] = "SecondLife is a Virtual World";
+ S32 len = strlen(array);
+ LLBufferArray bufferArray;
+ bufferArray.append(0, (U8*)array, len);
+
+ char buf[255];
+ S32 len1 = 10;
+ U8* last = bufferArray.readAfter(0, 0, (U8*)buf, len1);
+ bufferArray.splitAfter(last);
+ LLBufferArray::segment_iterator_t iterator = bufferArray.beginSegment();
+ ++iterator;
+ std::string str(((char*)(*iterator).data()), (*iterator).size());
+ ensure_equals("Strings are not equal;splitAfter() operation failed", str, std::string(" is a Virtual World"));
+ }
+
+ //makeSegment()->eraseSegment()
+ template<> template<>
+ void buffer_object_t::test<12>()
+ {
+ LLBufferArray bufferArray;
+ LLChannelDescriptors channelDescriptors;
+ LLBufferArray::segment_iterator_t it;
+ S32 length = 1000;
+ it = bufferArray.makeSegment(channelDescriptors.out(), length);
+ ensure("makeSegment() function failed", (it != bufferArray.endSegment()));
+ ensure("eraseSegment() function failed", bufferArray.eraseSegment(it));
+ ensure("eraseSegment() begin/end should now be same", bufferArray.beginSegment() == bufferArray.endSegment());
+ }
+
+ // constructSegmentAfter()
+ template<> template<>
+ void buffer_object_t::test<13>()
+ {
+ LLBufferArray bufferArray;
+ LLBufferArray::segment_iterator_t it;
+ LLSegment segment;
+ LLBufferArray::segment_iterator_t end = bufferArray.endSegment();
+ it = bufferArray.constructSegmentAfter(NULL, segment);
+ ensure("constructSegmentAfter() function failed", (it == end));
+ }
+}
diff --git a/linden/indra/test/lldatapacker_tut.cpp b/linden/indra/test/lldatapacker_tut.cpp
index 71def35..1c2a10e 100644
--- a/linden/indra/test/lldatapacker_tut.cpp
+++ b/linden/indra/test/lldatapacker_tut.cpp
@@ -1,11 +1,12 @@
/**
* @file lldatapacker_tut.cpp
* @author Adroit
- * @date February 2007
+ * @date 2007-02
* @brief LLDataPacker test cases.
*
* 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
diff --git a/linden/indra/test/lldate_tut.cpp b/linden/indra/test/lldate_tut.cpp
new file mode 100644
index 0000000..f8813e3
--- /dev/null
+++ b/linden/indra/test/lldate_tut.cpp
@@ -0,0 +1,206 @@
+/**
+ * @file lldate_tut.cpp
+ * @author Adroit
+ * @date 2007-02
+ * @brief LLDate test cases.
+ *
+ * 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
+#include "linden_common.h"
+#include "lldate.h"
+
+#define VALID_DATE "2003-04-30T04:00:00Z"
+#define VALID_DATE_LEAP "2004-02-29T04:00:00Z"
+#define VALID_DATE_HOUR_BOUNDARY "2003-04-30T23:59:59Z"
+
+// invalid format
+#define INVALID_DATE_MISSING_YEAR "-04-30T22:59:59Z"
+#define INVALID_DATE_MISSING_MONTH "1900-0430T22:59:59Z"
+#define INVALID_DATE_MISSING_DATE "1900-0430-T22:59:59Z"
+#define INVALID_DATE_MISSING_T "1900-04-30-22:59:59Z"
+#define INVALID_DATE_MISSING_HOUR "1900-04-30T:59:59Z"
+#define INVALID_DATE_MISSING_MIN "1900-04-30T01::59Z"
+#define INVALID_DATE_MISSING_SEC "1900-04-30T01:59Z"
+#define INVALID_DATE_MISSING_Z "1900-04-30T01:59:23"
+#define INVALID_DATE_EMPTY ""
+
+// invalid values
+// apr 1.1.1 seems to not care about constraining the date to valid
+// dates. Put these back when the parser checks.
+#define LL_DATE_PARSER_CHECKS_BOUNDARY 0
+//#define INVALID_DATE_24HOUR_BOUNDARY "2003-04-30T24:00:00Z"
+//#define INVALID_DATE_LEAP "2003-04-29T04:00:00Z"
+//#define INVALID_DATE_HOUR "2003-04-30T24:59:59Z"
+//#define INVALID_DATE_MIN "2003-04-30T22:69:59Z"
+//#define INVALID_DATE_SEC "2003-04-30T22:59:69Z"
+//#define INVALID_DATE_YEAR "0-04-30T22:59:59Z"
+//#define INVALID_DATE_MONTH "2003-13-30T22:59:59Z"
+//#define INVALID_DATE_DAY "2003-04-35T22:59:59Z"
+
+namespace tut
+{
+ struct date_test
+ {
+
+ };
+ typedef test_group date_test_t;
+ typedef date_test_t::object date_test_object_t;
+ tut::date_test_t tut_date_test("date_test");
+
+ /* format validation */
+ template<> template<>
+ void date_test_object_t::test<1>()
+ {
+ LLDate date(VALID_DATE);
+ std::string expected_string;
+ bool result;
+ expected_string = VALID_DATE;
+ ensure_equals("Valid Date failed" , expected_string, date.asString());
+
+ result = date.fromString(VALID_DATE_LEAP);
+ expected_string = VALID_DATE_LEAP;
+ ensure_equals("VALID_DATE_LEAP failed" , expected_string, date.asString());
+
+ result = date.fromString(VALID_DATE_HOUR_BOUNDARY);
+ expected_string = VALID_DATE_HOUR_BOUNDARY;
+ ensure_equals("VALID_DATE_HOUR_BOUNDARY failed" , expected_string, date.asString());
+
+ result = date.fromString(INVALID_DATE_MISSING_YEAR);
+ ensure_equals("INVALID_DATE_MISSING_YEAR should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_MISSING_MONTH);
+ ensure_equals("INVALID_DATE_MISSING_MONTH should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_MISSING_DATE);
+ ensure_equals("INVALID_DATE_MISSING_DATE should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_MISSING_T);
+ ensure_equals("INVALID_DATE_MISSING_T should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_MISSING_HOUR);
+ ensure_equals("INVALID_DATE_MISSING_HOUR should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_MISSING_MIN);
+ ensure_equals("INVALID_DATE_MISSING_MIN should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_MISSING_SEC);
+ ensure_equals("INVALID_DATE_MISSING_SEC should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_MISSING_Z);
+ ensure_equals("INVALID_DATE_MISSING_Z should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_EMPTY);
+ ensure_equals("INVALID_DATE_EMPTY should have failed" , result, false);
+ }
+
+ /* Invalid Value Handling */
+ template<> template<>
+ void date_test_object_t::test<2>()
+ {
+#if LL_DATE_PARSER_CHECKS_BOUNDARY
+ LLDate date;
+ std::string expected_string;
+ bool result;
+
+ result = date.fromString(INVALID_DATE_24HOUR_BOUNDARY);
+ ensure_equals("INVALID_DATE_24HOUR_BOUNDARY should have failed" , result, false);
+ ensure_equals("INVALID_DATE_24HOUR_BOUNDARY date still set to old value on failure!" , date.secondsSinceEpoch(), 0);
+
+ result = date.fromString(INVALID_DATE_LEAP);
+ ensure_equals("INVALID_DATE_LEAP should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_HOUR);
+ ensure_equals("INVALID_DATE_HOUR should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_MIN);
+ ensure_equals("INVALID_DATE_MIN should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_SEC);
+ ensure_equals("INVALID_DATE_SEC should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_YEAR);
+ ensure_equals("INVALID_DATE_YEAR should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_MONTH);
+ ensure_equals("INVALID_DATE_MONTH should have failed" , result, false);
+
+ result = date.fromString(INVALID_DATE_DAY);
+ ensure_equals("INVALID_DATE_DAY should have failed" , result, false);
+#endif
+ }
+
+ /* API checks */
+ template<> template<>
+ void date_test_object_t::test<3>()
+ {
+ LLDate date;
+ std::istringstream stream(VALID_DATE);
+ std::string expected_string = VALID_DATE;
+ date.fromStream(stream);
+ ensure_equals("fromStream failed", date.asString(), expected_string);
+ }
+
+ template<> template<>
+ void date_test_object_t::test<4>()
+ {
+ LLDate date1(VALID_DATE);
+ LLDate date2(date1);
+ ensure_equals("LLDate(const LLDate& date) constructor failed", date1.asString(), date2.asString());
+ }
+
+ template<> template<>
+ void date_test_object_t::test<5>()
+ {
+ LLDate date1(VALID_DATE);
+ LLDate date2(date1.secondsSinceEpoch());
+ ensure_equals("secondsSinceEpoch not equal",date1.secondsSinceEpoch(), date2.secondsSinceEpoch());
+ ensure_equals("LLDate created using secondsSinceEpoch not equal", date1.asString(), date2.asString());
+ }
+
+ template<> template<>
+ void date_test_object_t::test<6>()
+ {
+ LLDate date(VALID_DATE);
+ std::ostringstream stream;
+ stream << date;
+ std::string expected_str = VALID_DATE;
+ ensure_equals("ostringstream failed", expected_str, stream.str());
+ }
+
+ template<> template<>
+ void date_test_object_t::test<7>()
+ {
+ LLDate date;
+ std::istringstream stream(VALID_DATE);
+ stream >> date;
+ std::string expected_str = VALID_DATE;
+ std::ostringstream out_stream;
+ out_stream << date;
+
+ ensure_equals("<< failed", date.asString(),expected_str);
+ ensure_equals("<< to >> failed", stream.str(),out_stream.str());
+ }
+}
diff --git a/linden/indra/test/llhost_tut.cpp b/linden/indra/test/llhost_tut.cpp
new file mode 100644
index 0000000..01f3079
--- /dev/null
+++ b/linden/indra/test/llhost_tut.cpp
@@ -0,0 +1,237 @@
+/**
+ * @file llhost_tut.cpp
+ * @author Adroit
+ * @date 2007-02
+ * @brief llhost test cases.
+ *
+ * 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
+#include "lltut.h"
+#include "linden_common.h"
+#include "llhost.h"
+
+namespace tut
+{
+ struct host_data
+ {
+ };
+ typedef test_group host_test;
+ typedef host_test::object host_object;
+ tut::host_test host_testcase("llhost");
+
+
+ template<> template<>
+ void host_object::test<1>()
+ {
+ LLHost host;
+ ensure("IP address is not NULL", (0 == host.getAddress()) && (0 == host.getPort()) && !host.isOk());
+ }
+ template<> template<>
+ void host_object::test<2>()
+ {
+ U32 ip_addr = 0xc098017d;
+ U32 port = 8080;
+ LLHost host(ip_addr, port);
+ ensure("IP address is invalid", ip_addr == host.getAddress());
+ ensure("Port Number is invalid", port == host.getPort());
+ ensure("IP address and port number both should be ok", host.isOk());
+ }
+
+ template<> template<>
+ void host_object::test<3>()
+ {
+ const char* str = "192.168.1.1";
+ U32 port = 8080;
+ LLHost host(str, port);
+ ensure("IP address could not be processed", (host.getAddress() == ip_string_to_u32(str)));
+ ensure("Port Number is invalid", (port == host.getPort()));
+ }
+
+ template<> template<>
+ void host_object::test<4>()
+ {
+ U32 ip = ip_string_to_u32("192.168.1.1");
+ U32 port = 22;
+ U64 ip_port = (((U64) ip) << 32) | port;
+ LLHost host(ip_port);
+ ensure("IP address is invalid", ip == host.getAddress());
+ ensure("Port Number is invalid", port == host.getPort());
+ }
+
+ template<> template<>
+ void host_object::test<5>()
+ {
+ std::string ip_port_string = "192.168.1.1:8080";
+ U32 ip = ip_string_to_u32("192.168.1.1");
+ U32 port = 8080;
+
+ LLHost host(ip_port_string.c_str());
+ ensure("IP address from IP:port is invalid", ip == host.getAddress());
+ ensure("Port Number from from IP:port is invalid", port == host.getPort());
+ }
+
+ template<> template<>
+ void host_object::test<6>()
+ {
+ U32 ip = 0xc098017d, port = 8080;
+ LLHost host;
+ host.set(ip,port);
+ ensure("IP address is invalid", (ip == host.getAddress()));
+ ensure("Port Number is invalid", (port == host.getPort()));
+ }
+
+ template<> template<>
+ void host_object::test<7>()
+ {
+ const char* str = "192.168.1.1";
+ U32 port = 8080, ip;
+ LLHost host;
+ host.set(str,port);
+ ip = ip_string_to_u32(str);
+ ensure("IP address is invalid", (ip == host.getAddress()));
+ ensure("Port Number is invalid", (port == host.getPort()));
+
+ str = "64.233.187.99";
+ ip = ip_string_to_u32(str);
+ host.setAddress(str);
+ ensure("IP address is invalid", (ip == host.getAddress()));
+
+ ip = 0xc098017b;
+ host.setAddress(ip);
+ ensure("IP address is invalid", (ip == host.getAddress()));
+ // should still use the old port
+ ensure("Port Number is invalid", (port == host.getPort()));
+
+ port = 8084;
+ host.setPort(port);
+ ensure("Port Number is invalid", (port == host.getPort()));
+ // should still use the old address
+ ensure("IP address is invalid", (ip == host.getAddress()));
+ }
+
+ template<> template<>
+ void host_object::test<8>()
+ {
+ char buffer[50];
+ char buffer1[50];
+ const char* str = "192.168.1.1";
+ U32 port = 8080;
+ LLHost host;
+ host.set(str,port);
+ host.getString(buffer, 50);
+ ensure("Function Failed", (0 == strcmp("192.168.1.1:8080", buffer)));
+
+ host.getIPString(buffer1, 50);
+ ensure("Function Failed", (0 == strcmp(str, buffer1)));
+
+ std::string ip_string = host.getIPString();
+ ensure("Function Failed", (0 == strcmp(str, buffer1)));
+
+ std::string ip_string_port = host.getIPandPort();
+ ensure("Function Failed", (0 == strcmp("192.168.1.1:8080", buffer)));
+ }
+
+
+// getHostName() and setHostByName
+ template<> template<>
+ void host_object::test<9>()
+ {
+ std::string hostStr = "google.com";
+ char buffer[50] = {0};
+ LLHost host;
+ host.setHostByName(hostStr.c_str());
+ host.getHostName(buffer, 50);
+ // reverse DNS will likely result in appending of some
+ // sub-domain to the main hostname. so look for
+ // the main domain name and not do the exact compare
+ ensure("getHostName failed", (NULL != strstr(buffer, hostStr.c_str())));
+
+ LLString hostname = host.getHostName();
+ ensure("getHostName failed", (NULL != strstr(hostname.c_str(), hostStr.c_str())));
+ }
+
+// setHostByName for dotted IP
+ template<> template<>
+ void host_object::test<10>()
+ {
+ std::string hostStr = "64.233.167.99";
+ LLHost host;
+ host.setHostByName(hostStr.c_str());
+ ensure("SetHostByName for dotted IP Address failed", host.getAddress() == ip_string_to_u32(hostStr.c_str()));
+ }
+
+ template<> template<>
+ void host_object::test<11>()
+ {
+ LLHost host1(0xc098017d, 8080);
+ LLHost host2 = host1;
+ ensure("Both IP addresses are not same", (host1.getAddress() == host2.getAddress()));
+ ensure("Both port numbers are not same", (host1.getPort() == host2.getPort()));
+ }
+
+ template<> template<>
+ void host_object::test<12>()
+ {
+ LLHost host1("192.168.1.1", 8080);
+ std::string str1 = "192.168.1.1:8080";
+ std::ostringstream stream;
+ stream << host1;
+ ensure("Operator << failed", ( stream.str()== str1));
+
+ // There is no istream >> llhost operator.
+ //std::istringstream is(stream.str());
+ //LLHost host2;
+ //is >> host2;
+ //ensure("Operator >> failed. Not compatible with <<", host1 == host2);
+ }
+
+ // operators ==, !=, <
+ template<> template<>
+ void host_object::test<13>()
+ {
+ U32 ip_addr = 0xc098017d;
+ U32 port = 8080;
+ LLHost host1(ip_addr, port);
+ LLHost host2(ip_addr, port);
+ ensure("operator== failed", host1 == host2);
+
+ // change port
+ host2.setPort(7070);
+ ensure("operator!= failed", host1 != host2);
+
+ // set port back to 8080 and change IP address now
+ host2.setPort(8080);
+ host2.setAddress(ip_addr+10);
+ ensure("operator!= failed", host1 != host2);
+
+ ensure("operator< failed", host1 < host2);
+
+ // set IP address back to same value and change port
+ host2.setAddress(ip_addr);
+ host2.setPort(host1.getPort() + 10);
+ ensure("operator< failed", host1 < host2);
+ }
+}
diff --git a/linden/indra/test/lljoint_tut.cpp b/linden/indra/test/lljoint_tut.cpp
new file mode 100644
index 0000000..5be81ae
--- /dev/null
+++ b/linden/indra/test/lljoint_tut.cpp
@@ -0,0 +1,244 @@
+/**
+ * @file lljoint_tut.cpp
+ * @author Adroit
+ * @date 2007=-03
+ * @brief lljoint test cases.
+ *
+ * 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.
+ */
+
+#ifdef THIS_DOESNT_LINK
+// THIS DOESN'T LINK!
+
+#include
+#include "lltut.h"
+#include "linden_common.h"
+#include "m4math.h"
+#include "v3math.h"
+#include "lljoint.h"
+
+
+namespace tut
+{
+ struct lljoint_data
+ {
+ };
+ typedef test_group lljoint_test;
+ typedef lljoint_test::object lljoint_object;
+ tut::lljoint_test lljoint_testcase("lljoint");
+
+ template<> template<>
+ void lljoint_object::test<1>()
+ {
+ LLJoint lljoint;
+ LLJoint* jnt = lljoint.getParent();
+ ensure("getParent() failed ", (NULL == jnt));
+ ensure("getRoot() failed ", (&lljoint == lljoint.getRoot()));
+ }
+
+ template<> template<>
+ void lljoint_object::test<2>()
+ {
+ std::string str = "LLJoint";
+ LLJoint parent(str), child;
+ child.setup(str, &parent);
+ LLJoint* jnt = child.getParent();
+ ensure("setup() failed ", (&parent == jnt));
+ }
+
+ template<> template<>
+ void lljoint_object::test<3>()
+ {
+ LLJoint parent, child;
+ std::string str = "LLJoint";
+ child.setup(str, &parent);
+ LLJoint* jnt = parent.findJoint(str);
+ ensure("findJoint() failed ", (&child == jnt));
+ }
+
+ template<> template<>
+ void lljoint_object::test<4>()
+ {
+ LLJoint parent;
+ std::string str1 = "LLJoint", str2;
+ parent.setName(str1);
+ str2 = parent.getName();
+ ensure("setName() failed ", (str1 == str2));
+ }
+
+ template<> template<>
+ void lljoint_object::test<5>()
+ {
+ LLJoint lljoint;
+ LLVector3 vec3(2.3f,30.f,10.f);
+ lljoint.setPosition(vec3);
+ LLVector3 pos = lljoint.getPosition();
+ ensure("setPosition()/getPosition() failed ", (vec3 == pos));
+ }
+
+ template<> template<>
+ void lljoint_object::test<6>()
+ {
+ LLJoint lljoint;
+ LLVector3 vec3(2.3f,30.f,10.f);
+ lljoint.setWorldPosition(vec3);
+ LLVector3 pos = lljoint.getWorldPosition();
+ ensure("1:setWorldPosition()/getWorldPosition() failed ", (vec3 == pos));
+ LLVector3 lastPos = lljoint.getLastWorldPosition();
+ ensure("2:getLastWorldPosition failed ", (vec3 == lastPos));
+ }
+
+ template<> template<>
+ void lljoint_object::test<7>()
+ {
+ LLJoint lljoint("LLJoint");
+ LLQuaternion q(2.3f,30.f,10.f,1.f);
+ lljoint.setRotation(q);
+ LLQuaternion rot = lljoint.getRotation();
+ ensure("setRotation()/getRotation() failed ", (q == rot));
+ }
+ template<> template<>
+ void lljoint_object::test<8>()
+ {
+ LLJoint lljoint("LLJoint");
+ LLQuaternion q(2.3f,30.f,10.f,1.f);
+ lljoint.setWorldRotation(q);
+ LLQuaternion rot = lljoint.getWorldRotation();
+ ensure("1:setWorldRotation()/getWorldRotation() failed ", (q == rot));
+ LLQuaternion lastRot = lljoint.getLastWorldRotation();
+ ensure("2:getLastWorldRotation failed ", (q == lastRot));
+ }
+
+ template<> template<>
+ void lljoint_object::test<9>()
+ {
+ LLJoint lljoint;
+ LLVector3 vec3(2.3f,30.f,10.f);
+ lljoint.setScale(vec3);
+ LLVector3 scale = lljoint.getScale();
+ ensure("setScale()/getScale failed ", (vec3 == scale));
+ }
+
+ template<> template<>
+ void lljoint_object::test<10>()
+ {
+ LLJoint lljoint("LLJoint");
+ LLMatrix4 mat;
+ mat.identity();
+ lljoint.setWorldMatrix(mat);//giving warning setWorldMatrix not correctly implemented;
+ LLMatrix4 mat4 = lljoint.getWorldMatrix();
+ ensure("setWorldMatrix()/getWorldMatrix failed ", (mat4 == mat));
+ }
+
+ template<> template<>
+ void lljoint_object::test<11>()
+ {
+ LLJoint lljoint("parent");
+ S32 joint_num = 12;
+ lljoint.setJointNum(joint_num);
+ S32 jointNum = lljoint.getJointNum();
+ ensure("setJointNum()/getJointNum failed ", (jointNum == joint_num));
+ }
+
+ template<> template<>
+ void lljoint_object::test<12>()
+ {
+ LLJoint lljoint;
+ LLVector3 vec3(2.3f,30.f,10.f);
+ lljoint.setSkinOffset(vec3);
+ LLVector3 offset = lljoint.getSkinOffset();
+ ensure("1:setSkinOffset()/getSkinOffset() failed ", (vec3 == offset));
+ }
+
+ template<> template<>
+ void lljoint_object::test<13>()
+ {
+ LLJoint lljointgp("gparent");
+ LLJoint lljoint("parent");
+ LLJoint lljoint1("child1");
+ lljoint.addChild(&lljoint1);
+ LLJoint lljoint2("child2");
+ lljoint.addChild(&lljoint2);
+ LLJoint lljoint3("child3");
+ lljoint.addChild(&lljoint3);
+
+ LLJoint* jnt = NULL;
+ jnt = lljoint2.getParent();
+ ensure("addChild() failed ", (&lljoint == jnt));
+ LLJoint* jnt1 = lljoint.findJoint("child3");
+ ensure("findJoint() failed ", (&lljoint3 == jnt1));
+ lljoint.removeChild(&lljoint3);
+ LLJoint* jnt2 = lljoint.findJoint("child3");
+ ensure("removeChild() failed ", (NULL == jnt2));
+
+ lljointgp.addChild(&lljoint);
+ ensure("GetParent() failed ", (&lljoint== lljoint2.getParent()));
+ ensure("getRoot() failed ", (&lljointgp == lljoint2.getRoot()));
+
+ ensure("getRoot() failed ", &lljoint1 == lljoint.findJoint("child1"));
+
+ lljointgp.removeAllChildren();
+ // parent removed from grandparent - so should not be able to locate child
+ ensure("removeAllChildren() failed ", (NULL == lljointgp.findJoint("child1")));
+ // it should still exist in parent though
+ ensure("removeAllChildren() failed ", (&lljoint1 == lljoint.findJoint("child1")));
+ }
+
+ template<> template<>
+ void lljoint_object::test<14>()
+ {
+ LLJoint lljointgp("gparent");
+
+ LLJoint llparent1("parent1");
+ LLJoint llparent2("parent2");
+
+ LLJoint llchild("child1");
+ LLJoint lladoptedchild("child2");
+ llparent1.addChild(&llchild);
+ llparent1.addChild(&lladoptedchild);
+
+ llparent2.addChild(&lladoptedchild);
+ ensure("1. addChild failed to remove prior parent", lladoptedchild.getParent() == &llparent2);
+ ensure("2. addChild failed to remove prior parent", llparent1.findJoint("child2") == NULL);
+ }
+
+
+ //*
+ Test cases for the following not added. They perform operations
+ on underlying LLXformMatrix and LLVector3 elements which have
+ been unit tested separately.
+ Unit Testing these functions will basically require re-implementing
+ logic of these function in the test case itself
+
+ 1) void WorldMatrixChildren();
+ 2) void updateWorldMatrixParent();
+ 3) void updateWorldPRSParent();
+ 4) void updateWorldMatrix();
+ 5) LLXformMatrix *getXform() { return &mXform; }
+ 6) void setConstraintSilhouette(LLDynamicArray& silhouette);
+ 7) void clampRotation(LLQuaternion old_rot, LLQuaternion new_rot);
+
+ //*
+}
+#endif // THIS_DOESNT_LINK
diff --git a/linden/indra/test/llmessageconfig_tut.cpp b/linden/indra/test/llmessageconfig_tut.cpp
index 1d11cbf..cc2a0a2 100644
--- a/linden/indra/test/llmessageconfig_tut.cpp
+++ b/linden/indra/test/llmessageconfig_tut.cpp
@@ -32,41 +32,46 @@
#include "llmessageconfig.h"
#include "llsdserialize.h"
#include "llfile.h"
+#include "lldir.h"
#include "lltimer.h"
#include "llframetimer.h"
namespace tut
{
- ///var/tmp/babbage/dev/message-liberation/etc
- static const char file_name[] = "/tmp/message.xml";
- static const long refreshRateMillis = 6000;
-
struct LLMessageConfigTestData {
+ std::string mTestConfigDir;
- LLSD getCurrentConfig()
+ LLMessageConfigTestData()
{
- LLSD data;
- // store aside the current config to overwrite the test ones
- // when the test finishes
- llifstream in_file(file_name);
- if (in_file.is_open())
- {
- LLSDSerialize::fromXML(data, in_file);
- }
- return data;
+ // generate temp dir
+ mTestConfigDir = "/tmp/llmessage-config-test";
+ LLFile::mkdir(mTestConfigDir.c_str());
+
+ LLMessageConfig::initClass("simulator", mTestConfigDir);
+ }
+
+ ~LLMessageConfigTestData()
+ {
+ // rm contents of temp dir
+ gDirUtilp->deleteFilesInDir(mTestConfigDir, "*");
+ // rm temp dir
+ LLFile::rmdir(mTestConfigDir.c_str());
}
+ void reloadConfig(const LLSD& config)
+ {
+ LLMessageConfig::useConfig(config);
+ }
+
void writeConfigFile(const LLSD& config)
{
- LLMessageConfig::initClass("simulator", "/tmp");
- llofstream file(file_name);
+ std::string configFile = mTestConfigDir + "/message.xml";
+ llofstream file(configFile.c_str());
if (file.is_open())
{
LLSDSerialize::toPrettyXML(config, file);
}
file.close();
- ms_sleep(refreshRateMillis);
- LLFrameTimer::updateFrameTime();
}
};
@@ -78,150 +83,116 @@ namespace tut
void LLMessageConfigTestObject::test<1>()
// tests server defaults
{
- LLSD config_backup = getCurrentConfig();
LLSD config;
config["serverDefaults"]["simulator"] = "template";
- writeConfigFile(config);
- ensure_equals("Ensure server default is not llsd",
- LLMessageConfig::isServerDefaultBuilderLLSD(),
- false);
- ensure_equals("Ensure server default is template",
- LLMessageConfig::isServerDefaultBuilderTemplate(),
- true);
- writeConfigFile(config_backup);
+ reloadConfig(config);
+ ensure_equals("Ensure server default is not template",
+ LLMessageConfig::getServerDefaultFlavor(),
+ LLMessageConfig::TEMPLATE_FLAVOR);
}
template<> template<>
void LLMessageConfigTestObject::test<2>()
- // tests message builders
+ // tests message flavors
{
- LLSD config_backup = getCurrentConfig();
LLSD config;
config["serverDefaults"]["simulator"] = "template";
- config["messages"]["msg1"]["builder"] = "template";
- config["messages"]["msg2"]["builder"] = "llsd";
- writeConfigFile(config);
- ensure_equals("Ensure msg template builder not llsd",
- LLMessageConfig::isMessageBuiltLLSD("msg1"),
- false);
- ensure_equals("Ensure msg template builder",
- LLMessageConfig::isMessageBuiltTemplate("msg1"),
- true);
- ensure_equals("Ensure msg llsd builder",
- LLMessageConfig::isMessageBuiltLLSD("msg2"),
- true);
- ensure_equals("Ensure msg llsd builder not template",
- LLMessageConfig::isMessageBuiltTemplate("msg2"),
- false);
- writeConfigFile(config_backup);
+ config["messages"]["msg1"]["flavor"] = "template";
+ config["messages"]["msg2"]["flavor"] = "llsd";
+ reloadConfig(config);
+ ensure_equals("Ensure msg template flavor",
+ LLMessageConfig::getMessageFlavor("msg1"),
+ LLMessageConfig::TEMPLATE_FLAVOR);
+ ensure_equals("Ensure msg llsd flavor",
+ LLMessageConfig::getMessageFlavor("msg2"),
+ LLMessageConfig::LLSD_FLAVOR);
}
template<> template<>
void LLMessageConfigTestObject::test<4>()
- // tests message builder defaults
+ // tests message flavor defaults
{
- LLSD config_backup = getCurrentConfig();
LLSD config;
config["serverDefaults"]["simulator"] = "llsd";
config["messages"]["msg1"]["trusted-sender"] = true;
- writeConfigFile(config);
- ensure_equals("Ensure missing message defaults to server builder, not template",
- LLMessageConfig::isMessageBuiltTemplate("Test"),
- false);
- ensure_equals("Ensure missing message default to server builder llsd",
- LLMessageConfig::isMessageBuiltLLSD("Test"),
- true);
- ensure_equals("Ensure missing builder defaults to server builder, not template",
- LLMessageConfig::isMessageBuiltTemplate("msg1"),
- false);
- ensure_equals("Ensure missing builder default to server builder llsd",
- LLMessageConfig::isMessageBuiltLLSD("msg1"),
- true);
-
- ensure_equals("Ensure server default is not llsd",
- LLMessageConfig::isServerDefaultBuilderLLSD(),
- true);
- ensure_equals("Ensure server default is template",
- LLMessageConfig::isServerDefaultBuilderTemplate(),
- false);
-
- writeConfigFile(config_backup);
+ reloadConfig(config);
+ ensure_equals("Ensure missing message gives no flavor",
+ LLMessageConfig::getMessageFlavor("Test"),
+ LLMessageConfig::NO_FLAVOR);
+ ensure_equals("Ensure missing flavor is NO_FLAVOR even with sender trustedness set",
+ LLMessageConfig::getMessageFlavor("msg1"),
+ LLMessageConfig::NO_FLAVOR);
+ ensure_equals("Ensure server default is llsd",
+ LLMessageConfig::getServerDefaultFlavor(),
+ LLMessageConfig::LLSD_FLAVOR);
}
template<> template<>
void LLMessageConfigTestObject::test<3>()
// tests trusted/untrusted senders
{
- LLSD config_backup = getCurrentConfig();
LLSD config;
config["serverDefaults"]["simulator"] = "template";
- config["messages"]["msg1"]["builder"] = "llsd";
+ config["messages"]["msg1"]["flavor"] = "llsd";
config["messages"]["msg1"]["trusted-sender"] = false;
- config["messages"]["msg2"]["builder"] = "llsd";
+ config["messages"]["msg2"]["flavor"] = "llsd";
config["messages"]["msg2"]["trusted-sender"] = true;
- writeConfigFile(config);
- ensure_equals("Ensure untrusted is not trusted",
- LLMessageConfig::isMessageTrusted("msg1"),
- false);
+ reloadConfig(config);
ensure_equals("Ensure untrusted is untrusted",
- LLMessageConfig::isValidUntrustedMessage("msg1"),
- true);
+ LLMessageConfig::getSenderTrustedness("msg1"),
+ LLMessageConfig::UNTRUSTED);
ensure_equals("Ensure trusted is trusted",
- LLMessageConfig::isMessageTrusted("msg2"),
- true);
- ensure_equals("Ensure trusted is not untrusted",
- LLMessageConfig::isValidUntrustedMessage("msg2"),
- false);
- writeConfigFile(config_backup);
+ LLMessageConfig::getSenderTrustedness("msg2"),
+ LLMessageConfig::TRUSTED);
+ ensure_equals("Ensure missing trustedness is NOT_SET",
+ LLMessageConfig::getSenderTrustedness("msg3"),
+ LLMessageConfig::NOT_SET);
}
template<> template<>
void LLMessageConfigTestObject::test<5>()
- // tests trusted/untrusted without flag, only builder
+ // tests trusted/untrusted without flag, only flavor
{
- LLSD config_backup = getCurrentConfig();
LLSD config;
config["serverDefaults"]["simulator"] = "template";
- config["messages"]["msg1"]["builder"] = "llsd";
- writeConfigFile(config);
- ensure_equals("Ensure missing trusted is not trusted",
- LLMessageConfig::isMessageTrusted("msg1"),
- false);
- ensure_equals("Ensure missing trusted is not untrusted",
- LLMessageConfig::isValidUntrustedMessage("msg1"),
- false);
- writeConfigFile(config_backup);
+ config["messages"]["msg1"]["flavor"] = "llsd";
+ reloadConfig(config);
+ ensure_equals("Ensure msg1 exists, has llsd flavor",
+ LLMessageConfig::getMessageFlavor("msg1"),
+ LLMessageConfig::LLSD_FLAVOR);
+ ensure_equals("Ensure missing trusted is not set",
+ LLMessageConfig::getSenderTrustedness("msg1"),
+ LLMessageConfig::NOT_SET);
}
template<> template<>
void LLMessageConfigTestObject::test<6>()
- // tests message builder defaults
{
- LLSD config_backup = getCurrentConfig();
LLSD config;
- config["serverDefaults"]["simulator"] = "template";
- config["messages"]["msg1"]["trusted-sender"] = true;
- writeConfigFile(config);
- ensure_equals("Ensure missing message defaults to server builder, not template",
- LLMessageConfig::isMessageBuiltTemplate("Test"),
- true);
- ensure_equals("Ensure missing message default to server builder llsd",
- LLMessageConfig::isMessageBuiltLLSD("Test"),
- false);
- ensure_equals("Ensure missing builder defaults to server builder, not template",
- LLMessageConfig::isMessageBuiltTemplate("msg1"),
+ config["capBans"]["MapLayer"] = true;
+ config["capBans"]["MapLayerGod"] = false;
+ reloadConfig(config);
+ ensure_equals("Ensure cap ban true MapLayer",
+ LLMessageConfig::isCapBanned("MapLayer"),
true);
- ensure_equals("Ensure missing builder default to server builder llsd",
- LLMessageConfig::isMessageBuiltLLSD("msg1"),
+ ensure_equals("Ensure cap ban false",
+ LLMessageConfig::isCapBanned("MapLayerGod"),
false);
+ }
- ensure_equals("Ensure server default is not llsd",
- LLMessageConfig::isServerDefaultBuilderLLSD(),
- false);
- ensure_equals("Ensure server default is template",
- LLMessageConfig::isServerDefaultBuilderTemplate(),
- true);
+ template<> template<>
+ void LLMessageConfigTestObject::test<7>()
+ // tests that config changes are picked up/refreshed periodically
+ {
+ LLSD config;
+ config["serverDefaults"]["simulator"] = "llsd";
+ writeConfigFile(config);
- writeConfigFile(config_backup);
+ // wait for it to reload after N seconds
+ ms_sleep(6*1000);
+ LLFrameTimer::updateFrameTime();
+ ensure_equals("Ensure reload after 6 seconds",
+ LLMessageConfig::getServerDefaultFlavor(),
+ LLMessageConfig::LLSD_FLAVOR);
}
}
diff --git a/linden/indra/test/llmessagetemplateparser_tut.cpp b/linden/indra/test/llmessagetemplateparser_tut.cpp
new file mode 100644
index 0000000..74b4c55
--- /dev/null
+++ b/linden/indra/test/llmessagetemplateparser_tut.cpp
@@ -0,0 +1,370 @@
+/**
+ * @file llmessagetemplateparser_tut.cpp
+ * @date April 2007
+ * @brief LLMessageTemplateParser unit tests
+ *
+ * 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.
+ */
+
+#include
+#include "lltut.h"
+#include "llmessagetemplateparser.h"
+
+namespace tut
+{
+ struct LLMessageTemplateParserTestData {
+ LLMessageTemplateParserTestData() : mMessage("unset message")
+ {
+ }
+
+ ~LLMessageTemplateParserTestData()
+ {
+ }
+
+ void ensure_next(LLTemplateTokenizer & tokens,
+ std::string value,
+ U32 line)
+ {
+ std::string next = tokens.next();
+ ensure_equals(mMessage + " token matches", next, value);
+ ensure_equals(mMessage + " line matches", tokens.line(), line);
+ }
+
+ char * prehash(const char * name)
+ {
+ return gMessageStringTable.getString(name);
+ }
+
+ void ensure_block_attributes(std::string identifier,
+ const LLMessageTemplate * message,
+ const char * name,
+ EMsgBlockType type,
+ S32 number,
+ S32 total_size)
+ {
+ const LLMessageBlock * block = message->getBlock(prehash(name));
+ identifier = identifier + ":" + message->mName + ":" + name + " block";
+ ensure(identifier + " exists", block != NULL);
+ ensure_equals(identifier + " name", block->mName, prehash(name));
+ ensure_equals(identifier + " type", block->mType, type);
+ ensure_equals(identifier + " number", block->mNumber, number);
+ ensure_equals(identifier + " total size", block->mTotalSize, total_size);
+ }
+
+ void ensure_variable_attributes(std::string identifier,
+ const LLMessageBlock * block,
+ const char * name,
+ EMsgVariableType type,
+ S32 size)
+ {
+ const LLMessageVariable * var = block->getVariable(prehash(name));
+ identifier = identifier + ":" + block->mName + ":" + name + " variable";
+ ensure(identifier + " exists", var != NULL);
+ ensure_equals(
+ identifier + " name", var->getName(), prehash(name));
+ ensure_equals(
+ identifier + " type", var->getType(), type);
+ ensure_equals(identifier + " size", var->getSize(), size);
+ }
+
+ std::string mMessage;
+
+ };
+
+ typedef test_group LLMessageTemplateParserTestGroup;
+ typedef LLMessageTemplateParserTestGroup::object LLMessageTemplateParserTestObject;
+ LLMessageTemplateParserTestGroup llMessageTemplateParserTestGroup("LLMessageTemplateParser");
+
+ template<> template<>
+ void LLMessageTemplateParserTestObject::test<1>()
+ // tests tokenizer constructor and next methods
+ {
+ mMessage = "test method 1 walkthrough";
+ LLTemplateTokenizer tokens("first line\nnext\t line\n\nfourth");
+ ensure_next(tokens, "first", 1);
+ ensure_next(tokens, "line", 1);
+ ensure_next(tokens, "next", 2);
+ ensure_next(tokens, "line", 2);
+ ensure_next(tokens, "fourth", 4);
+
+ tokens = LLTemplateTokenizer("\n\t{ \t Test1 Fixed \n 523 }\n\n");
+ ensure(tokens.want("{"));
+ ensure_next(tokens, "Test1", 2);
+ ensure_next(tokens, "Fixed", 2);
+ ensure_next(tokens, "523", 3);
+ ensure(tokens.want("}"));
+
+ tokens = LLTemplateTokenizer("first line\nnext\t line\n\nfourth");
+ ensure(tokens.want("first"));
+ ensure_next(tokens, "line", 1);
+ ensure_next(tokens, "next", 2);
+ ensure_next(tokens, "line", 2);
+ ensure(tokens.want("fourth"));
+ }
+
+ template<> template<>
+ void LLMessageTemplateParserTestObject::test<2>()
+ // tests tokenizer want method
+ {
+ // *NOTE: order matters
+ LLTemplateTokenizer tokens("first line\nnext\t line\n\nfourth");
+ ensure_equals("wants first token", tokens.want("first"), true);
+ ensure_equals("doesn't want blar token", tokens.want("blar"), false);
+ ensure_equals("wants line token", tokens.want("line"), true);
+ }
+
+ template<> template<>
+ void LLMessageTemplateParserTestObject::test<3>()
+ // tests tokenizer eof methods
+ {
+ LLTemplateTokenizer tokens("single\n\n");
+ ensure_equals("is not at eof at beginning", tokens.atEOF(), false);
+ ensure_equals("doesn't want eof", tokens.wantEOF(), false);
+ ensure_equals("wants the first token just to consume it",
+ tokens.want("single"), true);
+ ensure_equals("is not at eof in middle", tokens.atEOF(), false);
+ ensure_equals("wants eof", tokens.wantEOF(), true);
+ ensure_equals("is at eof at end", tokens.atEOF(), true);
+ }
+
+ template<> template<>
+ void LLMessageTemplateParserTestObject::test<4>()
+ // tests variable parsing method
+ {
+ LLTemplateTokenizer tokens(std::string("{ Test0 \n\t\n U32 \n\n }"));
+ LLMessageVariable * var = LLTemplateParser::parseVariable(tokens);
+
+ ensure("test0 var parsed", var != 0);
+ ensure_equals("name of variable", std::string(var->getName()), std::string("Test0"));
+ ensure_equals("type of variable is U32", var->getType(), MVT_U32);
+ ensure_equals("size of variable", var->getSize(), 4);
+
+ delete var;
+
+ std::string message_string("\n\t{ \t Test1 Fixed \n 523 }\n\n");
+ tokens = LLTemplateTokenizer(message_string);
+ var = LLTemplateParser::parseVariable(tokens);
+
+ ensure("test1 var parsed", var != 0);
+ ensure_equals("name of variable", std::string(var->getName()), std::string("Test1"));
+ ensure_equals("type of variable is Fixed", var->getType(), MVT_FIXED);
+ ensure_equals("size of variable", var->getSize(), 523);
+
+ delete var;
+
+ // *NOTE: the parsers call llerrs on invalid input, so we can't really
+ // test that :-(
+ }
+
+ template<> template<>
+ void LLMessageTemplateParserTestObject::test<5>()
+ // tests block parsing method
+ {
+ LLTemplateTokenizer tokens("{ BlockA Single { VarX F32 } }");
+ LLMessageBlock * block = LLTemplateParser::parseBlock(tokens);
+
+ ensure("blockA block parsed", block != 0);
+ ensure_equals("name of block", std::string(block->mName), std::string("BlockA"));
+ ensure_equals("type of block is Single", block->mType, MBT_SINGLE);
+ ensure_equals("total size of block", block->mTotalSize, 4);
+ ensure_equals("number of block defaults to 1", block->mNumber, 1);
+ ensure_equals("variable type of VarX is F32",
+ block->getVariableType(prehash("VarX")), MVT_F32);
+ ensure_equals("variable size of VarX",
+ block->getVariableSize(prehash("VarX")), 4);
+
+ delete block;
+
+ tokens = LLTemplateTokenizer("{ Stuff Variable { Id LLUUID } }");
+ block = LLTemplateParser::parseBlock(tokens);
+
+ ensure("stuff block parsed", block != 0);
+ ensure_equals("name of block", std::string(block->mName), std::string("Stuff"));
+ ensure_equals("type of block is Multiple", block->mType, MBT_VARIABLE);
+ ensure_equals("total size of block", block->mTotalSize, 16);
+ ensure_equals("number of block defaults to 1", block->mNumber, 1);
+ ensure_equals("variable type of Id is LLUUID",
+ block->getVariableType(prehash("Id")), MVT_LLUUID);
+ ensure_equals("variable size of Id",
+ block->getVariableSize(prehash("Id")), 16);
+
+ delete block;
+
+ tokens = LLTemplateTokenizer("{ Stuff2 Multiple 45 { Shid LLVector3d } }");
+ block = LLTemplateParser::parseBlock(tokens);
+
+ ensure("stuff2 block parsed", block != 0);
+ ensure_equals("name of block", std::string(block->mName), std::string("Stuff2"));
+ ensure_equals("type of block is Multiple", block->mType, MBT_MULTIPLE);
+ ensure_equals("total size of block", block->mTotalSize, 24);
+ ensure_equals("number of blocks", block->mNumber, 45);
+ ensure_equals("variable type of Shid is Vector3d",
+ block->getVariableType(prehash("Shid")), MVT_LLVector3d);
+ ensure_equals("variable size of Shid",
+ block->getVariableSize(prehash("Shid")), 24);
+
+ delete block;
+ }
+
+ template<> template<>
+ void LLMessageTemplateParserTestObject::test<6>()
+ // tests message parsing method on a simple message
+ {
+ std::string message_skel(
+ "{\n"
+ "TestMessage Low 1 NotTrusted Zerocoded\n"
+ "// comment \n"
+ " {\n"
+ "TestBlock1 Single\n"
+ " { Test1 U32 }\n"
+ " }\n"
+ " {\n"
+ " NeighborBlock Multiple 4\n"
+ " { Test0 U32 }\n"
+ " { Test1 U32 }\n"
+ " { Test2 U32 }\n"
+ " }\n"
+ "}");
+ LLTemplateTokenizer tokens(message_skel);
+ LLMessageTemplate * message = LLTemplateParser::parseMessage(tokens);
+
+ ensure("simple message parsed", message != 0);
+ ensure_equals("name of message", std::string(message->mName), std::string("TestMessage"));
+ ensure_equals("frequency is Low", message->mFrequency, MFT_LOW);
+ ensure_equals("trust is untrusted", message->mTrust, MT_NOTRUST);
+ ensure_equals("message number", message->mMessageNumber, (U32)((255 << 24) | (255 << 16) | 1));
+ ensure_equals("message encoding is zerocoded", message->mEncoding, ME_ZEROCODED);
+ ensure_equals("message deprecation is notdeprecated", message->mDeprecation, MD_NOTDEPRECATED);
+
+ LLMessageBlock * block = message->getBlock(prehash("NonexistantBlock"));
+ ensure("Nonexistant block does not exist", block == 0);
+
+ delete message;
+ }
+
+ template<> template<>
+ void LLMessageTemplateParserTestObject::test<7>()
+ // tests message parsing method on a deprecated message
+ {
+ std::string message_skel(
+ "{\n"
+ "TestMessageDeprecated High 34 Trusted Unencoded Deprecated\n"
+ " {\n"
+ "TestBlock2 Single\n"
+ " { Test2 S32 }\n"
+ " }\n"
+ "}");
+ LLTemplateTokenizer tokens(message_skel);
+ LLMessageTemplate * message = LLTemplateParser::parseMessage(tokens);
+
+ ensure("deprecated message parsed", message != 0);
+ ensure_equals("name of message", std::string(message->mName), std::string("TestMessageDeprecated"));
+ ensure_equals("frequency is High", message->mFrequency, MFT_HIGH);
+ ensure_equals("trust is trusted", message->mTrust, MT_TRUST);
+ ensure_equals("message number", message->mMessageNumber, (U32)34);
+ ensure_equals("message encoding is unencoded", message->mEncoding, ME_UNENCODED);
+ ensure_equals("message deprecation is deprecated", message->mDeprecation, MD_DEPRECATED);
+
+ delete message;
+ }
+
+ void LLMessageTemplateParserTestObject::test<8>()
+ // tests message parsing on RezMultipleAttachmentsFromInv, a possibly-faulty message
+ {
+ std::string message_skel(
+ "{\n\
+ RezMultipleAttachmentsFromInv Low 452 NotTrusted Zerocoded\n\
+ {\n\
+ AgentData Single\n\
+ { AgentID LLUUID }\n\
+ { SessionID LLUUID }\n\
+ } \n\
+ {\n\
+ HeaderData Single\n\
+ { CompoundMsgID LLUUID } // All messages a single \"compound msg\" must have the same id\n\
+ { TotalObjects U8 }\n\
+ { FirstDetachAll BOOL }\n\
+ }\n\
+ {\n\
+ ObjectData Variable // 1 to 4 of these per packet\n\
+ { ItemID LLUUID }\n\
+ { OwnerID LLUUID }\n\
+ { AttachmentPt U8 } // 0 for default\n\
+ { ItemFlags U32 }\n\
+ { GroupMask U32 }\n\
+ { EveryoneMask U32 }\n\
+ { NextOwnerMask U32 }\n\
+ { Name Variable 1 }\n\
+ { Description Variable 1 }\n\
+ }\n\
+ }\n\
+ ");
+ LLTemplateTokenizer tokens(message_skel);
+ LLMessageTemplate * message = LLTemplateParser::parseMessage(tokens);
+
+ ensure("RezMultipleAttachmentsFromInv message parsed", message != 0);
+ ensure_equals("name of message", message->mName, prehash("RezMultipleAttachmentsFromInv"));
+ ensure_equals("frequency is low", message->mFrequency, MFT_LOW);
+ ensure_equals("trust is not trusted", message->mTrust, MT_NOTRUST);
+ ensure_equals("message number", message->mMessageNumber, (U32)((255 << 24) | (255 << 16) | 452));
+ ensure_equals("message encoding is zerocoded", message->mEncoding, ME_ZEROCODED);
+
+ ensure_block_attributes(
+ "RMAFI", message, "AgentData", MBT_SINGLE, 1, 16+16);
+ LLMessageBlock * block = message->getBlock(prehash("AgentData"));
+ ensure_variable_attributes("RMAFI",
+ block, "AgentID", MVT_LLUUID, 16);
+ ensure_variable_attributes("RMAFI",
+ block, "SessionID", MVT_LLUUID, 16);
+
+ ensure_block_attributes(
+ "RMAFI", message, "HeaderData", MBT_SINGLE, 1, 16+1+1);
+ block = message->getBlock(prehash("HeaderData"));
+ ensure_variable_attributes(
+ "RMAFI", block, "CompoundMsgID", MVT_LLUUID, 16);
+ ensure_variable_attributes(
+ "RMAFI", block, "TotalObjects", MVT_U8, 1);
+ ensure_variable_attributes(
+ "RMAFI", block, "FirstDetachAll", MVT_BOOL, 1);
+
+
+ ensure_block_attributes(
+ "RMAFI", message, "ObjectData", MBT_VARIABLE, 1, -1);
+ block = message->getBlock(prehash("ObjectData"));
+ ensure_variable_attributes("RMAFI", block, "ItemID", MVT_LLUUID, 16);
+ ensure_variable_attributes("RMAFI", block, "OwnerID", MVT_LLUUID, 16);
+ ensure_variable_attributes("RMAFI", block, "AttachmentPt", MVT_U8, 1);
+ ensure_variable_attributes("RMAFI", block, "ItemFlags", MVT_U32, 4);
+ ensure_variable_attributes("RMAFI", block, "GroupMask", MVT_U32, 4);
+ ensure_variable_attributes("RMAFI", block, "EveryoneMask", MVT_U32, 4);
+ ensure_variable_attributes("RMAFI", block, "NextOwnerMask", MVT_U32, 4);
+ ensure_variable_attributes("RMAFI", block, "Name", MVT_VARIABLE, 1);
+ ensure_variable_attributes("RMAFI", block, "Description", MVT_VARIABLE, 1);
+
+ delete message;
+ }
+
+
+
+}
diff --git a/linden/indra/test/llnamevalue_tut.cpp b/linden/indra/test/llnamevalue_tut.cpp
new file mode 100644
index 0000000..77e5ff2
--- /dev/null
+++ b/linden/indra/test/llnamevalue_tut.cpp
@@ -0,0 +1,848 @@
+/**
+ * @file llnamevalue_tut.cpp
+ * @author Adroit
+ * @date 2007-02
+ * @brief LLNameValue unit test
+ *
+ * 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 "lltut.h"
+#include "linden_common.h"
+#include "llnamevalue.h"
+#include "llsdserialize.h"
+
+namespace tut
+{
+ struct namevalue_test
+ {
+ namevalue_test()
+ {
+ mExpectedNameValueReference.string = NULL;
+ mExpectedNameValueType = NVT_NULL;
+ mCallbackCount = 0;
+ }
+
+ ~namevalue_test()
+ {
+ reset();
+ };
+
+ void reset()
+ {
+ switch(mExpectedNameValueType)
+ {
+ case NVT_STRING:
+ case NVT_ASSET:
+ delete [] mExpectedNameValueReference.string;
+ mExpectedNameValueReference.string = NULL;
+ break;
+ case NVT_F32:
+ delete mExpectedNameValueReference.f32;
+ mExpectedNameValueReference.f32 = NULL;
+ break;
+ case NVT_S32:
+ delete mExpectedNameValueReference.s32;
+ mExpectedNameValueReference.s32 = NULL;
+ break;
+ case NVT_U32:
+ delete mExpectedNameValueReference.u32;
+ mExpectedNameValueReference.u32 = NULL;
+ break;
+ case NVT_VEC3:
+ delete mExpectedNameValueReference.vec3;
+ mExpectedNameValueReference.vec3 = NULL;
+ break;
+ case NVT_U64:
+ delete mExpectedNameValueReference.u64;
+ mExpectedNameValueReference.u64 = NULL;
+ default:
+ break;
+ }
+
+ mExpectedNameValueType = NVT_NULL;
+ mCallbackCount = 0;
+ }
+
+ void setExpectedResult(ENameValueType type, void* value)
+ {
+ reset();
+ mExpectedNameValueType = type;
+ switch(type)
+ {
+ case NVT_STRING:
+ case NVT_ASSET:
+ mExpectedNameValueReference.string = new char[strlen((const char*) value)+1];
+ strcpy(mExpectedNameValueReference.string, (const char*) value);
+ break;
+ case NVT_F32:
+ mExpectedNameValueReference.f32 = new F32(*((F32*) value));
+ break;
+ case NVT_S32:
+ mExpectedNameValueReference.s32 = new S32(*((S32*) value));
+ break;
+ case NVT_U32:
+ mExpectedNameValueReference.u32 = new U32(*((U32*) value));
+ break;
+ case NVT_VEC3:
+ mExpectedNameValueReference.vec3 = new LLVector3(*((LLVector3*) value));
+ break;
+ case NVT_U64:
+ mExpectedNameValueReference.u64 = new U64(*((U64*) value));
+ default:
+ break;
+ }
+ }
+
+ void verifyChange(LLNameValue* changed)
+ {
+ std::string str = "";
+ str += "Expected Value of type: ";
+ str += NameValueTypeStrings[mExpectedNameValueType];
+ str += "not equal";
+
+ switch(mExpectedNameValueType)
+ {
+ case NVT_STRING:
+ ensure_memory_matches(str.c_str(), changed->getString(), strlen(changed->getString()), mExpectedNameValueReference.string, strlen(mExpectedNameValueReference.string));
+ break;
+ case NVT_ASSET:
+ ensure_memory_matches(str.c_str(), changed->getAsset(), strlen(changed->getAsset()), mExpectedNameValueReference.string, strlen(mExpectedNameValueReference.string));
+ break;
+ case NVT_F32:
+ ensure(str, *(changed->getF32()) == *mExpectedNameValueReference.f32);
+ break;
+ case NVT_S32:
+ ensure(str, *(changed->getS32()) == *mExpectedNameValueReference.s32);
+ break;
+ case NVT_U32:
+ ensure(str, *(changed->getU32()) == *mExpectedNameValueReference.u32);
+ break;
+ case NVT_VEC3:
+ ensure(str, *(changed->getVec3()) == *mExpectedNameValueReference.vec3);
+ break;
+ case NVT_U64:
+ ensure(str, *(changed->getU64()) == *mExpectedNameValueReference.u64);
+ break;
+ default:
+ break;
+ }
+ }
+
+ void HandleCallback(LLNameValue* changed)
+ {
+ mCallbackCount++;
+ verifyChange(changed);
+ ensure("Callback called more than once", mCallbackCount == 1);
+ }
+
+ static void NameValueCallbackFunction(LLNameValue* changed, void** data)
+ {
+ namevalue_test* pNameValue = (namevalue_test*)data;
+ pNameValue->HandleCallback(changed);
+ }
+
+ ENameValueType mExpectedNameValueType;
+ UNameValueReference mExpectedNameValueReference;
+ int mCallbackCount;
+ };
+ typedef test_group namevalue_t;
+ typedef namevalue_t::object namevalue_object_t;
+ tut::namevalue_t tut_namevalue("namevalue_test");
+
+
+ template<> template<>
+ void namevalue_object_t::test<1>()
+ {
+ // LLNameValue()
+ LLNameValue nValue;
+ ensure("mName should have been NULL", nValue.mName == NULL);
+ ensure("getTypeEnum failed",nValue.getTypeEnum() == NVT_NULL);
+ ensure("getClassEnum failed",nValue.getClassEnum() == NVC_NULL);
+ ensure("getSendtoEnum failed",nValue.getSendtoEnum() == NVS_NULL);
+
+ LLNameValue nValue1(" SecondLife ASSET RW SIM 232324343");
+
+ }
+
+ // LLNameValue(const char* data);
+ // LLNameValue(const char* name, const char* data, const char* type, const char* nvclass, const char* nvsendto,
+ // TNameValueCallback nvcb = NULL, void** user_data = NULL);
+ template<> template<>
+ void namevalue_object_t::test<2>()
+ {
+ LLNameValue nValue(" SecondLife ASSET RW S 232324343");
+ ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife")));
+ ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_ASSET);
+ ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE);
+ ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM);
+ ensure("getString failed", (0==strcmp(nValue.getAsset(),"232324343")));
+ ensure("sendToData or sendToViewer failed", !nValue.sendToData() && !nValue.sendToViewer());
+
+ LLNameValue nValue1("\n\r SecondLife_1 STRING READ_WRITE SIM 232324343");
+ ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife_1")));
+ ensure("1. getTypeEnum failed", nValue1.getTypeEnum() == NVT_STRING);
+ ensure("1. getClassEnum failed", nValue1.getClassEnum() == NVC_READ_WRITE);
+ ensure("1. getSendtoEnum failed", nValue1.getSendtoEnum() == NVS_SIM);
+ ensure("1. getString failed", (0==strcmp(nValue1.getString(),"232324343")));
+ ensure("1. sendToData or sendToViewer failed", !nValue1.sendToData() && !nValue1.sendToViewer());
+
+ LLNameValue nValue2("SecondLife", "23.5", "F32", "R", "DS");
+ ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32);
+ ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY);
+ ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_DATA_SIM);
+ ensure("2. getF32 failed", *nValue2.getF32() == 23.5f);
+ ensure("2. sendToData or sendToViewer failed", nValue2.sendToData() && !nValue2.sendToViewer());
+
+ LLNameValue nValue3("SecondLife", "-43456787", "S32", "READ_ONLY", "SIM_SPACE");
+ ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32);
+ ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY);
+ ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_DATA_SIM);
+ ensure("3. getS32 failed", *nValue3.getS32() == -43456787);
+ ensure("sendToData or sendToViewer failed", nValue3.sendToData() && !nValue3.sendToViewer());
+
+ LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "CB", "SV");
+ LLVector3 llvec4(1.0, 2.0, 3.0);
+ ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
+ ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_CALLBACK);
+ ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM_VIEWER);
+ ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4);
+ ensure("4. sendToData or sendToViewer failed", !nValue4.sendToData() && nValue4.sendToViewer());
+
+ LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "CALLBACK", "SIM_VIEWER");
+ LLVector3 llvec5(-1.0f, 2.4f, 3);
+ ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3);
+ ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_CALLBACK);
+ ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM_VIEWER);
+ ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5);
+ ensure("5. sendToData or sendToViewer failed", !nValue5.sendToData() && nValue5.sendToViewer());
+
+ LLNameValue nValue6("SecondLife", "89764323", "U32", "CALLBACK", "DSV");
+ ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
+ ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_CALLBACK);
+ ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_DATA_SIM_VIEWER);
+ ensure("6. getU32 failed", *nValue6.getU32() == 89764323);
+ ensure("6. sendToData or sendToViewer failed", nValue6.sendToData() && nValue6.sendToViewer());
+
+ LLNameValue nValue7("SecondLife", "89764323323232", "U64", "CALLBACK", "SIM_SPACE_VIEWER");
+ U64 u64_7 = U64L(89764323323232);
+ ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
+ ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_CALLBACK);
+ ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_DATA_SIM_VIEWER);
+ ensure("7. getU32 failed", *nValue7.getU64() == u64_7);
+ ensure("7. sendToData or sendToViewer failed", nValue7.sendToData() && nValue7.sendToViewer());
+ }
+
+ // LLNameValue(const char* name, const char* data, const char* type, const char* nvclass,
+ // TNameValueCallback nvcb = NULL, void** user_data = NULL);
+ template<> template<>
+ void namevalue_object_t::test<3>()
+ {
+ LLNameValue nValue("SecondLife", "232324343", "ASSET", "READ_WRITE");
+ ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife")));
+ ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_ASSET);
+ ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE);
+ ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM);
+ ensure("getString failed", (0==strcmp(nValue.getAsset(),"232324343")));
+
+ LLNameValue nValue1("SecondLife", "232324343", "STRING", "READ_WRITE");
+ ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife")));
+ ensure("1. getTypeEnum failed", nValue1.getTypeEnum() == NVT_STRING);
+ ensure("1. getClassEnum failed", nValue1.getClassEnum() == NVC_READ_WRITE);
+ ensure("1. getSendtoEnum failed", nValue1.getSendtoEnum() == NVS_SIM);
+ ensure("1. getString failed", (0==strcmp(nValue1.getString(),"232324343")));
+
+ LLNameValue nValue2("SecondLife", "23.5", "F32", "R");
+ ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32);
+ ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY);
+ ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_SIM);
+ ensure("2. getF32 failed", *nValue2.getF32() == 23.5f);
+
+ LLNameValue nValue3("SecondLife", "-43456787", "S32", "READ_ONLY");
+ ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32);
+ ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY);
+ ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM);
+ ensure("3. getS32 failed", *nValue3.getS32() == -43456787);
+
+ LLNameValue nValue4("SecondLife", "<1.0, 2.0, 3.0>", "VEC3", "CB");
+ LLVector3 llvec4(1.0, 2.0, 3.0);
+ ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
+ ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_CALLBACK);
+ ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM);
+ ensure("4. getVec3 failed", *nValue4.getVec3() == llvec4);
+
+ LLNameValue nValue5("SecondLife", "-1.0, 2.4, 3", "VEC3", "CALLBACK");
+ LLVector3 llvec5(-1.0f, 2.4f, 3);
+ ensure("5. getTypeEnum failed", nValue5.getTypeEnum() == NVT_VEC3);
+ ensure("5. getClassEnum failed", nValue5.getClassEnum() == NVC_CALLBACK);
+ ensure("5. getSendtoEnum failed", nValue5.getSendtoEnum() == NVS_SIM);
+ ensure("5. getVec3 failed", *nValue5.getVec3() == llvec5);
+
+ LLNameValue nValue6("SecondLife", "89764323", "U32", "CALLBACK");
+ ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
+ ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_CALLBACK);
+ ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM);
+ ensure("6. getU32 failed", *nValue6.getU32() == 89764323);
+
+ LLNameValue nValue7("SecondLife", "89764323323232", "U64", "CALLBACK");
+ U64 u64_7 = U64L(89764323323232);
+ ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
+ ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_CALLBACK);
+ ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM);
+ ensure("7. getU32 failed", *nValue7.getU64() == u64_7);
+ }
+
+ // LLNameValue(const char* name, const char* type, const char* nvclass,
+ // TNameValueCallback nvcb = NULL, void** user_data = NULL);
+ template<> template<>
+ void namevalue_object_t::test<4>()
+ {
+ LLNameValue nValue("SecondLife", "STRING", "READ_WRITE");
+ ensure("mName not set correctly", (0 == strcmp(nValue.mName,"SecondLife")));
+ ensure("getTypeEnum failed", nValue.getTypeEnum() == NVT_STRING);
+ ensure("getClassEnum failed", nValue.getClassEnum() == NVC_READ_WRITE);
+ ensure("getSendtoEnum failed", nValue.getSendtoEnum() == NVS_SIM);
+
+ LLNameValue nValue1("SecondLife", "ASSET", "READ_WRITE");
+ ensure("1. mName not set correctly", (0 == strcmp(nValue1.mName,"SecondLife")));
+ ensure("1. getTypeEnum for RW failed", nValue1.getTypeEnum() == NVT_ASSET);
+ ensure("1. getClassEnum for RW failed", nValue1.getClassEnum() == NVC_READ_WRITE);
+ ensure("1. getSendtoEnum for RW failed", nValue1.getSendtoEnum() == NVS_SIM);
+
+ LLNameValue nValue2("SecondLife", "F32", "READ_ONLY");
+ ensure("2. getTypeEnum failed", nValue2.getTypeEnum() == NVT_F32);
+ ensure("2. getClassEnum failed", nValue2.getClassEnum() == NVC_READ_ONLY);
+ ensure("2. getSendtoEnum failed", nValue2.getSendtoEnum() == NVS_SIM);
+
+ LLNameValue nValue3("SecondLife", "S32", "READ_ONLY");
+ ensure("3. getTypeEnum failed", nValue3.getTypeEnum() == NVT_S32);
+ ensure("3. getClassEnum failed", nValue3.getClassEnum() == NVC_READ_ONLY);
+ ensure("3. getSendtoEnum failed", nValue3.getSendtoEnum() == NVS_SIM);
+
+ skip_fail("NVC_CALLBACK does not parse.");
+
+ LLNameValue nValue4("SecondLife", "VEC3", "CALLBACK");
+ ensure("4. getTypeEnum failed", nValue4.getTypeEnum() == NVT_VEC3);
+ ensure("4. getClassEnum failed", nValue4.getClassEnum() == NVC_CALLBACK);
+ ensure("4. getSendtoEnum failed", nValue4.getSendtoEnum() == NVS_SIM);
+
+ LLNameValue nValue6("SecondLife", "U32", "CALLBACK");
+ ensure("6. getTypeEnum failed", nValue6.getTypeEnum() == NVT_U32);
+ ensure("6. getClassEnum failed", nValue6.getClassEnum() == NVC_CALLBACK);
+ ensure("6. getSendtoEnum failed", nValue6.getSendtoEnum() == NVS_SIM);
+
+ LLNameValue nValue7("SecondLife", "U64", "CALLBACK");
+ ensure("7. getTypeEnum failed", nValue7.getTypeEnum() == NVT_U64);
+ ensure("7. getClassEnum failed", nValue7.getClassEnum() == NVC_CALLBACK);
+ ensure("7. getSendtoEnum failed", nValue7.getSendtoEnum() == NVS_SIM);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<5>()
+ {
+ skip_fail("callback will be called more than once.");
+ LLNameValue nValue("SecondLife", "This is a test", "STRING", "CB", "SIM", NameValueCallbackFunction, (void**) this);
+
+ ensure("getString failed", (0 == strcmp(nValue.getString(),"This is a test")));
+ reset();
+
+ setExpectedResult(NVT_STRING, (void*)"New Value");
+ nValue.setString("New Value");
+ ensure("String nonzero failed", nValue.nonzero() == TRUE);
+ reset();
+ setExpectedResult(NVT_STRING, (void*)"");
+ nValue.setString("");
+ ensure("String nonzero failed", nValue.nonzero() == FALSE);
+ reset();
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<6>()
+ {
+ skip_fail("callback will be called more than once.");
+ LLNameValue nValue("SecondLife", "This is a test", "ASSET", "CALLBACK", "S", NameValueCallbackFunction, (void**) this);
+ ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
+ reset();
+
+ setExpectedResult(NVT_ASSET, (void*)"New Value");
+ nValue.setAsset("New Value");
+ reset();
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<7>()
+ {
+ skip_fail("callback will be called more than once.");
+ LLNameValue nValue("SecondLife", "555555", "F32", "CB", "SIM", NameValueCallbackFunction, (void**) this);
+
+ ensure("getF32 failed",*nValue.getF32() == 555555.f);
+ reset();
+
+ F32 fVal = 0.1f;
+ setExpectedResult(NVT_F32, &fVal);
+ nValue.setF32(fVal);
+
+ fVal = -11111.1f;
+ setExpectedResult(NVT_F32, &fVal);
+ nValue.setF32(fVal);
+ ensure("F32 nonzero failed", nValue.nonzero() == TRUE);
+ reset();
+
+ fVal = 0.;
+ setExpectedResult(NVT_F32, &fVal);
+ nValue.setF32(fVal);
+ ensure("F32 nonzero failed", nValue.nonzero() == FALSE);
+ reset();
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<8>()
+ {
+ skip_fail("callback will be called more than once.");
+ LLNameValue nValue("SecondLife", "-5555", "S32", "CB", "SIM", NameValueCallbackFunction, (void**) this);
+
+ ensure("getS32 failed", *nValue.getS32() == -5555);
+ reset();
+
+ S32 sVal = 0x7FFFFFFF;
+ setExpectedResult(NVT_S32, &sVal);
+ nValue.setS32(sVal);
+
+ sVal = -0x7FFFFFFF;
+ setExpectedResult(NVT_S32, &sVal);
+ nValue.setS32(sVal);
+ ensure("S32 nonzero failed", nValue.nonzero() == TRUE);
+ reset();
+
+ sVal = 0;
+ setExpectedResult(NVT_S32, &sVal);
+ nValue.setS32(sVal);
+ ensure("S32 nonzero failed", nValue.nonzero() == FALSE);
+ reset();
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<9>()
+ {
+ LLNameValue nValue("SecondLife", "<-3, 2, 1>", "VEC3", "CB", "SIM", NameValueCallbackFunction, (void**) this);
+ LLVector3 vecExpected(-3, 2, 1);
+ LLVector3 vec;
+ nValue.getVec3(vec);
+ ensure("getVec3 failed", vec == vecExpected);
+ reset();
+
+ vecExpected.setVec(2, -1, 0);
+ setExpectedResult(NVT_VEC3, &vecExpected);
+ nValue.setVec3(vecExpected);
+ ensure("VEC3 nonzero failed", nValue.nonzero() == TRUE);
+ reset();
+
+ vecExpected.setVec(0, 0, 0);
+ setExpectedResult(NVT_VEC3, &vecExpected);
+ nValue.setVec3(vecExpected);
+ ensure("VEC3 nonzero failed", nValue.nonzero() == FALSE);
+ reset();
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<10>()
+ {
+ LLNameValue nValue("SecondLife", "12345678", "U32", "CB", "SIM", NameValueCallbackFunction, (void**) this);
+
+ ensure("getU32 failed",*nValue.getU32() == 12345678);
+
+ U32 val = 0xFFFFFFFF;
+ setExpectedResult(NVT_U32, &val);
+ nValue.setU32(val);
+ ensure("U32 nonzero failed", nValue.nonzero() == TRUE);
+ reset();
+
+ val = 0;
+ setExpectedResult(NVT_U32, &val);
+ nValue.setU32(val);
+ ensure("U32 nonzero failed", nValue.nonzero() == FALSE);
+ reset();
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<11>()
+ {
+ skip_fail("incomplete support for U64.");
+ LLNameValue nValue("SecondLife", "44444444444", "U64", "CB", "SIM", NameValueCallbackFunction, (void**) this);
+
+ ensure("getU64 failed",*nValue.getU64() == U64L(44444444444));
+ ensure("U64 nonzero failed", nValue.nonzero() == TRUE);
+
+ // there is no LLNameValue::setU64()
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<12>()
+ {
+ LLNameValue nValue("SecondLife F32 RW SIM -333.337600");
+ F32 val = nValue.magnitude();
+ ensure_equals("F32 magnitude failed", val, 333.337600f);
+
+ LLNameValue nValue1("SecondLife STRING RW SIM 3300");
+ val = nValue1.magnitude();
+ ensure_equals("STRING magnitude failed",val,4.0f);
+
+ LLNameValue nValue2("SecondLife S32 RW SIM -3300");
+ val = nValue2.magnitude();
+ ensure_equals("S32 magnitude failed", val, 3300.);
+
+ LLNameValue nValue3("SecondLife U32 RW SIM 3300");
+ val = nValue3.magnitude();
+ ensure_equals("U32 magnitude failed", val, 3300.);
+
+ LLNameValue nValue4("SecondLife VEC3 RW SIM <1,2,3>");
+ LLVector3 vec(1,2,3);
+ val = nValue4.magnitude();
+ ensure_equals("VEC3 magnitude failed", val, vec.magVec());
+
+ skip_fail("incomplete support for U64.");
+ LLNameValue nValue5("SecondLife U64 RW SIM 12345");
+ val = nValue5.magnitude();
+ ensure_equals("U62 magnitude failed", val, 12345);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<13>()
+ {
+ skip_fail("incomplete support for U64.");
+ LLNameValue nValue("SecondLife U64 RW DSV 44444444444");
+ std::string ret_str = nValue.printNameValue();
+
+ ensure_equals("1:printNameValue failed",ret_str,"SecondLife U64 RW DSV 44444444444");
+
+ LLNameValue nValue1(ret_str.c_str());
+ ensure_equals("Serialization of printNameValue failed", nValue, nValue1);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<14>()
+ {
+ LLNameValue nValue("SecondLife STRING RW DSV 44444444444");
+ std::string ret_str = nValue.printData();
+ ensure_equals("1:printData failed",ret_str,"44444444444");
+
+ LLNameValue nValue1("SecondLife S32 RW DSV 44444");
+ ret_str = nValue1.printData();
+ ensure_equals("2:printData failed",ret_str,"44444");
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<15>()
+ {
+ LLNameValue nValue("SecodLife STRING RW SIM 22222");
+ std::ostringstream stream1,stream2,stream3, stream4, stream5;
+ stream1 << nValue;
+ ensure_equals("STRING << failed",stream1.str(),"22222");
+
+ LLNameValue nValue1("SecodLife F32 RW SIM 22222");
+ stream2 << nValue1;
+ ensure_equals("F32 << failed",stream2.str(),"22222");
+
+ LLNameValue nValue2("SecodLife S32 RW SIM 22222");
+ stream3<< nValue2;
+ ensure_equals("S32 << failed",stream3.str(),"22222");
+
+ LLNameValue nValue3("SecodLife U32 RW SIM 122222");
+ stream4<< nValue3;
+ ensure_equals("U32 << failed",stream4.str(),"122222");
+
+ skip_fail("incomplete support for U64.");
+ LLNameValue nValue4("SecodLife U64 RW SIM 22222");
+ stream5<< nValue4;
+ ensure("U64 << failed",0 == strcmp((stream5.str()).c_str(),"22222"));
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<16>()
+ {
+ LLNameValue nValue1("SecondLife STRING RW DSV 44444");
+ LLNameValue nValue2("SecondLife STRING RW SIM 33333");
+ LLNameValue nValue3("SecondLife");
+ nValue3 = nValue1 + nValue2;
+ ensure("1:operator+ failed",(0==strcmp(nValue3.getString(),"4444433333")));
+
+ LLNameValue nValue4("SecondLife F32 R DSV 44444");
+ LLNameValue nValue5("SecondLife F32 RW SIM 33333");
+ LLNameValue nValue6("SecondLife");
+ nValue6 = nValue4 + nValue5;
+ ensure_equals("2:operator+ failed",*nValue6.getF32(),77777.0);
+
+ LLNameValue nValue7("SecondLife F32 R DSV 44444");
+ LLNameValue nValue8("SecondLife S32 RW SIM 33333");
+ LLNameValue nValue9("SecondLife F32");
+ nValue9 = nValue7 + nValue8;
+ ensure_equals("3:operator+ failed",*nValue9.getF32(),77777.0);
+
+ LLNameValue nValue10("SecondLife VEC3 RW SIM <4, 4, 4>");
+ LLNameValue nValue11("SecondLife VEC3 RW SV <3, 3, 3>");
+ LLNameValue nValue12("SecondLife VEC3");
+ nValue12 = nValue10 + nValue11;
+ LLVector3 vec(7,7,7);
+ ensure_equals("4:operator+ failed",*nValue12.getVec3(), vec);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<17>()
+ {
+ LLNameValue nValue7(" SecondLife S32 RW SIM 22222");
+ LLNameValue nValue8(" SecondLife F32 RW SIM 33333");
+ LLNameValue nValue9(" SecondLife F32");
+ nValue9 = nValue7 - nValue8;
+ ensure_equals("1:operator- failed",*nValue9.getF32(),-11111.f);
+
+ LLNameValue nValue10(" SecondLife VEC3 RW SIM <2, 2, 2>");
+ LLNameValue nValue11(" SecondLife VEC3 RW SIM <3, 3, 3>");
+ LLNameValue nValue12(" SecondLife VEC3");
+ LLVector3 vec(-1,-1,-1);
+ nValue12 = nValue10 - nValue11;
+ ensure_equals("2:operator- failed",*nValue12.getVec3(), vec);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<18>()
+ {
+
+ LLNameValue nValue1(" SecondLife F32 RW SIM 22222");
+ LLNameValue nValue2(" SecondLife F32 RW SIM 33333");
+ LLNameValue nValue3(" SecondLife F32");
+ nValue3 = nValue1 * nValue2;
+ ensure_equals("1:operator* failed",*nValue3.getF32(),740725926.f);
+
+ LLNameValue nValue4(" SecondLife S32 RW SIM 22222");
+ LLNameValue nValue5(" SecondLife F32 RW SIM 33333");
+ LLNameValue nValue6(" SecondLife F32");
+ nValue6 = nValue4 * nValue5;
+ ensure_equals("2:operator* failed",*nValue6.getF32(),740725926.f);
+
+ LLNameValue nValue10(" SecondLife VEC3 RW SIM <2, 2, 2>");
+ LLNameValue nValue11(" SecondLife VEC3 RW SIM <3, 3, 3>");
+ LLNameValue nValue12(" SecondLife F32");
+ LLVector3 vec1(2,2,2);
+ LLVector3 vec2(3,3,3);
+ nValue12 = nValue10 * nValue11;
+ ensure_equals("2:operator* failed",*nValue12.getF32(), (vec1 * vec2));
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<19>()
+ {
+ LLNameValue nValue1(" SecondLife S32 RW SIM 22222");
+ LLNameValue nValue2(" Virtual F32 RW SIM 44444");
+ LLNameValue nValue3(" SecondLife F32");
+ nValue3 = nValue1 / nValue2;
+ ensure_equals("1:operator/ failed",*nValue3.getF32(),0.5);
+
+ LLNameValue nValue4(" SecondLife F32 RW SIM 33333");
+ LLNameValue nValue5(" SecondLife S32 RW SIM 22222");
+ LLNameValue nValue6(" SecondLife F32");
+ nValue6 = nValue4 / nValue5;
+ ensure_equals("2:operator/ failed",*nValue6.getF32(),1.5);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<20>()
+ {
+ LLNameValue nValue1(" SecondLife S32 RW SIM 22222");
+ LLNameValue nValue2(" Virtual S32 RW SIM 33333");
+ LLNameValue nValue3(" SecondLife S32");
+ nValue3 = nValue1 % nValue2;
+ ensure_equals("1:operator% failed",*nValue3.getS32(),22222);
+
+ LLNameValue nValue4(" SecondLife U32 RW SIM 3");
+ LLNameValue nValue5(" SecondLife S32 RW SIM 2");
+ LLNameValue nValue6(" SecondLife S32");
+ nValue6 = nValue4 % nValue5;
+ ensure_equals("2:operator% failed",*nValue6.getS32(),1);
+
+ LLNameValue nValue10(" SecondLife VEC3 RW SIM <4, 5, 6>");
+ LLNameValue nValue11(" SecondLife VEC3 RW SIM <1, 2, 3>");
+ LLNameValue nValue12(" SecondLife VEC3");
+ LLVector3 vec1(4,5,6);
+ LLVector3 vec2(1,2,3);
+ LLVector3 vec3(vec1 % vec2);
+ nValue12 = nValue10 % nValue11;
+ ensure_equals("5:operator% failed",*nValue12.getVec3(), vec3);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<21>()
+ {
+ LLNameValue nValue1(" SecondLife STRING RW SIM 22222");
+ LLNameValue nValue2(" Virtual STRING RW SIM 22222");
+ ensure("1:operator== failed", nValue1 == nValue2);
+
+ LLNameValue nValue3(" SecondLife F32 RW SIM 33333");
+ LLNameValue nValue4(" Virtual F32 RW SIM 22222");
+ ensure("2:operator== failed",!(nValue3 == nValue4));
+
+ LLNameValue nValue5(" SecondLife STRING RW SIM 22222");
+ LLNameValue nValue6(" Virtual STRING RW SIM 33333");
+ ensure("3:operator== failed",!(nValue5 == nValue6));
+
+ LLNameValue nValue7(" SecondLife VEC3 RW SIM <2, 2, 2>");
+ LLNameValue nValue8(" Virtual VEC3 RW SIM <2, 2, 2>");
+ ensure("4:operator== failed",(nValue7 == nValue8));
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<22>()
+ {
+ LLNameValue nValue1(" SecondLife STRING RW SIM 22222");
+ LLNameValue nValue2(" Virtual STRING RW SIM 33333");
+ bool b_ret = (nValue1 <= nValue2) ? 1 : 0;
+ ensure("1:operator<= failed",(1==b_ret));
+
+ LLNameValue nValue3(" SecondLife F32 RW SIM 33333");
+ LLNameValue nValue4(" Virtual F32 RW SIM 22222");
+ b_ret = (nValue3 <= nValue4) ? 1 : 0;
+ ensure("2:operator<= failed",(0==b_ret));
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<23>()
+ {
+ LLNameValue nValue1(" SecondLife STRING RW SIM 22222");
+ LLNameValue nValue2(" Virtual STRING RW SIM 33333");
+ bool b_ret = (nValue1 >= nValue2) ? 1 : 0;
+ ensure("operator>= failed",!b_ret);
+
+ LLNameValue nValue3(" SecondLife F32 RW SIM 33333");
+ LLNameValue nValue4(" Virtual F32 RW SIM 22222");
+ b_ret = (nValue3 >= nValue4) ? 1 : 0;
+ ensure("2:operator<= failed",b_ret);
+
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<24>()
+ {
+ LLNameValue nValue1(" SecondLife STRING RW SIM 33333");
+ LLNameValue nValue2(" Virtual STRING RW SIM 33333");
+ bool b_ret = (nValue1 < nValue2) ? 1 : 0;
+ ensure("operator< failed",!b_ret);
+
+ LLNameValue nValue3(" SecondLife F32 RW SIM 11111");
+ LLNameValue nValue4(" Virtual F32 RW SIM 22222");
+ b_ret = (nValue3 < nValue4) ? 1 : 0;
+ ensure("2:operator< failed",b_ret);
+
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<25>()
+ {
+ LLNameValue nValue1(" SecondLife STRING RW SIM 33333");
+ LLNameValue nValue2(" Virtual STRING RW SIM 33333");
+ bool b_ret = (nValue1 > nValue2) ? 1 : 0;
+ ensure("1:operator> failed",!b_ret);
+
+ LLNameValue nValue3(" SecondLife F32 RW SIM 11111");
+ LLNameValue nValue4(" Virtual F32 RW SIM 22222");
+ b_ret = (nValue3 > nValue4) ? 1 : 0;
+ ensure("2:operator> failed",!b_ret);
+
+ LLNameValue nValue5(" SecondLife S32 RW SIM 22222");
+ LLNameValue nValue6(" Virtual F32 RW SIM 11111");
+ b_ret = (nValue5 > nValue6) ? 1 : 0;
+ ensure("3:operator> failed",b_ret);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<26>()
+ {
+ LLNameValue nValue1(" SecondLife STRING RW SIM 33333");
+ LLNameValue nValue2(" Virtual STRING RW SIM 33333");
+ bool b_ret = (nValue1 != nValue2) ? 1 : 0;
+ ensure("1:operator!= failed",!b_ret);
+
+ LLNameValue nValue3(" SecondLife F32 RW SIM 11111");
+ LLNameValue nValue4(" Virtual F32 RW SIM 22222");
+ b_ret = (nValue3 != nValue4) ? 1 : 0;
+ ensure("2:operator!= failed",b_ret);
+
+ }
+
+
+ template<> template<>
+ void namevalue_object_t::test<27>()
+ {
+ LLNameValue nValue1(" SecondLife F32 RW SIM 33333");
+ LLNameValue nValue2("Virtual");
+ nValue2 = -nValue1;
+ ensure_equals("1:operator unary- failed",*nValue2.getF32(), -33333.f);
+
+ LLNameValue nValue3(" SecondLife U32 RW SIM 11111");
+ LLNameValue nValue4("Virtual S32");
+ nValue4 = -nValue3;
+ ensure_equals("2:operator unary- failed",*nValue4.getS32(), -11111);
+
+ LLNameValue nValue5(" SecondLife VEC3 RW SIM <1, 1, 1>");
+ LLNameValue nValue6("Virtual VEC3");
+ LLVector3 vec(-1, -1, -1);
+ nValue6 = -nValue5;
+ ensure_equals("3:operator unary- failed",*nValue6.getVec3(), vec);
+ }
+
+ template<> template<>
+ void namevalue_object_t::test<28>()
+ {
+ LLNameValue nValue("SecondLife", "This is a test", "ASSET", "R", "S", NameValueCallbackFunction, (void**) this);
+
+ ensure("getAsset failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
+ // this should not have updated as it is read only.
+ nValue.setAsset("New Value should not be updated");
+ ensure("setAsset on ReadOnly failed", (0 == strcmp(nValue.getAsset(),"This is a test")));
+
+ LLNameValue nValue1("SecondLife", "1234", "U32", "R", "S", NameValueCallbackFunction, (void**) this);
+ // this should not have updated as it is read only.
+ nValue1.setU32(4567);
+ ensure("setU32 on ReadOnly failed", *nValue1.getU32() == 1234);
+
+ LLNameValue nValue2("SecondLife", "1234", "S32", "R", "S", NameValueCallbackFunction, (void**) this);
+ // this should not have updated as it is read only.
+ nValue2.setS32(4567);
+ ensure("setS32 on ReadOnly failed", *nValue2.getS32() == 1234);
+
+ LLNameValue nValue3("SecondLife", "1234", "F32", "R", "S", NameValueCallbackFunction, (void**) this);
+ // this should not have updated as it is read only.
+ nValue3.setF32(4567);
+ ensure("setF32 on ReadOnly failed", *nValue3.getF32() == 1234);
+ nValue3 = nValue3 * 2;
+ ensure("setF32 on ReadOnly failed", *nValue3.getF32() == 1234);
+
+ LLNameValue nValue4("SecondLife", "<1,2,3>", "VEC3", "R", "S", NameValueCallbackFunction, (void**) this);
+ // this should not have updated as it is read only.
+ LLVector3 vec(4,5,6);
+ nValue3.setVec3(vec);
+ LLVector3 vec1(1,2,3);
+ ensure("setVec3 on ReadOnly failed", *nValue4.getVec3() == vec1);
+
+ // cant test for U64 as no set64 exists nor any operators support U64 type
+ }
+}
diff --git a/linden/indra/test/llpermissions_tut.cpp b/linden/indra/test/llpermissions_tut.cpp
new file mode 100644
index 0000000..0c9082b
--- /dev/null
+++ b/linden/indra/test/llpermissions_tut.cpp
@@ -0,0 +1,553 @@
+/**
+ * @file llpermissions_tut.cpp
+ * @author Adroit
+ * @date March 2007
+ * @brief llpermissions test cases.
+ *
+ * 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
+#include "lltut.h"
+#include "message.h"
+#include "llpermissions.h"
+
+
+namespace tut
+{
+ struct permission
+ {
+ };
+ typedef test_group permission_t;
+ typedef permission_t::object permission_object_t;
+ tut::permission_t tut_permission("permission");
+
+ template<> template<>
+ void permission_object_t::test<1>()
+ {
+ LLPermissions permissions;
+ LLUUID uuid = permissions.getCreator();
+ LLUUID uuid1 = permissions.getOwner();
+ LLUUID uuid2 = permissions.getGroup();
+ LLUUID uuid3 = permissions.getLastOwner();
+
+ ensure("LLPermission Get Functions failed", (uuid == LLUUID::null && uuid1 == LLUUID::null &&
+ uuid2 == LLUUID::null && uuid3 == LLUUID::null));
+ ensure("LLPermission Get Functions failed", (permissions.getMaskBase() == PERM_ALL && permissions.getMaskOwner() == PERM_ALL &&
+ permissions.getMaskGroup() == PERM_ALL && permissions.getMaskEveryone() == PERM_ALL && permissions.getMaskNextOwner() == PERM_ALL));
+ ensure("Ownership functions failed", (permissions.isGroupOwned() == FALSE && permissions.isOwned() == FALSE));
+ }
+
+ template<> template<>
+ void permission_object_t::test<2>()
+ {
+ LLPermissions permissions;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ permissions.init(creator, owner, lastOwner, group);
+
+ ensure_equals("init/getCreator():failed to return the creator ", creator, permissions.getCreator());
+ ensure_equals("init/getOwner():failed to return the owner ", owner, permissions.getOwner());
+ ensure_equals("init/getLastOwner():failed to return the group ", lastOwner, permissions.getLastOwner());
+ ensure_equals("init/getGroup():failed to return the group ", group, permissions.getGroup());
+ }
+
+ template<> template<>
+ void permission_object_t::test<3>()
+ {
+ LLPermissions permissions;
+ U32 base = PERM_ALL;
+ U32 owner = PERM_ITEM_UNRESTRICTED; //PERM_ITEM_UNRESTRICTED = PERM_MODIFY | PERM_COPY | PERM_TRANSFER;
+ U32 group = PERM_TRANSFER | PERM_MOVE | PERM_COPY|PERM_MODIFY;
+ U32 everyone = PERM_TRANSFER | PERM_MOVE | PERM_MODIFY;
+ U32 next = PERM_NONE;
+
+ U32 fixedbase = base;
+ U32 fixedowner = PERM_ITEM_UNRESTRICTED; //owner & fixedbase
+ U32 fixedgroup = PERM_ITEM_UNRESTRICTED; // no PERM_MOVE as owner does not have that perm either
+ U32 fixedeveryone = PERM_TRANSFER; // no PERM_MOVE. Everyone can never modify.
+ U32 fixednext = PERM_NONE;
+
+ permissions.initMasks(base, owner, everyone, group, next); // will fix perms if not allowed.
+ ensure_equals("initMasks/getMaskBase():failed to return the MaskBase ", fixedbase, permissions.getMaskBase());
+ ensure_equals("initMasks/getMaskOwner():failed to return the MaskOwner ", fixedowner, permissions.getMaskOwner());
+ ensure_equals("initMasks/getMaskEveryone():failed to return the MaskGroup ", fixedgroup, permissions.getMaskGroup());
+ ensure_equals("initMasks/getMaskEveryone():failed to return the MaskEveryone ", fixedeveryone, permissions.getMaskEveryone());
+ ensure_equals("initMasks/getMaskNextOwner():failed to return the MaskNext ", fixednext, permissions.getMaskNextOwner());
+
+ // explictly set should maintain the values
+ permissions.setMaskBase(base); //no fixing
+ ensure_equals("setMaskBase/getMaskBase():failed to return the MaskBase ", base, permissions.getMaskBase());
+
+ permissions.setMaskOwner(owner);
+ ensure_equals("setMaskOwner/getMaskOwner():failed to return the MaskOwner ", owner, permissions.getMaskOwner());
+
+ permissions.setMaskEveryone(everyone);
+ ensure_equals("setMaskEveryone/getMaskEveryone():failed to return the MaskEveryone ", everyone, permissions.getMaskEveryone());
+
+ permissions.setMaskGroup(group);
+ ensure_equals("setMaskGroup/getMaskEveryone():failed to return the MaskGroup ", group, permissions.getMaskGroup());
+
+ permissions.setMaskNext(next);
+ ensure_equals("setMaskNext/getMaskNextOwner():failed to return the MaskNext ", next, permissions.getMaskNextOwner());
+
+ // further tests can be added to ensure perms for owner/group/everyone etc. get properly fixed.
+ // code however suggests that there is no explict check if the perms are correct and the user of this
+ // class is expected to know how to use them correctly. skipping further test cases for now for various
+ // perm combinations.
+ }
+
+ template<> template<>
+ void permission_object_t::test<4>()
+ {
+ LLPermissions perm,perm1;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm1.init(creator,owner,lastOwner,group);
+ perm.set(perm1);
+ ensure("set():failed to set ", (creator == perm.getCreator()) && (owner == perm.getOwner())&&
+ (lastOwner == perm.getLastOwner())&& (group == perm.getGroup()));
+ }
+
+ template<> template<>
+ void permission_object_t::test<5>()
+ {
+ LLPermissions perm,perm1;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm1.init(creator,owner,lastOwner,group);
+
+ U32 base = PERM_TRANSFER;
+ U32 ownerp = PERM_TRANSFER;
+ U32 groupp = PERM_TRANSFER;
+ U32 everyone = PERM_TRANSFER;
+ U32 next = PERM_NONE;
+
+ perm1.initMasks(base, ownerp, everyone, groupp, next);
+
+ base = PERM_ALL;
+ ownerp = PERM_ITEM_UNRESTRICTED; //PERM_ITEM_UNRESTRICTED = PERM_MODIFY | PERM_COPY | PERM_TRANSFER;
+ groupp = PERM_TRANSFER | PERM_COPY|PERM_MODIFY;
+ everyone = PERM_TRANSFER;
+ next = PERM_NONE;
+
+ perm.init(creator,owner,lastOwner,group);
+ perm.initMasks(base, ownerp, everyone, groupp, next);
+
+ // restrict permissions by accumulation
+ perm.accumulate(perm1);
+
+ U32 fixedbase = PERM_TRANSFER | PERM_MOVE;
+ U32 fixedowner = PERM_TRANSFER;
+ U32 fixedgroup = PERM_TRANSFER;
+ U32 fixedeveryone = PERM_TRANSFER;
+ U32 fixednext = PERM_NONE;
+
+ ensure_equals("accumulate failed ", fixedbase, perm.getMaskBase());
+ ensure_equals("accumulate failed ", fixedowner, perm.getMaskOwner());
+ ensure_equals("accumulate failed ", fixedgroup, perm.getMaskGroup());
+ ensure_equals("accumulate failed ", fixedeveryone, perm.getMaskEveryone());
+ ensure_equals("accumulate failed ", fixednext, perm.getMaskNextOwner());
+ }
+
+ template<> template<>
+ void permission_object_t::test<6>()
+ {
+ LLPermissions perm;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+ ensure_equals("getSafeOwner:failed ", owner,perm.getSafeOwner());
+
+ ///NULL Owner
+ perm.init(creator,LLUUID::null,lastOwner,group);
+ ensure_equals("getSafeOwner:failed ", group, perm.getSafeOwner());
+ }
+
+ template<> template<>
+ void permission_object_t::test<7>()
+ {
+ LLPermissions perm1;
+ LLUUID uuid;
+ BOOL is_group_owned = FALSE;
+ ensure("1:getOwnership:failed ", (FALSE == perm1.getOwnership(uuid,is_group_owned)));
+
+ LLPermissions perm;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+ perm.getOwnership(uuid,is_group_owned);
+ ensure("2:getOwnership:failed ", ((uuid == owner) && (FALSE == is_group_owned)));
+
+ perm.init(creator,LLUUID::null,lastOwner,group);
+ perm.getOwnership(uuid,is_group_owned);
+ ensure("3:getOwnership:failed ", ((uuid == group) && (TRUE == is_group_owned)));
+ }
+
+ template<> template<>
+ void permission_object_t::test<8>()
+ {
+ LLPermissions perm,perm1;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+ perm1.init(creator,owner,lastOwner,group);
+ ensure_equals("getCRC32:failed ", perm.getCRC32(),perm1.getCRC32());
+ }
+
+ template<> template<>
+ void permission_object_t::test<9>()
+ {
+ LLPermissions perm;
+ LLUUID agent("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ bool is_atomic = TRUE;
+ ensure("setOwnerAndGroup():failed ", (TRUE == perm.setOwnerAndGroup(agent,owner,group,is_atomic)));
+
+ LLUUID owner2("68edcf47-ccd7-45b8-9f90-1649d7f12807");
+ LLUUID group2("9c8eca51-53d5-42a7-bb58-cef070395db9");
+
+ // cant change - agent need to be current owner
+ ensure("setOwnerAndGroup():failed ", (FALSE == perm.setOwnerAndGroup(agent,owner2,group2,is_atomic)));
+
+ // should be able to change - agent and owner same as current owner
+ ensure("setOwnerAndGroup():failed ", (TRUE == perm.setOwnerAndGroup(owner,owner,group2,is_atomic)));
+ }
+
+ template<> template<>
+ void permission_object_t::test<10>()
+ {
+ LLPermissions perm;
+ LLUUID agent;
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ ensure("deedToGroup():failed ", (TRUE == perm.deedToGroup(agent,group)));
+ }
+ template<> template<>
+ void permission_object_t::test<11>()
+ {
+ LLPermissions perm;
+ LLUUID agent;
+ BOOL set = 1;
+ U32 bits = PERM_TRANSFER | PERM_MODIFY;
+ ensure("setBaseBits():failed ", (TRUE == perm.setBaseBits(agent, set, bits)));
+ ensure("setOwnerBits():failed ", (TRUE == perm.setOwnerBits(agent, set, bits)));
+
+ LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ ensure("setBaseBits():failed ", (FALSE == perm.setBaseBits(agent1, set, bits)));
+ ensure("setOwnerBits():failed ", (FALSE == perm.setOwnerBits(agent1, set, bits)));
+ }
+
+ template<> template<>
+ void permission_object_t::test<12>()
+ {
+ LLPermissions perm;
+ LLUUID agent;
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ BOOL set = 1;
+ U32 bits = 10;
+ ensure("setGroupBits():failed ", (TRUE == perm.setGroupBits(agent,group, set, bits)));
+ ensure("setEveryoneBits():failed ", (TRUE == perm.setEveryoneBits(agent,group, set, bits)));
+ ensure("setNextOwnerBits():failed ", (TRUE == perm.setNextOwnerBits(agent,group, set, bits)));
+
+ LLUUID agent1("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ ensure("setGroupBits():failed ", (FALSE == perm.setGroupBits(agent1,group, set, bits)));
+ ensure("setEveryoneBits():failed ", (FALSE == perm.setEveryoneBits(agent1,group, set, bits)));
+ ensure("setNextOwnerBits():failed ", (FALSE == perm.setNextOwnerBits(agent1,group, set, bits)));
+ }
+
+ template<> template<>
+ void permission_object_t::test<13>()
+ {
+ LLPermissions perm;
+ LLUUID agent;
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ U32 bits = 10;
+ ensure("allowOperationBy():failed ", (TRUE == perm.allowOperationBy(bits,agent,group)));
+
+ LLUUID agent1("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ perm.init(creator,owner,lastOwner,group);
+ ensure("allowOperationBy():failed ", (TRUE == perm.allowOperationBy(bits,agent1,group)));
+ }
+
+ template<> template<>
+ void permission_object_t::test<14>()
+ {
+ LLPermissions perm;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner;
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+ LLUUID agent;
+ ensure("1:allowModifyBy():failed ", (TRUE == perm.allowModifyBy(agent)));
+ ensure("2:allowModifyBy():failed ", (TRUE == perm.allowModifyBy(agent,group)));
+
+ U32 val1 = 0x7FFFFFFF;
+ S32 sVal = 1 << 14;
+ sVal = val1 & sVal;
+ LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ ensure("3:allowModifyBy():failed ", (sVal == perm.allowModifyBy(agent1)));
+ ensure("4:allowModifyBy():failed ", (sVal == perm.allowModifyBy(agent1,group)));
+ }
+
+ template<> template<>
+ void permission_object_t::test<15>()
+ {
+ LLPermissions perm;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner;
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+ LLUUID agent;
+ ensure("1:allowCopyBy():failed ", (TRUE == perm.allowModifyBy(agent)));
+ ensure("2:allowCopyBy():failed ", (TRUE == perm.allowModifyBy(agent,group)));
+
+ U32 val1 = 0x7FFFFFFF;
+ S32 sVal = 1 << 15;
+ sVal = val1 & sVal;
+ LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ ensure("3:allowCopyBy():failed ", (sVal == perm.allowCopyBy(agent1)));
+ ensure("4:allowCopyBy():failed ", (sVal == perm.allowCopyBy(agent1,group)));
+ }
+
+ template<> template<>
+ void permission_object_t::test<16>()
+ {
+ LLPermissions perm;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner;
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+ LLUUID agent;
+ ensure("1:allowMoveBy():failed ", (TRUE == perm.allowMoveBy(agent)));
+ ensure("2:allowMoveBy():failed ", (TRUE == perm.allowMoveBy(agent,group)));
+
+ U32 val1 = 0x7FFFFFFF;
+ S32 sVal = 1 << 19;
+ sVal = val1 & sVal;
+ LLUUID agent1("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ ensure("3:allowMoveBy():failed ", (sVal == perm.allowMoveBy(agent1)));
+ ensure("4:allowMoveBy():failed ", (sVal == perm.allowMoveBy(agent1,group)));
+ }
+
+ template<> template<>
+ void permission_object_t::test<17>()
+ {
+ LLPermissions perm;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner;
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ LLUUID agent;
+ ensure("1:allowMoveBy():failed ", (TRUE == perm.allowTransferTo(agent)));
+
+ perm.init(creator,owner,lastOwner,group);
+ U32 val1 = 0x7FFFFFFF;
+ S32 sVal = 1 << 13;
+ sVal = val1 & sVal;
+ ensure("2:allowMoveBy():failed ", (sVal == perm.allowTransferTo(agent)));
+ }
+
+ template<> template<>
+ void permission_object_t::test<18>()
+ {
+ LLPermissions perm,perm1;
+ ensure("1:Operator==:failed ", perm == perm1);
+
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+ perm = perm1;
+ ensure("2:Operator==:failed ", perm == perm1);
+ }
+
+ template<> template<>
+ void permission_object_t::test<19>()
+ {
+ LLPermissions perm,perm1;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+ ensure("2:Operator==:failed ", perm != perm1);
+ }
+
+ template<> template<>
+ void permission_object_t::test<20>()
+ {
+ FILE* fp = fopen("linden_file.dat","w+");
+ if(!fp)
+ {
+ llerrs << "file coudnt be opened\n" << llendl;
+ return;
+ }
+ LLPermissions perm,perm1;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+
+ U32 base = PERM_TRANSFER | PERM_COPY;
+ U32 ownerp = PERM_TRANSFER;
+ U32 groupp = PERM_TRANSFER;
+ U32 everyone = PERM_TRANSFER;
+ U32 next = PERM_NONE;
+
+ perm.initMasks(base, ownerp, everyone, groupp, next);
+
+ perm.exportFile(fp);
+ fclose(fp);
+ fp = fopen("linden_file.dat","r+");
+ if(!fp)
+ {
+ llerrs << "file coudnt be opened\n" << llendl;
+ return;
+ }
+ perm1.importFile(fp);
+ fclose(fp);
+ ensure("exportFile()/importFile():failed to export and import the data ", perm1 == perm);
+}
+
+ template<> template<>
+ void permission_object_t::test<21>()
+ {
+ LLPermissions perm,perm1;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+
+ U32 base = PERM_TRANSFER | PERM_COPY;
+ U32 ownerp = PERM_TRANSFER;
+ U32 groupp = PERM_TRANSFER;
+ U32 everyone = PERM_TRANSFER;
+ U32 next = PERM_NONE;
+
+ perm.initMasks(base, ownerp, everyone, groupp, next);
+
+ std::ostringstream ostream;
+ perm.exportLegacyStream(ostream);
+ std::istringstream istream(ostream.str());
+ perm1.importLegacyStream(istream);
+
+ ensure("exportLegacyStream()/importLegacyStream():failed to export and import the data ", perm1 == perm);
+ }
+
+ template<> template<>
+ void permission_object_t::test<22>()
+ {
+ LLPermissions perm,perm1;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+ LLXMLNode* xml_node = perm.exportFileXML();
+ perm1.importXML(xml_node);
+ ensure("exportFileXML()/importXML():failed to export and import the data ", perm1 == perm);
+ }
+
+ template<> template<>
+ void permission_object_t::test<23>()
+ {
+ LLPermissions perm,perm1;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+ std::ostringstream stream1, stream2;
+ stream1 << perm;
+ perm1.init(creator,owner,lastOwner,group);
+ stream2 << perm1;
+ ensure("1:operator << failed",(stream1.str() == stream2.str()));
+ }
+
+ template<> template<>
+ void permission_object_t::test<24>()
+ {
+ LLPermissions perm,perm1;
+ LLUUID creator("abf0d56b-82e5-47a2-a8ad-74741bb2c29e");
+ LLUUID owner("68edcf47-ccd7-45b8-9f90-1649d7f12806");
+ LLUUID lastOwner("5e47a0dc-97bf-44e0-8b40-de06718cee9d");
+ LLUUID group("9c8eca51-53d5-42a7-bb58-cef070395db8");
+ perm.init(creator,owner,lastOwner,group);
+
+ U32 base = PERM_TRANSFER | PERM_COPY;
+ U32 ownerp = PERM_TRANSFER;
+ U32 groupp = PERM_TRANSFER;
+ U32 everyone = PERM_TRANSFER;
+ U32 next = PERM_NONE;
+
+ perm.initMasks(base, ownerp, everyone, groupp, next);
+
+ LLSD sd = ll_create_sd_from_permissions(perm);
+ perm1 = ll_permissions_from_sd(sd);
+ ensure_equals("ll_permissions_from_sd() and ll_create_sd_from_permissions()functions failed", perm, perm1);
+ }
+
+ template<> template<>
+ void permission_object_t::test<25>()
+ {
+ LLAggregatePermissions AggrPermission;
+ LLAggregatePermissions AggrPermission1;
+ ensure("getU8() function failed", (AggrPermission.getU8() == 0));
+ ensure("isEmpty() function failed", (AggrPermission.isEmpty() == TRUE));
+ AggrPermission.getValue(PERM_TRANSFER);
+ ensure_equals("getValue() function failed", AggrPermission.getValue(PERM_TRANSFER), 0x00);
+
+ AggrPermission.aggregate(PERM_ITEM_UNRESTRICTED);
+ ensure("aggregate() function failed", (AggrPermission.isEmpty() == FALSE));
+
+ AggrPermission1.aggregate(AggrPermission);
+ ensure("aggregate() function failed", (AggrPermission1.isEmpty() == FALSE));
+
+ std::ostringstream stream1;
+ stream1 << AggrPermission;
+ ensure("operator<< failed", (stream1.str() == "{PI_COPY=All, PI_MODIFY=All, PI_TRANSFER=All}"));
+ }
+}
diff --git a/linden/indra/test/llquaternion_tut.cpp b/linden/indra/test/llquaternion_tut.cpp
new file mode 100644
index 0000000..f64e87a
--- /dev/null
+++ b/linden/indra/test/llquaternion_tut.cpp
@@ -0,0 +1,665 @@
+/**
+ * @file llquaternion_tut.cpp
+ * @author Adroit
+ * @date 2007-03
+ * @brief Test cases of llquaternion.h
+ *
+ * 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
+#include "llmath.h"
+#include "lltut.h"
+#include "linden_common.h"
+#include "llquaternion.h"
+#include "v4math.h"
+#include "v3math.h"
+#include "v3dmath.h"
+#include "m4math.h"
+#include "m3math.h"
+#include "math.h"
+
+namespace tut
+{
+ struct llquat_test
+ {
+ };
+ typedef test_group llquat_test_t;
+ typedef llquat_test_t::object llquat_test_object_t;
+ tut::llquat_test_t tut_llquat_test("llquat");
+
+ //test case for LLQuaternion::LLQuaternion(void) fn.
+ template<> template<>
+ void llquat_test_object_t::test<1>()
+ {
+ LLQuaternion llquat;
+ ensure("LLQuaternion::LLQuaternion() failed", 0.f == llquat.mQ[0] &&
+ 0.f == llquat.mQ[1] &&
+ 0.f == llquat.mQ[2] &&
+ 1.f == llquat.mQ[3]);
+ }
+
+ //test case for explicit LLQuaternion(const LLMatrix4 &mat) fn.
+ template<> template<>
+ void llquat_test_object_t::test<2>()
+ {
+ LLMatrix4 llmat;
+ LLVector4 vector1(2.0f, 1.0f, 3.0f, 6.0f);
+ LLVector4 vector2(5.0f, 6.0f, 0.0f, 1.0f);
+ LLVector4 vector3(2.0f, 1.0f, 2.0f, 9.0f);
+ LLVector4 vector4(3.0f, 8.0f, 1.0f, 5.0f);
+
+ llmat.initRows(vector1, vector2, vector3, vector4);
+ ensure("explicit LLQuaternion(const LLMatrix4 &mat) failed", 2.0f == llmat.mMatrix[0][0] &&
+ 1.0f == llmat.mMatrix[0][1] &&
+ 3.0f == llmat.mMatrix[0][2] &&
+ 6.0f == llmat.mMatrix[0][3] &&
+ 5.0f == llmat.mMatrix[1][0] &&
+ 6.0f == llmat.mMatrix[1][1] &&
+ 0.0f == llmat.mMatrix[1][2] &&
+ 1.0f == llmat.mMatrix[1][3] &&
+ 2.0f == llmat.mMatrix[2][0] &&
+ 1.0f == llmat.mMatrix[2][1] &&
+ 2.0f == llmat.mMatrix[2][2] &&
+ 9.0f == llmat.mMatrix[2][3] &&
+ 3.0f == llmat.mMatrix[3][0] &&
+ 8.0f == llmat.mMatrix[3][1] &&
+ 1.0f == llmat.mMatrix[3][2] &&
+ 5.0f == llmat.mMatrix[3][3]);
+ }
+
+ template<> template<>
+ void llquat_test_object_t::test<3>()
+ {
+ LLMatrix3 llmat;
+
+ LLVector3 vect1(3.4028234660000000f , 234.56f, 4234.442234f);
+ LLVector3 vect2(741.434f, 23.00034f, 6567.223423f);
+ LLVector3 vect3(566.003034f, 12.98705f, 234.764423f);
+ llmat.setRows(vect1, vect2, vect3);
+
+ ensure("LLMatrix3::setRows fn failed.", 3.4028234660000000f == llmat.mMatrix[0][0] &&
+ 234.56f == llmat.mMatrix[0][1] &&
+ 4234.442234f == llmat.mMatrix[0][2] &&
+ 741.434f == llmat.mMatrix[1][0] &&
+ 23.00034f == llmat.mMatrix[1][1] &&
+ 6567.223423f == llmat.mMatrix[1][2] &&
+ 566.003034f == llmat.mMatrix[2][0] &&
+ 12.98705f == llmat.mMatrix[2][1] &&
+ 234.764423f == llmat.mMatrix[2][2]);
+ }
+
+ //test case for LLQuaternion(F32 x, F32 y, F32 z, F32 w), setQuatInit() and normQuat() fns.
+ template<> template<>
+ void llquat_test_object_t::test<4>()
+ {
+ F32 x_val = 3.0f;
+ F32 y_val = 2.0f;
+ F32 z_val = 6.0f;
+ F32 w_val = 1.0f;
+
+ LLQuaternion res_quat;
+ res_quat.setQuatInit(x_val, y_val, z_val, w_val);
+ res_quat.normQuat();
+
+ ensure("LLQuaternion::normQuat() fn failed",
+ is_approx_equal(0.42426407f, res_quat.mQ[0]) &&
+ is_approx_equal(0.28284273f, res_quat.mQ[1]) &&
+ is_approx_equal(0.84852815f, res_quat.mQ[2]) &&
+ is_approx_equal(0.14142136f, res_quat.mQ[3]));
+
+ x_val = 0.0f;
+ y_val = 0.0f;
+ z_val = 0.0f;
+ w_val = 0.0f;
+
+ res_quat.setQuatInit(x_val, y_val, z_val, w_val);
+ res_quat.normQuat();
+
+ ensure("LLQuaternion::normQuat() fn. failed.",
+ is_approx_equal(0.0f, res_quat.mQ[0]) &&
+ is_approx_equal(0.0f, res_quat.mQ[1]) &&
+ is_approx_equal(0.0f, res_quat.mQ[2]) &&
+ is_approx_equal(1.0f, res_quat.mQ[3]));
+
+
+ ensure("LLQuaternion::normQuat() fn. failed.",
+ is_approx_equal(0.0f, res_quat.mQ[0]) &&
+ is_approx_equal(0.0f, res_quat.mQ[1]) &&
+ is_approx_equal(0.0f, res_quat.mQ[2]) &&
+ is_approx_equal(1.0f, res_quat.mQ[3]));
+ }
+
+ //test case for conjQuat() and transQuat() fns.
+ template<> template<>
+ void llquat_test_object_t::test<5>()
+ {
+ F32 x_val = 3.0f;
+ F32 y_val = 2.0f;
+ F32 z_val = 6.0f;
+ F32 w_val = 1.0f;
+
+ LLQuaternion res_quat;
+ LLQuaternion result, result1;
+ result1 = result = res_quat.setQuatInit(x_val, y_val, z_val, w_val);
+
+ result.conjQuat();
+ result1.transQuat();
+
+ ensure("LLQuaternion::conjQuat and LLQuaternion::transQuat failed ",
+ is_approx_equal(result1.mQ[0], result.mQ[0]) &&
+ is_approx_equal(result1.mQ[1], result.mQ[1]) &&
+ is_approx_equal(result1.mQ[2], result.mQ[2]));
+
+ }
+
+ //test case for dot(const LLQuaternion &a, const LLQuaternion &b) fn.
+ template<> template<>
+ void llquat_test_object_t::test<6>()
+ {
+ LLQuaternion quat1(3.0f, 2.0f, 6.0f, 0.0f), quat2(1.0f, 1.0f, 1.0f, 1.0f);
+ ensure("1. The two values are different", llround(12.000000f, 2) == llround(dot(quat1, quat2), 2));
+
+ LLQuaternion quat0(3.0f, 9.334f, 34.5f, 23.0f), quat(34.5f, 23.23f, 2.0f, 45.5f);
+ ensure("2. The two values are different", llround(1435.828807f, 2) == llround(dot(quat0, quat), 2));
+ }
+
+ //test case for LLQuaternion &LLQuaternion::constrain(F32 radians) fn.
+ template<> template<>
+ void llquat_test_object_t::test<7>()
+ {
+ F32 radian = 60.0f;
+ LLQuaternion quat(3.0f, 2.0f, 6.0f, 0.0f);
+ LLQuaternion quat1;
+ quat1 = quat.constrain(radian);
+ ensure("1. LLQuaternion::constrain(F32 radians) failed",
+ is_approx_equal_fraction(-0.423442f, quat1.mQ[0], 8) &&
+ is_approx_equal_fraction(-0.282295f, quat1.mQ[1], 8) &&
+ is_approx_equal_fraction(-0.846884f, quat1.mQ[2], 8) &&
+ is_approx_equal_fraction(0.154251f, quat1.mQ[3], 8));
+
+
+ radian = 30.0f;
+ LLQuaternion quat0(37.50f, 12.0f, 86.023f, 40.32f);
+ quat1 = quat0.constrain(radian);
+
+ ensure("2. LLQuaternion::constrain(F32 radians) failed",
+ is_approx_equal_fraction(37.500000f, quat1.mQ[0], 8) &&
+ is_approx_equal_fraction(12.0000f, quat1.mQ[1], 8) &&
+ is_approx_equal_fraction(86.0230f, quat1.mQ[2], 8) &&
+ is_approx_equal_fraction(40.320000f, quat1.mQ[3], 8));
+ }
+
+ template<> template<>
+ void llquat_test_object_t::test<8>()
+ {
+ F32 value1 = 15.0f;
+ LLQuaternion quat1(1.0f, 2.0f, 4.0f, 1.0f);
+ LLQuaternion quat2(4.0f, 3.0f, 6.5f, 9.7f);
+ LLQuaternion res_lerp, res_slerp, res_nlerp;
+
+ //test case for lerp(F32 t, const LLQuaternion &q) fn.
+ res_lerp = lerp(value1, quat1);
+ ensure("1. LLQuaternion lerp(F32 t, const LLQuaternion &q) failed",
+ is_approx_equal_fraction(0.181355f, res_lerp.mQ[0], 16) &&
+ is_approx_equal_fraction(0.362711f, res_lerp.mQ[1], 16) &&
+ is_approx_equal_fraction(0.725423f, res_lerp.mQ[2], 16) &&
+ is_approx_equal_fraction(0.556158f, res_lerp.mQ[3], 16));
+
+ //test case for lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) fn.
+ res_lerp = lerp(value1, quat1, quat2);
+ ensure("2. LLQuaternion lerp(F32 t, const LLQuaternion &p, const LLQuaternion &q) failed",
+ is_approx_equal_fraction(0.314306f, res_lerp.mQ[0], 16) &&
+ is_approx_equal_fraction(0.116156f, res_lerp.mQ[1], 16) &&
+ is_approx_equal_fraction(0.283559f, res_lerp.mQ[2], 16) &&
+ is_approx_equal_fraction(0.898506f, res_lerp.mQ[3], 16));
+
+ //test case for slerp( F32 u, const LLQuaternion &a, const LLQuaternion &b ) fn.
+ res_slerp = slerp(value1, quat1, quat2);
+ ensure("3. LLQuaternion slerp( F32 u, const LLQuaternion &a, const LLQuaternion &b) failed",
+ is_approx_equal_fraction(46.000f, res_slerp.mQ[0], 16) &&
+ is_approx_equal_fraction(17.00f, res_slerp.mQ[1], 16) &&
+ is_approx_equal_fraction(41.5f, res_slerp.mQ[2], 16) &&
+ is_approx_equal_fraction(131.5f, res_slerp.mQ[3], 16));
+
+ //test case for nlerp(F32 t, const LLQuaternion &a, const LLQuaternion &b) fn.
+ res_nlerp = nlerp(value1, quat1, quat2);
+ ensure("4. LLQuaternion nlerp(F32 t, const LLQuaternion &a, const LLQuaternion &b) failed",
+ is_approx_equal_fraction(0.314306f, res_nlerp.mQ[0], 16) &&
+ is_approx_equal_fraction(0.116157f, res_nlerp.mQ[1], 16) &&
+ is_approx_equal_fraction(0.283559f, res_nlerp.mQ[2], 16) &&
+ is_approx_equal_fraction(0.898506f, res_nlerp.mQ[3], 16));
+
+ //test case for nlerp(F32 t, const LLQuaternion &q) fn.
+ res_slerp = slerp(value1, quat1);
+ ensure("5. LLQuaternion slerp(F32 t, const LLQuaternion &q) failed",
+ is_approx_equal_fraction(1.0f, res_slerp.mQ[0], 16) &&
+ is_approx_equal_fraction(2.0f, res_slerp.mQ[1], 16) &&
+ is_approx_equal_fraction(4.0000f, res_slerp.mQ[2], 16) &&
+ is_approx_equal_fraction(1.000f, res_slerp.mQ[3], 16));
+
+ LLQuaternion quat3(2.0f, 1.0f, 5.5f, 10.5f);
+ LLQuaternion res_nlerp1;
+ value1 = 100.0f;
+ res_nlerp1 = nlerp(value1, quat3);
+ ensure("6. LLQuaternion nlerp(F32 t, const LLQuaternion &q) failed",
+ is_approx_equal_fraction(0.268245f, res_nlerp1.mQ[0], 16) && is_approx_equal_fraction(0.134122f, res_nlerp1.mQ[1], 2) &&
+ is_approx_equal_fraction(0.737673f, res_nlerp1.mQ[2], 16) &&
+ is_approx_equal_fraction(0.604892f, res_nlerp1.mQ[3], 16));
+
+ //test case for lerp(F32 t, const LLQuaternion &q) fn.
+ res_lerp = lerp(value1, quat2);
+ ensure("7. LLQuaternion lerp(F32 t, const LLQuaternion &q) failed",
+ is_approx_equal_fraction(0.404867f, res_lerp.mQ[0], 16) &&
+ is_approx_equal_fraction(0.303650f, res_lerp.mQ[1], 16) &&
+ is_approx_equal_fraction(0.657909f, res_lerp.mQ[2], 16) &&
+ is_approx_equal_fraction(0.557704f, res_lerp.mQ[3], 16));
+
+ }
+
+ template<> template<>
+ void llquat_test_object_t::test<9>()
+ {
+ //test case for LLQuaternion operator*(const LLQuaternion &a, const LLQuaternion &b) fn
+ LLQuaternion quat1(1.0f, 2.5f, 3.5f, 5.5f);
+ LLQuaternion quat2(4.0f, 3.0f, 5.0f, 1.0f);
+ LLQuaternion result = quat1 * quat2;
+ ensure("1. LLQuaternion Operator* failed", (21.0f == result.mQ[0]) &&
+ (10.0f == result.mQ[1]) &&
+ (38.0f == result.mQ[2]) &&
+ (-23.5f == result.mQ[3]));
+
+ LLQuaternion quat3(2341.340f, 2352.345f, 233.25f, 7645.5f);
+ LLQuaternion quat4(674.067f, 893.0897f, 578.0f, 231.0f);
+ result = quat3 * quat4;
+ ensure("2. LLQuaternion Operator* failed", (4543086.5f == result.mQ[0]) &&
+ (8567578.0f == result.mQ[1]) &&
+ (3967591.25f == result.mQ[2]) &&
+ (-2047783.25f == result.mQ[3]));
+
+ //inline LLQuaternion operator+(const LLQuaternion &a, const LLQuaternion &b)fn.
+ result = quat1 + quat2;
+ ensure("3. LLQuaternion operator+ failed", (5.0f == result.mQ[0]) &&
+ (5.5f == result.mQ[1]) &&
+ (8.5f == result.mQ[2]) &&
+ (6.5f == result.mQ[3]));
+
+ result = quat3 + quat4;
+ ensure(
+ "4. LLQuaternion operator+ failed",
+ is_approx_equal(3015.407227f, result.mQ[0]) &&
+ is_approx_equal(3245.434570f, result.mQ[1]) &&
+ (811.25f == result.mQ[2]) &&
+ (7876.5f == result.mQ[3]));
+
+ //inline LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b) fn
+ result = quat1 - quat2;
+ ensure(
+ "5. LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b) failed",
+ (-3.0f == result.mQ[0]) &&
+ (-0.5f == result.mQ[1]) &&
+ (-1.5f == result.mQ[2]) &&
+ (4.5f == result.mQ[3]));
+
+ result = quat3 - quat4;
+ ensure(
+ "6. LLQuaternion operator-(const LLQuaternion &a, const LLQuaternion &b) failed",
+ is_approx_equal(1667.273071f, result.mQ[0]) &&
+ is_approx_equal(1459.255249f, result.mQ[1]) &&
+ (-344.75f == result.mQ[2]) &&
+ (7414.50f == result.mQ[3]));
+ }
+
+ //test case for LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot) fn.
+ template<> template<>
+ void llquat_test_object_t::test<10>()
+ {
+#if (LL_RELEASE && LL_LINUX)
+ skip_fail("Doesn't work under Linux -- FIX ME!");
+#endif
+ LLVector4 vect(12.0f, 5.0f, 60.0f, 75.1f);
+ LLQuaternion quat(2323.034f, 23.5f, 673.23f, 57667.5f);
+ LLVector4 result = vect * quat;
+ ensure(
+ "1. LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot) failed",
+ (39928406016.0f == result.mV[0]) &&
+ (1457801728.0f == result.mV[1]) &&
+ (200580612096.0f == result.mV[2]) &&
+ (75.099998f == result.mV[3]));
+
+ LLVector4 vect1(22.0f, 45.0f, 40.0f, 78.1f);
+ LLQuaternion quat1(2.034f, 45.5f, 37.23f, 7.5f);
+ result = vect1 * quat1;
+ ensure(
+ "2. LLVector4 operator*(const LLVector4 &a, const LLQuaternion &rot) failed",
+ is_approx_equal(-58153.5390f, result.mV[0]) &&
+ (183787.8125f == result.mV[1]) &&
+ (116864.164063f == result.mV[2]) &&
+ (78.099998f == result.mV[3]));
+ }
+
+ //test case for LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot) fn.
+ template<> template<>
+ void llquat_test_object_t::test<11>()
+ {
+ LLVector3 vect(12.0f, 5.0f, 60.0f);
+ LLQuaternion quat(23.5f, 6.5f, 3.23f, 56.5f);
+ LLVector3 result = vect * quat;
+ ensure(
+ "1. LLVEctor3 operator*(const LLVector3 &a, const LLQuaternion &rot) failed",
+ is_approx_equal(97182.953125f,result.mV[0]) &&
+ is_approx_equal(-135405.640625f, result.mV[1]) &&
+ is_approx_equal(162986.140f, result.mV[2]));
+
+ LLVector3 vect1(5.0f, 40.0f, 78.1f);
+ LLQuaternion quat1(2.034f, 45.5f, 37.23f, 7.5f);
+ result = vect1 * quat1;
+ ensure(
+ "2. LLVector3 operator*(const LLVector3 &a, const LLQuaternion &rot) failed",
+ is_approx_equal(33217.703f, result.mV[0]) &&
+ is_approx_equal(295383.8125f, result.mV[1]) &&
+ is_approx_equal(84718.140f, result.mV[2]));
+ }
+
+ //test case for LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot) fn.
+ template<> template<>
+ void llquat_test_object_t::test<12>()
+ {
+ LLVector3d vect(-2.0f, 5.0f, -6.0f);
+ LLQuaternion quat(-3.5f, 4.5f, 3.5f, 6.5f);
+ LLVector3d result = vect * quat;
+ ensure(
+ "1. LLVEctor3d operator*(const LLVector3d &a, const LLQuaternion &rot) failed ",
+ (-633.0f == result.mdV[0]) &&
+ (-300.0f == result.mdV[1]) &&
+ (-36.0f == result.mdV[2]));
+
+ LLVector3d vect1(5.0f, -4.5f, 8.21f);
+ LLQuaternion quat1(2.0f, 4.5f, -7.2f, 9.5f);
+ result = vect1 * quat1;
+ ensure(
+ "2. LLVector3d operator*(const LLVector3d &a, const LLQuaternion &rot) failed",
+ is_approx_equal_fraction(-120.29f, (F32) result.mdV[0], 8) &&
+ is_approx_equal_fraction(-1683.958f, (F32) result.mdV[1], 8) &&
+ is_approx_equal_fraction(516.56f, (F32) result.mdV[2], 8));
+
+ LLVector3d vect2(2.0f, 3.5f, 1.1f);
+ LLQuaternion quat2(1.0f, 4.0f, 2.0f, 5.0f);
+ result = vect2 * quat2;
+ ensure(
+ "3. LLvector3d operator*(const LLVector3d &a, const LLQuaternion &rot) failed",
+ is_approx_equal_fraction(18.400001f, (F32) result.mdV[0], 8) &&
+ is_approx_equal_fraction(188.6f, (F32) result.mdV[1], 8) &&
+ is_approx_equal_fraction(32.20f, (F32) result.mdV[2], 8));
+ }
+
+ //test case for inline LLQuaternion operator-(const LLQuaternion &a) fn.
+ template<> template<>
+ void llquat_test_object_t::test<13>()
+ {
+ LLQuaternion quat(23.5f, 34.5f, 16723.4f, 324.7f);
+ LLQuaternion result = -quat;
+ ensure(
+ "1. LLQuaternion operator-(const LLQuaternion &a) failed",
+ (-23.5f == result.mQ[0]) &&
+ (-34.5f == result.mQ[1]) &&
+ (-16723.4f == result.mQ[2]) &&
+ (-324.7f == result.mQ[3]));
+
+ LLQuaternion quat1(-3.5f, -34.5f, -16.4f, -154.7f);
+ result = -quat1;
+ ensure(
+ "2. LLQuaternion operator-(const LLQuaternion &a) failed.",
+ (3.5f == result.mQ[0]) &&
+ (34.5f == result.mQ[1]) &&
+ (16.4f == result.mQ[2]) &&
+ (154.7f == result.mQ[3]));
+ }
+
+ //test case for inline LLQuaternion operator*(F32 a, const LLQuaternion &q) and
+ //inline LLQuaternion operator*(F32 a, const LLQuaternion &q) fns.
+ template<> template<>
+ void llquat_test_object_t::test<14>()
+ {
+ LLQuaternion quat_value(9.0f, 8.0f, 7.0f, 6.0f);
+ F32 a =3.5f;
+ LLQuaternion result = a * quat_value;
+ LLQuaternion result1 = quat_value * a;
+
+ ensure(
+ "1. LLQuaternion operator* failed",
+ (result.mQ[0] == result1.mQ[0]) &&
+ (result.mQ[1] == result1.mQ[1]) &&
+ (result.mQ[2] == result1.mQ[2]) &&
+ (result.mQ[3] == result1.mQ[3]));
+
+
+ LLQuaternion quat_val(9454.0f, 43568.3450f, 456343247.0343f, 2346.03434f);
+ a =-3324.3445f;
+ result = a * quat_val;
+ result1 = quat_val * a;
+
+ ensure(
+ "2. LLQuaternion operator* failed",
+ (result.mQ[0] == result1.mQ[0]) &&
+ (result.mQ[1] == result1.mQ[1]) &&
+ (result.mQ[2] == result1.mQ[2]) &&
+ (result.mQ[3] == result1.mQ[3]));
+ }
+
+ template<> template<>
+ void llquat_test_object_t::test<15>()
+ {
+ // test cases for inline LLQuaternion operator~(const LLQuaternion &a)
+ LLQuaternion quat_val(2323.634f, -43535.4f, 3455.88f, -32232.45f);
+ LLQuaternion result = ~quat_val;
+ ensure(
+ "1. LLQuaternion operator~(const LLQuaternion &a) failed ",
+ (-2323.634f == result.mQ[0]) &&
+ (43535.4f == result.mQ[1]) &&
+ (-3455.88f == result.mQ[2]) &&
+ (-32232.45f == result.mQ[3]));
+
+ //test case for inline bool LLQuaternion::operator==(const LLQuaternion &b) const
+ LLQuaternion quat_val1(2323.634f, -43535.4f, 3455.88f, -32232.45f);
+ LLQuaternion quat_val2(2323.634f, -43535.4f, 3455.88f, -32232.45f);
+ ensure(
+ "2. LLQuaternion::operator==(const LLQuaternion &b) failed",
+ quat_val1 == quat_val2);
+ }
+
+ template<> template<>
+ void llquat_test_object_t::test<16>()
+ {
+ //test case for inline bool LLQuaternion::operator!=(const LLQuaternion &b) const
+ LLQuaternion quat_val1(2323.634f, -43535.4f, 3455.88f, -32232.45f);
+ LLQuaternion quat_val2(0, -43535.4f, 3455.88f, -32232.45f);
+ ensure("LLQuaternion::operator!=(const LLQuaternion &b) failed", quat_val1 != quat_val2);
+ }
+
+ template<> template<>
+ void llquat_test_object_t::test<17>()
+ {
+ //test case for LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order)
+ F32 x = 2.0f;
+ F32 y = 1.0f;
+ F32 z = 3.0f;
+
+ LLQuaternion result = mayaQ(x, y, z, LLQuaternion::XYZ);
+ ensure(
+ "1. LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for XYZ",
+ is_approx_equal_fraction(0.0172174f, result.mQ[0], 16) &&
+ is_approx_equal_fraction(0.009179f, result.mQ[1], 16) &&
+ is_approx_equal_fraction(0.026020f, result.mQ[2], 16) &&
+ is_approx_equal_fraction(0.999471f, result.mQ[3], 16));
+
+ LLQuaternion result1 = mayaQ(x, y, z, LLQuaternion::YZX);
+ ensure(
+ "2. LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for XYZ",
+ is_approx_equal_fraction(0.017217f, result1.mQ[0], 16) &&
+ is_approx_equal_fraction(0.008265f, result1.mQ[1], 16) &&
+ is_approx_equal_fraction(0.026324f, result1.mQ[2], 16) &&
+ is_approx_equal_fraction(0.999471f, result1.mQ[3], 16));
+
+ LLQuaternion result2 = mayaQ(x, y, z, LLQuaternion::ZXY);
+ ensure(
+ "3. LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for ZXY",
+ is_approx_equal_fraction(0.017674f, result2.mQ[0], 16) &&
+ is_approx_equal_fraction(0.008265f, result2.mQ[1], 16) &&
+ is_approx_equal_fraction(0.026020f, result2.mQ[2], 16) &&
+ is_approx_equal_fraction(0.999471f, result2.mQ[3], 16));
+
+ LLQuaternion result3 = mayaQ(x, y, z, LLQuaternion::XZY);
+ ensure(
+ "4. TLLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for XZY",
+ is_approx_equal_fraction(0.017674f, result3.mQ[0], 16) &&
+ is_approx_equal_fraction(0.009179f, result3.mQ[1], 16) &&
+ is_approx_equal_fraction(0.026020f, result3.mQ[2], 16) &&
+ is_approx_equal_fraction(0.999463f, result3.mQ[3], 16));
+
+ LLQuaternion result4 = mayaQ(x, y, z, LLQuaternion::YXZ);
+ ensure(
+ "5. LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for YXZ",
+ is_approx_equal_fraction(0.017217f, result4.mQ[0], 16) &&
+ is_approx_equal_fraction(0.009179f, result4.mQ[1], 16) &&
+ is_approx_equal_fraction(0.026324f, result4.mQ[2], 16) &&
+ is_approx_equal_fraction(0.999463f, result4.mQ[3], 16));
+
+ LLQuaternion result5 = mayaQ(x, y, z, LLQuaternion::ZYX);
+ ensure(
+ "6. LLQuaternion mayaQ(F32 xRot, F32 yRot, F32 zRot, LLQuaternion::Order order) failed for ZYX",
+ is_approx_equal_fraction(0.017674f, result5.mQ[0], 16) &&
+ is_approx_equal_fraction(0.008265f, result5.mQ[1], 16) &&
+ is_approx_equal_fraction(0.026324f, result5.mQ[2], 16) &&
+ is_approx_equal_fraction(0.999463f, result5.mQ[3], 16));
+ }
+
+ template<> template<>
+ void llquat_test_object_t::test<18>()
+ {
+ // test case for friend std::ostream& operator<<(std::ostream &s, const LLQuaternion &a) fn
+ LLQuaternion a(1.0f, 1.0f, 1.0f, 1.0f);
+ std::ostringstream result_value;
+ result_value << a;
+ ensure_equals("1. Operator << failed", result_value.str(), "{ 1, 1, 1, 1 }");
+
+ LLQuaternion b(-31.034f, 231.2340f, 3451.344320f, -341.0f);
+ std::ostringstream result_value1;
+ result_value1 << b;
+ ensure_equals("2. Operator << failed", result_value1.str(), "{ -31.034, 231.234, 3451.34, -341 }");
+
+ LLQuaternion c(1.0f, 2.2f, 3.3f, 4.4f);
+ result_value << c;
+ ensure_equals("3. Operator << failed", result_value.str(), "{ 1, 1, 1, 1 }{ 1, 2.2, 3.3, 4.4 }");
+
+ }
+
+ template<> template<>
+ void llquat_test_object_t::test<19>()
+ {
+ //test case for const char *OrderToString( const LLQuaternion::Order order ) fn
+ const char* result = OrderToString(LLQuaternion::XYZ);
+ ensure("1. OrderToString failed for XYZ", (0 == strcmp("XYZ", result)));
+
+ result = OrderToString(LLQuaternion::YZX);
+ ensure("2. OrderToString failed for YZX", (0 == strcmp("YZX", result)));
+
+ result = OrderToString(LLQuaternion::ZXY);
+ ensure(
+ "3. OrderToString failed for ZXY",
+ (0 == strcmp("ZXY", result)) &&
+ (0 != strcmp("XYZ", result)) &&
+ (0 != strcmp("YXZ", result)) &&
+ (0 != strcmp("ZYX", result)) &&
+ (0 != strcmp("XYZ", result)));
+
+ result = OrderToString(LLQuaternion::XZY);
+ ensure("4. OrderToString failed for XZY", (0 == strcmp("XZY", result)));
+
+ result = OrderToString(LLQuaternion::ZYX);
+ ensure("5. OrderToString failed for ZYX", (0 == strcmp("ZYX", result)));
+
+ result = OrderToString(LLQuaternion::YXZ);
+ ensure("6.OrderToString failed for YXZ", (0 == strcmp("YXZ", result)));
+ }
+
+ template<> template<>
+ void llquat_test_object_t::test<20>()
+ {
+ //test case for LLQuaternion::Order StringToOrder( const char *str ) fn
+ int result = StringToOrder("XYZ");
+ ensure("1. LLQuaternion::Order StringToOrder(const char *str ) failed for XYZ", 0 == result);
+
+ result = StringToOrder("YZX");
+ ensure("2. LLQuaternion::Order StringToOrder(const char *str) failed for YZX", 1 == result);
+
+ result = StringToOrder("ZXY");
+ ensure("3. LLQuaternion::Order StringToOrder(const char *str) failed for ZXY", 2 == result);
+
+ result = StringToOrder("XZY");
+ ensure("4. LLQuaternion::Order StringToOrder(const char *str) failed for XZY", 3 == result);
+
+ result = StringToOrder("YXZ");
+ ensure("5. LLQuaternion::Order StringToOrder(const char *str) failed for YXZ", 4 == result);
+
+ result = StringToOrder("ZYX");
+ ensure("6. LLQuaternion::Order StringToOrder(const char *str) failed for ZYX", 5 == result);
+
+ }
+
+ template<> template<>
+ void llquat_test_object_t::test<21>()
+ {
+ //void LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) const fn
+ F32 angle_value = 90.0f;
+ LLVector3 vect(12.0f, 4.0f, 1.0f);
+ LLQuaternion llquat(angle_value, vect);
+ llquat.getAngleAxis(&angle_value, vect);
+ ensure(
+ "LLQuaternion::getAngleAxis(F32* angle, LLVector3 &vec) failed",
+ is_approx_equal_fraction(2.035406f, angle_value, 16) &&
+ is_approx_equal_fraction(0.315244f, vect.mV[1], 16) &&
+ is_approx_equal_fraction(0.078811f, vect.mV[2], 16) &&
+ is_approx_equal_fraction(0.945733f, vect.mV[0], 16));
+ }
+
+ template<> template<>
+ void llquat_test_object_t::test<22>()
+ {
+ //test case for void LLQuaternion::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) const fn
+ F32 roll = -12.0f;
+ F32 pitch = -22.43f;
+ F32 yaw = 11.0f;
+
+ LLQuaternion llquat;
+ llquat.getEulerAngles(&roll, &pitch, &yaw);
+ ensure(
+ "LLQuaternion::getEulerAngles(F32 *roll, F32 *pitch, F32 *yaw) failed",
+ is_approx_equal(0.000f, llquat.mQ[0]) &&
+ is_approx_equal(0.000f, llquat.mQ[1]) &&
+ is_approx_equal(0.000f, llquat.mQ[2]) &&
+ is_approx_equal(1.000f, llquat.mQ[3]));
+ }
+
+}
diff --git a/linden/indra/test/llsaleinfo_tut.cpp b/linden/indra/test/llsaleinfo_tut.cpp
new file mode 100644
index 0000000..9dc7f77
--- /dev/null
+++ b/linden/indra/test/llsaleinfo_tut.cpp
@@ -0,0 +1,248 @@
+/**
+ * @file LLSaleInfo_tut.cpp
+ * @author Adroit
+ * @date 2007-03
+ * @brief Test cases of llsaleinfo.h
+ *
+ * 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
+#include "lltut.h"
+#include "linden_common.h"
+#include "llsaleinfo.h"
+
+namespace tut
+{
+ struct llsaleinfo_tut
+ {
+ };
+ typedef test_group llsaleinfo_tut_t;
+ typedef llsaleinfo_tut_t::object llsaleinfo_test_t;
+ tut::llsaleinfo_tut_t tut_llsaleinfo_test("llsaleinfo");
+
+ template<> template<>
+ void llsaleinfo_test_t::test<1>()
+ {
+ //test case for getSaleType(), getSalePrice(), getCRC32() fn.
+ //test case for setSaleType(), setSalePrice() fn.
+
+ S32 sale_price = 10000;
+ LLSaleInfo llsaleinfo(LLSaleInfo::FS_COPY, sale_price);
+ char* sale= "copy";
+
+ LLSD llsd_obj1 = ll_create_sd_from_sale_info(llsaleinfo);
+ LLSaleInfo saleinfo1 = ll_sale_info_from_sd(llsd_obj1);
+
+ ensure("1. The getSaleType() fn failed", LLSaleInfo::FS_COPY == llsaleinfo.getSaleType());
+ ensure("2. LLSaleInfo::isForSale() fn failed", TRUE == llsaleinfo.isForSale());
+ ensure("3. The getSalePrice() fn failed", sale_price == llsaleinfo.getSalePrice());
+ ensure("4. The getCRC32() fn failed", 235833404 == llsaleinfo.getCRC32());
+ ensure("5. LLSaleInfo::lookup(const char* name) fn failed", LLSaleInfo::FS_COPY == llsaleinfo.lookup(sale));
+ ensure_equals("6. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSalePrice(), saleinfo1.getSalePrice());
+ ensure_equals("7. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSaleType(), saleinfo1.getSaleType());
+
+ llsaleinfo.setSalePrice(10000000);
+ llsaleinfo.setSaleType(LLSaleInfo::FS_ORIGINAL);
+ sale = "cntn";
+ llsd_obj1 = ll_create_sd_from_sale_info(llsaleinfo);
+ saleinfo1 = ll_sale_info_from_sd(llsd_obj1);
+
+ ensure("8. The getSaleType() and setSaleType() fn failed", LLSaleInfo::FS_ORIGINAL == llsaleinfo.getSaleType());
+ ensure("9. LLSaleInfo::isForSale() fn failed", TRUE == llsaleinfo.isForSale());
+ ensure("10. The getSalePrice() fn failed", 10000000 == llsaleinfo.getSalePrice());
+ ensure("11. The getCRC32() fn failed", 127911702 == llsaleinfo.getCRC32());
+ ensure("12. LLSaleInfo::lookup(const char* name) fn failed", LLSaleInfo::FS_CONTENTS == llsaleinfo.lookup(sale));
+ ensure_equals("13. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSalePrice(), saleinfo1.getSalePrice());
+ ensure_equals("14. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSaleType(), saleinfo1.getSaleType());
+
+ llsaleinfo.setSalePrice(55000550);
+ llsaleinfo.setSaleType(LLSaleInfo::FS_CONTENTS);
+ sale = "orig";
+ llsd_obj1 = ll_create_sd_from_sale_info(llsaleinfo);
+ saleinfo1 = ll_sale_info_from_sd(llsd_obj1);
+
+ ensure("15. The getSaleType() and setSaleType() fn failed", LLSaleInfo::FS_CONTENTS == llsaleinfo.getSaleType());
+ ensure("16. LLSaleInfo::isForSale() fn failed", TRUE == llsaleinfo.isForSale());
+ ensure("17. The getSalePrice() fn failed", 55000550 == llsaleinfo.getSalePrice());
+ ensure("18. The getCRC32() fn failed", 408735656 == llsaleinfo.getCRC32());
+ ensure("19. LLSaleInfo::lookup(const char* name) fn failed", LLSaleInfo::FS_ORIGINAL == llsaleinfo.lookup(sale));
+ ensure_equals("20. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSalePrice(), saleinfo1.getSalePrice());
+ ensure_equals("21. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSaleType(), saleinfo1.getSaleType());
+
+ llsaleinfo.setSalePrice(-6432);
+ llsaleinfo.setSaleType(LLSaleInfo::FS_NOT);
+ sale = "not";
+ llsd_obj1 = ll_create_sd_from_sale_info(llsaleinfo);
+ saleinfo1 = ll_sale_info_from_sd(llsd_obj1);
+
+ ensure("22. The getSaleType() and setSaleType() fn failed", LLSaleInfo::FS_NOT == llsaleinfo.getSaleType());
+ ensure("23. LLSaleInfo::isForSale() fn failed", FALSE == llsaleinfo.isForSale());
+ ensure("24. The getSalePrice() fn failed", 0 == llsaleinfo.getSalePrice());
+ ensure("25. The getCRC32() fn failed", 0 == llsaleinfo.getCRC32());
+ ensure("26. LLSaleInfo::lookup(const char* name) fn failed", LLSaleInfo::FS_NOT == llsaleinfo.lookup(sale));
+ ensure_equals("27. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSalePrice(), saleinfo1.getSalePrice());
+ ensure_equals("28. ll_create_sd_from_sale_info() fn failed", llsaleinfo.getSaleType(), saleinfo1.getSaleType());
+ }
+
+ template<> template<>
+ void llsaleinfo_test_t::test<2>()
+ {
+
+ FILE* fp = fopen("linden_file.dat","w+");
+ if(!fp)
+ {
+ llerrs << "file could not be opened\n" << llendl;
+ return;
+ }
+
+ S32 sale_price = 43500;
+ LLSaleInfo llsaleinfo(LLSaleInfo::FS_COPY, sale_price);
+
+ llsaleinfo.exportFile(fp);
+ fclose(fp);
+
+ LLSaleInfo llsaleinfo1;
+ U32 perm_mask;
+ BOOL has_perm_mask;
+ fp = fopen("linden_file.dat","r");
+
+ if(!fp)
+ {
+ llerrs << "file coudnt be opened\n" << llendl;
+ return;
+ }
+
+ llsaleinfo1.importFile(fp, has_perm_mask, perm_mask);
+ fclose(fp);
+
+ ensure("importFile() fn failed ", llsaleinfo.getSaleType() == llsaleinfo1.getSaleType() &&
+ llsaleinfo.getSalePrice() == llsaleinfo1.getSalePrice());
+ }
+
+ template<> template<>
+ void llsaleinfo_test_t::test<3>()
+ {
+ S32 sale_price = 525452;
+ LLSaleInfo llsaleinfo(LLSaleInfo::FS_ORIGINAL, sale_price);
+
+ std::ostringstream ostream;
+ llsaleinfo.exportLegacyStream(ostream);
+
+ std::istringstream istream(ostream.str());
+ LLSaleInfo llsaleinfo1;
+ U32 perm_mask = 0;
+ BOOL has_perm_mask = FALSE;
+ llsaleinfo1.importLegacyStream(istream, has_perm_mask, perm_mask);
+
+ ensure("importLegacyStream() fn failed ", llsaleinfo.getSalePrice() == llsaleinfo1.getSalePrice() &&
+ llsaleinfo.getSaleType() == llsaleinfo1.getSaleType());
+ }
+
+ template<> template<>
+ void llsaleinfo_test_t::test<4>()
+ {
+// LLXMLNode is teh suck.
+#if 0
+ S32 sale_price = 23445;
+ LLSaleInfo saleinfo(LLSaleInfo::FS_CONTENTS, sale_price);
+
+ LLXMLNode* x_node = saleinfo.exportFileXML();
+
+ LLSaleInfo saleinfo1(LLSaleInfo::FS_NOT, 0);
+
+ saleinfo1.importXML(x_node);
+ ensure_equals("1.importXML() fn failed", saleinfo.getSalePrice(), saleinfo1.getSalePrice());
+ ensure_equals("2.importXML() fn failed", saleinfo.getSaleType(), saleinfo1.getSaleType());
+#endif
+ }
+
+ template<> template<>
+ void llsaleinfo_test_t::test<5>()
+ {
+ S32 sale_price = 99000;
+ LLSaleInfo saleinfo(LLSaleInfo::FS_ORIGINAL, sale_price);
+
+ LLSD sd_result = saleinfo.asLLSD();
+
+ U32 perm_mask = 0 ;
+ BOOL has_perm_mask = FALSE;
+
+ LLSaleInfo saleinfo1;
+ saleinfo1.fromLLSD( sd_result, has_perm_mask, perm_mask);
+
+ ensure_equals("asLLSD and fromLLSD failed", saleinfo.getSalePrice(), saleinfo1.getSalePrice());
+ ensure_equals("asLLSD and fromLLSD failed", saleinfo.getSaleType(), saleinfo1.getSaleType());
+ }
+
+ //static EForSale lookup(const char* name) fn test
+ template<> template<>
+ void llsaleinfo_test_t::test<6>()
+ {
+ S32 sale_price = 233223;
+ LLSaleInfo::EForSale ret_type = LLSaleInfo::lookup("orig");
+
+ ensure_equals("lookup(const char* name) fn failed", ret_type, LLSaleInfo::FS_ORIGINAL);
+
+ LLSaleInfo saleinfo(LLSaleInfo::FS_COPY, sale_price);
+ const char* result = LLSaleInfo::lookup(LLSaleInfo::FS_COPY);
+ ensure("char* lookup(EForSale type) fn failed", 0 == strcmp("copy", result));
+ }
+
+ //void LLSaleInfo::accumulate(const LLSaleInfo& sale_info) fn test
+ template<> template<>
+ void llsaleinfo_test_t::test<7>()
+ {
+ S32 sale_price = 20;
+ LLSaleInfo saleinfo(LLSaleInfo::FS_COPY, sale_price);
+ LLSaleInfo saleinfo1(LLSaleInfo::FS_COPY, sale_price);
+ saleinfo1.accumulate(saleinfo);
+ ensure_equals("LLSaleInfo::accumulate(const LLSaleInfo& sale_info) fn failed", saleinfo1.getSalePrice(), 40);
+
+ }
+
+ // test cases of bool operator==(const LLSaleInfo &rhs) fn
+ // test case of bool operator!=(const LLSaleInfo &rhs) fn
+ template<> template<>
+ void llsaleinfo_test_t::test<8>()
+ {
+ S32 sale_price = 55000;
+ LLSaleInfo saleinfo(LLSaleInfo::FS_ORIGINAL, sale_price);
+ LLSaleInfo saleinfoequal(LLSaleInfo::FS_ORIGINAL, sale_price);
+ LLSaleInfo saleinfonotequal(LLSaleInfo::FS_ORIGINAL, sale_price*2);
+
+ ensure("operator == fn. failed", true == (saleinfo == saleinfoequal));
+ ensure("operator != fn. failed", true == (saleinfo != saleinfonotequal));
+ }
+
+ template<> template<>
+ void llsaleinfo_test_t::test<9>()
+ {
+
+ //TBD: void LLSaleInfo::packMessage(LLMessageSystem* msg) const
+ //TBD: void LLSaleInfo::unpackMessage(LLMessageSystem* msg, const char* block)
+ //TBD: void LLSaleInfo::unpackMultiMessage(LLMessageSystem* msg, const char* block, S32 block_num)
+ }
+
+}
diff --git a/linden/indra/test/llsdmessagebuilder_tut.cpp b/linden/indra/test/llsdmessagebuilder_tut.cpp
index d48584a..95a49dd 100755
--- a/linden/indra/test/llsdmessagebuilder_tut.cpp
+++ b/linden/indra/test/llsdmessagebuilder_tut.cpp
@@ -134,7 +134,7 @@ namespace tut
void LLSDMessageBuilderTestObject::test<7>()
// F32
{
- F32 outValue, inValue = 121.44;
+ F32 outValue, inValue = 121.44f;
LLSDMessageBuilder builder = defaultBuilder();
builder.addF32("var", inValue);
LLSDMessageReader reader = setReader(builder);
diff --git a/linden/indra/test/llsdmessagereader_tut.cpp b/linden/indra/test/llsdmessagereader_tut.cpp
index 707cf31..5b644d0 100755
--- a/linden/indra/test/llsdmessagereader_tut.cpp
+++ b/linden/indra/test/llsdmessagereader_tut.cpp
@@ -30,6 +30,7 @@
#include
#include "lltut.h"
+#include "message.h"
#include "llsdmessagereader.h"
#include "llsdutil.h"
@@ -41,7 +42,7 @@ namespace tut
const std::string& expected_name)
{
LLSDMessageReader msg;
- msg.setMessage(msg_name, msg_data);
+ msg.setMessage(gMessageStringTable.getString(msg_name.c_str()), msg_data);
ensure_equals("Ensure name", std::string(msg.getMessageName()),
expected_name);
}
@@ -189,7 +190,7 @@ namespace tut
void LLSDMessageReaderTestObject::test<9>()
// F32
{
- F32 outValue, inValue = 121.44;
+ F32 outValue, inValue = 121.44f;
LLSDMessageReader msg = testType(inValue);
msg.getF32("block", "var", outValue);
ensure_equals("Ensure F32", outValue, inValue);
@@ -317,4 +318,3 @@ namespace tut
ensure_equals("Ensure Binary", outValue, inValue);
}
}
-
diff --git a/linden/indra/test/llsdtraits.h b/linden/indra/test/llsdtraits.h
index 2e6a96a..84fc1fe 100644
--- a/linden/indra/test/llsdtraits.h
+++ b/linden/indra/test/llsdtraits.h
@@ -1,3 +1,31 @@
+/**
+ * @file llsdtraits.h
+ * @brief Unit test helpers
+ *
+ * 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 LLSDTRAITS_H
#define LLSDTRAITS_H
diff --git a/linden/indra/test/llsdutil_tut.cpp b/linden/indra/test/llsdutil_tut.cpp
new file mode 100644
index 0000000..bb5d7fd
--- /dev/null
+++ b/linden/indra/test/llsdutil_tut.cpp
@@ -0,0 +1,152 @@
+/**
+ * @file llsdutil_tut.cpp
+ * @author Adroit
+ * @date 2007-02
+ * @brief LLSD conversion routines test cases.
+ *
+ * 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 "lltut.h"
+#include "v3color.h"
+#include "v4math.h"
+#include "m4math.h"
+#include "llsdutil.h"
+
+
+namespace tut
+{
+ struct llsdutil_data
+ {
+ };
+ typedef test_group llsdutil_test;;
+ typedef llsdutil_test::object llsdutil_object;
+ tut::llsdutil_test tutil("llsdutil");
+
+ template<> template<>
+ void llsdutil_object::test<1>()
+ {
+ LLSD sd;
+ U64 valueIn , valueOut;
+ valueIn = U64L(0xFEDCBA9876543210);
+ sd = ll_sd_from_U64(valueIn);
+ valueOut = ll_U64_from_sd(sd);
+ ensure_equals("U64 valueIn->sd->valueOut", valueIn, valueOut);
+ }
+
+ template<> template<>
+ void llsdutil_object::test<2>()
+ {
+ LLSD sd;
+ U32 valueIn, valueOut;
+ valueIn = 0x87654321;
+ sd = ll_sd_from_U32(valueIn);
+ valueOut = ll_U32_from_sd(sd);
+ ensure_equals("U32 valueIn->sd->valueOut", valueIn, valueOut);
+ }
+
+ template<> template<>
+ void llsdutil_object::test<3>()
+ {
+ U32 valueIn, valueOut;
+ valueIn = 0x87654321;
+ LLSD sd;
+ sd = ll_sd_from_ipaddr(valueIn);
+ valueOut = ll_ipaddr_from_sd(sd);
+ ensure_equals("valueIn->sd->valueOut", valueIn, valueOut);
+ }
+
+ template<> template<>
+ void llsdutil_object::test<4>()
+ {
+ LLSD sd;
+ LLVector3 vec1(-1.0, 2.0, -3.0);
+ sd = ll_sd_from_vector3(vec1);
+ LLVector3 vec2 = ll_vector3_from_sd(sd);
+ ensure_equals("vector3 -> sd -> vector3: 1", vec1, vec2);
+
+ LLVector3 vec3(sd);
+ ensure_equals("vector3 -> sd -> vector3: 2", vec1, vec3);
+
+ sd.clear();
+ vec1.setVec(0., 0., 0.);
+ sd = ll_sd_from_vector3(vec1);
+ vec2 = ll_vector3_from_sd(sd);
+ ensure_equals("vector3 -> sd -> vector3: 3", vec1, vec2);
+ sd.clear();
+ }
+
+ template<> template<>
+ void llsdutil_object::test<5>()
+ {
+ LLSD sd;
+ LLVector3d vec1((F64)(U64L(0xFEDCBA9876543210) << 2), -1., 0);
+ sd = ll_sd_from_vector3d(vec1);
+ LLVector3d vec2 = ll_vector3d_from_sd(sd);
+ ensure_equals("vector3d -> sd -> vector3d: 1", vec1, vec2);
+
+ LLVector3d vec3(sd);
+ ensure_equals("vector3d -> sd -> vector3d : 2", vec1, vec3);
+ }
+
+ template<> template<>
+ void llsdutil_object::test<6>()
+ {
+ LLSD sd;
+ LLVector2 vec((F32) -3., (F32) 4.2);
+ sd = ll_sd_from_vector2(vec);
+ LLVector2 vec1 = ll_vector2_from_sd(sd);
+ ensure_equals("vector2 -> sd -> vector2", vec, vec1);
+
+ LLSD sd2 = ll_sd_from_vector2(vec1);
+ ensure_equals("sd -> vector2 -> sd: 2", sd, sd2);
+ }
+
+ template<> template<>
+ void llsdutil_object::test<7>()
+ {
+ LLSD sd;
+ LLQuaternion quat((F32) 1., (F32) -0.98, (F32) 2.3, (F32) 0xffff);
+ sd = ll_sd_from_quaternion(quat);
+ LLQuaternion quat1 = ll_quaternion_from_sd(sd);
+ ensure_equals("LLQuaternion -> sd -> LLQuaternion", quat, quat1);
+
+ LLSD sd2 = ll_sd_from_quaternion(quat1);
+ ensure_equals("sd -> LLQuaternion -> sd ", sd, sd2);
+ }
+
+ template<> template<>
+ void llsdutil_object::test<8>()
+ {
+ LLSD sd;
+ LLColor4 c(1.0f, 2.2f, 4.0f, 7.f);
+ sd = ll_sd_from_color4(c);
+ LLColor4 c1 =ll_color4_from_sd(sd);
+ ensure_equals("LLColor4 -> sd -> LLColor4", c, c1);
+
+ LLSD sd1 = ll_sd_from_color4(c1);
+ ensure_equals("sd -> LLColor4 -> sd", sd, sd1);
+ }
+}
diff --git a/linden/indra/test/llstreamtools_tut.cpp b/linden/indra/test/llstreamtools_tut.cpp
new file mode 100644
index 0000000..aea2e4f
--- /dev/null
+++ b/linden/indra/test/llstreamtools_tut.cpp
@@ -0,0 +1,928 @@
+/**
+ * @file llstreamtools_tut.cpp
+ * @author Adroit
+ * @date February 2007
+ * @brief llstreamtools test cases.
+ *
+ * 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
+#include
+#include "llstreamtools.h"
+#include "lltut.h"
+
+
+namespace tut
+{
+ struct streamtools_data
+ {
+ };
+ typedef test_group streamtools_test;
+ typedef streamtools_test::object streamtools_object;
+ tut::streamtools_test streamtools_testcase("streamtools");
+
+ //test cases for skip_whitespace()
+ template<> template<>
+ void streamtools_object::test<1>()
+ {
+ char arr[255];
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+
+ is.str(str = "");
+ ensure("skip_whitespace: empty string", (false == skip_whitespace(is)));
+
+ is.clear();
+ is.str(str = " SecondLife is a 3D World");
+ skip_whitespace(is);
+ is.get(arr, 255, '\0');
+ expected_result = "SecondLife is a 3D World";
+ ensure_equals("skip_whitespace: space", arr, expected_result);
+
+ is.clear();
+ is.str(str = "\t \tSecondLife is a 3D World");
+ skip_whitespace(is);
+ is.get(arr, 255, '\0');
+ expected_result = "SecondLife is a 3D World";
+ ensure_equals("skip_whitespace: space and tabs", arr, expected_result);
+
+ is.clear();
+ is.str(str = "\t \tSecondLife is a 3D World ");
+ skip_whitespace(is);
+ is.get(arr, 255, '\0');
+ expected_result = "SecondLife is a 3D World ";
+ ensure_equals("skip_whitespace: space at end", arr, expected_result);
+
+ is.clear();
+ is.str(str = "\t \r\nSecondLife is a 3D World");
+ skip_whitespace(is);
+ is.get(arr, 255, '\0');
+ expected_result = "\r\nSecondLife is a 3D World";
+ ensure_equals("skip_whitespace: space at end", arr, expected_result);
+ }
+
+ //testcases for skip_emptyspaces()
+ template<> template<>
+ void streamtools_object::test<2>()
+ {
+ char arr[255];
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = " \tSecondLife is a 3D World.\n");
+ skip_emptyspace(is);
+ is.get(arr, 255, '\0');
+ expected_result = "SecondLife is a 3D World.\n";
+ ensure_equals("skip_emptyspace: space and tabs", arr, expected_result);
+
+ is.clear();
+ is.str(str = " \t\r\n \r SecondLife is a 3D World.\n");
+ skip_emptyspace(is);
+ is.get(arr, 255, '\0');
+ expected_result = "SecondLife is a 3D World.\n";
+ ensure_equals("skip_emptyspace: space, tabs, carriage return, newline", arr, expected_result);
+
+ is.clear();
+ is.str(str = "");
+ ret = skip_emptyspace(is);
+ is.get(arr, 255, '\0');
+ ensure("skip_emptyspace: empty string", ret == false);
+
+ is.clear();
+ is.str(str = " \r\n \t ");
+ ret = skip_emptyspace(is);
+ is.get(arr, 255, '\0');
+ ensure("skip_emptyspace: space newline empty", ret == false);
+ }
+
+ //testcases for skip_comments_and_emptyspace()
+ template<> template<>
+ void streamtools_object::test<3>()
+ {
+ char arr[255];
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = " \t\r\n \r SecondLife is a 3D World.\n");
+ skip_comments_and_emptyspace(is);
+ is.get(arr, 255, '\0');
+ expected_result = "SecondLife is a 3D World.\n";
+ ensure_equals("skip_comments_and_emptyspace: space, tabs, carriage return, newline", arr, expected_result);
+
+ is.clear();
+ is.str(str = "# \r\n SecondLife is a 3D World.");
+ skip_comments_and_emptyspace(is);
+ is.get(arr, 255, '\0');
+ expected_result = "SecondLife is a 3D World.";
+ ensure_equals("skip_comments_and_emptyspace: skip comment - 1", arr, expected_result);
+
+ is.clear();
+ is.str(str = "# \r\n # SecondLife is a 3D World. ##");
+ skip_comments_and_emptyspace(is);
+ is.get(arr, 255, '\0');
+ expected_result = "";
+ ensure_equals("skip_comments_and_emptyspace: skip comment - 2", arr, expected_result);
+
+ is.clear();
+ is.str(str = " \r\n SecondLife is a 3D World. ##");
+ skip_comments_and_emptyspace(is);
+ is.get(arr, 255, '\0');
+ expected_result = "SecondLife is a 3D World. ##";
+ ensure_equals("skip_comments_and_emptyspace: skip comment - 3", arr, expected_result);
+
+ is.clear();
+ is.str(str = "");
+ ret = skip_comments_and_emptyspace(is);
+ is.get(arr, 255, '\0');
+ ensure("skip_comments_and_emptyspace: empty string", ret == false);
+
+ is.clear();
+ is.str(str = " \r\n \t # SecondLife is a 3D World");
+ ret = skip_comments_and_emptyspace(is);
+ is.get(arr, 255, '\0');
+ ensure("skip_comments_and_emptyspace: space newline comment empty", ret == false);
+ }
+
+ //testcases for skip_line()
+ template<> template<>
+ void streamtools_object::test<4>()
+ {
+ char arr[255];
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = "SecondLife is a 3D World.\n\n It provides an opportunity to the site \nuser to perform real life activities in virtual world.");
+ skip_line(is);
+ is.get(arr, 255, '\0');
+ expected_result = "\n It provides an opportunity to the site \nuser to perform real life activities in virtual world.";
+ ensure_equals("skip_line: 1 newline", arr, expected_result);
+
+ is.clear();
+ is.str(expected_result);
+ skip_line(is);
+ is.get(arr, 255, '\0');
+ expected_result = " It provides an opportunity to the site \nuser to perform real life activities in virtual world.";
+ ensure_equals("skip_line: 2 newline", arr, expected_result);
+
+ is.clear();
+ is.str(expected_result);
+ skip_line(is);
+ is.get(arr, 255, '\0');
+ expected_result = "user to perform real life activities in virtual world.";
+ ensure_equals("skip_line: 3 newline", arr, expected_result);
+
+ is.clear();
+ is.str(str = "");
+ ret = skip_line(is);
+ ensure("skip_line: empty string", ret == false);
+ }
+
+
+ // testcases for skip_to_next_word()
+ template<> template<>
+ void streamtools_object::test<5>()
+ {
+ char arr[255];
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = "SecondLife is a 3D_World.\n\n It-provides an opportunity to the site \nuser to perform real life activities in virtual world.");
+ skip_to_next_word(is); // get past SecondLife
+ is.get(arr, 255, '\0');
+ expected_result = "is a 3D_World.\n\n It-provides an opportunity to the site \nuser to perform real life activities in virtual world.";
+ ensure_equals("skip_to_next_word: 1", arr, expected_result);
+
+ is.clear();
+ is.str(expected_result);
+ skip_to_next_word(is); // get past is
+ skip_to_next_word(is); // get past a
+ skip_to_next_word(is); // get past 3D_World.\n\n
+ is.get(arr, 255, '\0');
+ expected_result = "It-provides an opportunity to the site \nuser to perform real life activities in virtual world.";
+ ensure_equals("skip_to_next_word: get past .\n\n 2", arr, expected_result);
+
+ is.clear();
+ is.str(expected_result);
+ skip_to_next_word(is); // get past It-
+ expected_result = "provides an opportunity to the site \nuser to perform real life activities in virtual world.";
+ is.get(arr, 255, '\0');
+ ensure_equals("skip_to_next_word: get past -", arr, expected_result);
+
+ is.clear();
+ is.str(str = "");
+ ret = skip_to_next_word(is);
+ ensure("skip_line: empty string", ret == false);
+
+ is.clear();
+ is.str(str = " \r\n\r\n");
+ ret = skip_to_next_word(is);
+ ensure("skip_line: space new lines", ret == false);
+ }
+
+
+ //testcases for skip_to_end_of_next_keyword()
+ template<> template<>
+ void streamtools_object::test<6>()
+ {
+ char arr[255];
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = "FIRSTKEY followed by second delimiter\nSECONDKEY\t SecondValue followed by third delimiter \nSECONDKEY\nFOURTHKEY FOURTHVALUEis a 3DWorld.");
+ ret = skip_to_end_of_next_keyword("FIRSTKEY", is);
+ is.get(arr, 255, '\0');
+ expected_result = " followed by second delimiter\nSECONDKEY\t SecondValue followed by third delimiter \nSECONDKEY\nFOURTHKEY FOURTHVALUEis a 3DWorld.";
+ ensure_equals("skip_to_end_of_next_keyword: 1", arr, expected_result);
+
+ is.clear();
+ is.str(expected_result);
+ ret = skip_to_end_of_next_keyword("SECONDKEY", is);
+ is.get(arr, 255, '\0');
+ expected_result = "\t SecondValue followed by third delimiter \nSECONDKEY\nFOURTHKEY FOURTHVALUEis a 3DWorld.";
+ ensure_equals("skip_to_end_of_next_keyword: 2", arr, expected_result);
+
+ is.clear();
+ is.str(expected_result);
+ ret = skip_to_end_of_next_keyword("SECONDKEY", is);
+ is.get(arr, 255, '\0');
+ expected_result = "\nFOURTHKEY FOURTHVALUEis a 3DWorld.";
+ ensure_equals("skip_to_end_of_next_keyword: 3", arr, expected_result);
+
+ is.clear();
+ is.str(expected_result);
+ ret = skip_to_end_of_next_keyword("FOURTHKEY", is);
+ is.get(arr, 255, '\0');
+ expected_result = " FOURTHVALUEis a 3DWorld.";
+ ensure_equals("skip_to_end_of_next_keyword: 4", arr, expected_result);
+
+ is.clear();
+ is.str(str = "{should be skipped as newline/space/tab does not follow but this one should be picked\n { Does it?\n");
+ ret = skip_to_end_of_next_keyword("{", is);
+ is.get(arr, 255, '\0');
+ expected_result = " Does it?\n";
+ ensure_equals("skip_to_end_of_next_keyword: multiple delim matches on same line", arr, expected_result);
+
+ is.clear();
+ is.str(str = "Delim { could not be found at start");
+ ret = skip_to_end_of_next_keyword("{", is);
+ ensure("skip_to_end_of_next_keyword: delim should not be present", ret == false);
+
+ is.clear();
+ is.str(str = "Empty Delim");
+ ret = skip_to_end_of_next_keyword("", is);
+ ensure("skip_to_end_of_next_keyword: empty delim should not be valid", ret == false);
+
+ is.clear();
+ is.str(str = "");
+ ret = skip_to_end_of_next_keyword("}", is);
+ ensure("skip_to_end_of_next_keyword: empty string", ret == false);
+ }
+
+ //testcases for get_word(std::string& output_string, std::istream& input_stream)
+ template<> template<>
+ void streamtools_object::test<7>()
+ {
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = " First Second \t \r \n Third Fourth-ShouldThisBePartOfFourth Fifth\n");
+ actual_result = "";
+ ret = get_word(actual_result, is);
+ expected_result = "First";
+ ensure_equals("get_word: 1", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_word(actual_result, is);
+ expected_result = "Second";
+ ensure_equals("get_word: 2", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_word(actual_result, is);
+ expected_result = "Third";
+ ensure_equals("get_word: 3", actual_result, expected_result);
+
+ // the current implementation of get_word seems inconsistent with
+ // skip_to_next_word. skip_to_next_word treats any character other
+ // than alhpa-numeric and '_' as a delimter, while get_word()
+ // treats only isspace() (i.e. space, form-feed('\f'), newline ('\n'),
+ // carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v')
+ // as delimiters
+ actual_result = "";
+ ret = get_word(actual_result, is); // will copy Fourth-ShouldThisBePartOfFourth
+ expected_result = "Fourth-ShouldThisBePartOfFourth"; // as per current impl.
+ ensure_equals("get_word: 4", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_word(actual_result, is); // will copy Fifth
+ expected_result = "Fifth"; // as per current impl.
+ ensure_equals("get_word: 5", actual_result, expected_result);
+
+ is.clear();
+ is.str(str = " \t \r \n ");
+ actual_result = "";
+ ret = get_word(actual_result, is);
+ ensure("get_word: empty all spaces, newline tabs", ret == false);
+
+ is.clear();
+ is.str(str = "");
+ actual_result = "";
+ ret = get_word(actual_result, is);
+ ensure("get_word: empty string", ret == false);
+ }
+
+ // testcase for get_word and skip_to_next_word compatibility
+ template<> template<>
+ void streamtools_object::test<8>()
+ {
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = " First Second \t \r \n Third Fourth-ShouldThisBePartOfFourth Fifth\n");
+ actual_result = "";
+ ret = get_word(actual_result, is); // First
+ actual_result = "";
+ ret = get_word(actual_result, is); // Second
+ actual_result = "";
+ ret = get_word(actual_result, is); // Third
+
+ // the current implementation of get_word seems inconsistent with
+ // skip_to_next_word. skip_to_next_word treats any character other
+ // than alhpa-numeric and '_' as a delimter, while get_word()
+ // treats only isspace() (i.e. space, form-feed('\f'), newline ('\n'),
+ // carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v')
+ // as delimiters
+ actual_result = "";
+ ret = get_word(actual_result, is); // will copy Fourth-ShouldThisBePartOfFourth
+
+ actual_result = "";
+ ret = get_word(actual_result, is); // will copy Fifth
+
+ is.clear();
+ is.str(str = " First Second \t \r \n Third Fourth_ShouldThisBePartOfFourth Fifth\n");
+ ret = skip_to_next_word(is); // should now point to First
+ ret = skip_to_next_word(is); // should now point to Second
+ ret = skip_to_next_word(is); // should now point to Third
+ ret = skip_to_next_word(is); // should now point to Fourth
+ ret = skip_to_next_word(is); // should now point to ShouldThisBePartOfFourth
+ expected_result = "";
+ // will copy ShouldThisBePartOfFourth, the fifth word,
+ // while using get_word above five times result in getting "Fifth"
+ ret = get_word(expected_result, is);
+ ensure_equals("get_word: skip_to_next_word compatibility", actual_result, expected_result);
+ }
+
+ //testcases for get_word(std::string& output_string, std::istream& input_stream, int n)
+ template<> template<>
+ void streamtools_object::test<9>()
+ {
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = " First Second \t \r \n Third Fourth-ShouldThisBePartOfFourth Fifth\n");
+ actual_result = "";
+ ret = get_word(actual_result, is, 255);
+ expected_result = "First";
+ ensure_equals("get_word: 1", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_word(actual_result, is, 4);
+ expected_result = "Seco"; // should be cut short
+ ensure_equals("get_word: 2", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_word(actual_result, is, 255);
+ expected_result = "nd"; // get remainder of Second
+ ensure_equals("get_word: 3", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_word(actual_result, is, 0); // 0 size string
+ expected_result = ""; // get remainder of Second
+ ensure_equals("get_word: 0 sized output", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_word(actual_result, is, 255);
+ expected_result = "Third";
+ ensure_equals("get_word: 4", actual_result, expected_result);
+
+ is.clear();
+ is.str(str = " \t \r \n ");
+ actual_result = "";
+ ret = get_word(actual_result, is, 255);
+ ensure("get_word: empty all spaces, newline tabs", ret == false);
+
+ is.clear();
+ is.str(str = "");
+ actual_result = "";
+ ret = get_word(actual_result, is, 255);
+ ensure("get_word: empty string", ret == false);
+ }
+
+ //test cases for get_line(std::string& output_string, std::istream& input_stream)
+ template<> template<>
+ void streamtools_object::test<10>()
+ {
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = "First Second \t \r\n Third Fourth-ShouldThisBePartOfFourth IsThisFifth\n");
+ actual_result = "";
+ ret = get_line(actual_result, is);
+ expected_result = "First Second \t \n";
+ ensure_equals("get_line: 1", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_line(actual_result, is);
+ expected_result = " Third Fourth-ShouldThisBePartOfFourth IsThisFifth\n";
+ ensure_equals("get_line: 2", actual_result, expected_result);
+
+ is.clear();
+ is.str(str = "\nFirst Line.\n\nSecond Line.\n");
+ actual_result = "";
+ ret = get_line(actual_result, is);
+ expected_result = "\n";
+ ensure_equals("get_line: First char as newline", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_line(actual_result, is);
+ expected_result = "First Line.\n";
+ ensure_equals("get_line: 3", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_line(actual_result, is);
+ expected_result = "\n";
+ ensure_equals("get_line: 4", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_line(actual_result, is);
+ expected_result = "Second Line.\n";
+ ensure_equals("get_line: 5", actual_result, expected_result);
+ }
+
+ //test cases for get_line(std::string& output_string, std::istream& input_stream)
+ template<> template<>
+ void streamtools_object::test<11>()
+ {
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = "One Line only with no newline");
+ actual_result = "";
+ ret = get_line(actual_result, is);
+ expected_result = "One Line only with no newline";
+ ensure_equals("get_line: No newline", actual_result, expected_result);
+ ensure_equals("return value is good state of stream", ret, is.good());
+ }
+
+ //test cases for get_line(std::string& output_string, std::istream& input_stream)
+ template<> template<>
+ void streamtools_object::test<12>()
+ {
+ skip_fail("get_line() incorrectly handles lone carriage return.");
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ // need to be check if this test case is wrong or the implementation is wrong.
+ is.clear();
+ is.str(str = "Should not skip \r unless they are followed with newline .\r\n");
+ actual_result = "";
+ ret = get_line(actual_result, is);
+ expected_result = "Should not skip \r unless they are followed with newline .\n";
+ ensure_equals("get_line: carriage return skipped even though not followed by newline", actual_result, expected_result);
+ }
+
+ //test cases for get_line(std::string& output_string, std::istream& input_stream)
+ template<> template<>
+ void streamtools_object::test<13>()
+ {
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = "\n");
+ actual_result = "";
+ ret = get_line(actual_result, is);
+ expected_result = "\n";
+ ensure_equals("get_line: Just newline", actual_result, expected_result);
+ }
+
+
+ //testcases for get_line(std::string& output_string, std::istream& input_stream, int n)
+ template<> template<>
+ void streamtools_object::test<14>()
+ {
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = "First Line.\nSecond Line.\n");
+ actual_result = "";
+ ret = get_line(actual_result, is, 255);
+ expected_result = "First Line.\n";
+ ensure_equals("get_line: Basic Operation", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_line(actual_result, is, sizeof("Second")-1);
+ expected_result = "Second\n";
+ ensure_equals("get_line: Insufficient length 1", actual_result, expected_result);
+
+ actual_result = "";
+ ret = get_line(actual_result, is, 255);
+ expected_result = " Line.\n";
+ ensure_equals("get_line: Remainder after earlier insufficient length", actual_result, expected_result);
+
+ is.clear();
+ is.str(str = "One Line only with no newline with limited length");
+ actual_result = "";
+ ret = get_line(actual_result, is, sizeof("One Line only with no newline with limited length")-1);
+ expected_result = "One Line only with no newline with limited length\n";
+ ensure_equals("get_line: No newline with limited length", actual_result, expected_result);
+
+ is.clear();
+ is.str(str = "One Line only with no newline");
+ actual_result = "";
+ ret = get_line(actual_result, is, 255);
+ expected_result = "One Line only with no newline";
+ ensure_equals("get_line: No newline", actual_result, expected_result);
+ }
+
+ //testcases for get_line(std::string& output_string, std::istream& input_stream, int n)
+ template<> template<>
+ void streamtools_object::test<15>()
+ {
+ std::string str;
+ std::string expected_result;
+ std::string actual_result;
+ std::istringstream is;
+ bool ret;
+
+ is.clear();
+ is.str(str = "One Line only with no newline");
+ actual_result = "";
+ ret = get_line(actual_result, is, 255);
+ expected_result = "One Line only with no newline";
+ ensure_equals("get_line: No newline", actual_result, expected_result);
+ ensure_equals("return value is good state of stream", ret, is.good());
+ }
+
+ //testcases for remove_last_char()
+ template<> template<>
+ void streamtools_object::test<16>()
+ {
+ std::string str;
+ std::string expected_result;
+ bool ret;
+
+ str = "SecondLife is a 3D World";
+
+ ret = remove_last_char('d',str);
+ expected_result = "SecondLife is a 3D Worl";
+ ensure_equals("remove_last_char: should remove last char", str, expected_result);
+
+ str = "SecondLife is a 3D World";
+ ret = remove_last_char('W',str);
+ expected_result = "SecondLife is a 3D World";
+ ensure_equals("remove_last_char: should not remove as it is not last char", str, expected_result);
+ ensure("remove_last_char: should return false", ret == false);
+
+ str = "SecondLife is a 3D World\n";
+ ret = remove_last_char('\n',str);
+ expected_result = "SecondLife is a 3D World";
+ ensure_equals("remove_last_char: should remove last newline", str, expected_result);
+ ensure("remove_last_char: should remove newline and return true", ret == true);
+ }
+
+
+ //testcases for unescaped_string()
+ template<> template<>
+ void streamtools_object::test<17>()
+ {
+ std::string str;
+ std::string expected_result;
+
+ str = "SecondLife is a 3D world \\n";
+ unescape_string(str);
+ expected_result = "SecondLife is a 3D world \n";
+ ensure_equals("unescape_string: newline", str, expected_result);
+
+ str = "SecondLife is a 3D world \\\\t \\n";
+ unescape_string(str);
+ expected_result = "SecondLife is a 3D world \\t \n";
+ ensure_equals("unescape_string: backslash and newline", str, expected_result);
+
+ str = "SecondLife is a 3D world \\ ";
+ unescape_string(str);
+ expected_result = "SecondLife is a 3D world \\ ";
+ ensure_equals("unescape_string: insufficient to unescape", str, expected_result);
+
+ str = "SecondLife is a 3D world \\n \\n \\n \\\\\\n";
+ unescape_string(str);
+ expected_result = "SecondLife is a 3D world \n \n \n \\\n";
+ ensure_equals("unescape_string: multipel newline and backslash", str, expected_result);
+
+ str = "SecondLife is a 3D world \\t";
+ unescape_string(str);
+ expected_result = "SecondLife is a 3D world \\t";
+ ensure_equals("unescape_string: leaves tab as is", str, expected_result);
+
+ str = "\\n";
+ unescape_string(str);
+ expected_result = "\n";
+ ensure_equals("unescape_string: only a newline", str, expected_result);
+ }
+
+ //testcases for escape_string()
+ template<> template<>
+ void streamtools_object::test<18>()
+ {
+ std::string str;
+ std::string expected_result;
+
+ str = "SecondLife is a 3D world \n";
+ escape_string(str);
+ expected_result = "SecondLife is a 3D world \\n";
+ ensure_equals("escape_string: newline", str, expected_result);
+
+ str = "SecondLife is a 3D world \\t \n";
+ escape_string(str);
+ expected_result = "SecondLife is a 3D world \\\\t \\n";
+ ensure_equals("escape_string: backslash and newline", str, expected_result);
+
+ str = "SecondLife is a 3D world \n \n \n \\\n";
+ escape_string(str);
+ expected_result = "SecondLife is a 3D world \\n \\n \\n \\\\\\n";
+ ensure_equals("escape_string: multipel newline and backslash", str, expected_result);
+
+ str = "SecondLife is a 3D world \t";
+ escape_string(str);
+ expected_result = "SecondLife is a 3D world \t";
+ ensure_equals("unescape_string: leaves tab as is", str, expected_result);
+
+ str = "\n";
+ escape_string(str);
+ expected_result = "\\n";
+ ensure_equals("unescape_string: only a newline", str, expected_result);
+
+ // serialization/deserialization escape->unescape
+ str = "SecondLife is a 3D world \n \n \n \\\n";
+ escape_string(str);
+ unescape_string(str);
+ expected_result = "SecondLife is a 3D world \n \n \n \\\n";
+ ensure_equals("escape_string: should preserve with escape/unescape", str, expected_result);
+
+ // serialization/deserialization unescape->escape
+ str = "SecondLife is a 3D world \\n \\n \\n \\\\";
+ unescape_string(str);
+ escape_string(str);
+ expected_result = "SecondLife is a 3D world \\n \\n \\n \\\\";
+ ensure_equals("escape_string: should preserve with unescape/escape", str, expected_result);
+ }
+
+ // testcases for replace_newlines_with_whitespace()
+ template<> template<>
+ void streamtools_object::test<19>()
+ {
+ std::string str;
+ std::string expected_result;
+
+ str = "SecondLife is a 3D \n\nworld\n";
+ replace_newlines_with_whitespace(str);
+ expected_result = "SecondLife is a 3D world ";
+ ensure_equals("replace_newlines_with_whitespace: replace all newline", str, expected_result);
+
+ str = "\nSecondLife is a 3D world\n";
+ replace_newlines_with_whitespace(str);
+ expected_result = " SecondLife is a 3D world ";
+ ensure_equals("replace_newlines_with_whitespace: begin and newline", str, expected_result);
+
+ str = "SecondLife is a 3D world\r\t";
+ replace_newlines_with_whitespace(str);
+ expected_result = "SecondLife is a 3D world\r\t";
+ ensure_equals("replace_newlines_with_whitespace: should only replace newline", str, expected_result);
+
+ str = "";
+ replace_newlines_with_whitespace(str);
+ expected_result = "";
+ ensure_equals("replace_newlines_with_whitespace: empty string", str, expected_result);
+ }
+
+ //testcases for remove_double_quotes()
+ template<> template<>
+ void streamtools_object::test<20>()
+ {
+ std::string str;
+ std::string expected_result;
+
+ str = "SecondLife is a \"\"3D world";
+ remove_double_quotes(str);
+ expected_result = "SecondLife is a 3D world";
+ ensure_equals("remove_double_quotes: replace empty doube quotes", str, expected_result);
+
+ str = "SecondLife is a \"3D world";
+ remove_double_quotes(str);
+ expected_result = "SecondLife is a 3D world";
+ ensure_equals("remove_double_quotes: keep as is it matching quote not found", str, expected_result);
+ }
+
+ // testcases for get_brace_count()
+ template<> template<>
+ void streamtools_object::test<21>()
+ {
+ skip_fail("get_brace_count() has bugs.");
+
+ std::string str;
+ std::string expected_result;
+ int count;
+
+ str = " { ";
+ count = get_brace_count(str);
+ ensure("get_brace_count: 1 for {", count == 1);
+
+ str = "\t}\t\t \n";
+ count = get_brace_count(str);
+ ensure("get_brace_count: 1 for {", count == -1);
+
+ str = "\t\t\t \n";
+ count = get_brace_count(str);
+ ensure("get_brace_count: 0 for no braces", count == 0);
+
+ str = "{ Remaining line not empty\n";
+ count = get_brace_count(str);
+ ensure("get_brace_count: 0 for remainign line not empty", count == 0);
+
+ /* shouldn't this return 1? */
+ str = "{ /*Remaining line in comment*/\n";
+ count = get_brace_count(str);
+ ensure("get_brace_count: 1 for { with remaining line in comment", count == 1);
+
+ /* shouldn't this return -1? */
+ str = " } //Remaining line in comment \n";
+ count = get_brace_count(str);
+ ensure("get_brace_count: -1 for } with remaining line in comment", count == -1);
+ }
+
+ //testcases for get_keyword_and_value()
+ template<> template<>
+ void streamtools_object::test<22>()
+ {
+ std::string s = "SecondLife is a 3D World";
+ std::string keyword;
+ std::string value;
+ get_keyword_and_value(keyword, value, s);
+ ensure("get_keyword_and_value: Unable to get Keyword and Value", ((keyword == "SecondLife") && (value == "is a 3D World")));
+
+ s = "SecondLife";
+ get_keyword_and_value(keyword, value, s);
+ ensure("get_keyword_and_value: value should be empty", ((keyword == "SecondLife") && (value == "")));
+
+ s = "SecondLife \t is cool! \n";
+ get_keyword_and_value(keyword, value, s);
+ ensure("get_keyword_and_value: remove space before value but not after", ((keyword == "SecondLife") && (value == "is cool! ")));
+ }
+
+ //testcases for get_keyword_and_value()
+ template<> template<>
+ void streamtools_object::test<23>()
+ {
+ skip_fail("get_keyword_and_value() has bugs.");
+
+ std::string s;
+ std::string keyword = "SOME PRIOR KEYWORD";
+ std::string value = "SOME PRIOR VALUE";
+
+ s = "SecondLife\n";
+ get_keyword_and_value(keyword, value, s);
+ ensure("get_keyword_and_value: terminated with newline. value should be empty", ((keyword == "SecondLife") && (value == "")));
+ }
+
+ //testcases for get_keyword_and_value()
+ template<> template<>
+ void streamtools_object::test<24>()
+ {
+ skip_fail("get_keyword_and_value() has bugs.");
+
+ std::string s;
+ std::string keyword = "SOME PRIOR KEYWORD";
+ std::string value = "SOME PRIOR VALUE";
+
+ s = "";
+ get_keyword_and_value(keyword, value, s);
+ ensure("get_keyword_and_value: empty string. keyword value should empty", ((keyword == "") && (value == "")));
+ }
+
+ //testcase for fullread()
+ template<> template<>
+ void streamtools_object::test<25>()
+ {
+ std::string str = "First Line.\nSecond Line\n";
+ std::istringstream is(str);
+ char buf[255] = {0};
+
+ fullread(is, buf, 255);
+ ensure_memory_matches("fullread: read with newlines", (void*) buf, str.size()-1, (void*) str.c_str(), str.size()-1);
+
+ is.clear();
+ is.str(str = "First Line.\nSecond Line\n");
+ memset(buf, 0, 255);
+
+ char expected_string[] = "First Line.\nSecond";
+ int len = sizeof(expected_string)-1;
+ fullread(is, buf, len);
+ ensure_memory_matches("fullread: read with newlines", (void*) buf, len, (void*) &expected_string, len);
+ }
+
+
+// testcases for operator >>
+
+ template<> template<>
+ void streamtools_object::test<26>()
+ {
+ char arr[255];
+ std::string str;
+ std::string toCheck = "SecondLife" ;
+ std::string expected_result;
+ std::istringstream stream("SecondLife is a 3D World");
+ stream >> toCheck.c_str();
+ stream.get(arr, 255, '\0');
+ expected_result = " is a 3D World";
+ ensure_equals("istream << operator", arr, expected_result);
+
+ stream.clear();
+ stream.str(str = "SecondLife is a 3D World");
+ toCheck = "is";
+ stream >> toCheck.c_str();
+ ensure("istream << operator should have failed", stream.good() == false);
+ }
+}
diff --git a/linden/indra/test/llstring_tut.cpp b/linden/indra/test/llstring_tut.cpp
index 040955b..f49fb1c 100644
--- a/linden/indra/test/llstring_tut.cpp
+++ b/linden/indra/test/llstring_tut.cpp
@@ -6,6 +6,7 @@
*
* 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
diff --git a/linden/indra/test/lltemplatemessagebuilder_tut.cpp b/linden/indra/test/lltemplatemessagebuilder_tut.cpp
new file mode 100644
index 0000000..d25e57e
--- /dev/null
+++ b/linden/indra/test/lltemplatemessagebuilder_tut.cpp
@@ -0,0 +1,964 @@
+/**
+ * @file lltemplatemessagebuilder_tut.cpp
+ * @date 2007-04
+ * @brief Tests for building messages.
+ *
+ * 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
+#include "lltut.h"
+
+#include "llapr.h"
+#include "llmessagetemplate.h"
+#include "llquaternion.h"
+#include "lltemplatemessagebuilder.h"
+#include "lltemplatemessagereader.h"
+#include "llversion.h"
+#include "message_prehash.h"
+#include "u64.h"
+#include "v3dmath.h"
+#include "v3math.h"
+#include "v4math.h"
+
+namespace tut
+{
+ static LLTemplateMessageBuilder::message_template_name_map_t nameMap;
+ static LLTemplateMessageReader::message_template_number_map_t numberMap;
+
+ struct LLTemplateMessageBuilderTestData
+ {
+ static LLMessageTemplate defaultTemplate()
+ {
+ static bool init = false;
+ if(! init)
+ {
+ ll_init_apr();
+ start_messaging_system("notafile", 13035,
+ LL_VERSION_MAJOR,
+ LL_VERSION_MINOR,
+ LL_VERSION_PATCH,
+ FALSE,
+ "notasharedsecret");
+ init_prehash_data();
+ init = true;
+ }
+ return LLMessageTemplate(_PREHASH_TestMessage, 1, MFT_HIGH);
+ }
+
+ static LLMessageBlock* defaultBlock(const EMsgVariableType type = MVT_NULL, const S32 size = 0, EMsgBlockType block = MBT_VARIABLE)
+ {
+ return createBlock(_PREHASH_Test0, type, size, block);
+ }
+
+ static LLMessageBlock* createBlock(char* name, const EMsgVariableType type = MVT_NULL, const S32 size = 0, EMsgBlockType block = MBT_VARIABLE)
+ {
+ LLMessageBlock* result = new LLMessageBlock(name, block);
+ if(type != MVT_NULL)
+ {
+ result->addVariable(_PREHASH_Test0, type, size);
+ }
+ return result;
+ }
+
+ static LLTemplateMessageBuilder* defaultBuilder(LLMessageTemplate& messageTemplate, char* name = _PREHASH_Test0)
+ {
+ nameMap[_PREHASH_TestMessage] = &messageTemplate;
+ LLTemplateMessageBuilder* builder = new LLTemplateMessageBuilder(nameMap);
+ builder->newMessage(_PREHASH_TestMessage);
+ builder->nextBlock(name);
+ return builder;
+ }
+
+ /** Takes ownership of builder */
+ static LLTemplateMessageReader* setReader(
+ LLMessageTemplate& messageTemplate,
+ LLTemplateMessageBuilder* builder,
+ U8 offset = 0)
+ {
+ numberMap[1] = &messageTemplate;
+ const U32 bufferSize = 1024;
+ U8 buffer[bufferSize];
+ // zero out the packet ID field
+ memset(buffer, 0, LL_PACKET_ID_SIZE);
+ U32 builtSize = builder->buildMessage(buffer, bufferSize, offset);
+ delete builder;
+ LLTemplateMessageReader* reader = new LLTemplateMessageReader(numberMap);
+ reader->validateMessage(buffer, builtSize, LLHost());
+ reader->readMessage(buffer, LLHost());
+ return reader;
+ }
+
+ };
+
+ typedef test_group LLTemplateMessageBuilderTestGroup;
+ typedef LLTemplateMessageBuilderTestGroup::object LLTemplateMessageBuilderTestObject;
+ LLTemplateMessageBuilderTestGroup templateMessageBuilderTestGroup("LLTemplateMessageBuilder");
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<1>()
+ // construction and test of undefined
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock());
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<2>()
+ // BOOL
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_BOOL, 1));
+ BOOL outValue, inValue = TRUE;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addBOOL(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getBOOL(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure BOOL", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<3>()
+ // U8
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_U8, 1));
+ U8 outValue, inValue = 2;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU8(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getU8(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure U8", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<4>()
+ // S16
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_S16, 2));
+ S16 outValue, inValue = 90;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addS16(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getS16(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure S16", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<5>()
+ // U16
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_U16, 2));
+ U16 outValue, inValue = 3;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU16(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getU16(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure U16", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<6>()
+ // S32
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_S32, 4));
+ S32 outValue, inValue = 44;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addS32(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getS32(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure S32", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<7>()
+ // F32
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_F32, 4));
+ F32 outValue, inValue = 121.44f;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addF32(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getF32(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure F32", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<8>()
+ // U32
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_U32, 4));
+ U32 outValue, inValue = 88;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU32(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure U32", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<9>()
+ // U64
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_U64, 8));
+ U64 outValue, inValue = 121;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU64(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getU64(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure U64", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<10>()
+ // F64
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_F64, 8));
+ F64 outValue, inValue = 3232143.33;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addF64(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getF64(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure F64", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<11>()
+ // Vector3
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_LLVector3, 12));
+ LLVector3 outValue, inValue = LLVector3(1,2,3);
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addVector3(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getVector3(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure LLVector3", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<12>()
+ // Vector4
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_LLVector4, 16));
+ LLVector4 outValue, inValue = LLVector4(1,2,3,4);
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addVector4(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getVector4(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure LLVector4", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<13>()
+ // Vector3d
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_LLVector3d, 24));
+ LLVector3d outValue, inValue = LLVector3d(1,2,3);
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addVector3d(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getVector3d(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure LLVector3d", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<14>()
+ // Quaternion
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_LLQuaternion, 12));
+ LLQuaternion outValue, inValue = LLQuaternion(1,2,3,0);
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addQuat(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getQuat(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure LLQuaternion", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<15>()
+ // UUID
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_LLUUID, 16));
+ LLUUID outValue, inValue;
+ inValue.generate();
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addUUID(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getUUID(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure UUID", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<16>()
+ // IPAddr
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_IP_ADDR, 4));
+ U32 outValue, inValue = 12344556;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addIPAddr(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getIPAddr(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure IPAddr", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<17>()
+ // IPPort
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_IP_PORT, 2));
+ U16 outValue, inValue = 80;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addIPPort(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getIPPort(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure IPPort", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<18>()
+ // String
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_VARIABLE, 1));
+ std::string outValue, inValue = "testing";
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addString(_PREHASH_Test0, inValue.c_str());
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ char buffer[MAX_STRING];
+ reader->getString(_PREHASH_Test0, _PREHASH_Test0, MAX_STRING, buffer);
+ outValue = buffer;
+ ensure_equals("Ensure String", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<19>()
+ // block name !-> binary order
+ {
+ U8 buffer1[MAX_BUFFER_SIZE];
+ memset(buffer1, 0, MAX_BUFFER_SIZE);
+ U8 buffer2[MAX_BUFFER_SIZE];
+ memset(buffer2, 0, MAX_BUFFER_SIZE);
+ U32 bufferSize1, bufferSize2;
+
+ // build template: Test0 before Test1
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE));
+
+ // build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, _PREHASH_Test0);
+ builder->addU32(_PREHASH_Test0, 0xaaaa);
+ builder->nextBlock(_PREHASH_Test1);
+ builder->addU32(_PREHASH_Test0, 0xbbbb);
+ bufferSize1 = builder->buildMessage(buffer1, MAX_BUFFER_SIZE, 0);
+ delete builder;
+
+ // build template: Test1 before Test0
+ messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
+
+ // build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb
+ builder = defaultBuilder(messageTemplate, _PREHASH_Test1);
+ builder->addU32(_PREHASH_Test0, 0xaaaa);
+ builder->nextBlock(_PREHASH_Test0);
+ builder->addU32(_PREHASH_Test0, 0xbbbb);
+ bufferSize2 = builder->buildMessage(buffer2, MAX_BUFFER_SIZE, 0);
+ delete builder;
+
+ ensure_equals("Ensure Buffer Sizes Equal", bufferSize1, bufferSize2);
+ ensure_equals("Ensure Buffer Contents Equal", memcmp(buffer1, buffer2, bufferSize1), 0);
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<20>()
+ // block build order !-> binary order
+ {
+ U8 buffer1[MAX_BUFFER_SIZE];
+ memset(buffer1, 0, MAX_BUFFER_SIZE);
+ U8 buffer2[MAX_BUFFER_SIZE];
+ memset(buffer2, 0, MAX_BUFFER_SIZE);
+ U32 bufferSize1, bufferSize2;
+
+ // build template: Test0 before Test1
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE));
+
+ // build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, _PREHASH_Test0);
+ builder->addU32(_PREHASH_Test0, 0xaaaa);
+ builder->nextBlock(_PREHASH_Test1);
+ builder->addU32(_PREHASH_Test0, 0xbbbb);
+ bufferSize1 = builder->buildMessage(buffer1, MAX_BUFFER_SIZE, 0);
+ delete builder;
+
+ // build message: 1st declared block var == 0xaaaa, 2nd declared block var == 0xbbbb
+ builder = defaultBuilder(messageTemplate, _PREHASH_Test1);
+ builder->addU32(_PREHASH_Test0, 0xbbbb);
+ builder->nextBlock(_PREHASH_Test0);
+ builder->addU32(_PREHASH_Test0, 0xaaaa);
+ bufferSize2 = builder->buildMessage(buffer2, MAX_BUFFER_SIZE, 0);
+ delete builder;
+
+ ensure_equals("Ensure Buffer Sizes Equal", bufferSize1, bufferSize2);
+ ensure_equals("Ensure Buffer Contents Equal", memcmp(buffer1, buffer2, bufferSize1), 0);
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<21>()
+ // block appended in declaration -> data appended in binary
+ {
+ U8 buffer1[MAX_BUFFER_SIZE];
+ memset(buffer1, 0, MAX_BUFFER_SIZE);
+ U8 buffer2[MAX_BUFFER_SIZE];
+ memset(buffer2, 0, MAX_BUFFER_SIZE);
+ U32 bufferSize1, bufferSize2;
+
+ // Build template: Test0 only
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
+
+ // Build message
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate, _PREHASH_Test0);
+ builder->addU32(_PREHASH_Test0, 0xaaaa);
+ bufferSize1 = builder->buildMessage(buffer1, MAX_BUFFER_SIZE, 0);
+ delete builder;
+
+ // Build template: Test0 before Test1
+ messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE));
+
+ // Build message
+ builder = defaultBuilder(messageTemplate, _PREHASH_Test0);
+ builder->addU32(_PREHASH_Test0, 0xaaaa);
+ builder->nextBlock(_PREHASH_Test1);
+ builder->addU32(_PREHASH_Test0, 0xbbbb);
+ bufferSize2 = builder->buildMessage(buffer2, MAX_BUFFER_SIZE, 0);
+ delete builder;
+
+ ensure_not_equals("Ensure Buffer Sizes Not Equal", bufferSize1, bufferSize2);
+ ensure_equals("Ensure Buffer Prefix Equal", memcmp(buffer1, buffer2, bufferSize1), 0);
+ ensure_not_equals("Ensure Buffer Contents Not Equal", memcmp(buffer1, buffer2, bufferSize2), 0);
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<22>()
+ // repeated penultimate block (crashes when data in LLDynamicArrayIndexed)
+ {
+ U32 inTest00 = 0, inTest01 = 1, inTest1 = 2;
+ U32 outTest00, outTest01, outTest1;
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4));
+ messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4));
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU32(_PREHASH_Test0, inTest00);
+ builder->nextBlock(_PREHASH_Test0);
+ builder->addU32(_PREHASH_Test0, inTest01);
+ builder->nextBlock(_PREHASH_Test1);
+ builder->addU32(_PREHASH_Test0, inTest1);
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outTest00, 0);
+ reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outTest01, 1);
+ reader->getU32(_PREHASH_Test1, _PREHASH_Test0, outTest1);
+ ensure_equals("Ensure Test0[0]", inTest00, outTest00);
+ ensure_equals("Ensure Test0[1]", inTest01, outTest01);
+ ensure_equals("Ensure Test1", inTest1, outTest1);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<23>()
+ // variable repeated block name never accessed
+ {
+ U32 inTest = 1, outTest;
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(
+ createBlock(_PREHASH_Test0, MVT_U32, 4, MBT_SINGLE));
+ messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4));
+
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU32(_PREHASH_Test0, inTest);
+
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+ reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outTest);
+ S32 blockCount = reader->getNumberOfBlocks(_PREHASH_Test1);
+ ensure_equals("Ensure block count", blockCount, 0);
+ ensure_equals("Ensure Test0", inTest, outTest);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<24>()
+ // forwarding message
+ {
+ // build template
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(createBlock(_PREHASH_Test0, MVT_U32, 4));
+
+ // build message
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU32(_PREHASH_Test0, 42);
+
+ // read message
+ LLTemplateMessageReader* reader = setReader(messageTemplate, builder);
+
+ // forward message
+ builder = defaultBuilder(messageTemplate);
+ builder->newMessage(_PREHASH_TestMessage);
+ reader->copyToBuilder(*builder);
+ U8 buffer[MAX_BUFFER_SIZE];
+ builder->buildMessage(buffer, MAX_BUFFER_SIZE, 0);
+
+ delete builder;
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<25>()
+ // non-zero offset with undefined
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock());
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 10);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<26>()
+ // non-zero offset with BOOL
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_BOOL, 1));
+ BOOL outValue, inValue = TRUE;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addBOOL(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 1);
+ reader->getBOOL(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure BOOL", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<27>()
+ // non-zero offset with U8
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_U8, 1));
+ U8 outValue, inValue = 2;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU8(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 255);
+ reader->getU8(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure U8", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<28>()
+ // non-zero offset with S16
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_S16, 2));
+ S16 outValue, inValue = 90;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addS16(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 2);
+ reader->getS16(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure S16", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<29>()
+ // non-zero offset with U16
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_U16, 2));
+ U16 outValue, inValue = 3;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU16(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 4);
+ reader->getU16(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure U16", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<30>()
+ // non-zero offset with S32
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_S32, 4));
+ S32 outValue, inValue = 44;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addS32(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 4);
+ reader->getS32(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure S32", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<31>()
+ // non-zero offset with F32
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_F32, 4));
+ F32 outValue, inValue = 121.44f;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addF32(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 16);
+ reader->getF32(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure F32", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<32>()
+ // non-zero offset with U32
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_U32, 4));
+ U32 outValue, inValue = 88;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU32(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 127);
+ reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure U32", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<33>()
+ // non-zero offset with U64
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_U64, 8));
+ U64 outValue, inValue = 121;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU64(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 32);
+ reader->getU64(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure U64", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<34>()
+ // non-zero offset with F64
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_F64, 8));
+ F64 outValue, inValue = 3232143.33;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addF64(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 128);
+ reader->getF64(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure F64", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<35>()
+ // non-zero offset with Vector3
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_LLVector3, 12));
+ LLVector3 outValue, inValue = LLVector3(1,2,3);
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addVector3(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 63);
+ reader->getVector3(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure LLVector3", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<36>()
+ // non-zero offset with Vector4
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_LLVector4, 16));
+ LLVector4 outValue, inValue = LLVector4(1,2,3,4);
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addVector4(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 64);
+ reader->getVector4(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure LLVector4", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<37>()
+ // non-zero offset with Vector3d
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_LLVector3d, 24));
+ LLVector3d outValue, inValue = LLVector3d(1,2,3);
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addVector3d(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 64);
+ reader->getVector3d(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure LLVector3d", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<38>()
+ // non-zero offset with Quaternion
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_LLQuaternion, 12));
+ LLQuaternion outValue, inValue = LLQuaternion(1,2,3,0);
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addQuat(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 12);
+ reader->getQuat(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure LLQuaternion", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<39>()
+ // non-zero offset with UUID
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_LLUUID, 16));
+ LLUUID outValue, inValue;
+ inValue.generate();
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addUUID(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 31);
+ reader->getUUID(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure UUID", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<40>()
+ // non-zero offset with IPAddr
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_IP_ADDR, 4));
+ U32 outValue, inValue = 12344556;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addIPAddr(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 32);
+ reader->getIPAddr(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure IPAddr", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<41>()
+ // non-zero offset with IPPort
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_IP_PORT, 2));
+ U16 outValue, inValue = 80;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addIPPort(_PREHASH_Test0, inValue);
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 6);
+ reader->getIPPort(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ ensure_equals("Ensure IPPort", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<42>()
+ // non-zero offset with String
+ {
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_VARIABLE, 1));
+ std::string outValue, inValue = "testing";
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addString(_PREHASH_Test0, inValue.c_str());
+ LLTemplateMessageReader* reader = setReader(
+ messageTemplate, builder, 255);
+ char buffer[MAX_STRING];
+ reader->getString(_PREHASH_Test0, _PREHASH_Test0, MAX_STRING, buffer);
+ outValue = buffer;
+ ensure_equals("Ensure String", inValue, outValue);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<43>()
+ // read past end of message -> default values (forward compatibility)
+ {
+ // build message with single block
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_U32, 4, MBT_SINGLE));
+ U32 outValue, outValue2, inValue = 0xbbbbbbbb;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU32(_PREHASH_Test0, inValue);
+ const U32 bufferSize = 1024;
+ U8 buffer[bufferSize];
+ memset(buffer, 0xaa, bufferSize);
+ memset(buffer, 0, LL_PACKET_ID_SIZE);
+ U32 builtSize = builder->buildMessage(buffer, bufferSize, 0);
+ delete builder;
+
+ // add block to reader template
+ messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4, MBT_SINGLE));
+
+ // read message value and default value
+ numberMap[1] = &messageTemplate;
+ LLTemplateMessageReader* reader =
+ new LLTemplateMessageReader(numberMap);
+ reader->validateMessage(buffer, builtSize, LLHost());
+ reader->readMessage(buffer, LLHost());
+ reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ reader->getU32(_PREHASH_Test1, _PREHASH_Test0, outValue2);
+ ensure_equals("Ensure present value ", outValue, inValue);
+ ensure_equals("Ensure default value ", outValue2, 0);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<44>()
+ // read variable block past end of message -> 0 repeats
+ {
+ // build message with single block
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_U32, 4, MBT_SINGLE));
+ U32 outValue, outValue2, inValue = 0xbbbbbbbb;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU32(_PREHASH_Test0, inValue);
+ const U32 bufferSize = 1024;
+ U8 buffer[bufferSize];
+ memset(buffer, 0xaa, bufferSize);
+ memset(buffer, 0, LL_PACKET_ID_SIZE);
+ U32 builtSize = builder->buildMessage(buffer, bufferSize, 0);
+ delete builder;
+
+ // add variable block to reader template
+ messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_U32, 4));
+
+ // read message value and check block repeat count
+ numberMap[1] = &messageTemplate;
+ LLTemplateMessageReader* reader =
+ new LLTemplateMessageReader(numberMap);
+ reader->validateMessage(buffer, builtSize, LLHost());
+ reader->readMessage(buffer, LLHost());
+ reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ outValue2 = reader->getNumberOfBlocks(_PREHASH_Test1);
+ ensure_equals("Ensure present value ", outValue, inValue);
+ ensure_equals("Ensure 0 repeats ", outValue2, 0);
+ delete reader;
+ }
+
+ template<> template<>
+ void LLTemplateMessageBuilderTestObject::test<45>()
+ // read variable length data past end of message -> 0 length
+ {
+ // build message with single block
+ LLMessageTemplate messageTemplate = defaultTemplate();
+ messageTemplate.addBlock(defaultBlock(MVT_U32, 4, MBT_SINGLE));
+ U32 outValue, outValue2, inValue = 0xbbbbbbbb;
+ LLTemplateMessageBuilder* builder = defaultBuilder(messageTemplate);
+ builder->addU32(_PREHASH_Test0, inValue);
+ const U32 bufferSize = 1024;
+ U8 buffer[bufferSize];
+ memset(buffer, 0xaa, bufferSize);
+ memset(buffer, 0, LL_PACKET_ID_SIZE);
+ U32 builtSize = builder->buildMessage(buffer, bufferSize, 0);
+ delete builder;
+
+ // add variable block to reader template
+ messageTemplate.addBlock(createBlock(_PREHASH_Test1, MVT_VARIABLE, 4,
+ MBT_SINGLE));
+
+ // read message value and default string
+ numberMap[1] = &messageTemplate;
+ LLTemplateMessageReader* reader =
+ new LLTemplateMessageReader(numberMap);
+ reader->validateMessage(buffer, builtSize, LLHost());
+ reader->readMessage(buffer, LLHost());
+ reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outValue);
+ char outBuffer[bufferSize];
+ memset(buffer, 0xcc, bufferSize);
+ reader->getString(_PREHASH_Test1, _PREHASH_Test0, bufferSize,
+ outBuffer);
+ outValue2 = reader->getNumberOfBlocks(_PREHASH_Test1);
+ ensure_equals("Ensure present value ", outValue, inValue);
+ ensure_equals("Ensure unchanged buffer ", strlen(outBuffer), 0);
+ delete reader;
+ }
+}
+
diff --git a/linden/indra/test/lltut.h b/linden/indra/test/lltut.h
index 626ff60..f40555e 100644
--- a/linden/indra/test/lltut.h
+++ b/linden/indra/test/lltut.h
@@ -28,12 +28,6 @@
* COMPLETENESS OR PERFORMANCE.
*/
-/**
- *
- * THOROUGH_DESCRIPTION
- *
- */
-
#ifndef LL_LLTUT_H
#define LL_LLTUT_H
diff --git a/linden/indra/test/lluuidhashmap_tut.cpp b/linden/indra/test/lluuidhashmap_tut.cpp
new file mode 100644
index 0000000..a787326
--- /dev/null
+++ b/linden/indra/test/lluuidhashmap_tut.cpp
@@ -0,0 +1,359 @@
+/**
+ * @file lluuidhashmap_tut.cpp
+ * @author Adroit
+ * @date 2007-02
+ * @brief Test cases for LLUUIDHashMap
+ *
+ * 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
+#include "linden_common.h"
+#include "lluuidhashmap.h"
+#include "llsdserialize.h"
+
+namespace tut
+{
+ class UUIDTableEntry
+ {
+ public:
+ UUIDTableEntry()
+ {
+ mID.setNull();
+ mValue = 0;
+ }
+
+ UUIDTableEntry(const LLUUID& id, U32 value)
+ {
+ mID = id;
+ mValue = value;
+ }
+
+ ~UUIDTableEntry(){};
+
+ static BOOL uuidEq(const LLUUID &uuid, const UUIDTableEntry &id_pair)
+ {
+ if (uuid == id_pair.mID)
+ {
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ const LLUUID& getID() { return mID; }
+ const U32& getValue() { return mValue; }
+
+ protected:
+ LLUUID mID;
+ U32 mValue;
+ };
+
+ struct hashmap_test
+ {
+ };
+
+ typedef test_group hash_index_t;
+ typedef hash_index_t::object hash_index_object_t;
+ tut::hash_index_t tut_hash_index("hashmap_test");
+
+ // stress test
+ template<> template<>
+ void hash_index_object_t::test<1>()
+ {
+ LLUUIDHashMap hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry());
+ const int numElementsToCheck = 32*256*32;
+ std::vector idList(numElementsToCheck);
+ int i;
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID id;
+ id.generate();
+ UUIDTableEntry entry(id, i);
+ hashTable.set(id, entry);
+ idList[i] = id;
+ }
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID idToCheck = idList[i];
+ UUIDTableEntry entryToCheck = hashTable.get(idToCheck);
+ ensure("set/get did not work", entryToCheck.getID() == idToCheck && entryToCheck.getValue() == (size_t)i);
+ }
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID idToCheck = idList[i];
+ if (i % 2 != 0)
+ {
+ hashTable.remove(idToCheck);
+ }
+ }
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID idToCheck = idList[i];
+ ensure("remove or check did not work", (i % 2 == 0 && hashTable.check(idToCheck)) || (i % 2 != 0 && !hashTable.check(idToCheck)));
+ }
+ }
+
+ // test removing all but one element.
+ template<> template<>
+ void hash_index_object_t::test<2>()
+ {
+ LLUUIDHashMap hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry());
+ const int numElementsToCheck = 5;
+ std::vector idList(numElementsToCheck*10);
+ int i;
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID id;
+ id.generate();
+ UUIDTableEntry entry(id, i);
+ hashTable.set(id, entry);
+ idList[i] = id;
+ }
+
+ ensure("getLength failed", hashTable.getLength() == numElementsToCheck);
+
+ // remove all but the last element
+ for (i = 0; i < numElementsToCheck-1; i++)
+ {
+ LLUUID idToCheck = idList[i];
+ hashTable.remove(idToCheck);
+ }
+
+ // there should only be one element left now.
+ ensure("getLength failed", hashTable.getLength() == 1);
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID idToCheck = idList[i];
+ if (i != numElementsToCheck - 1)
+ {
+ ensure("remove did not work", hashTable.check(idToCheck) == FALSE);
+ }
+ else
+ {
+ UUIDTableEntry entryToCheck = hashTable.get(idToCheck);
+ ensure("remove did not work", entryToCheck.getID() == idToCheck && entryToCheck.getValue() == (size_t)i);
+ }
+ }
+ }
+
+ // test overriding of value already set.
+ template<> template<>
+ void hash_index_object_t::test<3>()
+ {
+ LLUUIDHashMap hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry());
+ const int numElementsToCheck = 10;
+ std::vector idList(numElementsToCheck);
+ int i;
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID id;
+ id.generate();
+ UUIDTableEntry entry(id, i);
+ hashTable.set(id, entry);
+ idList[i] = id;
+ }
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID id = idList[i];
+ // set new entry with value = i+numElementsToCheck
+ UUIDTableEntry entry(id, i+numElementsToCheck);
+ hashTable.set(id, entry);
+ }
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID idToCheck = idList[i];
+ UUIDTableEntry entryToCheck = hashTable.get(idToCheck);
+ ensure("set/get did not work", entryToCheck.getID() == idToCheck && entryToCheck.getValue() == (size_t)(i+numElementsToCheck));
+ }
+ }
+
+ // test removeAll()
+ template<> template<>
+ void hash_index_object_t::test<4>()
+ {
+ LLUUIDHashMap hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry());
+ const int numElementsToCheck = 10;
+ std::vector idList(numElementsToCheck);
+ int i;
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID id;
+ id.generate();
+ UUIDTableEntry entry(id, i);
+ hashTable.set(id, entry);
+ idList[i] = id;
+ }
+
+ hashTable.removeAll();
+ ensure("removeAll failed", hashTable.getLength() == 0);
+ }
+
+
+ // test sparse map - force it by creating 256 entries that fall into 256 different nodes
+ template<> template<>
+ void hash_index_object_t::test<5>()
+ {
+ LLUUIDHashMap hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry());
+ const int numElementsToCheck = 256;
+ std::vector idList(numElementsToCheck);
+ int i;
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID id;
+ id.generate();
+ // LLUUIDHashMap uses mData[0] to pick the bucket
+ // overwrite mData[0] so that it ranges from 0 to 255
+ id.mData[0] = i;
+ UUIDTableEntry entry(id, i);
+ hashTable.set(id, entry);
+ idList[i] = id;
+ }
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID idToCheck = idList[i];
+ UUIDTableEntry entryToCheck = hashTable.get(idToCheck);
+ ensure("set/get did not work for sparse map", entryToCheck.getID() == idToCheck && entryToCheck.getValue() == (size_t)i);
+ }
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID idToCheck = idList[i];
+ if (i % 2 != 0)
+ {
+ hashTable.remove(idToCheck);
+ }
+ }
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID idToCheck = idList[i];
+ ensure("remove or check did not work for sparse map", (i % 2 == 0 && hashTable.check(idToCheck)) || (i % 2 != 0 && !hashTable.check(idToCheck)));
+ }
+ }
+
+ // iterator
+ template<> template<>
+ void hash_index_object_t::test<6>()
+ {
+ LLUUIDHashMap hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry());
+ LLUUIDHashMapIter hashIter(&hashTable);
+ const int numElementsToCheck = 256;
+ std::vector idList(numElementsToCheck);
+ int i;
+
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID id;
+ id.generate();
+ // LLUUIDHashMap uses mData[0] to pick the bucket
+ // overwrite mData[0] so that it ranges from 0 to 255
+ // to create a sparse map
+ id.mData[0] = i;
+ UUIDTableEntry entry(id, i);
+ hashTable.set(id, entry);
+ idList[i] = id;
+ }
+
+ hashIter.first();
+ int numElementsIterated = 0;
+ while(!hashIter.done())
+ {
+ numElementsIterated++;
+ UUIDTableEntry tableEntry = *hashIter;
+ LLUUID id = tableEntry.getID();
+ hashIter.next();
+ ensure("Iteration failed for sparse map", tableEntry.getValue() < (size_t)numElementsToCheck && idList[tableEntry.getValue()] == tableEntry.getID());
+ }
+
+ ensure("iteration count failed", numElementsIterated == numElementsToCheck);
+ }
+
+ // remove after middle of iteration
+ template<> template<>
+ void hash_index_object_t::test<7>()
+ {
+ LLUUIDHashMap hashTable(UUIDTableEntry::uuidEq, UUIDTableEntry());
+ LLUUIDHashMapIter hashIter(&hashTable);
+ const int numElementsToCheck = 256;
+ std::vector idList(numElementsToCheck);
+ int i;
+
+ LLUUID uuidtoSearch;
+ for (i = 0; i < numElementsToCheck; i++)
+ {
+ LLUUID id;
+ id.generate();
+ // LLUUIDHashMap uses mData[0] to pick the bucket
+ // overwrite mData[0] so that it ranges from 0 to 255
+ // to create a sparse map
+ id.mData[0] = i;
+ UUIDTableEntry entry(id, i);
+ hashTable.set(id, entry);
+ idList[i] = id;
+
+ // pick uuid somewhere in the middle
+ if (i == 5)
+ {
+ uuidtoSearch = id;
+ }
+ }
+
+ hashIter.first();
+ int numElementsIterated = 0;
+ while(!hashIter.done())
+ {
+ numElementsIterated++;
+ UUIDTableEntry tableEntry = *hashIter;
+ LLUUID id = tableEntry.getID();
+ if (uuidtoSearch == id)
+ {
+ break;
+ }
+ hashIter.next();
+ }
+
+ // current iterator implementation will not allow any remove operations
+ // until ALL elements have been iterated over. this seems to be
+ // an unnecessary restriction. Iterator should have a method to
+ // reset() its state so that further operations (inckuding remove)
+ // can be performed on the HashMap without having to iterate thru
+ // all the remaining nodes.
+
+// hashIter.reset();
+// hashTable.remove(uuidtoSearch);
+// ensure("remove after iteration reset failed", hashTable.check(uuidtoSearch) == FALSE);
+ }
+}
diff --git a/linden/indra/test/llxorcipher_tut.cpp b/linden/indra/test/llxorcipher_tut.cpp
new file mode 100644
index 0000000..07b33b6
--- /dev/null
+++ b/linden/indra/test/llxorcipher_tut.cpp
@@ -0,0 +1,133 @@
+/**
+ * @file llxorcipher_tut.cpp
+ * @author Adroit
+ * @date 2007-03
+ * @brief llxorcipher, llnullcipher test cases.
+ *
+ * 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
+#include "lltut.h"
+#include "llxorcipher.h"
+#include "llnullcipher.h"
+
+namespace tut
+{
+ struct cipher
+ {
+ };
+ typedef test_group cipher_t;
+ typedef cipher_t::object cipher_object_t;
+ tut::cipher_t tut_cipher("cipher");
+
+ //encrypt->decrypt
+ template<> template<>
+ void cipher_object_t::test<1>()
+ {
+ const U32 len = 3;
+ const U8 pad[] = "abc";
+ const char str[] = "SecondLife";
+ const S32 str_len = sizeof(str);
+ U8 encrypted[str_len];
+ U8 decrypted[str_len];
+ LLXORCipher xorCipher(pad, len);
+ LLXORCipher xorCipher1(pad, len);
+
+ U32 length = xorCipher.requiredEncryptionSpace(50);
+ ensure("requiredEncryptionSpace() function failed", (length == 50));
+
+ U32 lenEncrypted = xorCipher.encrypt((U8 *) str, str_len, encrypted, str_len);
+ ensure("Encryption failed", (lenEncrypted == str_len));
+ U32 lenDecrypted = xorCipher1.decrypt(encrypted, str_len, decrypted, str_len);
+ ensure("Decryption failed", (lenDecrypted == str_len));
+ ensure_memory_matches("LLXORCipher Encrypt/Decrypt failed", str, str_len, decrypted, lenDecrypted);
+ }
+
+ // operator=
+ template<> template<>
+ void cipher_object_t::test<2>()
+ {
+ const U8 pad[] = "ABCDEFGHIJKLMNOPQ"; // pad len longer than data to be ciphered
+ const U32 pad_len = sizeof(pad);
+ const U8 pad1[] = "SecondLife";
+ const U32 pad_len1 = sizeof(pad1);
+ const char str[] = "To Be Ciphered";
+ const S32 str_len = sizeof(str);
+ U8 encrypted[str_len];
+ U8 decrypted[str_len];
+
+ LLXORCipher xorCipher(pad, pad_len);
+ LLXORCipher xorCipher1(pad1, pad_len1);
+
+ xorCipher.encrypt((U8 *) str, str_len, encrypted, str_len);
+ // make xorCipher1 same as xorCipher..so that xorCipher1 can decrypt what was
+ // encrypted using xorCipher
+ xorCipher1 = xorCipher;
+ U32 lenDecrypted = xorCipher1.decrypt(encrypted, str_len, decrypted, str_len);
+ ensure_memory_matches("LLXORCipher operator= failed", str, str_len, decrypted, lenDecrypted);
+ }
+
+ //in place encrypt->decrypt
+ template<> template<>
+ void cipher_object_t::test<3>()
+ {
+ U32 padNum = 0x12349087;
+ const U8* pad = (U8*) &padNum;
+ const U32 pad_len = sizeof(U32);
+ char str[] = "To Be Ciphered a long string.........!!!.";
+ char str1[] = "To Be Ciphered a long string.........!!!."; // same as str
+ const S32 str_len = sizeof(str);
+
+ LLXORCipher xorCipher(pad, pad_len);
+ LLXORCipher xorCipher1(pad, pad_len);
+ xorCipher.encrypt((U8 *) str, str_len);
+ // it should not be the same as original data!
+ ensure("LLXORCipher: In Place encrypt failed", memcmp(str, str1, str_len) != 0);
+ xorCipher1.decrypt((U8 *) str, str_len);
+ // it should not be the same as original data!
+ ensure_memory_matches("LLXORCipher: In Place decrypt failed", str, str_len, str1, str_len);
+ }
+
+ //LLNullCipher encrypt->decrypt
+ template<> template<>
+ void cipher_object_t::test<4>()
+ {
+ const char str[] = "SecondLife";
+ const S32 str_len = sizeof(str);
+ U8 encrypted[str_len];
+ U8 decrypted[str_len];
+ LLNullCipher nullCipher;
+ LLNullCipher nullCipher1;
+
+ U32 length = nullCipher.requiredEncryptionSpace(50);
+ ensure("LLNullCipher::requiredEncryptionSpace() function failed", (length == 50));
+
+ U32 len1 = nullCipher.encrypt((U8 *) str, str_len, encrypted, str_len);
+ ensure_memory_matches("LLNullCipher - Source transformed during encryption.", encrypted, len1, str, str_len);
+
+ U32 len2 = nullCipher1.decrypt(encrypted, str_len, decrypted, str_len);
+ ensure_memory_matches("LLNullCipher - Decryption failed", decrypted, len2, str, str_len);
+ }
+}
diff --git a/linden/indra/test/m3math_tut.cpp b/linden/indra/test/m3math_tut.cpp
index 62ad365..b693193 100644
--- a/linden/indra/test/m3math_tut.cpp
+++ b/linden/indra/test/m3math_tut.cpp
@@ -1,7 +1,7 @@
/**
* @file m3math_tut.cpp
* @author Adroit
- * @date March 2007
+ * @date 2007-03
* @brief Test cases of m3math.h
*
* Copyright (c) 2007-2007, Linden Research, Inc.
diff --git a/linden/indra/test/message_tut.cpp b/linden/indra/test/message_tut.cpp
new file mode 100644
index 0000000..366c2b4
--- /dev/null
+++ b/linden/indra/test/message_tut.cpp
@@ -0,0 +1,97 @@
+/**
+ * @file lldatapacker_tut.cpp
+ * @date 2007-04
+ * @brief LLDataPacker test cases.
+ *
+ * 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
+#include "lltut.h"
+
+#include "llapr.h"
+#include "llversion.h"
+#include "message.h"
+#include "message_prehash.h"
+
+namespace
+{
+ struct Response : public LLHTTPNode::Response
+ {
+ virtual void result(const LLSD&) {}
+ virtual void status(S32 code, const std::string& message)
+ {
+ mStatus = code;
+ }
+ S32 mStatus;
+ };
+}
+
+namespace tut
+{
+ struct LLMessageSystemTestData
+ {
+ LLMessageSystemTestData()
+ {
+ static bool init = false;
+ if(! init)
+ {
+ ll_init_apr();
+ init_prehash_data();
+ init = true;
+ }
+
+ // currently test disconnected message system
+ start_messaging_system("notafile", 13035,
+ LL_VERSION_MAJOR,
+ LL_VERSION_MINOR,
+ LL_VERSION_PATCH,
+ FALSE,
+ "notasharedsecret");
+ }
+
+ ~LLMessageSystemTestData()
+ {
+ // not end_messaging_system()
+ delete gMessageSystem;
+ gMessageSystem = NULL;
+ }
+ };
+
+ typedef test_group LLMessageSystemTestGroup;
+ typedef LLMessageSystemTestGroup::object LLMessageSystemTestObject;
+ LLMessageSystemTestGroup messageTestGroup("LLMessageSystem");
+
+ template<> template<>
+ void LLMessageSystemTestObject::test<1>()
+ // dispatch unknown message
+ {
+ const char* name = "notamessasge";
+ const LLSD message;
+ const LLPointer response = new Response();
+ gMessageSystem->dispatch(name, message, response);
+ ensure_equals(response->mStatus, 404);
+ }
+}
+
diff --git a/linden/indra/test/test.cpp b/linden/indra/test/test.cpp
index 8f6f672..1c03768 100644
--- a/linden/indra/test/test.cpp
+++ b/linden/indra/test/test.cpp
@@ -64,7 +64,8 @@ public:
mTotalTests(0),
mPassedTests(0),
mFailedTests(0),
- mSkippedTests(0)
+ mSkippedTests(0),
+ mSkipedFailTests(0)
{
}
@@ -86,7 +87,7 @@ public:
break;
case tut::test_result::fail:
++mFailedTests;
- out << "fail '" << tr.message << "'";
+ out << "fail";
break;
case tut::test_result::ex:
++mFailedTests;
@@ -104,12 +105,20 @@ public:
++mSkippedTests;
out << "skipped";
break;
+ case tut::test_result::skip_fail:
+ ++mSkipedFailTests;
+ out << "skipped known failure";
+ break;
default:
++mFailedTests;
out << "unknown";
}
if(mVerboseMode || (tr.result != tut::test_result::ok))
{
+ if(!tr.message.empty())
+ {
+ out << ": '" << tr.message << "'";
+ }
std::cout << out.str() << std::endl;
}
}
@@ -118,11 +127,17 @@ public:
{
std::cout << std::endl;
std::cout << "Total Tests: " << mTotalTests << std::endl;
- std::cout << "Passed Tests : " << mPassedTests << std::endl;
+ std::cout << "Passed Tests: " << mPassedTests << std::endl;
if (mSkippedTests > 0)
{
- std::cout << "Skipped Tests : " << mSkippedTests << std::endl;
+ std::cout << "Skipped Tests: " << mSkippedTests << std::endl;
+ }
+
+ if (mSkipedFailTests > 0)
+ {
+ std::cout << "Skipped known failures: " << mSkipedFailTests
+ << std::endl;
}
if(mFailedTests > 0)
@@ -137,10 +152,11 @@ public:
protected:
bool mVerboseMode;
- S32 mTotalTests;
- S32 mPassedTests;
- S32 mFailedTests;
- S32 mSkippedTests;
+ int mTotalTests;
+ int mPassedTests;
+ int mFailedTests;
+ int mSkippedTests;
+ int mSkipedFailTests;
};
static const apr_getopt_option_t TEST_CL_OPTIONS[] =
diff --git a/linden/indra/test/test.vcproj b/linden/indra/test/test.vcproj
index cb9c7af..1a55b8c 100644
--- a/linden/indra/test/test.vcproj
+++ b/linden/indra/test/test.vcproj
@@ -20,7 +20,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
template<>
void v2math_object::test<13>()
{
+#if (LL_RELEASE && LL_LINUX)
+ skip_fail("Doesn't work under Linux -- FIX ME!");
+#endif
F32 x1 = 1.f, y1 = 2.f,x2 = 2.332f, y2 = -1.23f;
F32 val1, val2;
LLVector2 vec2(x1, y1), vec3(x2, y2);
@@ -425,6 +431,10 @@ namespace tut
template<> template<>
void v2math_object::test<23>()
{
+#if (LL_RELEASE && LL_LINUX)
+ skip_fail("Doesn't work under Linux -- FIX ME!");
+#endif
+
F32 x1 =1.f, y1 = 2.f;
F32 val1, val2;
LLVector2 vec2(x1, y1);
diff --git a/linden/indra/test/v3color_tut.cpp b/linden/indra/test/v3color_tut.cpp
new file mode 100644
index 0000000..411d196
--- /dev/null
+++ b/linden/indra/test/v3color_tut.cpp
@@ -0,0 +1,314 @@
+/**
+ * @file v3color_tut.cpp
+ * @author Adroit
+ * @date 2007-03
+ * @brief v3color test cases.
+ *
+ * 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
+#include "lltut.h"
+#include "linden_common.h"
+#include "v3color.h"
+
+
+namespace tut
+{
+ struct v3color_data
+ {
+ };
+ typedef test_group v3color_test;
+ typedef v3color_test::object v3color_object;
+ tut::v3color_test v3color_testcase("v3color");
+
+ template<> template<>
+ void v3color_object::test<1>()
+ {
+ LLColor3 llcolor3;
+ ensure("1:LLColor3:Fail to initialize ", (0.0f == llcolor3.mV[0]) && (0.0f == llcolor3.mV[1]) && (0.0f == llcolor3.mV[2]));
+ F32 r = 2.0f, g = 3.2f, b = 1.f;
+ F32 v1,v2,v3;
+ LLColor3 llcolor3a(r,g,b);
+ ensure("2:LLColor3:Fail to initialize " ,(2.0f == llcolor3a.mV[0]) && (3.2f == llcolor3a.mV[1]) && (1.f == llcolor3a.mV[2]));
+
+ const F32 vec[3] = {2.0f, 3.2f,1.f};
+ LLColor3 llcolor3b(vec);
+ ensure("3:LLColor3:Fail to initialize " ,(2.0f == llcolor3b.mV[0]) && (3.2f == llcolor3b.mV[1]) && (1.f == llcolor3b.mV[2]));
+ char* str = "561122";
+ LLColor3 llcolor3c(str);
+ v1 = (F32)86.0f/255.0f; // 0x56 = 86
+ v2 = (F32)17.0f/255.0f; // 0x11 = 17
+ v3 = (F32)34.0f/255.f; // 0x22 = 34
+ ensure("4:LLColor3:Fail to initialize " ,(v1 == llcolor3c.mV[0]) && (v2 == llcolor3c.mV[1]) && (v3 == llcolor3c.mV[2]));
+ }
+
+ template<> template<>
+ void v3color_object::test<2>()
+ {
+ LLColor3 llcolor3;
+ llcolor3.setToBlack();
+ ensure("setToBlack:Fail to set black ", ((llcolor3.mV[0] == 0.f) && (llcolor3.mV[1] == 0.f) && (llcolor3.mV[2] == 0.f)));
+ llcolor3.setToWhite();
+ ensure("setToWhite:Fail to set white ", ((llcolor3.mV[0] == 1.f) && (llcolor3.mV[1] == 1.f) && (llcolor3.mV[2] == 1.f)));
+ }
+
+ template<> template<>
+ void v3color_object::test<3>()
+ {
+ F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f;
+ LLColor3 llcolor3, llcolor3a;
+ llcolor3.setVec(r,g,b);
+ ensure("1:setVec(r,g,b) Fail ",((r == llcolor3.mV[0]) && (g == llcolor3.mV[1]) && (b == llcolor3.mV[2])));
+ llcolor3a.setVec(llcolor3);
+ ensure_equals("2:setVec(LLColor3) Fail ", llcolor3,llcolor3a);
+ F32 vec[3] = {1.2324f, 2.45634f, .234563f};
+ llcolor3.setToBlack();
+ llcolor3.setVec(vec);
+ ensure("3:setVec(F32*) Fail ",((vec[0] == llcolor3.mV[0]) && (vec[1] == llcolor3.mV[1]) && (vec[2] == llcolor3.mV[2])));
+ }
+
+ template<> template<>
+ void v3color_object::test<4>()
+ {
+ F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f;
+ LLColor3 llcolor3(r,g,b);
+ ensure("magVecSquared:Fail ", is_approx_equal(llcolor3.magVecSquared(), (r*r + g*g + b*b)));
+ ensure("magVec:Fail ", is_approx_equal(llcolor3.magVec(), fsqrtf(r*r + g*g + b*b)));
+ }
+
+ template<> template<>
+ void v3color_object::test<5>()
+ {
+#if (LL_RELEASE && LL_LINUX)
+ skip_fail("Doesn't work under Linux -- FIX ME!");
+#endif
+ F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f;
+ F32 val1, val2,val3;
+ LLColor3 llcolor3(r,g,b);
+ F32 vecMag = llcolor3.normVec();
+ F32 mag = fsqrtf(r*r + g*g + b*b);
+ F32 oomag = 1.f / mag;
+ val1 = r * oomag;
+ val2 = g * oomag;
+ val3 = b * oomag;
+ ensure("1:normVec failed ", (val1 == llcolor3.mV[0] && val2 == llcolor3.mV[1] && val3 == llcolor3.mV[2] && vecMag == mag));
+ r = .000000000f, g = 0.f, b = 0.0f;
+ llcolor3.setVec(r,g,b);
+ vecMag = llcolor3.normVec();
+ ensure("2:normVec failed should be 0. ", (0. == llcolor3.mV[0] && 0. == llcolor3.mV[1] && 0. == llcolor3.mV[2] && vecMag == 0.));
+ }
+
+ template<> template<>
+ void v3color_object::test<6>()
+ {
+ F32 r = 2.3436212f, g = -1231.f, b = .7849321232f;
+ std::ostringstream stream1, stream2;
+ LLColor3 llcolor3(r,g,b),llcolor3a;
+ stream1 << llcolor3;
+ llcolor3a.setVec(r,g,b);
+ stream2 << llcolor3a;
+ ensure("operator << failed ", (stream1.str() == stream2.str()));
+ }
+
+ template<> template<>
+ void v3color_object::test<7>()
+ {
+ F32 r = 2.3436212f, g = -1231.f, b = .7849321232f;
+ LLColor3 llcolor3(r,g,b),llcolor3a;
+ llcolor3a = llcolor3;
+ ensure("operator == failed ", (llcolor3a == llcolor3));
+ }
+
+ template<> template<>
+ void v3color_object::test<8>()
+ {
+ F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
+ LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2),llcolor3b;
+ llcolor3b = llcolor3 + llcolor3a ;
+ ensure("1:operator+ failed",is_approx_equal(r1+r2 ,llcolor3b.mV[0]) && is_approx_equal(g1+g2,llcolor3b.mV[1])&& is_approx_equal(b1+b2,llcolor3b.mV[2]));
+ r1 = -.235f, g1 = -24.32f, b1 = 2.13f, r2 = -2.3f, g2 = 1.f, b2 = 34.21f;
+ llcolor3.setVec(r1,g1,b1);
+ llcolor3a.setVec(r2,g2,b2);
+ llcolor3b = llcolor3 + llcolor3a;
+ ensure("2:operator+ failed",is_approx_equal(r1+r2 ,llcolor3b.mV[0]) && is_approx_equal(g1+g2,llcolor3b.mV[1])&& is_approx_equal(b1+b2,llcolor3b.mV[2]));
+ }
+
+ template<> template<>
+ void v3color_object::test<9>()
+ {
+ F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
+ LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2),llcolor3b;
+ llcolor3b = llcolor3 - llcolor3a ;
+ ensure("1:operator- failed",is_approx_equal(r1-r2 ,llcolor3b.mV[0]) && is_approx_equal(g1-g2,llcolor3b.mV[1])&& is_approx_equal(b1-b2,llcolor3b.mV[2]));
+ r1 = -.235f, g1 = -24.32f, b1 = 2.13f, r2 = -2.3f, g2 = 1.f, b2 = 34.21f;
+ llcolor3.setVec(r1,g1,b1);
+ llcolor3a.setVec(r2,g2,b2);
+ llcolor3b = llcolor3 - llcolor3a;
+ ensure("2:operator- failed",is_approx_equal(r1-r2 ,llcolor3b.mV[0]) && is_approx_equal(g1-g2,llcolor3b.mV[1])&& is_approx_equal(b1-b2,llcolor3b.mV[2]));
+ }
+
+ template<> template<>
+ void v3color_object::test<10>()
+ {
+ F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
+ LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2),llcolor3b;
+ llcolor3b = llcolor3 * llcolor3a;
+ ensure("1:operator* failed",is_approx_equal(r1*r2 ,llcolor3b.mV[0]) && is_approx_equal(g1*g2,llcolor3b.mV[1])&& is_approx_equal(b1*b2,llcolor3b.mV[2]));
+ llcolor3a.setToBlack();
+ F32 mulVal = 4.332f;
+ llcolor3a = llcolor3 * mulVal;
+ ensure("2:operator* failed",is_approx_equal(r1*mulVal ,llcolor3a.mV[0]) && is_approx_equal(g1*mulVal,llcolor3a.mV[1])&& is_approx_equal(b1*mulVal,llcolor3a.mV[2]));
+ llcolor3a.setToBlack();
+ llcolor3a = mulVal * llcolor3;
+ ensure("3:operator* failed",is_approx_equal(r1*mulVal ,llcolor3a.mV[0]) && is_approx_equal(g1*mulVal,llcolor3a.mV[1])&& is_approx_equal(b1*mulVal,llcolor3a.mV[2]));
+ }
+
+ template<> template<>
+ void v3color_object::test<11>()
+ {
+ F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f;
+ LLColor3 llcolor3(r,g,b),llcolor3a;
+ llcolor3a = -llcolor3;
+ ensure("operator- failed ", (-llcolor3a == llcolor3));
+ }
+
+ template<> template<>
+ void v3color_object::test<12>()
+ {
+ F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f;
+ LLColor3 llcolor3(r,g,b),llcolor3a(r,g,b);
+ ensure_equals("1:operator== failed",llcolor3a,llcolor3);
+ r = 13.3436212f, g = -11.f, b = .7849321232f;
+ llcolor3.setVec(r,g,b);
+ llcolor3a.setVec(r,g,b);
+ ensure_equals("2:operator== failed",llcolor3a,llcolor3);
+ }
+
+ template<> template<>
+ void v3color_object::test<13>()
+ {
+ F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
+ LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
+ ensure("1:operator!= failed",(llcolor3 != llcolor3a));
+ llcolor3.setToBlack();
+ llcolor3a.setVec(llcolor3);
+ ensure("2:operator!= failed", ( FALSE == (llcolor3a != llcolor3)));
+ }
+
+ template<> template<>
+ void v3color_object::test<14>()
+ {
+ F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
+ LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
+ llcolor3a += llcolor3;
+ ensure("1:operator+= failed",is_approx_equal(r1+r2 ,llcolor3a.mV[0]) && is_approx_equal(g1+g2,llcolor3a.mV[1])&& is_approx_equal(b1+b2,llcolor3a.mV[2]));
+ llcolor3.setVec(r1,g1,b1);
+ llcolor3a.setVec(r2,g2,b2);
+ llcolor3a += llcolor3;
+ ensure("2:operator+= failed",is_approx_equal(r1+r2 ,llcolor3a.mV[0]) && is_approx_equal(g1+g2,llcolor3a.mV[1])&& is_approx_equal(b1+b2,llcolor3a.mV[2]));
+ }
+
+ template<> template<>
+ void v3color_object::test<15>()
+ {
+ F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
+ LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
+ llcolor3a -= llcolor3;
+ ensure("1:operator-= failed", is_approx_equal(r2-r1, llcolor3a.mV[0]));
+ ensure("2:operator-= failed", is_approx_equal(g2-g1, llcolor3a.mV[1]));
+ ensure("3:operator-= failed", is_approx_equal(b2-b1, llcolor3a.mV[2]));
+ llcolor3.setVec(r1,g1,b1);
+ llcolor3a.setVec(r2,g2,b2);
+ llcolor3a -= llcolor3;
+ ensure("4:operator-= failed", is_approx_equal(r2-r1, llcolor3a.mV[0]));
+ ensure("5:operator-= failed", is_approx_equal(g2-g1, llcolor3a.mV[1]));
+ ensure("6:operator-= failed", is_approx_equal(b2-b1, llcolor3a.mV[2]));
+ }
+
+ template<> template<>
+ void v3color_object::test<16>()
+ {
+ F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
+ LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
+ llcolor3a *= llcolor3;
+ ensure("1:operator*= failed",is_approx_equal(r1*r2 ,llcolor3a.mV[0]) && is_approx_equal(g1*g2,llcolor3a.mV[1])&& is_approx_equal(b1*b2,llcolor3a.mV[2]));
+ F32 mulVal = 4.332f;
+ llcolor3 *=mulVal;
+ ensure("2:operator*= failed",is_approx_equal(r1*mulVal ,llcolor3.mV[0]) && is_approx_equal(g1*mulVal,llcolor3.mV[1])&& is_approx_equal(b1*mulVal,llcolor3.mV[2]));
+ }
+
+ template<> template<>
+ void v3color_object::test<17>()
+ {
+ F32 r = 2.3436212f, g = -1231.f, b = .7849321232f;
+ LLColor3 llcolor3(r,g,b);
+ llcolor3.clamp();
+ ensure("1:clamp:Fail to clamp " ,(1.0f == llcolor3.mV[0]) && (0.f == llcolor3.mV[1]) && (b == llcolor3.mV[2]));
+ r = -2.3436212f, g = -1231.f, b = 67.7849321232f;
+ llcolor3.setVec(r,g,b);
+ llcolor3.clamp();
+ ensure("2:clamp:Fail to clamp " ,(0.f == llcolor3.mV[0]) && (0.f == llcolor3.mV[1]) && (1.f == llcolor3.mV[2]));
+ }
+
+ template<> template<>
+ void v3color_object::test<18>()
+ {
+ F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
+ F32 val = 2.3f,val1,val2,val3;
+ LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
+ val1 = r1 + (r2 - r1)* val;
+ val2 = g1 + (g2 - g1)* val;
+ val3 = b1 + (b2 - b1)* val;
+ LLColor3 llcolor3b = lerp(llcolor3,llcolor3a,val);
+ ensure("lerp failed ", ((val1 ==llcolor3b.mV[0])&& (val2 ==llcolor3b.mV[1]) && (val3 ==llcolor3b.mV[2])));
+ }
+
+ template<> template<>
+ void v3color_object::test<19>()
+ {
+ F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
+ LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
+ F32 val = distVec(llcolor3,llcolor3a);
+ ensure("distVec failed ", is_approx_equal(fsqrtf((r1-r2)*(r1-r2) + (g1-g2)*(g1-g2) + (b1-b2)*(b1-b2)) ,val));
+
+ F32 val1 = distVec_squared(llcolor3,llcolor3a);
+ ensure("distVec_squared failed ", is_approx_equal(((r1-r2)*(r1-r2) + (g1-g2)*(g1-g2) + (b1-b2)*(b1-b2)) ,val1));
+ }
+
+ template<> template<>
+ void v3color_object::test<20>()
+ {
+ F32 r1 = 1.02223f, g1 = 22222.212f, b1 = 122222.00002f;
+ LLColor3 llcolor31(r1,g1,b1);
+
+ LLSD sd = llcolor31.getValue();
+ LLColor3 llcolor32;
+ llcolor32.setValue(sd);
+ ensure_equals("LLColor3::setValue/getValue failed", llcolor31, llcolor32);
+
+ LLColor3 llcolor33(sd);
+ ensure_equals("LLColor3(LLSD) failed", llcolor31, llcolor33);
+ }
+}
diff --git a/linden/indra/test/v3dmath_tut.cpp b/linden/indra/test/v3dmath_tut.cpp
index 88ade71..2f5ea8e 100644
--- a/linden/indra/test/v3dmath_tut.cpp
+++ b/linden/indra/test/v3dmath_tut.cpp
@@ -1,7 +1,7 @@
/**
* @file v3dmath_tut.cpp
* @author Adroit
- * @date March 2007
+ * @date 2007-03
* @brief v3dmath test cases.
*
* Copyright (c) 2007-2007, Linden Research, Inc.
@@ -212,21 +212,70 @@ namespace tut
F64 x2 = 1.2, y2 = 2.5, z2 = 1.;
LLVector3d vec3D(x1,y1,z1),vec3Da(x2,y2,z2);
F64 res = vec3D * vec3Da;
- ensure("1:operator* failed",(res == (x1*x2 + y1*y2 + z1*z2)));
+ ensure_approximately_equals(
+ "1:operator* failed",
+ res,
+ (x1*x2 + y1*y2 + z1*z2),
+ 8);
vec3Da.clearVec();
F64 mulVal = 4.2;
vec3Da = vec3D * mulVal;
- ensure("2:operator* failed",(x1*mulVal == vec3Da.mdV[VX]) && (y1*mulVal == vec3Da.mdV[VY])&& (z1*mulVal == vec3Da.mdV[VZ]));
+ ensure_approximately_equals(
+ "2a:operator* failed",
+ vec3Da.mdV[VX],
+ x1*mulVal,
+ 8);
+ ensure_approximately_equals(
+ "2b:operator* failed",
+ vec3Da.mdV[VY],
+ y1*mulVal,
+ 8);
+ ensure_approximately_equals(
+ "2c:operator* failed",
+ vec3Da.mdV[VZ],
+ z1*mulVal,
+ 8);
vec3Da.clearVec();
vec3Da = mulVal * vec3D;
- ensure("3:operator* failed",(x1*mulVal == vec3Da.mdV[VX]) && (y1*mulVal == vec3Da.mdV[VY])&& (z1*mulVal == vec3Da.mdV[VZ]));
+ ensure_approximately_equals(
+ "3a:operator* failed",
+ vec3Da.mdV[VX],
+ x1*mulVal,
+ 8);
+ ensure_approximately_equals(
+ "3b:operator* failed",
+ vec3Da.mdV[VY],
+ y1*mulVal,
+ 8);
+ ensure_approximately_equals(
+ "3c:operator* failed",
+ vec3Da.mdV[VZ],
+ z1*mulVal,
+ 8);
vec3D *= mulVal;
- ensure("4:operator*= failed",(x1*mulVal == vec3D.mdV[VX]) && (y1*mulVal == vec3D.mdV[VY])&& (z1*mulVal == vec3D.mdV[VZ]));
+ ensure_approximately_equals(
+ "4a:operator*= failed",
+ vec3D.mdV[VX],
+ x1*mulVal,
+ 8);
+ ensure_approximately_equals(
+ "4b:operator*= failed",
+ vec3D.mdV[VY],
+ y1*mulVal,
+ 8);
+ ensure_approximately_equals(
+ "4c:operator*= failed",
+ vec3D.mdV[VZ],
+ z1*mulVal,
+ 8);
}
template<> template<>
void v3dmath_object::test<12>()
{
+#if (LL_RELEASE && LL_LINUX)
+ skip_fail("Doesn't work under Linux -- FIX ME!");
+#endif
F64 x1 = 1., y1 = 2., z1 = -1.1;
F64 x2 = 1.2, y2 = 2.5, z2 = 1.;
F64 val1, val2, val3;
@@ -247,15 +296,57 @@ namespace tut
F64 t = 1.f / div;
LLVector3d vec3D(x1,y1,z1), vec3Da;
vec3Da = vec3D/div;
- ensure("1:operator/ failed",(x1*t == vec3Da.mdV[VX]) && (y1*t == vec3Da.mdV[VY])&& (z1*t == vec3Da.mdV[VZ]));
- x1 = 1.23, y1 = 4., z1 = -2.32;
- vec3D.clearVec();
- vec3Da.clearVec();
- vec3D.setVec(x1,y1,z1);
- vec3Da = vec3D/div;
- ensure("2:operator/ failed",(x1*t == vec3Da.mdV[VX]) && (y1*t == vec3Da.mdV[VY])&& (z1*t == vec3Da.mdV[VZ]));
- vec3D /= div;
- ensure("3:operator/= failed",(x1*t == vec3D.mdV[VX]) && (y1*t == vec3D.mdV[VY])&& (z1*t == vec3D.mdV[VZ]));
+ ensure_approximately_equals(
+ "1a:operator/ failed",
+ vec3Da.mdV[VX],
+ x1*t,
+ 8);
+ ensure_approximately_equals(
+ "1b:operator/ failed",
+ vec3Da.mdV[VY],
+ y1*t,
+ 8);
+ ensure_approximately_equals(
+ "1c:operator/ failed",
+ vec3Da.mdV[VZ],
+ z1*t,
+ 8);
+ x1 = 1.23, y1 = 4., z1 = -2.32;
+ vec3D.clearVec();
+ vec3Da.clearVec();
+ vec3D.setVec(x1,y1,z1);
+ vec3Da = vec3D/div;
+ ensure_approximately_equals(
+ "2a:operator/ failed",
+ vec3Da.mdV[VX],
+ x1*t,
+ 8);
+ ensure_approximately_equals(
+ "2b:operator/ failed",
+ vec3Da.mdV[VY],
+ y1*t,
+ 8);
+ ensure_approximately_equals(
+ "2c:operator/ failed",
+ vec3Da.mdV[VZ],
+ z1*t,
+ 8);
+ vec3D /= div;
+ ensure_approximately_equals(
+ "3a:operator/= failed",
+ vec3D.mdV[VX],
+ x1*t,
+ 8);
+ ensure_approximately_equals(
+ "3b:operator/= failed",
+ vec3D.mdV[VY],
+ y1*t,
+ 8);
+ ensure_approximately_equals(
+ "3c:operator/= failed",
+ vec3D.mdV[VZ],
+ z1*t,
+ 8);
}
template<> template<>
@@ -324,18 +415,48 @@ namespace tut
LLVector3d vec3D(x,y,z);
F64 mag = vec3D.normVec();
mag = 1.f/ mag;
- ensure("1:normVec: Fail ", (x* mag == vec3D.mdV[VX]) && (y* mag == vec3D.mdV[VY])&& (z* mag == vec3D.mdV[VZ]));
+ ensure_approximately_equals(
+ "1a:normVec: Fail ",
+ vec3D.mdV[VX],
+ x * mag,
+ 8);
+ ensure_approximately_equals(
+ "1b:normVec: Fail ",
+ vec3D.mdV[VY],
+ y * mag,
+ 8);
+ ensure_approximately_equals(
+ "1c:normVec: Fail ",
+ vec3D.mdV[VZ],
+ z * mag,
+ 8);
x = 0.000000001, y = 0.000000001, z = 0.000000001;
vec3D.clearVec();
vec3D.setVec(x,y,z);
mag = vec3D.normVec();
- ensure("2:normVec: Fail ", (x* mag == vec3D.mdV[VX]) && (y* mag == vec3D.mdV[VY])&& (z* mag == vec3D.mdV[VZ]));
+ ensure_approximately_equals(
+ "2a:normVec: Fail ",
+ vec3D.mdV[VX],
+ x * mag,
+ 8);
+ ensure_approximately_equals(
+ "2b:normVec: Fail ",
+ vec3D.mdV[VY],
+ y * mag,
+ 8);
+ ensure_approximately_equals(
+ "2c:normVec: Fail ",
+ vec3D.mdV[VZ],
+ z * mag,
+ 8);
}
template<> template<>
void v3dmath_object::test<20>()
{
- F64 x1 = 1111.232222, y1 = 2222222222.22, z1 = 422222222222;
+ F64 x1 = 1111.232222;
+ F64 y1 = 2222222222.22;
+ F64 z1 = 422222222222.0;
char buf[] = "1111.232222 2222222222.22 422222222222";
LLVector3d vec3Da, vec3Db(x1,y1,z1);
LLVector3d::parseVector3d(buf, &vec3Da);
@@ -399,4 +520,4 @@ namespace tut
angle = acos(angle);
ensure("2:angle_between: Fail ", (angle == angle2));
}
-}
\ No newline at end of file
+}
diff --git a/linden/indra/test/v3math_tut.cpp b/linden/indra/test/v3math_tut.cpp
index 36eaca9..4f4e7e0 100644
--- a/linden/indra/test/v3math_tut.cpp
+++ b/linden/indra/test/v3math_tut.cpp
@@ -1,11 +1,12 @@
/**
* @file v3math_tut.cpp
* @author Adroit
- * @date February 2007
+ * @date 2007-02
* @brief v3math test cases.
*
* 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
@@ -389,6 +390,9 @@ namespace tut
template<> template<>
void v3math_object::test<22>()
{
+#if (LL_RELEASE && LL_LINUX)
+ skip_fail("Doesn't work under Linux -- FIX ME!");
+#endif
F32 x1 =1.f, y1 = 2.f,z1 = 1.2f, x2 = -2.3f, y2 = 1.11f, z2 = 1234.234f;
F32 val1,val2,val3;
LLVector3 vec3(x1,y1,z1), vec3a(x2,y2,z2);
@@ -523,6 +527,9 @@ namespace tut
template<> template<>
void v3math_object::test<32>()
{
+#if (LL_RELEASE && LL_LINUX)
+ skip_fail("Doesn't work under Linux -- FIX ME!");
+#endif
F32 x =12.3524f, y = -342.f,z = 4.126341f;
LLVector3 vec3(x,y,z);
F32 mag = vec3.normVec();
@@ -549,6 +556,9 @@ namespace tut
template<> template<>
void v3math_object::test<34>()
{
+#if (LL_RELEASE && LL_LINUX)
+ skip_fail("Doesn't work under Linux -- FIX ME!");
+#endif
F32 x = 10.f, y = 20.f, z = -15.f;
F32 x1, y1, z1;
F32 lowerxy = 0.f, upperxy = 1.0f, lowerz = -1.0f, upperz = 1.f;
@@ -565,4 +575,4 @@ namespace tut
z1 = U8_to_F32(F32_to_U8(z, lowerz, upperz), lowerz, upperz);
ensure("2:quantize8: Fail ", (x1 == vec3a.mV[VX]) && (y1 == vec3a.mV[VY])&& (z1 == vec3a.mV[VZ]));
}
-}
\ No newline at end of file
+}
diff --git a/linden/indra/test/v4color_tut.cpp b/linden/indra/test/v4color_tut.cpp
new file mode 100644
index 0000000..2d1cd7e
--- /dev/null
+++ b/linden/indra/test/v4color_tut.cpp
@@ -0,0 +1,364 @@
+/**
+ * @file v4color_tut.cpp
+ * @author Adroit
+ * @date 2007-03
+ * @brief v4color test cases.
+ *
+ * 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
+#include "lltut.h"
+#include "linden_common.h"
+#include "v4coloru.h"
+#include "llsd.h"
+#include "v3color.h"
+#include "v4color.h"
+
+
+namespace tut
+{
+ struct v4color_data
+ {
+ };
+ typedef test_group v4color_test;
+ typedef v4color_test::object v4color_object;
+ tut::v4color_test v4color_testcase("v4color");
+
+ template<> template<>
+ void v4color_object::test<1>()
+ {
+ LLColor4 llcolor4;
+ ensure("1:LLColor4:Fail to initialize ", ((0 == llcolor4.mV[VX]) && (0 == llcolor4.mV[VY]) && (0 == llcolor4.mV[VZ])&& (1.0f == llcolor4.mV[VW])));
+
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF, a = 0xAF;
+ LLColor4 llcolor4a(r,g,b);
+ ensure("2:LLColor4:Fail to initialize ", ((r == llcolor4a.mV[VX]) && (g == llcolor4a.mV[VY]) && (b == llcolor4a.mV[VZ])&& (1.0f == llcolor4a.mV[VW])));
+
+ LLColor4 llcolor4b(r,g,b,a);
+ ensure("3:LLColor4:Fail to initialize ", ((r == llcolor4b.mV[VX]) && (g == llcolor4b.mV[VY]) && (b == llcolor4b.mV[VZ])&& (a == llcolor4b.mV[VW])));
+
+ const F32 vec[4] = {.112f ,23.2f, -4.2f, -.0001f};
+ LLColor4 llcolor4c(vec);
+ ensure("4:LLColor4:Fail to initialize ", ((vec[0] == llcolor4c.mV[VX]) && (vec[1] == llcolor4c.mV[VY]) && (vec[2] == llcolor4c.mV[VZ])&& (vec[3] == llcolor4c.mV[VW])));
+
+ LLColor3 llcolor3(-2.23f,1.01f,42.3f);
+ F32 val = -.1f;
+ LLColor4 llcolor4d(llcolor3,val);
+ ensure("5:LLColor4:Fail to initialize ", ((llcolor3.mV[VX] == llcolor4d.mV[VX]) && (llcolor3.mV[VY] == llcolor4d.mV[VY]) && (llcolor3.mV[VZ] == llcolor4d.mV[VZ])&& (val == llcolor4d.mV[VW])));
+
+ LLSD sd = llcolor4d.getValue();
+ LLColor4 llcolor4e(sd);
+ ensure_equals("6:LLColor4:(LLSD) failed ", llcolor4d, llcolor4e);
+
+ U8 r1 = 0xF2, g1 = 0xFA, b1 = 0xBF;
+ LLColor4U color4u(r1,g1,b1);
+ LLColor4 llcolor4g(color4u);
+ const F32 SCALE = 1.f/255.f;
+ F32 r2 = r1*SCALE, g2 = g1* SCALE, b2 = b1* SCALE;
+ ensure("7:LLColor4:Fail to initialize ", ((r2 == llcolor4g.mV[VX]) && (g2 == llcolor4g.mV[VY]) && (b2 == llcolor4g.mV[VZ])));
+ }
+
+ template<> template<>
+ void v4color_object::test<2>()
+ {
+ LLColor4 llcolor(1.0, 2.0, 3.0, 4.0);
+ LLSD llsd = llcolor.getValue();
+ LLColor4 llcolor4(llsd), llcolor4a;
+ llcolor4a.setValue(llsd);
+ ensure("setValue: failed", (llcolor4 == llcolor4a));
+ LLSD sd = llcolor4a.getValue();
+ LLColor4 llcolor4b(sd);
+ ensure("getValue: Failed ", (llcolor4b == llcolor4a));
+ }
+
+ template<> template<>
+ void v4color_object::test<3>()
+ {
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 0xAF;
+ LLColor4 llcolor4(r,g,b,a);
+ llcolor4.setToBlack();
+ ensure("setToBlack:Fail to set the black ", ((0 == llcolor4.mV[VX]) && (0 == llcolor4.mV[VY]) && (0 == llcolor4.mV[VZ])&& (1.0f == llcolor4.mV[VW])));
+
+ llcolor4.setToWhite();
+ ensure("setToWhite:Fail to set the white ", ((1.f == llcolor4.mV[VX]) && (1.f == llcolor4.mV[VY]) && (1.f == llcolor4.mV[VZ])&& (1.0f == llcolor4.mV[VW])));
+ }
+
+ template<> template<>
+ void v4color_object::test<4>()
+ {
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF, a = 0xAF;
+ LLColor4 llcolor4;
+ llcolor4.setVec(r,g,b);
+ ensure("1:setVec:Fail to set the values ", ((r == llcolor4.mV[VX]) && (g == llcolor4.mV[VY]) && (b == llcolor4.mV[VZ])&& (1.f == llcolor4.mV[VW])));
+
+ llcolor4.setVec(r,g,b,a);
+ ensure("2:setVec:Fail to set the values ", ((r == llcolor4.mV[VX]) && (g == llcolor4.mV[VY]) && (b == llcolor4.mV[VZ])&& (a == llcolor4.mV[VW])));
+
+ LLColor4 llcolor4a;
+ llcolor4a.setVec(llcolor4);
+ ensure_equals("3:setVec:Fail to set the values ", llcolor4a,llcolor4);
+
+ LLColor3 llcolor3(-2.23f,1.01f,42.3f);
+ llcolor4a.setVec(llcolor3);
+ ensure("4:setVec:Fail to set the values ", ((llcolor3.mV[VX] == llcolor4a.mV[VX]) && (llcolor3.mV[VY] == llcolor4a.mV[VY]) && (llcolor3.mV[VZ] == llcolor4a.mV[VZ])));
+
+ F32 val = -.33f;
+ llcolor4a.setVec(llcolor3,val);
+ ensure("4:setVec:Fail to set the values ", ((llcolor3.mV[VX] == llcolor4a.mV[VX]) && (llcolor3.mV[VY] == llcolor4a.mV[VY]) && (llcolor3.mV[VZ] == llcolor4a.mV[VZ]) && (val == llcolor4a.mV[VW])));
+
+ const F32 vec[4] = {.112f ,23.2f, -4.2f, -.0001f};
+ LLColor4 llcolor4c;
+ llcolor4c.setVec(vec);
+ ensure("5:setVec:Fail to initialize ", ((vec[0] == llcolor4c.mV[VX]) && (vec[1] == llcolor4c.mV[VY]) && (vec[2] == llcolor4c.mV[VZ])&& (vec[3] == llcolor4c.mV[VW])));
+
+ U8 r1 = 0xF2, g1 = 0xFA, b1= 0xBF;
+ LLColor4U color4u(r1,g1,b1);
+ llcolor4.setVec(color4u);
+ const F32 SCALE = 1.f/255.f;
+ F32 r2 = r1*SCALE, g2 = g1* SCALE, b2 = b1* SCALE;
+ ensure("6:setVec:Fail to initialize ", ((r2 == llcolor4.mV[VX]) && (g2 == llcolor4.mV[VY]) && (b2 == llcolor4.mV[VZ])));
+ }
+
+ template<> template<>
+ void v4color_object::test<5>()
+ {
+ F32 alpha = 0xAF;
+ LLColor4 llcolor4;
+ llcolor4.setAlpha(alpha);
+ ensure("setAlpha:Fail to initialize ", (alpha == llcolor4.mV[VW]));
+ }
+
+ template<> template<>
+ void v4color_object::test<6>()
+ {
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF;
+ LLColor4 llcolor4(r,g,b);
+ ensure("magVecSquared:Fail ", is_approx_equal(llcolor4.magVecSquared(), (r*r + g*g + b*b)));
+ ensure("magVec:Fail ", is_approx_equal(llcolor4.magVec(), fsqrtf(r*r + g*g + b*b)));
+ }
+
+ template<> template<>
+ void v4color_object::test<7>()
+ {
+#if (LL_RELEASE && LL_LINUX)
+ skip_fail("Doesn't work under Linux -- FIX ME!");
+#endif
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF;
+ LLColor4 llcolor4(r,g,b);
+ F32 vecMag = llcolor4.normVec();
+ F32 mag = fsqrtf(r*r + g*g + b*b);
+ F32 oomag = 1.f / mag;
+ F32 val1 = r * oomag, val2 = g * oomag, val3 = b * oomag;
+ ensure("1:normVec failed ", (val1 == llcolor4.mV[0] && val2 == llcolor4.mV[1] && val3 == llcolor4.mV[2] && vecMag == mag));
+ }
+
+ template<> template<>
+ void v4color_object::test<8>()
+ {
+ LLColor4 llcolor4;
+ ensure("1:isOpaque failed ",(1 == llcolor4.isOpaque()));
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 1.f;
+ llcolor4.setVec(r,g,b,a);
+ ensure("2:isOpaque failed ",(1 == llcolor4.isOpaque()));
+ a = 2.f;
+ llcolor4.setVec(r,g,b,a);
+ ensure("3:isOpaque failed ",(0 == llcolor4.isOpaque()));
+ }
+
+ template<> template<>
+ void v4color_object::test<9>()
+ {
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF;
+ LLColor4 llcolor4(r,g,b);
+ ensure("1:operator [] failed",( r == llcolor4[0]));
+ ensure("2:operator [] failed",( g == llcolor4[1]));
+ ensure("3:operator [] failed",( b == llcolor4[2]));
+
+ r = 0xA20, g = 0xFBFF, b = 0xFFF;
+ llcolor4.setVec(r,g,b);
+ F32 &ref1 = llcolor4[0];
+ ensure("4:operator [] failed",( ref1 == llcolor4[0]));
+ F32 &ref2 = llcolor4[1];
+ ensure("5:operator [] failed",( ref2 == llcolor4[1]));
+ F32 &ref3 = llcolor4[2];
+ ensure("6:operator [] failed",( ref3 == llcolor4[2]));
+ }
+
+ template<> template<>
+ void v4color_object::test<10>()
+ {
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF;
+ LLColor3 llcolor3(r,g,b);
+ LLColor4 llcolor4a,llcolor4b;
+ llcolor4a = llcolor3;
+ ensure("Operator=:Fail to initialize ", ((llcolor3.mV[0] == llcolor4a.mV[VX]) && (llcolor3.mV[1] == llcolor4a.mV[VY]) && (llcolor3.mV[2] == llcolor4a.mV[VZ])));
+ LLSD sd = llcolor4a.getValue();
+ llcolor4b = sd;
+ ensure_equals("Operator= LLSD:Fail ", llcolor4a, llcolor4b);
+ }
+
+ template<> template<>
+ void v4color_object::test<11>()
+ {
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF;
+ std::ostringstream stream1, stream2;
+ LLColor4 llcolor4a(r,g,b),llcolor4b;
+ stream1 << llcolor4a;
+ llcolor4b.setVec(r,g,b);
+ stream2 << llcolor4b;
+ ensure("operator << failed ", (stream1.str() == stream2.str()));
+ }
+
+ template<> template<>
+ void v4color_object::test<12>()
+ {
+ F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF;
+ F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF;
+ LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c;
+ llcolor4c = llcolor4b + llcolor4a;
+ ensure("operator+:Fail to Add the values ", (is_approx_equal(r1+r2,llcolor4c.mV[VX]) && is_approx_equal(g1+g2,llcolor4c.mV[VY]) && is_approx_equal(b1+b2,llcolor4c.mV[VZ])));
+
+ llcolor4b += llcolor4a;
+ ensure("operator+=:Fail to Add the values ", (is_approx_equal(r1+r2,llcolor4b.mV[VX]) && is_approx_equal(g1+g2,llcolor4b.mV[VY]) && is_approx_equal(b1+b2,llcolor4b.mV[VZ])));
+ }
+
+ template<> template<>
+ void v4color_object::test<13>()
+ {
+ F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF;
+ F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF;
+ LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c;
+ llcolor4c = llcolor4a - llcolor4b;
+ ensure("operator-:Fail to subtract the values ", (is_approx_equal(r1-r2,llcolor4c.mV[VX]) && is_approx_equal(g1-g2,llcolor4c.mV[VY]) && is_approx_equal(b1-b2,llcolor4c.mV[VZ])));
+
+ llcolor4a -= llcolor4b;
+ ensure("operator-=:Fail to subtract the values ", (is_approx_equal(r1-r2,llcolor4a.mV[VX]) && is_approx_equal(g1-g2,llcolor4a.mV[VY]) && is_approx_equal(b1-b2,llcolor4a.mV[VZ])));
+ }
+
+ template<> template<>
+ void v4color_object::test<14>()
+ {
+ F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF;
+ F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF;
+ LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c;
+ llcolor4c = llcolor4a * llcolor4b;
+ ensure("1:operator*:Fail to multiply the values", (is_approx_equal(r1*r2,llcolor4c.mV[VX]) && is_approx_equal(g1*g2,llcolor4c.mV[VY]) && is_approx_equal(b1*b2,llcolor4c.mV[VZ])));
+
+ F32 mulVal = 3.33f;
+ llcolor4c = llcolor4a * mulVal;
+ ensure("2:operator*:Fail ", (is_approx_equal(r1*mulVal,llcolor4c.mV[VX]) && is_approx_equal(g1*mulVal,llcolor4c.mV[VY]) && is_approx_equal(b1*mulVal,llcolor4c.mV[VZ])));
+ llcolor4c = mulVal * llcolor4a;
+ ensure("3:operator*:Fail to multiply the values", (is_approx_equal(r1*mulVal,llcolor4c.mV[VX]) && is_approx_equal(g1*mulVal,llcolor4c.mV[VY]) && is_approx_equal(b1*mulVal,llcolor4c.mV[VZ])));
+
+ llcolor4a *= mulVal;
+ ensure("4:operator*=:Fail to multiply the values ", (is_approx_equal(r1*mulVal,llcolor4a.mV[VX]) && is_approx_equal(g1*mulVal,llcolor4a.mV[VY]) && is_approx_equal(b1*mulVal,llcolor4a.mV[VZ])));
+
+ LLColor4 llcolor4d(r1,g1,b1),llcolor4e(r2,g2,b2);
+ llcolor4e *= llcolor4d;
+ ensure("5:operator*=:Fail to multiply the values ", (is_approx_equal(r1*r2,llcolor4e.mV[VX]) && is_approx_equal(g1*g2,llcolor4e.mV[VY]) && is_approx_equal(b1*b2,llcolor4e.mV[VZ])));
+ }
+
+ template<> template<>
+ void v4color_object::test<15>()
+ {
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 0x30;
+ F32 div = 12.345f;
+ LLColor4 llcolor4a(r,g,b,a),llcolor4b;
+ llcolor4b = llcolor4a % div;//chnage only alpha value nor r,g,b;
+ ensure("1operator%:Fail ", (is_approx_equal(r,llcolor4b.mV[VX]) && is_approx_equal(g,llcolor4b.mV[VY]) && is_approx_equal(b,llcolor4b.mV[VZ])&& is_approx_equal(div*a,llcolor4b.mV[VW])));
+
+ llcolor4b = div % llcolor4a;
+ ensure("2operator%:Fail ", (is_approx_equal(r,llcolor4b.mV[VX]) && is_approx_equal(g,llcolor4b.mV[VY]) && is_approx_equal(b,llcolor4b.mV[VZ])&& is_approx_equal(div*a,llcolor4b.mV[VW])));
+
+ llcolor4a %= div;
+ ensure("operator%=:Fail ", (is_approx_equal(a*div,llcolor4a.mV[VW])));
+ }
+
+ template<> template<>
+ void v4color_object::test<16>()
+ {
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 0x30;
+ LLColor4 llcolor4a(r,g,b,a),llcolor4b;
+ llcolor4b = llcolor4a;
+ ensure("1:operator== failed to ensure the equality ", (llcolor4b == llcolor4a));
+ F32 r1 = 0x2, g1 = 0xFF, b1 = 0xFA;
+ LLColor3 llcolor3(r1,g1,b1);
+ llcolor4b = llcolor3;
+ ensure("2:operator== failed to ensure the equality ", (llcolor4b == llcolor3));
+ ensure("2:operator!= failed to ensure the equality ", (llcolor4a != llcolor3));
+ }
+
+ template<> template<>
+ void v4color_object::test<17>()
+ {
+ F32 r = 0x20, g = 0xFFFF, b = 0xFF;
+ LLColor4 llcolor4a(r,g,b),llcolor4b;
+ LLColor3 llcolor3 = vec4to3(llcolor4a);
+ ensure("vec4to3:Fail to convert vec4 to vec3 ", (is_approx_equal(llcolor3.mV[VX],llcolor4a.mV[VX]) && is_approx_equal(llcolor3.mV[VY],llcolor4a.mV[VY]) && is_approx_equal(llcolor3.mV[VZ],llcolor4a.mV[VZ])));
+ llcolor4b = vec3to4(llcolor3);
+ ensure_equals("vec3to4:Fail to convert vec3 to vec4 ", llcolor4b, llcolor4a);
+ }
+
+ template<> template<>
+ void v4color_object::test<18>()
+ {
+ F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF, val = 0x20;
+ F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF;
+ LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c;
+ llcolor4c = lerp(llcolor4a,llcolor4b,val);
+ ensure("lerp:Fail ", (is_approx_equal(r1 + (r2 - r1)* val,llcolor4c.mV[VX]) && is_approx_equal(g1 + (g2 - g1)* val,llcolor4c.mV[VY]) && is_approx_equal(b1 + (b2 - b1)* val,llcolor4c.mV[VZ])));
+ }
+
+ template<> template<>
+ void v4color_object::test<19>()
+ {
+ F32 r = 12.0f, g = -2.3f, b = 1.32f, a = 5.0f;
+ LLColor4 llcolor4a(r,g,b,a),llcolor4b;
+ const char *color = "red";
+ LLColor4::parseColor(color, &llcolor4b);
+ ensure_equals("1:parseColor() failed to parse the color value ", llcolor4b, LLColor4::red);
+
+ color = "12.0, -2.3, 1.32, 5.0";
+ LLColor4::parseColor(color, &llcolor4b);
+ llcolor4a = llcolor4a * (1.f / 255.f);
+ ensure_equals("2:parseColor() failed to parse the color value ", llcolor4a,llcolor4b);
+
+ color = "yellow5";
+ llcolor4a.setVec(r,g,b);
+ LLColor4::parseColor(color, &llcolor4a);
+ ensure_equals("3:parseColor() failed to parse the color value ", llcolor4a, LLColor4::yellow5);
+ }
+
+ template<> template<>
+ void v4color_object::test<20>()
+ {
+ F32 r = 12.0f, g = -2.3f, b = 1.32f, a = 5.0f;
+ LLColor4 llcolor4a(r,g,b,a),llcolor4b;
+ const char *color = "12.0, -2.3, 1.32, 5.0";
+ LLColor4::parseColor4(color, &llcolor4b);
+ ensure_equals("parseColor4() failed to parse the color value ", llcolor4a, llcolor4b);
+ }
+}
diff --git a/linden/indra/test/v4coloru_tut.cpp b/linden/indra/test/v4coloru_tut.cpp
new file mode 100644
index 0000000..f671cf1
--- /dev/null
+++ b/linden/indra/test/v4coloru_tut.cpp
@@ -0,0 +1,337 @@
+/**
+ * @file v4coloru_tut.cpp
+ * @author Adroit
+ * @date 2007-03
+ * @brief v4coloru test cases.
+ *
+ * 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
+#include "lltut.h"
+#include "linden_common.h"
+#include "llsd.h"
+#include "v4coloru.h"
+
+
+namespace tut
+{
+ struct v4coloru_data
+ {
+ };
+ typedef test_group v4coloru_test;
+ typedef v4coloru_test::object v4coloru_object;
+ tut::v4coloru_test v4coloru_testcase("v4coloru");
+
+ template<> template<>
+ void v4coloru_object::test<1>()
+ {
+ LLColor4U llcolor4u;
+ ensure("1:LLColor4u:Fail to initialize ", ((0 == llcolor4u.mV[VX]) && (0 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
+
+ U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
+ LLColor4U llcolor4u1(r,g,b);
+ ensure("2:LLColor4u:Fail to initialize ", ((r == llcolor4u1.mV[VX]) && (g == llcolor4u1.mV[VY]) && (b == llcolor4u1.mV[VZ])&& (255 == llcolor4u1.mV[VW])));
+
+ LLColor4U llcolor4u2(r,g,b,a);
+ ensure("3:LLColor4u:Fail to initialize ", ((r == llcolor4u2.mV[VX]) && (g == llcolor4u2.mV[VY]) && (b == llcolor4u2.mV[VZ])&& (a == llcolor4u2.mV[VW])));
+
+ const U8 vec[4] = {0x12,0xFF,0xAF,0x23};
+ LLColor4U llcolor4u3(vec);
+ ensure("4:LLColor4u:Fail to initialize ", ((vec[0] == llcolor4u3.mV[VX]) && (vec[1] == llcolor4u3.mV[VY]) && (vec[2] == llcolor4u3.mV[VZ])&& (vec[3] == llcolor4u3.mV[VW])));
+
+ LLSD sd = llcolor4u3.getValue();
+ LLColor4U llcolor4u4(sd);
+ ensure_equals("5:LLColor4u (LLSD) Failed ", llcolor4u4, llcolor4u3);
+ }
+
+ template<> template<>
+ void v4coloru_object::test<2>()
+ {
+ LLColor4U llcolor4ua(1, 2, 3, 4);
+ LLSD sd = llcolor4ua.getValue();
+ LLColor4U llcolor4u;
+ llcolor4u.setValue(sd);
+ ensure_equals("setValue(LLSD)/getValue Failed ", llcolor4u, llcolor4ua);
+ }
+
+ template<> template<>
+ void v4coloru_object::test<3>()
+ {
+ U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
+ LLColor4U llcolor4u(r,g,b,a);
+ llcolor4u.setToBlack();
+ ensure("setToBlack:Fail to set black ", ((0 == llcolor4u.mV[VX]) && (0 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
+
+ llcolor4u.setToWhite();
+ ensure("setToWhite:Fail to white ", ((255 == llcolor4u.mV[VX]) && (255 == llcolor4u.mV[VY]) && (255 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<4>()
+ {
+ U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
+ LLColor4U llcolor4ua(r,g,b,a);
+ LLSD sd = llcolor4ua.getValue();
+ LLColor4U llcolor4u = sd;
+ ensure_equals("Operator=(LLSD) Failed ", llcolor4u, llcolor4ua);
+ }
+
+ template<> template<>
+ void v4coloru_object::test<5>()
+ {
+ U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
+ LLColor4U llcolor4u;
+ llcolor4u.setVec(r,g,b,a);
+ ensure("1:setVec:Fail to set the values ", ((r == llcolor4u.mV[VX]) && (g == llcolor4u.mV[VY]) && (b == llcolor4u.mV[VZ])&& (a == llcolor4u.mV[VW])));
+
+ llcolor4u.setToBlack();
+ llcolor4u.setVec(r,g,b);
+ ensure("2:setVec:Fail to set the values ", ((r == llcolor4u.mV[VX]) && (g == llcolor4u.mV[VY]) && (b == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
+
+ LLColor4U llcolor4u1;
+ llcolor4u1.setVec(llcolor4u);
+ ensure_equals("3:setVec:Fail to set the values ", llcolor4u1,llcolor4u);
+
+ const U8 vec[4] = {0x12,0xFF,0xAF,0x23};
+ LLColor4U llcolor4u2;
+ llcolor4u2.setVec(vec);
+ ensure("4:setVec:Fail to set the values ", ((vec[0] == llcolor4u2.mV[VX]) && (vec[1] == llcolor4u2.mV[VY]) && (vec[2] == llcolor4u2.mV[VZ])&& (vec[3] == llcolor4u2.mV[VW])));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<6>()
+ {
+ U8 alpha = 0x12;
+ LLColor4U llcolor4u;
+ llcolor4u.setAlpha(alpha);
+ ensure("setAlpha:Fail to set alpha value ", (alpha == llcolor4u.mV[VW]));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<7>()
+ {
+ U8 r = 0x12, g = 0xFF, b = 0xAF;
+ LLColor4U llcolor4u(r,g,b);
+ ensure("magVecSquared:Fail ", is_approx_equal(llcolor4u.magVecSquared(), (F32)(r*r + g*g + b*b)));
+ ensure("magVec:Fail ", is_approx_equal(llcolor4u.magVec(), fsqrtf(r*r + g*g + b*b)));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<8>()
+ {
+ U8 r = 0x12, g = 0xFF, b = 0xAF;
+ std::ostringstream stream1, stream2;
+ LLColor4U llcolor4u1(r,g,b),llcolor4u2;
+ stream1 << llcolor4u1;
+ llcolor4u2.setVec(r,g,b);
+ stream2 << llcolor4u2;
+ ensure("operator << failed ", (stream1.str() == stream2.str()));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<9>()
+ {
+ U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF;
+ U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B;
+ LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3;
+ llcolor4u3 = llcolor4u1 + llcolor4u2;
+ ensure_equals(
+ "1a.operator+:Fail to Add the values ",
+ llcolor4u3.mV[VX],
+ (U8)(r1+r2));
+ ensure_equals(
+ "1b.operator+:Fail to Add the values ",
+ llcolor4u3.mV[VY],
+ (U8)(g1+g2));
+ ensure_equals(
+ "1c.operator+:Fail to Add the values ",
+ llcolor4u3.mV[VZ],
+ (U8)(b1+b2));
+
+ llcolor4u2 += llcolor4u1;
+ ensure_equals(
+ "2a.operator+=:Fail to Add the values ",
+ llcolor4u2.mV[VX],
+ (U8)(r1+r2));
+ ensure_equals(
+ "2b.operator+=:Fail to Add the values ",
+ llcolor4u2.mV[VY],
+ (U8)(g1+g2));
+ ensure_equals(
+ "2c.operator+=:Fail to Add the values ",
+ llcolor4u2.mV[VZ],
+ (U8)(b1+b2));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<10>()
+ {
+ U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF;
+ U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B;
+ LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3;
+ llcolor4u3 = llcolor4u1 - llcolor4u2;
+ ensure_equals(
+ "1a. operator-:Fail to Add the values ",
+ llcolor4u3.mV[VX],
+ (U8)(r1-r2));
+ ensure_equals(
+ "1b. operator-:Fail to Add the values ",
+ llcolor4u3.mV[VY],
+ (U8)(g1-g2));
+ ensure_equals(
+ "1c. operator-:Fail to Add the values ",
+ llcolor4u3.mV[VZ],
+ (U8)(b1-b2));
+
+ llcolor4u1 -= llcolor4u2;
+ ensure_equals(
+ "2a. operator-=:Fail to Add the values ",
+ llcolor4u1.mV[VX],
+ (U8)(r1-r2));
+ ensure_equals(
+ "2b. operator-=:Fail to Add the values ",
+ llcolor4u1.mV[VY],
+ (U8)(g1-g2));
+ ensure_equals(
+ "2c. operator-=:Fail to Add the values ",
+ llcolor4u1.mV[VZ],
+ (U8)(b1-b2));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<11>()
+ {
+ U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF;
+ U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B;
+ LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3;
+ llcolor4u3 = llcolor4u1 * llcolor4u2;
+ ensure_equals(
+ "1a. operator*:Fail to multiply the values",
+ llcolor4u3.mV[VX],
+ (U8)(r1*r2));
+ ensure_equals(
+ "1b. operator*:Fail to multiply the values",
+ llcolor4u3.mV[VY],
+ (U8)(g1*g2));
+ ensure_equals(
+ "1c. operator*:Fail to multiply the values",
+ llcolor4u3.mV[VZ],
+ (U8)(b1*b2));
+
+ U8 mulVal = 123;
+ llcolor4u1 *= mulVal;
+ ensure_equals(
+ "2a. operator*=:Fail to multiply the values",
+ llcolor4u1.mV[VX],
+ (U8)(r1*mulVal));
+ ensure_equals(
+ "2b. operator*=:Fail to multiply the values",
+ llcolor4u1.mV[VY],
+ (U8)(g1*mulVal));
+ ensure_equals(
+ "2c. operator*=:Fail to multiply the values",
+ llcolor4u1.mV[VZ],
+ (U8)(b1*mulVal));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<12>()
+ {
+ U8 r = 0x12, g = 0xFF, b = 0xAF;
+ LLColor4U llcolor4u(r,g,b),llcolor4u1;
+ llcolor4u1 = llcolor4u;
+ ensure("operator== failed to ensure the equality ", (llcolor4u1 == llcolor4u));
+ llcolor4u1.setToBlack();
+ ensure("operator!= failed to ensure the equality ", (llcolor4u1 != llcolor4u));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<13>()
+ {
+ U8 r = 0x12, g = 0xFF, b = 0xAF, a = 12;
+ LLColor4U llcolor4u(r,g,b,a);
+ U8 modVal = 45;
+ llcolor4u %= modVal;
+ ensure_equals("operator%=:Fail ", llcolor4u.mV[VW], (U8)(a * modVal));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<14>()
+ {
+ U8 r = 0x12, g = 0xFF, b = 0xAF, a = 12;
+ LLColor4U llcolor4u1(r,g,b,a);
+ const char *color = "12, 23, 132, 50";
+ LLColor4U::parseColor4U(color, &llcolor4u1);
+ ensure("parseColor4U() failed to parse the color value ", ((12 == llcolor4u1.mV[VX]) && (23 == llcolor4u1.mV[VY]) && (132 == llcolor4u1.mV[VZ])&& (50 == llcolor4u1.mV[VW])));
+
+ color = "12, 23, 132";
+ ensure("2:parseColor4U() failed to parse the color value ", (FALSE == LLColor4U::parseColor4U(color, &llcolor4u1)));
+
+ color = "12";
+ ensure("2:parseColor4U() failed to parse the color value ", (FALSE == LLColor4U::parseColor4U(color, &llcolor4u1)));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<15>()
+ {
+ U8 r = 12, g = 123, b = 3, a = 2;
+ LLColor4U llcolor4u(r,g,b,a),llcolor4u1;
+ const F32 fVal = 3.f;
+ llcolor4u1 = llcolor4u.multAll(fVal);
+ ensure("multAll:Fail to multiply ", (((U8)llround(r * fVal) == llcolor4u1.mV[VX]) && (U8)llround(g * fVal) == llcolor4u1.mV[VY]
+ && ((U8)llround(b * fVal) == llcolor4u1.mV[VZ])&& ((U8)llround(a * fVal) == llcolor4u1.mV[VW])));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<16>()
+ {
+ U8 r1 = 12, g1 = 123, b1 = 3, a1 = 2;
+ U8 r2 = 23, g2 = 230, b2 = 124, a2 = 255;
+ LLColor4U llcolor4u(r1,g1,b1,a1),llcolor4u1(r2,g2,b2,a2);
+ llcolor4u1 = llcolor4u1.addClampMax(llcolor4u);
+ ensure("1:addClampMax():Fail to add the value ", ((r1+r2 == llcolor4u1.mV[VX]) && (255 == llcolor4u1.mV[VY]) && (b1+b2 == llcolor4u1.mV[VZ])&& (255 == llcolor4u1.mV[VW])));
+
+ r1 = 132, g1 = 3, b1 = 3, a1 = 2;
+ r2 = 123, g2 = 230, b2 = 154, a2 = 25;
+ LLColor4U llcolor4u2(r1,g1,b1,a1),llcolor4u3(r2,g2,b2,a2);
+ llcolor4u3 = llcolor4u3.addClampMax(llcolor4u2);
+ ensure("2:addClampMax():Fail to add the value ", ((255 == llcolor4u3.mV[VX]) && (g1+g2 == llcolor4u3.mV[VY]) && (b1+b2 == llcolor4u3.mV[VZ])&& (a1+a2 == llcolor4u3.mV[VW])));
+ }
+
+ template<> template<>
+ void v4coloru_object::test<17>()
+ {
+ F32 r = 23.f, g = 12.32f, b = -12.3f;
+ LLColor3 color3(r,g,b);
+ LLColor4U llcolor4u;
+ llcolor4u.setVecScaleClamp(color3);
+ const S32 MAX_COLOR = 255;
+ F32 color_scale_factor = MAX_COLOR/r;
+ S32 r2 = llround(r * color_scale_factor);
+ S32 g2 = llround(g * color_scale_factor);
+ ensure("setVecScaleClamp():Fail to add the value ", ((r2 == llcolor4u.mV[VX]) && (g2 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
+ }
+}
diff --git a/linden/indra/test/v4math_tut.cpp b/linden/indra/test/v4math_tut.cpp
new file mode 100644
index 0000000..055e825
--- /dev/null
+++ b/linden/indra/test/v4math_tut.cpp
@@ -0,0 +1,379 @@
+/**
+ * @file v4math_tut.cpp
+ * @author Adroit
+ * @date 2007-03
+ * @brief v4math test cases.
+ *
+ * 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
+#include "lltut.h"
+#include "linden_common.h"
+#include "llquaternion.h"
+#include "llsd.h"
+#include "m4math.h"
+#include "v4math.h"
+
+namespace tut
+{
+ struct v4math_data
+ {
+ };
+ typedef test_group v4math_test;
+ typedef v4math_test::object v4math_object;
+ tut::v4math_test v4math_testcase("v4math");
+
+ template<> template<>
+ void v4math_object::test<1>()
+ {
+ LLVector4 vec4;
+ ensure("1:LLVector4:Fail to initialize " ,((0 == vec4.mV[VX]) && (0 == vec4.mV[VY]) && (0 == vec4.mV[VZ])&& (1.0f == vec4.mV[VW])));
+ F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f;
+ LLVector4 vec4a(x,y,z);
+ ensure("2:LLVector4:Fail to initialize " ,((x == vec4a.mV[VX]) && (y == vec4a.mV[VY]) && (z == vec4a.mV[VZ])&& (1.0f == vec4a.mV[VW])));
+ LLVector4 vec4b(x,y,z,w);
+ ensure("3:LLVector4:Fail to initialize " ,((x == vec4b.mV[VX]) && (y == vec4b.mV[VY]) && (z == vec4b.mV[VZ])&& (w == vec4b.mV[VW])));
+ const F32 vec[4] = {.112f ,23.2f, -4.2f, -.0001f};
+ LLVector4 vec4c(vec);
+ ensure("4:LLVector4:Fail to initialize " ,((vec[0] == vec4c.mV[VX]) && (vec[1] == vec4c.mV[VY]) && (vec[2] == vec4c.mV[VZ])&& (vec[3] == vec4c.mV[VW])));
+ LLVector3 vec3(-2.23f,1.01f,42.3f);
+ LLVector4 vec4d(vec3);
+ ensure("5:LLVector4:Fail to initialize " ,((vec3.mV[VX] == vec4d.mV[VX]) && (vec3.mV[VY] == vec4d.mV[VY]) && (vec3.mV[VZ] == vec4d.mV[VZ])&& (1.f == vec4d.mV[VW])));
+ F32 w1 = -.234f;
+ LLVector4 vec4e(vec3,w1);
+ ensure("6:LLVector4:Fail to initialize " ,((vec3.mV[VX] == vec4e.mV[VX]) && (vec3.mV[VY] == vec4e.mV[VY]) && (vec3.mV[VZ] == vec4e.mV[VZ])&& (w1 == vec4e.mV[VW])));
+ }
+
+ template<> template<>
+ void v4math_object::test<2>()
+ {
+ F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f;
+ LLVector4 vec4;
+ vec4.setVec(x,y,z);
+ ensure("1:setVec:Fail to initialize " ,((x == vec4.mV[VX]) && (y == vec4.mV[VY]) && (z == vec4.mV[VZ])&& (1.0f == vec4.mV[VW])));
+ vec4.clearVec();
+ ensure("2:clearVec:Fail " ,((0 == vec4.mV[VX]) && (0 == vec4.mV[VY]) && (0 == vec4.mV[VZ])&& (1.0f == vec4.mV[VW])));
+ vec4.setVec(x,y,z,w);
+ ensure("3:setVec:Fail to initialize " ,((x == vec4.mV[VX]) && (y == vec4.mV[VY]) && (z == vec4.mV[VZ])&& (w == vec4.mV[VW])));
+ vec4.zeroVec();
+ ensure("4:zeroVec:Fail " ,((0 == vec4.mV[VX]) && (0 == vec4.mV[VY]) && (0 == vec4.mV[VZ])&& (0 == vec4.mV[VW])));
+ LLVector3 vec3(-2.23f,1.01f,42.3f);
+ vec4.clearVec();
+ vec4.setVec(vec3);
+ ensure("5:setVec:Fail to initialize " ,((vec3.mV[VX] == vec4.mV[VX]) && (vec3.mV[VY] == vec4.mV[VY]) && (vec3.mV[VZ] == vec4.mV[VZ])&& (1.f == vec4.mV[VW])));
+ F32 w1 = -.234f;
+ vec4.zeroVec();
+ vec4.setVec(vec3,w1);
+ ensure("6:setVec:Fail to initialize " ,((vec3.mV[VX] == vec4.mV[VX]) && (vec3.mV[VY] == vec4.mV[VY]) && (vec3.mV[VZ] == vec4.mV[VZ])&& (w1 == vec4.mV[VW])));
+ const F32 vec[4] = {.112f ,23.2f, -4.2f, -.0001f};
+ LLVector4 vec4a;
+ vec4a.setVec(vec);
+ ensure("7:setVec:Fail to initialize " ,((vec[0] == vec4a.mV[VX]) && (vec[1] == vec4a.mV[VY]) && (vec[2] == vec4a.mV[VZ])&& (vec[3] == vec4a.mV[VW])));
+ }
+
+ template<> template<>
+ void v4math_object::test<3>()
+ {
+ F32 x = 10.f, y = -2.3f, z = -.023f;
+ LLVector4 vec4(x,y,z);
+ ensure("magVec:Fail ", is_approx_equal(vec4.magVec(), fsqrtf(x*x + y*y + z*z)));
+ ensure("magVecSquared:Fail ", is_approx_equal(vec4.magVecSquared(), (x*x + y*y + z*z)));
+ }
+
+ template<> template<>
+ void v4math_object::test<4>()
+ {
+ F32 x = 10.f, y = -2.3f, z = -.023f;
+ LLVector4 vec4(x,y,z);
+ F32 mag = vec4.normVec();
+ mag = 1.f/ mag;
+ ensure("1:normVec: Fail " ,is_approx_equal(mag*x,vec4.mV[VX]) && is_approx_equal(mag*y, vec4.mV[VY])&& is_approx_equal(mag*z, vec4.mV[VZ]));
+ x = 0.000000001f, y = 0.000000001f, z = 0.000000001f;
+ vec4.clearVec();
+ vec4.setVec(x,y,z);
+ mag = vec4.normVec();
+ ensure("2:normVec: Fail " ,is_approx_equal(mag*x,vec4.mV[VX]) && is_approx_equal(mag*y, vec4.mV[VY])&& is_approx_equal(mag*z, vec4.mV[VZ]));
+ }
+
+ template<> template<>
+ void v4math_object::test<5>()
+ {
+ F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f;
+ LLVector4 vec4(x,y,z,w);
+ vec4.abs();
+ ensure("abs:Fail " ,((x == vec4.mV[VX]) && (-y == vec4.mV[VY]) && (-z == vec4.mV[VZ])&& (-w == vec4.mV[VW])));
+ vec4.clearVec();
+ ensure("isExactlyClear:Fail " ,(TRUE == vec4.isExactlyClear()));
+ vec4.zeroVec();
+ ensure("isExactlyZero:Fail " ,(TRUE == vec4.isExactlyZero()));
+ }
+
+ template<> template<>
+ void v4math_object::test<6>()
+ {
+ F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f;
+ LLVector4 vec4(x,y,z,w),vec4a;
+ vec4a = vec4.scaleVec(vec4);
+ ensure("scaleVec:Fail " ,(is_approx_equal(x*x, vec4a.mV[VX]) && is_approx_equal(y*y, vec4a.mV[VY]) && is_approx_equal(z*z, vec4a.mV[VZ])&& is_approx_equal(w*w, vec4a.mV[VW])));
+ }
+
+ template<> template<>
+ void v4math_object::test<7>()
+ {
+ F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f;
+ LLVector4 vec4(x,y,z,w);
+ ensure("1:operator [] failed " ,( x == vec4[0]));
+ ensure("2:operator [] failed " ,( y == vec4[1]));
+ ensure("3:operator [] failed " ,( z == vec4[2]));
+ ensure("4:operator [] failed " ,( w == vec4[3]));
+ x = 23.f, y = -.2361f, z = 3.25;
+ vec4.setVec(x,y,z);
+ F32 &ref1 = vec4[0];
+ ensure("5:operator [] failed " ,( ref1 == vec4[0]));
+ F32 &ref2 = vec4[1];
+ ensure("6:operator [] failed " ,( ref2 == vec4[1]));
+ F32 &ref3 = vec4[2];
+ ensure("7:operator [] failed " ,( ref3 == vec4[2]));
+ F32 &ref4 = vec4[3];
+ ensure("8:operator [] failed " ,( ref4 == vec4[3]));
+ }
+
+ template<> template<>
+ void v4math_object::test<8>()
+ {
+ F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f;
+ const F32 val[10] = {1.f,2.f,3.f,.34f,.1f,-.5f,2.f,1.23f,1.234f,.89f};
+ LLMatrix4 mat(val);
+ LLVector4 vec4(x,y,z,w),vec4a;
+ vec4.rotVec(mat);
+ vec4a.setVec(x,y,z,w);
+ vec4a.rotVec(mat);
+ ensure_equals("1:rotVec: Fail " ,vec4a, vec4);
+ F32 a = 2.32f, b = -23.2f, c = -34.1112f, d = 1.010112f;
+ LLQuaternion q(a,b,c,d);
+ LLVector4 vec4b(a,b,c,d),vec4c;
+ vec4b.rotVec(q);
+ vec4c.setVec(a, b, c, d);
+ vec4c.rotVec(q);
+ ensure_equals("2:rotVec: Fail " ,vec4b, vec4c);
+ }
+
+ template<> template<>
+ void v4math_object::test<9>()
+ {
+ F32 x = 10.f, y = -2.3f, z = -.023f, w = -2.0f;
+ LLVector4 vec4(x,y,z,w),vec4a;;
+ std::ostringstream stream1, stream2;
+ stream1 << vec4;
+ vec4a.setVec(x,y,z,w);
+ stream2 << vec4a;
+ ensure("operator << failed",(stream1.str() == stream2.str()));
+ }
+
+ template<> template<>
+ void v4math_object::test<10>()
+ {
+ F32 x1 = 1.f, y1 = 2.f, z1 = -1.1f, w1 = .23f;
+ F32 x2 = 1.2f, y2 = 2.5f, z2 = 1.f, w2 = 1.3f;
+ LLVector4 vec4(x1,y1,z1,w1),vec4a(x2,y2,z2,w2),vec4b;
+ vec4b = vec4a + vec4;
+ ensure("1:operator+:Fail to initialize " ,(is_approx_equal(x1+x2,vec4b.mV[VX]) && is_approx_equal(y1+y2,vec4b.mV[VY]) && is_approx_equal(z1+z2,vec4b.mV[VZ])));
+ x1 = -2.45f, y1 = 2.1f, z1 = 3.0f;
+ vec4.clearVec();
+ vec4a.clearVec();
+ vec4.setVec(x1,y1,z1);
+ vec4a +=vec4;
+ ensure_equals("2:operator+=: Fail to initialize", vec4a,vec4);
+ vec4a += vec4;
+ ensure("3:operator+=:Fail to initialize " ,(is_approx_equal(2*x1,vec4a.mV[VX]) && is_approx_equal(2*y1,vec4a.mV[VY]) && is_approx_equal(2*z1,vec4a.mV[VZ])));
+ }
+ template<> template<>
+ void v4math_object::test<11>()
+ {
+ F32 x1 = 1.f, y1 = 2.f, z1 = -1.1f, w1 = .23f;
+ F32 x2 = 1.2f, y2 = 2.5f, z2 = 1.f, w2 = 1.3f;
+ LLVector4 vec4(x1,y1,z1,w1),vec4a(x2,y2,z2,w2),vec4b;
+ vec4b = vec4a - vec4;
+ ensure("1:operator-:Fail to initialize " ,(is_approx_equal(x2-x1,vec4b.mV[VX]) && is_approx_equal(y2-y1,vec4b.mV[VY]) && is_approx_equal(z2-z1,vec4b.mV[VZ])));
+ x1 = -2.45f, y1 = 2.1f, z1 = 3.0f;
+ vec4.clearVec();
+ vec4a.clearVec();
+ vec4.setVec(x1,y1,z1);
+ vec4a -=vec4;
+ ensure_equals("2:operator-=: Fail to initialize" , vec4a,-vec4);
+ vec4a -=vec4;
+ ensure("3:operator-=:Fail to initialize " ,(is_approx_equal(-2*x1,vec4a.mV[VX]) && is_approx_equal(-2*y1,vec4a.mV[VY]) && is_approx_equal(-2*z1,vec4a.mV[VZ])));
+ }
+
+ template<> template<>
+ void v4math_object::test<12>()
+ {
+ F32 x1 = 1.f, y1 = 2.f, z1 = -1.1f;
+ F32 x2 = 1.2f, y2 = 2.5f, z2 = 1.f;
+ LLVector4 vec4(x1,y1,z1),vec4a(x2,y2,z2);
+ F32 res = vec4 * vec4a;
+ ensure("1:operator* failed " ,is_approx_equal(res, x1*x2 + y1*y2 + z1*z2));
+ vec4a.clearVec();
+ F32 mulVal = 4.2f;
+ vec4a = vec4 * mulVal;
+ ensure("2:operator* failed " ,is_approx_equal(x1*mulVal,vec4a.mV[VX]) && is_approx_equal(y1*mulVal, vec4a.mV[VY])&& is_approx_equal(z1*mulVal, vec4a.mV[VZ]));
+ vec4a.clearVec();
+ vec4a = mulVal * vec4 ;
+ ensure("3:operator* failed " ,is_approx_equal(x1*mulVal, vec4a.mV[VX]) && is_approx_equal(y1*mulVal, vec4a.mV[VY])&& is_approx_equal(z1*mulVal, vec4a.mV[VZ]));
+ vec4 *= mulVal;
+ ensure("4:operator*= failed " ,is_approx_equal(x1*mulVal, vec4.mV[VX]) && is_approx_equal(y1*mulVal, vec4.mV[VY])&& is_approx_equal(z1*mulVal, vec4.mV[VZ]));
+ }
+
+ template<> template<>
+ void v4math_object::test<13>()
+ {
+ F32 x1 = 1.f, y1 = 2.f, z1 = -1.1f;
+ F32 x2 = 1.2f, y2 = 2.5f, z2 = 1.f;
+ LLVector4 vec4(x1,y1,z1),vec4a(x2,y2,z2),vec4b;
+ vec4b = vec4 % vec4a;
+ ensure("1:operator% failed " ,is_approx_equal(y1*z2 - y2*z1, vec4b.mV[VX]) && is_approx_equal(z1*x2 -z2*x1, vec4b.mV[VY]) && is_approx_equal(x1*y2-x2*y1, vec4b.mV[VZ]));
+ vec4 %= vec4a;
+ ensure_equals("operator%= failed " ,vec4,vec4b);
+ }
+
+ template<> template<>
+ void v4math_object::test<14>()
+ {
+ F32 x = 1.f, y = 2.f, z = -1.1f,div = 4.2f;
+ F32 t = 1.f / div;
+ LLVector4 vec4(x,y,z), vec4a;
+ vec4a = vec4/div;
+ ensure("1:operator/ failed " ,is_approx_equal(x*t, vec4a.mV[VX]) && is_approx_equal(y*t, vec4a.mV[VY])&& is_approx_equal(z*t, vec4a.mV[VZ]));
+ x = 1.23f, y = 4.f, z = -2.32f;
+ vec4.clearVec();
+ vec4a.clearVec();
+ vec4.setVec(x,y,z);
+ vec4a = vec4/div;
+ ensure("2:operator/ failed " ,is_approx_equal(x*t, vec4a.mV[VX]) && is_approx_equal(y*t, vec4a.mV[VY])&& is_approx_equal(z*t, vec4a.mV[VZ]));
+ vec4 /= div;
+ ensure("3:operator/ failed " ,is_approx_equal(x*t, vec4.mV[VX]) && is_approx_equal(y*t, vec4.mV[VY])&& is_approx_equal(z*t, vec4.mV[VZ]));
+ }
+
+ template<> template<>
+ void v4math_object::test<15>()
+ {
+ F32 x = 1.f, y = 2.f, z = -1.1f;
+ LLVector4 vec4(x,y,z), vec4a;
+ ensure("operator!= failed " ,(vec4 != vec4a));
+ vec4a = vec4;
+ ensure("operator== failed " ,(vec4 ==vec4a));
+ }
+
+ template<> template<>
+ void v4math_object::test<16>()
+ {
+ F32 x = 1.f, y = 2.f, z = -1.1f;
+ LLVector4 vec4(x,y,z), vec4a;
+ vec4a = - vec4;
+ ensure("operator- failed " , (vec4 == - vec4a));
+ }
+
+ template<> template<>
+ void v4math_object::test<17>()
+ {
+ F32 x = 1.f, y = 2.f, z = -1.1f,epsilon = .23425f;
+ LLVector4 vec4(x,y,z), vec4a(x,y,z);
+ ensure("1:are_parallel: Fail " ,(TRUE == are_parallel(vec4a,vec4,epsilon)));
+ x = 21.f, y = 12.f, z = -123.1f;
+ vec4a.clearVec();
+ vec4a.setVec(x,y,z);
+ ensure("2:are_parallel: Fail " ,(FALSE == are_parallel(vec4a,vec4,epsilon)));
+ }
+
+ template<> template<>
+ void v4math_object::test<18>()
+ {
+ F32 x = 1.f, y = 2.f, z = -1.1f;
+ F32 angle1, angle2;
+ LLVector4 vec4(x,y,z), vec4a(x,y,z);
+ angle1 = angle_between(vec4, vec4a);
+ vec4.normVec();
+ vec4a.normVec();
+ angle2 = acos(vec4 * vec4a);
+ ensure_approximately_equals("1:angle_between: Fail " ,angle1,angle2,8);
+ F32 x1 = 21.f, y1 = 2.23f, z1 = -1.1f;
+ LLVector4 vec4b(x,y,z), vec4c(x1,y1,z1);
+ angle1 = angle_between(vec4b, vec4c);
+ vec4b.normVec();
+ vec4c.normVec();
+ angle2 = acos(vec4b * vec4c);
+ ensure_approximately_equals("2:angle_between: Fail " ,angle1,angle2,8);
+ }
+
+ template<> template<>
+ void v4math_object::test<19>()
+ {
+ F32 x1 =-2.3f, y1 = 2.f,z1 = 1.2f, x2 = 1.3f, y2 = 1.f, z2 = 1.f;
+ F32 val1,val2;
+ LLVector4 vec4(x1,y1,z1),vec4a(x2,y2,z2);
+ val1 = dist_vec(vec4,vec4a);
+ val2 = fsqrtf((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2));
+ ensure_equals("dist_vec: Fail ",val2, val1);
+ val1 = dist_vec_squared(vec4,vec4a);
+ val2 =((x1 - x2)*(x1 - x2) + (y1 - y2)* (y1 - y2) + (z1 - z2)* (z1 -z2));
+ ensure_equals("dist_vec_squared: Fail ",val2, val1);
+ }
+
+ template<> template<>
+ void v4math_object::test<20>()
+ {
+ F32 x1 =-2.3f, y1 = 2.f,z1 = 1.2f, w1 = -.23f, x2 = 1.3f, y2 = 1.f, z2 = 1.f,w2 = .12f;
+ F32 val = 2.3f,val1,val2,val3,val4;
+ LLVector4 vec4(x1,y1,z1,w1),vec4a(x2,y2,z2,w2);
+ val1 = x1 + (x2 - x1)* val;
+ val2 = y1 + (y2 - y1)* val;
+ val3 = z1 + (z2 - z1)* val;
+ val4 = w1 + (w2 - w1)* val;
+ LLVector4 vec4b = lerp(vec4,vec4a,val);
+ ensure("lerp failed", ((val1 ==vec4b.mV[VX])&& (val2 ==vec4b.mV[VY]) && (val3 ==vec4b.mV[VZ])&& (val4 ==vec4b.mV[VW])));
+ }
+
+ template<> template<>
+ void v4math_object::test<21>()
+ {
+ F32 x = 1.f, y = 2.f, z = -1.1f;
+ LLVector4 vec4(x,y,z);
+ LLVector3 vec3 = vec4to3(vec4);
+ ensure("vec4to3 failed", ((x == vec3.mV[VX])&& (y == vec3.mV[VY]) && (z == vec3.mV[VZ])));
+ LLVector4 vec4a = vec3to4(vec3);
+ ensure_equals("vec3to4 failed",vec4a,vec4);
+ }
+
+ template<> template<>
+ void v4math_object::test<22>()
+ {
+ F32 x = 1.f, y = 2.f, z = -1.1f;
+ LLVector4 vec4(x,y,z);
+ LLSD llsd = vec4.getValue();
+ LLVector3 vec3(llsd);
+ LLVector4 vec4a = vec3to4(vec3);
+ ensure_equals("getValue failed",vec4a,vec4);
+ }
+}
diff --git a/linden/scripts/messages/message_template.msg b/linden/scripts/messages/message_template.msg
index 71bbb0e..13e1885 100644
--- a/linden/scripts/messages/message_template.msg
+++ b/linden/scripts/messages/message_template.msg
@@ -1,6 +1,16 @@
// Linden Lab development message templates
-version 1.053
+version 2.0
+
+// The Version 2.0 template requires preservation of message
+// numbers. Each message must be numbered relative to the
+// other messages of that type. The current highest number
+// for each type is listed below:
+// Low: 423
+// Medium: 18
+// High: 29
+// PLEASE UPDATE THIS WHEN YOU ADD A NEW MESSAGE!
+
// *************************************************************************
// Test Message
@@ -9,7 +19,7 @@ version 1.053
// Test Message
{
- TestMessage Low NotTrusted Zerocoded
+ TestMessage Low 1 NotTrusted Zerocoded
{
TestBlock1 Single
{ Test1 U32 }
@@ -30,16 +40,6 @@ version 1.053
// List fixed messages first
// *************************
-// This is the newly updated version of the message template checksum
-// request. The token is there so that the viewer can drop responses
-// that do not match the supplied token.
-{
- SecuredTemplateChecksumRequest Fixed 0xFFFFFFFA NotTrusted Unencoded
- {
- TokenBlock Single
- { Token LLUUID }
- }
-}
// Packet Ack - Ack a list of packets sent reliable
{
@@ -50,6 +50,7 @@ version 1.053
}
}
+
// OpenCircuit - Tells the recipient's messaging system to open the descibed circuit
{
OpenCircuit Fixed 0xFFFFFFFC NotTrusted Unencoded
@@ -60,37 +61,13 @@ version 1.053
}
}
+
// CloseCircuit - Tells the recipient's messaging system to close the descibed circuit
{
CloseCircuit Fixed 0xFFFFFFFD NotTrusted Unencoded
}
-// message template version check. Deprecated - the viewer should send a
-// SecuredTemplateChecksumRequest to prevent template checksum
-// injection with a bad checksum.
-{
- TemplateChecksumRequest Fixed 0xFFFFFFFE NotTrusted Unencoded
-}
-
-// message template version check
-{
- TemplateChecksumReply Fixed 0xFFFFFFFF NotTrusted Unencoded
- {
- DataBlock Single
- { Checksum U32 }
- { MajorVersion U8 }
- { MinorVersion U8 }
- { PatchVersion U8 }
- { ServerVersion U8 }
- { Flags U32 }
- }
- {
- TokenBlock Single
- { Token LLUUID }
- }
-}
-
// ******************
// End fixed messages
// ******************
@@ -99,7 +76,7 @@ version 1.053
// PingID is used to determine how backlogged the ping was that was
// returned (or how hosed the other side is)
{
- StartPingCheck High NotTrusted Unencoded
+ StartPingCheck High 1 NotTrusted Unencoded
{
PingID Single
{ PingID U8 }
@@ -110,7 +87,7 @@ version 1.053
// CompletePingCheck - used to measure circuit ping times
{
- CompletePingCheck High NotTrusted Unencoded
+ CompletePingCheck High 2 NotTrusted Unencoded
{
PingID Single
{ PingID U8 }
@@ -122,7 +99,7 @@ version 1.053
// AddCircuitCode - Tells the recipient's messaging system that this code
// is for a legal circuit
{
- AddCircuitCode Low Trusted Unencoded
+ AddCircuitCode Low 2 Trusted Unencoded
{
CircuitCode Single
{ Code U32 }
@@ -138,7 +115,7 @@ version 1.053
// id of the process, which every server will generate on startup and
// the viewer will be handed after login.
{
- UseCircuitCode Low NotTrusted Unencoded
+ UseCircuitCode Low 3 NotTrusted Unencoded
{
CircuitCode Single
{ Code U32 }
@@ -147,54 +124,6 @@ version 1.053
}
}
-// LogControl - This message allows us to remotely control the
-// runtime logging facilities of the error stream. This MUST match
-// the RelayLogControl message.
-// Level - DEBUG=0, INFO=1, WARN=2, FATAL=3 system displays level and greater
-// Mask - a bit mask. Set to 0xffff to display every type
-// Time - set to 1 to turn on timestamp, 0 to turn it off
-// Location - set to 1 to turn on file/line stamp, 0 to turn it off
-// RemoteInfos - set to 1 to log llinfo to the log server (in production)
-{
- LogControl Low Trusted Unencoded
- {
- Options Single
- { Level U8 }
- { Mask U32 }
- { Time BOOL }
- { Location BOOL }
- { RemoteInfos BOOL }
- }
-}
-
-// RelayLogControl - Just like log control, but relayed around the
-// server side to adjust the log level. This is in a separate message
-// because the handler is a bit different, only implmented on some
-// processes, and requires application level knowledge. This MUST match
-// the LogControl message.
-{
- RelayLogControl Low Trusted Unencoded
- {
- Options Single
- { Level U8 }
- { Mask U32 }
- { Time BOOL }
- { Location BOOL }
- { RemoteInfos BOOL }
- }
-}
-
-
-// LogMessages
-// Turns on or off message system logging
-{
- LogMessages Low Trusted Unencoded
- {
- Options Single
- { Enable BOOL } // BOOL
- }
-}
-
// *************************************************************************
// SpaceServer to Simulator Messages
@@ -202,7 +131,7 @@ version 1.053
// Neighbor List - Passed anytime neighbors change
{
- NeighborList High Trusted Unencoded
+ NeighborList High 3 Trusted Unencoded
{
NeighborBlock Multiple 4
{ IP IPADDR }
@@ -216,68 +145,11 @@ version 1.053
}
-// Simulator Assignment - Tells a simulator where it is and who it's
-// neighbors are
-{
- SimulatorAssign Low Trusted Zerocoded
- {
- RegionInfo Single
- { GridsPerEdge S32 }
- { MetersPerGrid F32 }
- { Handle U64 }
- { UsecSinceStart U64 }
- { SecPerDay U32 }
- { SecPerYear U32 }
- { SunDirection LLVector3 }
- { SunAngVelocity LLVector3 }
- { IP IPADDR }
- { Port IPPORT }
- }
- {
- NeighborBlock Multiple 4
- { IP IPADDR }
- { Port IPPORT }
- { PublicIP IPADDR }
- { PublicPort IPPORT }
- { Name Variable 1 } // string
- { SimAccess U8 }
- }
-}
-
-// SpaceServerSimulatorTimeMessage - Allows simulator to resynch to world time
-{
- SpaceServerSimulatorTimeMessage Low Trusted Unencoded
- {
- TimeInfo Single
- { UsecSinceStart U64 }
- { SecPerDay U32 }
- { SecPerYear U32 }
- { SunDirection LLVector3 }
- { SunPhase F32 }
- { SunAngVelocity LLVector3 }
- }
-}
-
-// ClosestSimulator - Passes the closest simulator back to a simulator
-{
- ClosestSimulator Medium Trusted Unencoded
- {
- SimulatorBlock Single
- { IP IPADDR }
- { Port IPPORT }
- { Handle U64 }
- }
- {
- Viewer Single
- { ID LLUUID }
- }
-}
-
// AvatarTextureUpdate
// simulator -> dataserver
// reliable
{
- AvatarTextureUpdate Low Trusted Zerocoded
+ AvatarTextureUpdate Low 4 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -300,7 +172,7 @@ version 1.053
// simulator -> dataserver
// reliable
{
- SimulatorMapUpdate Low Trusted Unencoded
+ SimulatorMapUpdate Low 5 Trusted Unencoded
{
MapData Single
{ Flags U32 }
@@ -312,7 +184,7 @@ version 1.053
// reliable
// Used to upload a map image into the database (currently used only for Land For Sale)
{
- SimulatorSetMap Low Trusted Unencoded
+ SimulatorSetMap Low 6 Trusted Unencoded
{
MapData Single
{ RegionHandle U64 }
@@ -325,14 +197,14 @@ version 1.053
// spaceserver -> simulator
// reliable
{
- SubscribeLoad Low Trusted Unencoded
+ SubscribeLoad Low 7 Trusted Unencoded
}
// UnsubscribeLoad
// spaceserver -> simulator
// reliable
{
- UnsubscribeLoad Low Trusted Unencoded
+ UnsubscribeLoad Low 8 Trusted Unencoded
}
@@ -340,28 +212,10 @@ version 1.053
// Simulator to SpaceServer Messages
// ************************************************************************
-// Simulator Start - Tells spaceserver that simulator is online and wants to be
-// assigned.
-{
- SimulatorStart Low Trusted Unencoded
- {
- ControlPort Single
- { Port IPPORT }
- { PublicIP IPADDR }
- { PublicPort IPPORT }
- }
- {
- PositionSuggestion Single
- { Ignore BOOL } // if non-zero, SS should put it in the next available slot
- { GridX S32 }
- { GridY S32 }
- }
-}
-
// SimulatorReady - indicates the sim has finished loading its state
// and is ready to receive updates from others
{
- SimulatorReady Low Trusted Zerocoded
+ SimulatorReady Low 9 Trusted Zerocoded
{
SimulatorBlock Single
{ SimName Variable 1 }
@@ -382,7 +236,7 @@ version 1.053
// sim -> viewer
// reliable
{
- TelehubInfo Low Trusted Unencoded
+ TelehubInfo Low 10 Trusted Unencoded
{
TelehubBlock Single
{ ObjectID LLUUID } // null if no telehub
@@ -399,7 +253,7 @@ version 1.053
// SimulatorPresentAtLocation - indicates that the sim is present at a grid
// location and passes what it believes its neighbors are
{
- SimulatorPresentAtLocation Low Trusted Unencoded
+ SimulatorPresentAtLocation Low 11 Trusted Unencoded
{
SimulatorPublicHostBlock Single
{ Port IPPORT }
@@ -432,7 +286,7 @@ version 1.053
// simulator -> spaceserver
// reliable
{
- SimulatorLoad Low Trusted Unencoded
+ SimulatorLoad Low 12 Trusted Unencoded
{
SimulatorLoad Single
{ TimeDilation F32 }
@@ -449,7 +303,7 @@ version 1.053
// Simulator Shutdown Request - Tells spaceserver that a simulator is trying to shutdown
{
- SimulatorShutdownRequest Low Trusted Unencoded
+ SimulatorShutdownRequest Low 13 Trusted Unencoded
}
// ****************************************************************************
@@ -458,16 +312,16 @@ version 1.053
// sim -> dataserver
{
- RegionPresenceRequestByRegionID Low Trusted Unencoded
+ RegionPresenceRequestByRegionID Low 14 Trusted Unencoded
{
RegionData Variable
{ RegionID LLUUID }
}
}
-sim -> dataserver
+// sim -> dataserver
{
- RegionPresenceRequestByHandle Low Trusted Unencoded
+ RegionPresenceRequestByHandle Low 15 Trusted Unencoded
{
RegionData Variable
{ RegionHandle U64 }
@@ -476,7 +330,7 @@ sim -> dataserver
// dataserver -> sim
{
- RegionPresenceResponse Low Trusted Zerocoded
+ RegionPresenceResponse Low 16 Trusted Zerocoded
{
RegionData Variable
{ RegionID LLUUID }
@@ -488,59 +342,7 @@ sim -> dataserver
{ Message Variable 1 }
}
}
-
-// Record agent presence - this totally supercedes the TrackAgentSession
-// and ClearAgentSessions functionality
-{
- RecordAgentPresence Low Trusted Unencoded
- {
- RegionData Single
- { RegionID LLUUID }
- }
- {
- AgentData Variable
- { AgentID LLUUID }
- { SessionID LLUUID }
- { SecureSessionID LLUUID }
- { LocalX S16 }
- { LocalY S16 }
- { TimeToLive S32 } // in seconds
- { Status S32 }
- { EstateID U32 }
- }
-}
-
-// Erase a set of agent presence records. Useful during logout or kick.
-{
- EraseAgentPresence Low Trusted Unencoded
- {
- AgentData Variable
- { AgentID LLUUID }
- }
-}
-
-// request IP and port for agents
-{
- AgentPresenceRequest Low Trusted Unencoded
- {
- AgentData Variable
- { AgentID LLUUID }
- }
-}
-
-// response for agent locations
-{
- AgentPresenceResponse Low Trusted Unencoded
- {
- AgentData Variable
- { AgentID LLUUID }
- { RegionIP IPADDR }
- { RegionPort IPPORT }
- { ValidUntil F64 }
- { EstateID U32 }
- }
-}
-
+
// ****************************************************************************
// Simulator to dataserver messages
@@ -548,7 +350,7 @@ sim -> dataserver
// Updates SimName, EstateID and SimAccess using RegionID as a key
{
- UpdateSimulator Low Trusted Unencoded
+ UpdateSimulator Low 17 Trusted Unencoded
{
SimulatorInfo Single
{ RegionID LLUUID }
@@ -559,42 +361,9 @@ sim -> dataserver
}
-// The simulator sends out this message from time to time
-{
- TrackAgentSession Low Trusted Unencoded
- {
- RegionData Single
- { RegionX F32 }
- { RegionY F32 }
- { SpaceIP IPADDR }
- { EstateID U32 }
- { AgentCount U32 }
- }
- {
- SessionInfo Variable
- { SessionID LLUUID }
- { ViewerIP IPADDR }
- { ViewerPort IPPORT }
- { GlobalX F64 }
- { GlobalY F64 }
- }
-}
-
-
-// clear out sessions for this sim, because it's coming up or going down
-{
- ClearAgentSessions Low Trusted Unencoded
- {
- RegionInfo Single
- { RegionX U32 }
- { RegionY U32 }
- { SpaceIP IPADDR }
- }
-}
-
// record dwell time.
{
- LogDwellTime Low Trusted Unencoded
+ LogDwellTime Low 18 Trusted Unencoded
{
DwellInfo Single
{ AgentID LLUUID }
@@ -610,7 +379,7 @@ sim -> dataserver
// Disabled feature response message
{
- FeatureDisabled Low Trusted Unencoded
+ FeatureDisabled Low 19 Trusted Unencoded
{
FailureInfo Single
{ ErrorMessage Variable 1 }
@@ -624,7 +393,7 @@ sim -> dataserver
// from either the simulator or the dataserver, depending on how
// the transaction failed.
{
- LogFailedMoneyTransaction Low Trusted Unencoded
+ LogFailedMoneyTransaction Low 20 Trusted Unencoded
{
TransactionData Single
{ TransactionID LLUUID }
@@ -644,7 +413,7 @@ sim -> dataserver
// complaint/bug-report - sim -> dataserver. see UserReport for details.
// reliable
{
- UserReportInternal Low Trusted Zerocoded
+ UserReportInternal Low 21 Trusted Zerocoded
{
ReportData Single
{ ReportType U8 }
@@ -672,7 +441,7 @@ sim -> dataserver
// sim -> dataserver
// reliable
{
- SetSimStatusInDatabase Low Trusted Unencoded
+ SetSimStatusInDatabase Low 22 Trusted Unencoded
{
Data Single
{ RegionID LLUUID }
@@ -691,7 +460,7 @@ sim -> dataserver
// that a given simulator is present and valid for a set amount of
// time
{
- SetSimPresenceInDatabase Low Trusted Unencoded
+ SetSimPresenceInDatabase Low 23 Trusted Unencoded
{
SimData Single
{ RegionID LLUUID }
@@ -711,12 +480,12 @@ sim -> dataserver
// once we use local stats, this will include a region handle
{
- EconomyDataRequest Low NotTrusted Unencoded
+ EconomyDataRequest Low 24 NotTrusted Unencoded
}
// dataserver to sim, response w/ econ data
{
- EconomyData Low Trusted Zerocoded
+ EconomyData Low 25 Trusted Zerocoded
{
Info Single
{ ObjectCapacity S32 }
@@ -748,7 +517,7 @@ sim -> dataserver
// viewer -> sim -> data
// reliable
{
- AvatarPickerRequest Low NotTrusted Unencoded
+ AvatarPickerRequest Low 26 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -763,7 +532,7 @@ sim -> dataserver
// backend implementation which tracks if the user is a god.
{
- AvatarPickerRequestBackend Low Trusted Unencoded
+ AvatarPickerRequestBackend Low 27 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -781,7 +550,7 @@ sim -> dataserver
// List of names to select a person
// reliable
{
- AvatarPickerReply Low Trusted Unencoded
+ AvatarPickerReply Low 28 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -799,7 +568,7 @@ sim -> dataserver
// Used for getting a list of places for the group land panel
// and the user land holdings panel. NOT for the directory.
{
- PlacesQuery Low NotTrusted Zerocoded
+ PlacesQuery Low 29 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -825,7 +594,7 @@ sim -> dataserver
// global x,y,z. Otherwise, use center of the AABB.
// reliable
{
- PlacesReply Low Trusted Zerocoded
+ PlacesReply Low 30 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -856,7 +625,7 @@ sim -> dataserver
// DirFindQuery viewer->sim
// Message to start asking questions for the directory
{
- DirFindQuery Low NotTrusted Zerocoded
+ DirFindQuery Low 31 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -874,7 +643,7 @@ sim -> dataserver
// DirFindQueryBackend sim->data
// Trusted message generated by receipt of DirFindQuery to sim.
{
- DirFindQueryBackend Low Trusted Zerocoded
+ DirFindQueryBackend Low 32 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -894,7 +663,7 @@ sim -> dataserver
// DirPlacesQuery viewer->sim
// Used for the Find directory of places
{
- DirPlacesQuery Low NotTrusted Zerocoded
+ DirPlacesQuery Low 33 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -914,7 +683,7 @@ sim -> dataserver
// DirPlacesQueryBackend sim->dataserver
// Used for the Find directory of places.
{
- DirPlacesQueryBackend Low Trusted Zerocoded
+ DirPlacesQueryBackend Low 34 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -937,7 +706,7 @@ sim -> dataserver
// global x,y,z. Otherwise, use center of the AABB.
// reliable
{
- DirPlacesReply Low Trusted Zerocoded
+ DirPlacesReply Low 35 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -958,7 +727,7 @@ sim -> dataserver
// DirPeopleReply
{
- DirPeopleReply Low Trusted Zerocoded
+ DirPeopleReply Low 36 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -969,7 +738,7 @@ sim -> dataserver
}
{
QueryReplies Variable
- { AgentID LLUUID }
+ { AgentID LLUUID }
{ FirstName Variable 1 }
{ LastName Variable 1 }
{ Group Variable 1 }
@@ -980,7 +749,7 @@ sim -> dataserver
// DirEventsReply
{
- DirEventsReply Low Trusted Zerocoded
+ DirEventsReply Low 37 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1004,7 +773,7 @@ sim -> dataserver
// dataserver -> userserver -> viewer
// reliable
{
- DirGroupsReply Low Trusted Zerocoded
+ DirGroupsReply Low 38 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1026,7 +795,7 @@ sim -> dataserver
// DirClassifiedQuery viewer->sim
// reliable
{
- DirClassifiedQuery Low NotTrusted Zerocoded
+ DirClassifiedQuery Low 39 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1045,7 +814,7 @@ sim -> dataserver
// DirClassifiedQueryBackend sim->dataserver
// reliable
{
- DirClassifiedQueryBackend Low Trusted Zerocoded
+ DirClassifiedQueryBackend Low 40 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1065,7 +834,7 @@ sim -> dataserver
// DirClassifiedReply dataserver->sim->viewer
// reliable
{
- DirClassifiedReply Low Trusted Zerocoded
+ DirClassifiedReply Low 41 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1092,7 +861,7 @@ sim -> dataserver
// This fills in the tabs of the Classifieds panel.
// reliable
{
- AvatarClassifiedReply Low Trusted Unencoded
+ AvatarClassifiedReply Low 42 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1111,7 +880,7 @@ sim -> dataserver
// simulator -> dataserver
// reliable
{
- ClassifiedInfoRequest Low NotTrusted Zerocoded
+ ClassifiedInfoRequest Low 43 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1129,7 +898,7 @@ sim -> dataserver
// simulator -> viewer
// reliable
{
- ClassifiedInfoReply Low Trusted Unencoded
+ ClassifiedInfoReply Low 44 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1161,7 +930,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- ClassifiedInfoUpdate Low NotTrusted Unencoded
+ ClassifiedInfoUpdate Low 45 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1188,7 +957,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- ClassifiedDelete Low NotTrusted Unencoded
+ ClassifiedDelete Low 46 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1207,7 +976,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- ClassifiedGodDelete Low NotTrusted Unencoded
+ ClassifiedGodDelete Low 47 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1221,66 +990,11 @@ sim -> dataserver
}
-
-// DirPicksQuery viewer->sim
-// reliable
-{
- DirPicksQuery Low NotTrusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- QueryData Single
- { QueryID LLUUID }
- { QueryFlags U32 }
- }
-}
-
-// DirPicksQueryBackend sim->dataserver
-// reliable
-{
- DirPicksQueryBackend Low Trusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- }
- {
- QueryData Single
- { QueryID LLUUID }
- { QueryFlags U32 }
- { EstateID U32 }
- { Godlike BOOL }
- }
-}
-
-// DirPicksReply dataserver->sim->viewer
-// reliable
-{
- DirPicksReply Low Trusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- }
- {
- QueryData Single
- { QueryID LLUUID }
- }
- {
- QueryReplies Variable
- { PickID LLUUID }
- { Name Variable 1 }
- { Enabled BOOL }
- }
-}
-
-
// DirLandQuery viewer->sim
// Special query for the land for sale/auction panel.
// reliable
{
- DirLandQuery Low NotTrusted Zerocoded
+ DirLandQuery Low 48 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1300,7 +1014,7 @@ sim -> dataserver
// DirLandQueryBackend sim->dataserver
// Special query for the land for sale/auction panel.
{
- DirLandQueryBackend Low Trusted Zerocoded
+ DirLandQueryBackend Low 49 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1322,7 +1036,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- DirLandReply Low Trusted Zerocoded
+ DirLandReply Low 50 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1346,7 +1060,7 @@ sim -> dataserver
// Special query for the land for sale/auction panel.
// reliable
{
- DirPopularQuery Low NotTrusted Zerocoded
+ DirPopularQuery Low 51 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1363,7 +1077,7 @@ sim -> dataserver
// Special query for the land for sale/auction panel.
// reliable
{
- DirPopularQueryBackend Low Trusted Zerocoded
+ DirPopularQueryBackend Low 52 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1381,7 +1095,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- DirPopularReply Low Trusted Zerocoded
+ DirPopularReply Low 53 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1402,7 +1116,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- ParcelInfoRequest Low NotTrusted Unencoded
+ ParcelInfoRequest Low 54 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1418,7 +1132,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- ParcelInfoReply Low Trusted Zerocoded
+ ParcelInfoReply Low 55 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1448,7 +1162,7 @@ sim -> dataserver
// viewer -> simulator
// reliable
{
- ParcelObjectOwnersRequest Low NotTrusted Unencoded
+ ParcelObjectOwnersRequest Low 56 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1460,44 +1174,12 @@ sim -> dataserver
}
}
-// simulator -> dataserver
-// reliable
-{
- OnlineStatusRequest Low Trusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { QueryID LLUUID }
- { EstateID U32 }
- { Godlike BOOL }
- { SpaceIP IPADDR } // check online for right farm
- }
- {
- Data Variable
- { ID LLUUID }
- }
-}
-
-// dataserver -> simulator
-// reliable
-{
- OnlineStatusReply Low Trusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- { QueryID LLUUID }
- }
- {
- Data Variable
- { ID LLUUID } // only online agents are returned
- }
-}
// ParcelObjectOwnersReply
// simulator -> viewer
// reliable
{
- ParcelObjectOwnersReply Low Trusted Zerocoded
+ ParcelObjectOwnersReply Low 57 Trusted Zerocoded
{
Data Variable
{ OwnerID LLUUID }
@@ -1511,7 +1193,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- GroupNoticesListRequest Low NotTrusted Unencoded
+ GroupNoticesListRequest Low 58 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1527,7 +1209,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- GroupNoticesListReply Low Trusted Unencoded
+ GroupNoticesListReply Low 59 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1549,7 +1231,7 @@ sim -> dataserver
// simulator -> dataserver
// reliable
{
- GroupNoticeRequest Low NotTrusted Unencoded
+ GroupNoticeRequest Low 60 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1566,7 +1248,7 @@ sim -> dataserver
// simulator -> dataserver
// reliable
{
- GroupNoticeAdd Low Trusted Unencoded
+ GroupNoticeAdd Low 61 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1583,26 +1265,6 @@ sim -> dataserver
}
-// GroupNoticeDelete
-// Delete a group notice from the database.
-// viewer -> simulator -> dataserver
-// reliable
-{
- GroupNoticeDelete Low NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- Data Single
- { GroupNoticeID LLUUID }
- { GroupID LLUUID }
- }
-}
-
-
-
// ****************************************************************************
// Teleport messages
//
@@ -1625,7 +1287,7 @@ sim -> dataserver
// TeleportRequest
// viewer -> sim specifying exact teleport destination
{
- TeleportRequest Low NotTrusted Unencoded
+ TeleportRequest Low 62 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1642,7 +1304,7 @@ sim -> dataserver
// TeleportLocationRequest
// viewer -> sim specifying exact teleport destination
{
- TeleportLocationRequest Low NotTrusted Unencoded
+ TeleportLocationRequest Low 63 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1660,7 +1322,7 @@ sim -> dataserver
// sim -> viewer reply telling the viewer that we've successfully TP'd
// to somewhere else within the sim
{
- TeleportLocal Low Trusted Unencoded
+ TeleportLocal Low 64 Trusted Unencoded
{
Info Single
{ AgentID LLUUID }
@@ -1674,7 +1336,7 @@ sim -> dataserver
// TeleportLandmarkRequest viewer->sim
// teleport to landmark asset ID destination. use LLUUD::null for home.
{
- TeleportLandmarkRequest Low NotTrusted Zerocoded
+ TeleportLandmarkRequest Low 65 NotTrusted Zerocoded
{
Info Single
{ AgentID LLUUID }
@@ -1686,7 +1348,7 @@ sim -> dataserver
// TeleportProgress sim->viewer
// Tell the agent how the teleport is going.
{
- TeleportProgress Low Trusted Unencoded
+ TeleportProgress Low 66 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1701,7 +1363,7 @@ sim -> dataserver
// DataHomeLocationRequest sim->data
// Request
{
- DataHomeLocationRequest Low Trusted Zerocoded
+ DataHomeLocationRequest Low 67 Trusted Zerocoded
{
Info Single
{ AgentID LLUUID }
@@ -1712,7 +1374,7 @@ sim -> dataserver
// DataHomeLocationReply data->sim
// response is the location of agent home.
{
- DataHomeLocationReply Low Trusted Unencoded
+ DataHomeLocationReply Low 68 Trusted Unencoded
{
Info Single
{ AgentID LLUUID }
@@ -1722,48 +1384,12 @@ sim -> dataserver
}
}
-// SpaceLocationTeleportRequest sim->space
-// Reuqest for info about remote location
-{
- SpaceLocationTeleportRequest Low Trusted Unencoded
- {
- Info Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- { CircuitCode U32 }
- { RegionHandle U64 }
- { Position LLVector3 } // region
- { LookAt LLVector3 }
- { TravelAccess U8 }
- { ParentEstateID U32 }
- { TeleportFlags U32 }
- }
-}
-
-// SpaceLocationTeleportReply space->sim
-// with info about remote location
-{
- SpaceLocationTeleportReply Low Trusted Unencoded
- {
- Info Single
- { AgentID LLUUID }
- { LocationID U32 }
- { SimIP IPADDR }
- { SimPort IPPORT }
- { RegionHandle U64 }
- { Position LLVector3 } // region
- { LookAt LLVector3 }
- { SimName Variable 1 }
- { SimAccess U8 }
- { TeleportFlags U32 }
- }
-}
// TeleportFinish sim->viewer
// called when all of the information has been collected and readied for
// the agent.
{
- TeleportFinish Low Trusted Unencoded
+ TeleportFinish Low 69 Trusted Unencoded
{
Info Single
{ AgentID LLUUID }
@@ -1786,7 +1412,7 @@ sim -> dataserver
// packet is acked, the original instant message is finally forwarded to
// TargetID.
{
- StartLure Low NotTrusted Unencoded
+ StartLure Low 70 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1807,7 +1433,7 @@ sim -> dataserver
// Message from target of lure to begin the teleport process on the
// local simulator.
{
- TeleportLureRequest Low NotTrusted Unencoded
+ TeleportLureRequest Low 71 NotTrusted Unencoded
{
Info Single
{ AgentID LLUUID }
@@ -1820,7 +1446,7 @@ sim -> dataserver
// TeleportCancel viewer->sim
// reliable
{
- TeleportCancel Low NotTrusted Unencoded
+ TeleportCancel Low 72 NotTrusted Unencoded
{
Info Single
{ AgentID LLUUID }
@@ -1828,28 +1454,11 @@ sim -> dataserver
}
}
-// CompleteLure sim->space
-// message with final necessary info about accepted lure. The
-// spaceserver will reply with a SpaceLocationTeleportReply or
-// TeleportFailed and it becomes like any other teleport.
-{
- CompleteLure Low Trusted Unencoded
- {
- Info Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- { LureID LLUUID }
- { CircuitCode U32 }
- { TravelAccess U8 }
- { ParentEstateID U32 }
- { TeleportFlags U32 }
- }
-}
// TeleportStart sim->viewer
// announce a successful teleport request to the viewer.
{
- TeleportStart Low Trusted Unencoded
+ TeleportStart Low 73 Trusted Unencoded
{
Info Single
{ TeleportFlags U32 }
@@ -1859,7 +1468,7 @@ sim -> dataserver
// TeleportFailed somehwere->sim->viewer
// announce failure of teleport request
{
- TeleportFailed Low Trusted Unencoded
+ TeleportFailed Low 74 Trusted Unencoded
{
Info Single
{ AgentID LLUUID }
@@ -1867,41 +1476,6 @@ sim -> dataserver
}
}
-// ***************************************************************************
-// Leader Board messages
-// ***************************************************************************
-{
- LeaderBoardRequest Low NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- { Type S32 }
- }
-}
-
-{
- LeaderBoardData Low Trusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- }
- {
- BoardData Single
- { Type S32 }
- { MinPlace S32 }
- { MaxPlace S32 }
- { TimeString Variable 1 } // string
- }
- {
- Entry Variable
- { Sequence S32 }
- { Place S32 }
- { ID LLUUID }
- { Score S32 }
- { Name Fixed 32 } // only send 32 characters of the name, to fit in an MTU
- }
-}
// ***************************************************************************
// Viewer to Simulator Messages
@@ -1909,7 +1483,7 @@ sim -> dataserver
// Undo
{
- Undo Low NotTrusted Unencoded
+ Undo Low 75 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1925,7 +1499,7 @@ sim -> dataserver
// Redo
{
- Redo Low NotTrusted Unencoded
+ Redo Low 76 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1940,7 +1514,7 @@ sim -> dataserver
// UndoLand
{
- UndoLand Low NotTrusted Unencoded
+ UndoLand Low 77 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1949,19 +1523,9 @@ sim -> dataserver
}
-// RedoLand
-{
- RedoLand Low NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
-}
-
// AgentPause - viewer occasionally will block, inform simulator of this fact
{
- AgentPause Low NotTrusted Unencoded
+ AgentPause Low 78 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1972,7 +1536,7 @@ sim -> dataserver
// AgentResume - unblock the agent
{
- AgentResume Low NotTrusted Unencoded
+ AgentResume Low 79 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -1992,7 +1556,7 @@ sim -> dataserver
// Center is region local (JNC 8.16.2001)
// Camera center is region local (JNC 8.29.2001)
{
- AgentUpdate High NotTrusted Zerocoded
+ AgentUpdate High 4 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2015,7 +1579,7 @@ sim -> dataserver
// normal speech, shout, whisper.
// with the specified radius
{
- ChatFromViewer Low NotTrusted Zerocoded
+ ChatFromViewer Low 80 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2032,7 +1596,7 @@ sim -> dataserver
// AgentThrottle
{
- AgentThrottle Low NotTrusted Zerocoded
+ AgentThrottle Low 81 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2049,7 +1613,7 @@ sim -> dataserver
// AgentFOV - Update to agent's field of view, angle is vertical, single F32 float in radians
{
- AgentFOV Low NotTrusted Unencoded
+ AgentFOV Low 82 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2067,7 +1631,7 @@ sim -> dataserver
// AgentHeightWidth - Update to height and aspect, sent as height/width to save space
// Usually sent when window resized or created
{
- AgentHeightWidth Low NotTrusted Unencoded
+ AgentHeightWidth Low 83 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2085,7 +1649,7 @@ sim -> dataserver
// AgentSetAppearance - Update to agent appearance
{
- AgentSetAppearance Low NotTrusted Zerocoded
+ AgentSetAppearance Low 84 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2111,7 +1675,7 @@ sim -> dataserver
// AgentAnimation - Update animation state
// viewer --> simulator
{
- AgentAnimation High NotTrusted Unencoded
+ AgentAnimation High 5 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2130,7 +1694,7 @@ sim -> dataserver
// AgentRequestSit - Try to sit on an object
{
- AgentRequestSit High NotTrusted Zerocoded
+ AgentRequestSit High 6 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2145,7 +1709,7 @@ sim -> dataserver
// AgentSit - Actually sit on object
{
- AgentSit High NotTrusted Unencoded
+ AgentSit High 7 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2153,21 +1717,10 @@ sim -> dataserver
}
}
-// AgentQuit - Sent by viewer when viewer exits normally
-// Fuse is used to allow Reset to be passed to neighbors
-// *NOTE: obsolete
-{
- AgentQuit Low NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
-}
// quit message sent between simulators
{
- AgentQuitCopy Low NotTrusted Unencoded
+ AgentQuitCopy Low 85 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2183,7 +1736,7 @@ sim -> dataserver
// Request Image - Sent by the viewer to request a specified image at a specified resolution
{
- RequestImage High NotTrusted Unencoded
+ RequestImage High 8 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2202,7 +1755,7 @@ sim -> dataserver
// ImageNotInDatabase
// Simulator informs viewer that a requsted image definitely does not exist in the asset database
{
- ImageNotInDatabase Low Trusted Unencoded
+ ImageNotInDatabase Low 86 Trusted Unencoded
{
ImageID Single
{ ID LLUUID }
@@ -2212,7 +1765,7 @@ sim -> dataserver
// RebakeAvatarTextures
// simulator -> viewer request when a temporary baked avatar texture is not found
{
- RebakeAvatarTextures Low Trusted Unencoded
+ RebakeAvatarTextures Low 87 Trusted Unencoded
{
TextureData Single
{ TextureID LLUUID }
@@ -2223,7 +1776,7 @@ sim -> dataserver
// SetAlwaysRun
// Lets the viewer choose between running and walking
{
- SetAlwaysRun Low NotTrusted Unencoded
+ SetAlwaysRun Low 88 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2245,7 +1798,7 @@ sim -> dataserver
//
// Data field is opaque type-specific data for this object
{
- ObjectAdd Medium NotTrusted Zerocoded
+ ObjectAdd Medium 1 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2294,7 +1847,7 @@ sim -> dataserver
// ObjectDelete
// viewer -> simulator
{
- ObjectDelete Low NotTrusted Zerocoded
+ ObjectDelete Low 89 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2312,7 +1865,7 @@ sim -> dataserver
// viewer -> simulator
// Makes a copy of a set of objects, offset by a given amount
{
- ObjectDuplicate Low NotTrusted Zerocoded
+ ObjectDuplicate Low 90 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2336,7 +1889,7 @@ sim -> dataserver
// Makes a copy of an object, using the add object raycast
// code to abut it to other objects.
{
- ObjectDuplicateOnRay Low NotTrusted Zerocoded
+ ObjectDuplicateOnRay Low 91 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2363,7 +1916,7 @@ sim -> dataserver
// updates position, rotation and scale in one message
// positions sent as region-local floats
{
- MultipleObjectUpdate Medium NotTrusted Zerocoded
+ MultipleObjectUpdate Medium 2 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2388,7 +1941,7 @@ sim -> dataserver
// CacheMissType 0 => full object (viewer doesn't have it)
// CacheMissType 1 => CRC mismatch only
{
- RequestMultipleObjects Medium NotTrusted Zerocoded
+ RequestMultipleObjects Medium 3 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2405,7 +1958,7 @@ sim -> dataserver
// ObjectPosition
// viewer -> simulator
{
- ObjectPosition Medium NotTrusted Zerocoded
+ ObjectPosition Medium 4 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2422,7 +1975,7 @@ sim -> dataserver
// ObjectScale
// viewer -> simulator
{
- ObjectScale Low NotTrusted Zerocoded
+ ObjectScale Low 92 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2439,7 +1992,7 @@ sim -> dataserver
// ObjectRotation
// viewer -> simulator
{
- ObjectRotation Low NotTrusted Zerocoded
+ ObjectRotation Low 93 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2456,7 +2009,7 @@ sim -> dataserver
// ObjectFlagUpdate
// viewer -> simulator
{
- ObjectFlagUpdate Low NotTrusted Zerocoded
+ ObjectFlagUpdate Low 94 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2473,7 +2026,7 @@ sim -> dataserver
// ObjectClickAction
// viewer -> simulator
{
- ObjectClickAction Low NotTrusted Zerocoded
+ ObjectClickAction Low 95 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2490,7 +2043,7 @@ sim -> dataserver
// ObjectImage
// viewer -> simulator
{
- ObjectImage Low NotTrusted Zerocoded
+ ObjectImage Low 96 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2506,7 +2059,7 @@ sim -> dataserver
{
- ObjectMaterial Low NotTrusted Zerocoded
+ ObjectMaterial Low 97 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2521,7 +2074,7 @@ sim -> dataserver
{
- ObjectShape Low NotTrusted Zerocoded
+ ObjectShape Low 98 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2552,7 +2105,7 @@ sim -> dataserver
}
{
- ObjectExtraParams Low NotTrusted Zerocoded
+ ObjectExtraParams Low 99 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2574,7 +2127,7 @@ sim -> dataserver
// TODO: Eliminate god-bit. Maybe not. God-bit is ok, because it's
// known on the server.
{
- ObjectOwner Low NotTrusted Zerocoded
+ ObjectOwner Low 100 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2596,7 +2149,7 @@ sim -> dataserver
// To make the object part of no group, set GroupID = LLUUID::null.
// This call only works if objectid.ownerid == agentid.
{
- ObjectGroup Low NotTrusted Zerocoded
+ ObjectGroup Low 101 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2611,7 +2164,7 @@ sim -> dataserver
// Attempt to buy an object. This will only pack root objects.
{
- ObjectBuy Low NotTrusted Zerocoded
+ ObjectBuy Low 102 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2632,7 +2185,7 @@ sim -> dataserver
// buy object inventory. If the transaction succeeds, it will add
// inventory to the agent, and potentially remove the original.
{
- BuyObjectInventory Low NotTrusted Zerocoded
+ BuyObjectInventory Low 103 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2649,7 +2202,7 @@ sim -> dataserver
// sim -> viewer
// Used to propperly handle buying asset containers
{
- DerezContainer Low Trusted Zerocoded
+ DerezContainer Low 104 Trusted Zerocoded
{
Data Single
{ ObjectID LLUUID }
@@ -2663,7 +2216,7 @@ sim -> dataserver
// If set is false, tries to turn off bits in mask.
// BUG: This just forces the permissions field.
{
- ObjectPermissions Low NotTrusted Zerocoded
+ ObjectPermissions Low 105 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2684,7 +2237,7 @@ sim -> dataserver
// set object sale information
{
- ObjectSaleInfo Low NotTrusted Zerocoded
+ ObjectSaleInfo Low 106 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2701,7 +2254,7 @@ sim -> dataserver
// set object names
{
- ObjectName Low NotTrusted Zerocoded
+ ObjectName Low 107 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2716,7 +2269,7 @@ sim -> dataserver
// set object descriptions
{
- ObjectDescription Low NotTrusted Zerocoded
+ ObjectDescription Low 108 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2731,7 +2284,7 @@ sim -> dataserver
// set object category
{
- ObjectCategory Low NotTrusted Zerocoded
+ ObjectCategory Low 109 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2748,7 +2301,7 @@ sim -> dataserver
// Variable object data because rectangular selection can
// generate a large list very quickly.
{
- ObjectSelect Low NotTrusted Zerocoded
+ ObjectSelect Low 110 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2764,7 +2317,7 @@ sim -> dataserver
// ObjectDeselect
{
- ObjectDeselect Low NotTrusted Zerocoded
+ ObjectDeselect Low 111 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2779,7 +2332,7 @@ sim -> dataserver
// ObjectAttach
{
- ObjectAttach Low NotTrusted Zerocoded
+ ObjectAttach Low 112 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2795,7 +2348,7 @@ sim -> dataserver
// ObjectDetach -- derezzes an attachment, marking its item in your inventory as not "(worn)"
{
- ObjectDetach Low NotTrusted Unencoded
+ ObjectDetach Low 113 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2810,7 +2363,7 @@ sim -> dataserver
// ObjectDrop -- drops an attachment from your avatar onto the ground
{
- ObjectDrop Low NotTrusted Unencoded
+ ObjectDrop Low 114 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2825,7 +2378,7 @@ sim -> dataserver
// ObjectLink
{
- ObjectLink Low NotTrusted Unencoded
+ ObjectLink Low 115 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2839,56 +2392,22 @@ sim -> dataserver
// ObjectDelink
{
- ObjectDelink Low NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- ObjectData Variable
- { ObjectLocalID U32 }
- }
-}
-
-// ObjectHinge
-{
- ObjectHinge Low NotTrusted Unencoded
+ ObjectDelink Low 116 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
{ SessionID LLUUID }
}
{
- JointType Single
- { Type U8 }
- }
- {
ObjectData Variable
{ ObjectLocalID U32 }
}
-
-}
-
-// ObjectDehinge
-{
- ObjectDehinge Low NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- ObjectData Variable
- { ObjectLocalID U32 }
- }
-
}
// ObjectGrab
{
- ObjectGrab Low NotTrusted Zerocoded
+ ObjectGrab Low 117 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2907,7 +2426,7 @@ sim -> dataserver
// TimeSinceLast could go to 1 byte, since capped
// at 100 on sim.
{
- ObjectGrabUpdate Low NotTrusted Zerocoded
+ ObjectGrabUpdate Low 118 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2925,7 +2444,7 @@ sim -> dataserver
// ObjectDeGrab
{
- ObjectDeGrab Low NotTrusted Unencoded
+ ObjectDeGrab Low 119 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2940,7 +2459,7 @@ sim -> dataserver
// ObjectSpinStart
{
- ObjectSpinStart Low NotTrusted Zerocoded
+ ObjectSpinStart Low 120 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2955,7 +2474,7 @@ sim -> dataserver
// ObjectSpinUpdate
{
- ObjectSpinUpdate Low NotTrusted Zerocoded
+ ObjectSpinUpdate Low 121 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2971,7 +2490,7 @@ sim -> dataserver
// ObjectSpinStop
{
- ObjectSpinStop Low NotTrusted Zerocoded
+ ObjectSpinStop Low 122 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2986,7 +2505,7 @@ sim -> dataserver
// Export selected objects
// viewer->sim
{
- ObjectExportSelected Low NotTrusted Zerocoded
+ ObjectExportSelected Low 123 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -2999,27 +2518,11 @@ sim -> dataserver
}
}
-// Import an object
-// viewer->sim
-{
- ObjectImport Low NotTrusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- { FolderID LLUUID }
- }
- {
- AssetData Single
- { FileID LLUUID 1 }
- { ObjectName Variable 1 }
- { Description Variable 1 }
- }
-}
// ModifyLand - sent to modify a piece of land on a simulator.
// viewer -> sim
{
- ModifyLand Low NotTrusted Zerocoded
+ ModifyLand Low 124 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3047,7 +2550,7 @@ sim -> dataserver
// viewer->sim
// requires administrative access
{
- VelocityInterpolateOn Low NotTrusted Unencoded
+ VelocityInterpolateOn Low 125 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3060,7 +2563,7 @@ sim -> dataserver
// viewer->sim
// requires administrative access
{
- VelocityInterpolateOff Low NotTrusted Unencoded
+ VelocityInterpolateOff Low 126 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3072,7 +2575,7 @@ sim -> dataserver
// viewer->sim
// requires administrative access
{
- StateSave Low NotTrusted Unencoded
+ StateSave Low 127 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3087,7 +2590,7 @@ sim -> dataserver
// ReportAutosaveCrash
// sim->launcher
{
- ReportAutosaveCrash Low NotTrusted Unencoded
+ ReportAutosaveCrash Low 128 NotTrusted Unencoded
{
AutosaveData Single
{ PID S32 }
@@ -3097,7 +2600,7 @@ sim -> dataserver
// SimWideDeletes
{
- SimWideDeletes Low NotTrusted Unencoded
+ SimWideDeletes Low 129 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3115,7 +2618,7 @@ sim -> dataserver
// Medium frequency because it is driven by mouse hovering over objects, which
// occurs at high rates.
{
- RequestObjectPropertiesFamily Medium NotTrusted Zerocoded
+ RequestObjectPropertiesFamily Medium 5 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3133,7 +2636,7 @@ sim -> dataserver
// coarse location update so that we know who you are tracking.
// To stop tracking - send a null uuid as the prey.
{
- TrackAgent Low NotTrusted Unencoded
+ TrackAgent Low 130 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3148,7 +2651,7 @@ sim -> dataserver
// end viewer to simulator section
{
- ViewerStats Low NotTrusted Zerocoded
+ ViewerStats Low 131 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3203,7 +2706,7 @@ sim -> dataserver
// ScriptAnswerYes
// reliable
{
- ScriptAnswerYes Low NotTrusted Unencoded
+ ScriptAnswerYes Low 132 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3221,7 +2724,7 @@ sim -> dataserver
// complaint/bug-report
// reliable
{
- UserReport Low NotTrusted Zerocoded
+ UserReport Low 133 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3252,7 +2755,7 @@ sim -> dataserver
// AlertMessage
// Specifies the text to be posted in an alert dialog
{
- AlertMessage Low Trusted Unencoded
+ AlertMessage Low 134 Trusted Unencoded
{
AlertData Single
{ Message Variable 1 }
@@ -3262,7 +2765,7 @@ sim -> dataserver
// Send an AlertMessage to the named agent.
// usually dataserver->simulator
{
- AgentAlertMessage Low Trusted Unencoded
+ AgentAlertMessage Low 135 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3278,7 +2781,7 @@ sim -> dataserver
// MeanCollisionAlert
// Specifies the text to be posted in an alert dialog
{
- MeanCollisionAlert Low Trusted Zerocoded
+ MeanCollisionAlert Low 136 Trusted Zerocoded
{
MeanCollision Variable
{ Victim LLUUID }
@@ -3292,7 +2795,7 @@ sim -> dataserver
// ViewerFrozenMessage
// Specifies the text to be posted in an alert dialog
{
- ViewerFrozenMessage Low Trusted Unencoded
+ ViewerFrozenMessage Low 137 Trusted Unencoded
{
FrozenData Single
{ Data BOOL }
@@ -3302,7 +2805,7 @@ sim -> dataserver
// Health Message
// Tells viewer what agent health is
{
- HealthMessage Low Trusted Zerocoded
+ HealthMessage Low 138 Trusted Zerocoded
{
HealthData Single
{ Health F32 }
@@ -3315,7 +2818,7 @@ sim -> dataserver
// Viewer can optionally use position to animate
// If audible is CHAT_NOT_AUDIBLE, message will not be valid
{
- ChatFromSimulator Low Trusted Unencoded
+ ChatFromSimulator Low 139 Trusted Unencoded
{
ChatData Single
{ FromName Variable 1 }
@@ -3332,7 +2835,7 @@ sim -> dataserver
// Simulator statistics packet (goes out to viewer and dataserver/spaceserver)
{
- SimStats Low Trusted Unencoded
+ SimStats Low 140 Trusted Unencoded
{
Region Single
{ RegionX U32 }
@@ -3350,7 +2853,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- RequestRegionInfo Low NotTrusted Unencoded
+ RequestRegionInfo Low 141 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3364,7 +2867,7 @@ sim -> dataserver
// sim -> viewer
// reliable
{
- RegionInfo Low NotTrusted Zerocoded
+ RegionInfo Low 142 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3397,7 +2900,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- GodUpdateRegionInfo Low NotTrusted Zerocoded
+ GodUpdateRegionInfo Low 143 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3422,7 +2925,7 @@ sim -> dataserver
//to request the most up to date region for the requesting
//region to redirect teleports to
{
- NearestLandingRegionRequest Low Trusted Unencoded
+ NearestLandingRegionRequest Low 144 Trusted Unencoded
{
RequestingRegionData Single
{ RegionHandle U64 }
@@ -3435,7 +2938,7 @@ sim -> dataserver
//to the redirectregion request stating which region
//the requesting region should redirect teleports to if necessary
{
- NearestLandingRegionReply Low Trusted Unencoded
+ NearestLandingRegionReply Low 145 Trusted Unencoded
{
LandingRegionData Single
{ RegionHandle U64 }
@@ -3448,7 +2951,7 @@ sim -> dataserver
//to have the dataserver note/clear in the db
//that the region has updated it's nearest landing point
{
- NearestLandingRegionUpdated Low Trusted Unencoded
+ NearestLandingRegionUpdated Low 146 Trusted Unencoded
{
RegionData Single
{ RegionHandle U64 }
@@ -3461,7 +2964,7 @@ sim -> dataserver
//Sent from the region to the data server
//to note that the region's teleportation landing status has changed
{
- TeleportLandingStatusChanged Low Trusted Unencoded
+ TeleportLandingStatusChanged Low 147 Trusted Unencoded
{
RegionData Single
{ RegionHandle U64 }
@@ -3474,7 +2977,7 @@ sim -> dataserver
// sim -> viewer
// reliable
{
- RegionHandshake Low Trusted Zerocoded
+ RegionHandshake Low 148 Trusted Zerocoded
{
RegionInfo Single
{ RegionFlags U32 }
@@ -3502,6 +3005,10 @@ sim -> dataserver
{ TerrainHeightRange10 F32 }
{ TerrainHeightRange11 F32 }
}
+ {
+ RegionInfo2 Single
+ { RegionID LLUUID }
+ }
}
// RegionHandshakeReply
@@ -3513,7 +3020,7 @@ sim -> dataserver
// After the simulator receives this, it will start sending
// data about objects.
{
- RegionHandshakeReply Low NotTrusted Zerocoded
+ RegionHandshakeReply Low 149 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3531,7 +3038,7 @@ sim -> dataserver
// and where someone you are tracking is located. They are -1 if not
// applicable.
{
- CoarseLocationUpdate Medium Trusted Unencoded
+ CoarseLocationUpdate Medium 6 Trusted Unencoded
{
Location Variable
{ X U8 }
@@ -3547,7 +3054,7 @@ sim -> dataserver
// ImageData - sent to viewer to transmit information about an image
{
- ImageData High Trusted Unencoded
+ ImageData High 9 Trusted Unencoded
{
ImageID Single
{ ID LLUUID }
@@ -3563,7 +3070,7 @@ sim -> dataserver
// ImagePacket - follow on image data for images having > 1 packet of data
{
- ImagePacket High Trusted Unencoded
+ ImagePacket High 10 Trusted Unencoded
{
ImageID Single
{ ID LLUUID }
@@ -3578,7 +3085,7 @@ sim -> dataserver
// LayerData - Sent to viewer - encodes layer data
{
- LayerData High Trusted Unencoded
+ LayerData High 11 Trusted Unencoded
{
LayerID Single
{ Type U8 }
@@ -3600,7 +3107,7 @@ sim -> dataserver
//
// Data is type-specific opaque data for this object
{
- ObjectUpdate High Trusted Zerocoded
+ ObjectUpdate High 12 Trusted Zerocoded
{
RegionData Single
{ RegionHandle U64 }
@@ -3676,7 +3183,7 @@ sim -> dataserver
// ObjectUpdateCompressed
{
- ObjectUpdateCompressed High Trusted Unencoded
+ ObjectUpdateCompressed High 13 Trusted Unencoded
{
RegionData Single
{ RegionHandle U64 }
@@ -3692,7 +3199,7 @@ sim -> dataserver
// ObjectUpdateCached
// reliable
{
- ObjectUpdateCached High Trusted Unencoded
+ ObjectUpdateCached High 14 Trusted Unencoded
{
RegionData Single
{ RegionHandle U64 }
@@ -3708,7 +3215,7 @@ sim -> dataserver
// packed terse object update format
{
- ImprovedTerseObjectUpdate High Trusted Unencoded
+ ImprovedTerseObjectUpdate High 15 Trusted Unencoded
{
RegionData Single
{ RegionHandle U64 }
@@ -3724,30 +3231,18 @@ sim -> dataserver
// KillObject - Sent by objects to the viewer to tell them to kill themselves
{
- KillObject High Trusted Unencoded
+ KillObject High 16 Trusted Unencoded
{
ObjectData Variable
{ ID U32 }
}
}
-// AgentToNewRegion - tells the viewer that it's agent has moved
-
-{
- AgentToNewRegion High Trusted Unencoded
- {
- RegionData Single
- { SessionID LLUUID }
- { IP IPADDR }
- { Port IPPORT }
- { Handle U64 }
- }
-}
// CrossedRegion - new way to tell a viewer it has gone across a region
// boundary
{
- CrossedRegion Medium Trusted Unencoded
+ CrossedRegion Medium 7 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3770,7 +3265,7 @@ sim -> dataserver
// SimulatorViewerTimeMessage - Allows viewer to resynch to world time
{
- SimulatorViewerTimeMessage Low Trusted Unencoded
+ SimulatorViewerTimeMessage Low 150 Trusted Unencoded
{
TimeInfo Single
{ UsecSinceStart U64 }
@@ -3785,7 +3280,7 @@ sim -> dataserver
// EnableSimulator - Preps a viewer to receive data from a simulator
{
- EnableSimulator Low Trusted Unencoded
+ EnableSimulator Low 151 Trusted Unencoded
{
SimulatorInfo Single
{ Handle U64 }
@@ -3797,14 +3292,14 @@ sim -> dataserver
// DisableThisSimulator - Tells a viewer not to expect data from this simulator anymore
{
- DisableSimulator Low Trusted Unencoded
+ DisableSimulator Low 152 Trusted Unencoded
}
// ConfirmEnableSimulator - A confirmation message sent from simulator to neighbors that the simulator
// has successfully been enabled by the viewer
{
- ConfirmEnableSimulator Medium Trusted Unencoded
+ ConfirmEnableSimulator Medium 8 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -3818,7 +3313,7 @@ sim -> dataserver
// Request a new transfer (target->source)
{
- TransferRequest Low NotTrusted Zerocoded
+ TransferRequest Low 153 NotTrusted Zerocoded
{
TransferInfo Single
{ TransferID LLUUID }
@@ -3832,7 +3327,7 @@ sim -> dataserver
// Return info about a transfer/initiate transfer (source->target)
// Possibly should have a Params field like above
{
- TransferInfo Low NotTrusted Zerocoded
+ TransferInfo Low 154 NotTrusted Zerocoded
{
TransferInfo Single
{ TransferID LLUUID }
@@ -3845,7 +3340,7 @@ sim -> dataserver
}
{
- TransferPacket High NotTrusted Unencoded
+ TransferPacket High 17 NotTrusted Unencoded
{
TransferData Single
{ TransferID LLUUID }
@@ -3858,7 +3353,7 @@ sim -> dataserver
// Abort a transfer in progress (either from target->source or source->target)
{
- TransferAbort Low NotTrusted Zerocoded
+ TransferAbort Low 155 NotTrusted Zerocoded
{
TransferInfo Single
{ TransferID LLUUID }
@@ -3866,16 +3361,6 @@ sim -> dataserver
}
}
-// Change the priority of a transfer (target->source)
-{
- TransferPriority Low NotTrusted Zerocoded
- {
- TransferInfo Single
- { TransferID LLUUID }
- { ChannelType S32 }
- { Priority F32 }
- }
-}
//-----------------------------------------------------------------------------
// General file transfer
@@ -3883,7 +3368,7 @@ sim -> dataserver
// RequestXfer - request an arbitrary xfer
{
- RequestXfer Low NotTrusted Zerocoded
+ RequestXfer Low 156 NotTrusted Zerocoded
{
XferID Single
{ ID U64 }
@@ -3898,7 +3383,7 @@ sim -> dataserver
// SendXferPacket - send an additional packet of an arbitrary xfer from sim -> viewer
{
- SendXferPacket High NotTrusted Unencoded
+ SendXferPacket High 18 NotTrusted Unencoded
{
XferID Single
{ ID U64 }
@@ -3912,7 +3397,7 @@ sim -> dataserver
// ConfirmXferPacket
{
- ConfirmXferPacket High NotTrusted Unencoded
+ ConfirmXferPacket High 19 NotTrusted Unencoded
{
XferID Single
{ ID U64 }
@@ -3922,7 +3407,7 @@ sim -> dataserver
// AbortXfer
{
- AbortXfer Low NotTrusted Unencoded
+ AbortXfer Low 157 NotTrusted Unencoded
{
XferID Single
{ ID U64 }
@@ -3935,19 +3420,10 @@ sim -> dataserver
//-----------------------------------------------------------------------------
-// RequestAvatarInfo
-{
- RequestAvatarInfo Low Trusted Unencoded
- {
- DataBlock Single
- { FullID LLUUID }
- }
-}
-
// AvatarAnimation - Update animation state
// simulator --> viewer
{
- AvatarAnimation High Trusted Unencoded
+ AvatarAnimation High 20 Trusted Unencoded
{
Sender Single
{ ID LLUUID }
@@ -3970,7 +3446,7 @@ sim -> dataserver
// AvatarAppearance - Update visual params
{
- AvatarAppearance Low Trusted Zerocoded
+ AvatarAppearance Low 158 Trusted Zerocoded
{
Sender Single
{ ID LLUUID }
@@ -3988,7 +3464,7 @@ sim -> dataserver
// AvatarSitResponse - response to a request to sit on an object
{
- AvatarSitResponse High Trusted Zerocoded
+ AvatarSitResponse High 21 Trusted Zerocoded
{
SitObject Single
{ ID LLUUID }
@@ -4006,7 +3482,7 @@ sim -> dataserver
// SetFollowCamProperties
{
- SetFollowCamProperties Low Trusted Unencoded
+ SetFollowCamProperties Low 159 Trusted Unencoded
{
ObjectData Single
{ ObjectID LLUUID }
@@ -4020,7 +3496,7 @@ sim -> dataserver
// ClearFollowCamProperties
{
- ClearFollowCamProperties Low Trusted Unencoded
+ ClearFollowCamProperties Low 160 Trusted Unencoded
{
ObjectData Single
{ ObjectID LLUUID }
@@ -4029,7 +3505,7 @@ sim -> dataserver
// CameraConstraint - new camera distance limit (based on collision with objects)
{
- CameraConstraint High Trusted Zerocoded
+ CameraConstraint High 22 Trusted Zerocoded
{
CameraCollidePlane Single
{ Plane LLVector4 }
@@ -4040,7 +3516,7 @@ sim -> dataserver
// Extended information such as creator, permissions, etc.
// Medium because potentially driven by mouse hover events.
{
- ObjectProperties Medium Trusted Zerocoded
+ ObjectProperties Medium 9 Trusted Zerocoded
{
ObjectData Variable
{ ObjectID LLUUID }
@@ -4077,7 +3553,7 @@ sim -> dataserver
// ObjectPropertiesFamily
// Medium because potentially driven by mouse hover events.
{
- ObjectPropertiesFamily Medium Trusted Zerocoded
+ ObjectPropertiesFamily Medium 10 Trusted Zerocoded
{
ObjectData Single
{ RequestFlags U32 }
@@ -4102,7 +3578,7 @@ sim -> dataserver
// RequestPayPrice
// viewer -> sim
{
- RequestPayPrice Low NotTrusted Unencoded
+ RequestPayPrice Low 161 NotTrusted Unencoded
{
ObjectData Single
{ ObjectID LLUUID }
@@ -4112,7 +3588,7 @@ sim -> dataserver
// PayPriceReply
// sim -> viewer
{
- PayPriceReply Low Trusted Unencoded
+ PayPriceReply Low 162 Trusted Unencoded
{
ObjectData Single
{ ObjectID LLUUID }
@@ -4132,7 +3608,7 @@ sim -> dataserver
// ROUTED dataserver -> userserver -> spaceserver -> simulator -> viewer
// reliable, but that may not matter if a system component is quitting
{
- KickUser Low Trusted Unencoded
+ KickUser Low 163 Trusted Unencoded
{
TargetBlock Single
{ TargetIP IPADDR } // U32 encoded IP
@@ -4149,7 +3625,7 @@ sim -> dataserver
// ack sent from the simulator up to the main database so that login
// can continue.
{
- KickUserAck Low Trusted Unencoded
+ KickUserAck Low 164 Trusted Unencoded
{
UserInfo Single
{ SessionID LLUUID }
@@ -4162,7 +3638,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- GodKickUser Low NotTrusted Unencoded
+ GodKickUser Low 165 NotTrusted Unencoded
{
UserInfo Single
{ GodID LLUUID }
@@ -4176,7 +3652,7 @@ sim -> dataserver
// SystemKickUser
// user->space, reliable
{
- SystemKickUser Low Trusted Unencoded
+ SystemKickUser Low 166 Trusted Unencoded
{
AgentInfo Variable
{ AgentID LLUUID }
@@ -4187,7 +3663,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- EjectUser Low NotTrusted Unencoded
+ EjectUser Low 167 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4205,7 +3681,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- FreezeUser Low NotTrusted Unencoded
+ FreezeUser Low 168 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4223,7 +3699,7 @@ sim -> dataserver
// viewer -> simulator
// reliable
{
- AvatarPropertiesRequest Low NotTrusted Unencoded
+ AvatarPropertiesRequest Low 169 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4236,7 +3712,7 @@ sim -> dataserver
// simulator -> dataserver
// reliable
{
- AvatarPropertiesRequestBackend Low Trusted Unencoded
+ AvatarPropertiesRequestBackend Low 170 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4250,7 +3726,7 @@ sim -> dataserver
// simulator -> viewer
// reliable
{
- AvatarPropertiesReply Low Trusted Zerocoded
+ AvatarPropertiesReply Low 171 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID } // your id
@@ -4271,7 +3747,7 @@ sim -> dataserver
}
{
- AvatarInterestsReply Low Trusted Zerocoded
+ AvatarInterestsReply Low 172 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID } // your id
@@ -4292,7 +3768,7 @@ sim -> dataserver
// simulator -> viewer
// reliable
{
- AvatarGroupsReply Low Trusted Zerocoded
+ AvatarGroupsReply Low 173 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID } // your id
@@ -4314,7 +3790,7 @@ sim -> dataserver
// viewer -> simulator
// reliable
{
- AvatarPropertiesUpdate Low NotTrusted Zerocoded
+ AvatarPropertiesUpdate Low 174 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4336,7 +3812,7 @@ sim -> dataserver
// viewer -> simulator
// reliable
{
- AvatarInterestsUpdate Low NotTrusted Zerocoded
+ AvatarInterestsUpdate Low 175 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4352,27 +3828,6 @@ sim -> dataserver
}
}
-// AvatarStatisticsReply
-// dataserver -> simulator
-// simulator -> viewer
-// reliable
-{
- AvatarStatisticsReply Low Trusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- }
- {
- AvatarData Single
- { AvatarID LLUUID }
- }
- {
- StatisticsData Variable
- { Name Variable 1 } // string
- { Positive S32 }
- { Negative S32 }
- }
-}
// AvatarNotesReply
@@ -4380,7 +3835,7 @@ sim -> dataserver
// simulator -> viewer
// reliable
{
- AvatarNotesReply Low Trusted Unencoded
+ AvatarNotesReply Low 176 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4397,7 +3852,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- AvatarNotesUpdate Low NotTrusted Unencoded
+ AvatarNotesUpdate Low 177 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4417,7 +3872,7 @@ sim -> dataserver
// This fills in the tabs of the Picks panel.
// reliable
{
- AvatarPicksReply Low Trusted Unencoded
+ AvatarPicksReply Low 178 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4436,7 +3891,7 @@ sim -> dataserver
// simulator -> dataserver
// reliable
{
- EventInfoRequest Low NotTrusted Unencoded
+ EventInfoRequest Low 179 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4454,7 +3909,7 @@ sim -> dataserver
// simulator -> viewer
// reliable
{
- EventInfoReply Low Trusted Unencoded
+ EventInfoReply Low 180 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4483,7 +3938,7 @@ sim -> dataserver
// simulator -> dataserver
// reliable
{
- EventNotificationAddRequest Low NotTrusted Unencoded
+ EventNotificationAddRequest Low 181 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4501,7 +3956,7 @@ sim -> dataserver
// simulator -> dataserver
// reliable
{
- EventNotificationRemoveRequest Low NotTrusted Unencoded
+ EventNotificationRemoveRequest Low 182 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4519,7 +3974,7 @@ sim -> dataserver
// QueryData is used to resend a search result after the deletion
// reliable
{
- EventGodDelete Low NotTrusted Unencoded
+ EventGodDelete Low 183 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4538,32 +3993,13 @@ sim -> dataserver
}
}
-// PickInfoRequest
-// viewer -> simulator
-// simulator -> dataserver
-// If CreatorID is not null, then we're looking for an agent pick
-// or picks.
-// reliable
-{
- PickInfoRequest Low NotTrusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- Data Single
- { PickID LLUUID }
- }
-}
-
// PickInfoReply
// dataserver -> simulator
// simulator -> viewer
// reliable
{
- PickInfoReply Low Trusted Unencoded
+ PickInfoReply Low 184 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4595,7 +4031,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- PickInfoUpdate Low NotTrusted Unencoded
+ PickInfoUpdate Low 185 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4622,7 +4058,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- PickDelete Low NotTrusted Unencoded
+ PickDelete Low 186 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4641,7 +4077,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- PickGodDelete Low NotTrusted Unencoded
+ PickGodDelete Low 187 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4658,7 +4094,7 @@ sim -> dataserver
// ScriptQuestion
// reliable
{
- ScriptQuestion Low Trusted Unencoded
+ ScriptQuestion Low 188 Trusted Unencoded
{
Data Single
{ TaskID LLUUID }
@@ -4672,7 +4108,7 @@ sim -> dataserver
// ScriptControlChange
// reliable
{
- ScriptControlChange Low Trusted Unencoded
+ ScriptControlChange Low 189 Trusted Unencoded
{
Data Variable
{ TakeControls BOOL }
@@ -4685,7 +4121,7 @@ sim -> dataserver
// sim -> viewer
// reliable
{
- ScriptDialog Low Trusted Zerocoded
+ ScriptDialog Low 190 Trusted Zerocoded
{
Data Single
{ ObjectID LLUUID }
@@ -4707,7 +4143,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ScriptDialogReply Low NotTrusted Zerocoded
+ ScriptDialogReply Low 191 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4726,7 +4162,7 @@ sim -> dataserver
// ForceScriptControlRelease
// reliable
{
- ForceScriptControlRelease Low NotTrusted Unencoded
+ ForceScriptControlRelease Low 192 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4737,7 +4173,7 @@ sim -> dataserver
// RevokePermissions
// reliable
{
- RevokePermissions Low NotTrusted Unencoded
+ RevokePermissions Low 193 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4755,7 +4191,7 @@ sim -> dataserver
// Ask the user if they would like to load a URL
// reliable
{
- LoadURL Low Trusted Unencoded
+ LoadURL Low 194 Trusted Unencoded
{
Data Single
{ ObjectName Variable 1 }
@@ -4770,7 +4206,7 @@ sim -> dataserver
// ScriptTeleportRequest
// reliable
{
- ScriptTeleportRequest Low Trusted Unencoded
+ ScriptTeleportRequest Low 195 Trusted Unencoded
{
Data Single
{ ObjectName Variable 1 }
@@ -4795,7 +4231,7 @@ sim -> dataserver
// sim -> viewer
// reliable
{
- ParcelOverlay Low Trusted Zerocoded
+ ParcelOverlay Low 196 Trusted Zerocoded
{
ParcelData Single
{ SequenceID S32 } // 0...3, which piece of region
@@ -4810,7 +4246,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelPropertiesRequest Medium NotTrusted Zerocoded
+ ParcelPropertiesRequest Medium 11 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4831,7 +4267,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelPropertiesRequestByID Low NotTrusted Zerocoded
+ ParcelPropertiesRequestByID Low 197 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4854,7 +4290,7 @@ sim -> dataserver
// WARNING: This packet is potentially large. With max length name,
// description, music URL and media URL, it is 1526 + sizeof ( LLUUID ) bytes.
{
- ParcelProperties High Trusted Zerocoded
+ ParcelProperties High 23 Trusted Zerocoded
{
ParcelData Single
{ RequestResult S32 }
@@ -4915,7 +4351,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelPropertiesUpdate Low NotTrusted Zerocoded
+ ParcelPropertiesUpdate Low 198 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4950,7 +4386,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelReturnObjects Low NotTrusted Zerocoded
+ ParcelReturnObjects Low 199 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4975,7 +4411,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelSetOtherCleanTime Low NotTrusted Zerocoded
+ ParcelSetOtherCleanTime Low 200 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -4994,7 +4430,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelDisableObjects Low NotTrusted Zerocoded
+ ParcelDisableObjects Low 201 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5020,7 +4456,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelSelectObjects Low NotTrusted Zerocoded
+ ParcelSelectObjects Low 202 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5042,7 +4478,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- EstateCovenantRequest Low NotTrusted Unencoded
+ EstateCovenantRequest Low 203 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5054,7 +4490,7 @@ sim -> dataserver
// sim -> viewer
// reliable
{
- EstateCovenantReply Low Trusted Unencoded
+ EstateCovenantReply Low 204 Trusted Unencoded
{
Data Single
{ CovenantID LLUUID }
@@ -5069,7 +4505,7 @@ sim -> dataserver
// sim -> viewer
// reliable
{
- ForceObjectSelect Low Trusted Unencoded
+ ForceObjectSelect Low 205 Trusted Unencoded
{
Header Single
{ ResetList BOOL }
@@ -5085,7 +4521,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelBuyPass Low NotTrusted Unencoded
+ ParcelBuyPass Low 206 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5101,7 +4537,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelDeedToGroup Low NotTrusted Unencoded
+ ParcelDeedToGroup Low 207 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5116,7 +4552,7 @@ sim -> dataserver
// reserved for when island owners force re-claim parcel
{
- ParcelReclaim Low NotTrusted Unencoded
+ ParcelReclaim Low 208 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5132,7 +4568,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelClaim Low NotTrusted Zerocoded
+ ParcelClaim Low 209 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5158,7 +4594,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelJoin Low NotTrusted Unencoded
+ ParcelJoin Low 210 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5179,7 +4615,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelDivide Low NotTrusted Unencoded
+ ParcelDivide Low 211 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5199,7 +4635,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelRelease Low NotTrusted Unencoded
+ ParcelRelease Low 212 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5215,7 +4651,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- ParcelBuy Low NotTrusted Zerocoded
+ ParcelBuy Low 213 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5229,12 +4665,17 @@ sim -> dataserver
{ LocalID S32 }
{ Final BOOL } // true if buyer is in tier
}
+ {
+ ParcelData Single
+ { Price S32 }
+ { Area S32 }
+ }
}
// ParcelGodForceOwner Unencoded
{
- ParcelGodForceOwner Low NotTrusted Zerocoded
+ ParcelGodForceOwner Low 214 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5251,7 +4692,7 @@ sim -> dataserver
// viewer -> sim
// ParcelAccessListRequest
{
- ParcelAccessListRequest Low NotTrusted Zerocoded
+ ParcelAccessListRequest Low 215 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5269,7 +4710,7 @@ sim -> dataserver
// sim -> viewer
// ParcelAccessListReply
{
- ParcelAccessListReply Low Trusted Zerocoded
+ ParcelAccessListReply Low 216 Trusted Zerocoded
{
Data Single
{ AgentID LLUUID }
@@ -5288,7 +4729,7 @@ sim -> dataserver
// viewer -> sim
// ParcelAccessListUpdate
{
- ParcelAccessListUpdate Low NotTrusted Zerocoded
+ ParcelAccessListUpdate Low 217 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5314,7 +4755,7 @@ sim -> dataserver
// viewer -> sim -> dataserver
// reliable
{
- ParcelDwellRequest Low NotTrusted Unencoded
+ ParcelDwellRequest Low 218 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5331,7 +4772,7 @@ sim -> dataserver
// dataserver -> sim -> viewer
// reliable
{
- ParcelDwellReply Low Trusted Unencoded
+ ParcelDwellReply Low 219 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5349,7 +4790,7 @@ sim -> dataserver
// successful, the transaction is approved through a money balance reply
// with the same transaction id.
{
- RequestParcelTransfer Low Trusted Zerocoded
+ RequestParcelTransfer Low 220 Trusted Zerocoded
{
Data Single
{ TransactionID LLUUID }
@@ -5372,7 +4813,7 @@ sim -> dataserver
// If you add something here, you should probably also change the
// simulator's database update query on startup.
{
- UpdateParcel Low Trusted Zerocoded
+ UpdateParcel Low 221 Trusted Zerocoded
{
ParcelData Single
{ ParcelID LLUUID }
@@ -5403,7 +4844,7 @@ sim -> dataserver
// This message is used to tell the dataserver that a parcel has been
// removed.
{
- RemoveParcel Low Trusted Unencoded
+ RemoveParcel Low 222 Trusted Unencoded
{
ParcelData Variable
{ ParcelID LLUUID }
@@ -5413,7 +4854,7 @@ sim -> dataserver
// sim -> dataserver
// Merges some of the database information for parcels (dwell).
{
- MergeParcel Low Trusted Unencoded
+ MergeParcel Low 223 Trusted Unencoded
{
MasterParcelData Single
{ MasterID LLUUID }
@@ -5426,7 +4867,7 @@ sim -> dataserver
// sim -> dataserver
{
- LogParcelChanges Low Trusted Zerocoded
+ LogParcelChanges Low 224 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5448,7 +4889,7 @@ sim -> dataserver
// sim -> dataserver
{
- CheckParcelSales Low Trusted Unencoded
+ CheckParcelSales Low 225 Trusted Unencoded
{
RegionData Variable
{ RegionHandle U64 }
@@ -5458,7 +4899,7 @@ sim -> dataserver
// dataserver -> simulator
// tell a particular simulator to finish parcel sale.
{
- ParcelSales Low Trusted Unencoded
+ ParcelSales Low 226 Trusted Unencoded
{
ParcelData Variable
{ ParcelID LLUUID }
@@ -5470,7 +4911,7 @@ sim -> dataserver
// mark parcel and double secret agent content on parcel as owned by
// governor/maint and adjusts permissions approriately. Godlike request.
{
- ParcelGodMarkAsContent Low NotTrusted Unencoded
+ ParcelGodMarkAsContent Low 227 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5488,7 +4929,7 @@ sim -> dataserver
// validates and fills in the rest of the information to start an auction
// on a parcel. Processing currently requires that AgentID is a god.
{
- ViewerStartAuction Low NotTrusted Unencoded
+ ViewerStartAuction Low 228 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5504,7 +4945,7 @@ sim -> dataserver
// sim -> dataserver
// Once all of the data has been gathered,
{
- StartAuction Low Trusted Unencoded
+ StartAuction Low 229 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5519,7 +4960,7 @@ sim -> dataserver
// dataserver -> sim
{
- ConfirmAuctionStart Low Trusted Unencoded
+ ConfirmAuctionStart Low 230 Trusted Unencoded
{
AuctionData Single
{ ParcelID LLUUID }
@@ -5530,7 +4971,7 @@ sim -> dataserver
// sim -> dataserver
// Tell the dataserver that an auction has completed.
{
- CompleteAuction Low Trusted Unencoded
+ CompleteAuction Low 231 Trusted Unencoded
{
ParcelData Variable
{ ParcelID LLUUID }
@@ -5539,7 +4980,7 @@ sim -> dataserver
// Tell the dataserver that an auction has been canceled.
{
- CancelAuction Low Trusted Unencoded
+ CancelAuction Low 232 Trusted Unencoded
{
ParcelData Variable
{ ParcelID LLUUID }
@@ -5548,7 +4989,7 @@ sim -> dataserver
// sim -> dataserver
{
- CheckParcelAuctions Low Trusted Unencoded
+ CheckParcelAuctions Low 233 Trusted Unencoded
{
RegionData Variable
{ RegionHandle U64 }
@@ -5558,7 +4999,7 @@ sim -> dataserver
// dataserver -> sim
// tell a particular simulator to finish parcel sale.
{
- ParcelAuctions Low Trusted Unencoded
+ ParcelAuctions Low 234 Trusted Unencoded
{
ParcelData Variable
{ ParcelID LLUUID }
@@ -5573,7 +5014,7 @@ sim -> dataserver
// UUIDNameRequest
// Translate a UUID into first and last names
{
- UUIDNameRequest Low NotTrusted Unencoded
+ UUIDNameRequest Low 235 NotTrusted Unencoded
{
UUIDNameBlock Variable
{ ID LLUUID }
@@ -5583,7 +5024,7 @@ sim -> dataserver
// UUIDNameReply
// Translate a UUID into first and last names
{
- UUIDNameReply Low Trusted Unencoded
+ UUIDNameReply Low 236 Trusted Unencoded
{
UUIDNameBlock Variable
{ ID LLUUID }
@@ -5595,7 +5036,7 @@ sim -> dataserver
// UUIDGroupNameRequest
// Translate a UUID into a group name
{
- UUIDGroupNameRequest Low NotTrusted Unencoded
+ UUIDGroupNameRequest Low 237 NotTrusted Unencoded
{
UUIDNameBlock Variable
{ ID LLUUID }
@@ -5605,7 +5046,7 @@ sim -> dataserver
// UUIDGroupNameReply
// Translate a UUID into a group name
{
- UUIDGroupNameReply Low Trusted Unencoded
+ UUIDGroupNameReply Low 238 Trusted Unencoded
{
UUIDNameBlock Variable
{ ID LLUUID }
@@ -5624,7 +5065,7 @@ sim -> dataserver
// Chat is region local to receiving simulator.
// Type is one of CHAT_TYPE_NORMAL, _WHISPER, _SHOUT
{
- ChatPass Low Trusted Zerocoded
+ ChatPass Low 239 Trusted Zerocoded
{
ChatData Single
{ Channel S32 }
@@ -5643,7 +5084,7 @@ sim -> dataserver
// Edge data - compressed edge data
{
- EdgeDataPacket High Trusted Zerocoded
+ EdgeDataPacket High 24 Trusted Zerocoded
{
EdgeData Single
{ LayerType U8 }
@@ -5655,7 +5096,7 @@ sim -> dataserver
// Sim status, condition of this sim
// sent reliably, when dirty
{
- SimStatus Medium Trusted Unencoded
+ SimStatus Medium 12 Trusted Unencoded
{
SimStatus Single
{ CanAcceptAgents BOOL }
@@ -5674,7 +5115,7 @@ sim -> dataserver
// simulator -> simulator
// reliable
{
- ChildAgentUpdate High Trusted Zerocoded
+ ChildAgentUpdate High 25 Trusted Zerocoded
{
AgentData Single
@@ -5735,7 +5176,7 @@ sim -> dataserver
// ChildAgentAlive
// sent to child agents just to keep them alive
{
- ChildAgentAlive High Trusted Unencoded
+ ChildAgentAlive High 26 Trusted Unencoded
{
AgentData Single
{ RegionHandle U64 }
@@ -5748,7 +5189,7 @@ sim -> dataserver
// ChildAgentPositionUpdate
// sent to child agents just to keep them alive
{
- ChildAgentPositionUpdate High Trusted Unencoded
+ ChildAgentPositionUpdate High 27 Trusted Unencoded
{
AgentData Single
@@ -5772,7 +5213,7 @@ sim -> dataserver
// Obituary for child agents - make sure the parent know the child is dead
// This way, children can be reliably restarted
{
- ChildAgentDying Low Trusted Zerocoded
+ ChildAgentDying Low 240 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5783,7 +5224,7 @@ sim -> dataserver
// This is sent if a full child agent hasn't been accepted yet
{
- ChildAgentUnknown Low Trusted Unencoded
+ ChildAgentUnknown Low 241 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5791,82 +5232,10 @@ sim -> dataserver
}
}
-// Pass Object Between Simulators
-//
-// BUG compress rotation
-// BUG compress scale
-{
- PassObject High Trusted Zerocoded
- {
- ObjectData Single
- { ID LLUUID }
- { ParentID LLUUID }
-
- { CreatorID LLUUID } // permissions
- { OwnerID LLUUID } // permissions
- { GroupID LLUUID } // permissions
- { BaseMask U32 } // permissions
- { OwnerMask U32 } // permissions
- { GroupMask U32 } // permissions
- { EveryoneMask U32 } // permissions
- { NextOwnerMask U32 } // permissions
- { GroupOwned BOOL } // permissions
-
- { PCode U8 }
- { Material U8 }
- { State U8 }
- { Scale LLVector3 }
- { UsePhysics U8 }
-
- { PosX S16 }
- { PosY S16 }
- { PosZ S16 }
-
- { VelX S16 }
- { VelY S16 }
- { VelZ S16 }
-
- { Rotation LLQuaternion }
-
- { AngVelX S16 }
- { AngVelY S16 }
- { AngVelZ S16 }
-
- { PathCurve U8 }
- { ProfileCurve U8 }
- { PathBegin U16 } // 0 to 1, quanta = 0.01
- { PathEnd U16 } // 0 to 1, quanta = 0.01
- { PathScaleX U8 } // 0 to 1, quanta = 0.01
- { PathScaleY U8 } // 0 to 1, quanta = 0.01
- { PathShearX U8 } // -.5 to .5, quanta = 0.01
- { PathShearY U8 } // -.5 to .5, quanta = 0.01
- { PathTwist S8 } // -1 to 1, quanta = 0.01
- { PathTwistBegin S8 } // -1 to 1, quanta = 0.01
- { PathRadiusOffset S8 } // -1 to 1, quanta = 0.01
- { PathTaperX S8 } // -1 to 1, quanta = 0.01
- { PathTaperY S8 } // -1 to 1, quanta = 0.01
- { PathRevolutions U8 } // 0 to 3, quanta = 0.015
- { PathSkew S8 } // -1 to 1, quanta = 0.01
- { ProfileBegin U16 } // 0 to 1, quanta = 0.01
- { ProfileEnd U16 } // 0 to 1, quanta = 0.01
- { ProfileHollow U16 } // 0 to 1, quanta = 0.01
-
- { TextureEntry Variable 2 }
-
- { SubType S16 }
- { Active U8 }
-
- { Data Variable 2 }
- }
- {
- NVPairData Variable
- { NVPairs Variable 2 }
- }
-}
// This message is sent how objects get passed between regions.
{
- AtomicPassObject High Trusted Unencoded
+ AtomicPassObject High 28 Trusted Unencoded
{
TaskData Single
{ TaskID LLUUID }
@@ -5877,7 +5246,7 @@ sim -> dataserver
// KillChildAgents - A new agent has connected to the simulator . . . make sure that any old child cameras are blitzed
{
- KillChildAgents Low Trusted Unencoded
+ KillChildAgents Low 242 Trusted Unencoded
{
IDBlock Single
{ AgentID LLUUID }
@@ -5888,7 +5257,7 @@ sim -> dataserver
// GetScriptRunning - asks if a script is running or not. the simulator
// responds with ScriptRunningReply
{
- GetScriptRunning Low NotTrusted Unencoded
+ GetScriptRunning Low 243 NotTrusted Unencoded
{
Script Single
{ ObjectID LLUUID }
@@ -5898,7 +5267,7 @@ sim -> dataserver
// ScriptRunningReply - response from simulator to message above
{
- ScriptRunningReply Low NotTrusted Unencoded
+ ScriptRunningReply Low 244 NotTrusted Unencoded
{
Script Single
{ ObjectID LLUUID }
@@ -5911,7 +5280,7 @@ sim -> dataserver
// SetScriptRunning - makes a script active or inactive (Enable may be
// true or false)
{
- SetScriptRunning Low NotTrusted Unencoded
+ SetScriptRunning Low 245 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5927,7 +5296,7 @@ sim -> dataserver
// ScriptReset - causes a script to reset
{
- ScriptReset Low NotTrusted Unencoded
+ ScriptReset Low 246 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5942,7 +5311,7 @@ sim -> dataserver
// ScriptSensorRequest - causes the receiving sim to run a script sensor and return the results
{
- ScriptSensorRequest Low Trusted Zerocoded
+ ScriptSensorRequest Low 247 Trusted Zerocoded
{
Requester Single
{ SourceID LLUUID }
@@ -5961,7 +5330,7 @@ sim -> dataserver
// ScriptSensorReply - returns the request script search information back to the requester
{
- ScriptSensorReply Low Trusted Zerocoded
+ ScriptSensorReply Low 248 Trusted Zerocoded
{
Requester Single
{ SourceID LLUUID }
@@ -5988,7 +5357,7 @@ sim -> dataserver
// agent is coming into the region. The region should be expecting the
// agent.
{
- CompleteAgentMovement Low NotTrusted Unencoded
+ CompleteAgentMovement Low 249 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -5999,7 +5368,7 @@ sim -> dataserver
// sim -> viewer
{
- AgentMovementComplete Low NotTrusted Unencoded
+ AgentMovementComplete Low 250 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6014,40 +5383,6 @@ sim -> dataserver
}
}
-// sim->dataserver
-// log the fact that the agent has logged in.
-{
- LogLogin Low Trusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- Data Single
- { ViewerDigest LLUUID }
- { LastExecFroze BOOL }
- { SpaceIP IPADDR }
- }
-}
-
-// This message is sent from the viewer on login or on demand from the
-// userserver.
-// viewer -> userserver
-{
- ConnectAgentToUserserver Low NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
-}
-
-// This message is sent from the userserver when it does not have
-// trusted connection or known agent on the circuit.
-{
- ConnectToUserserver Low Trusted Unencoded
-}
//-----------------------------------------------------------------------------
// Logout
@@ -6055,7 +5390,7 @@ sim -> dataserver
// userserver -> dataserver
{
- DataServerLogout Low Trusted Unencoded
+ DataServerLogout Low 251 Trusted Unencoded
{
UserData Single
{ AgentID LLUUID }
@@ -6069,7 +5404,7 @@ sim -> dataserver
// viewer -> sim
// reliable
{
- LogoutRequest Low NotTrusted Unencoded
+ LogoutRequest Low 252 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6077,18 +5412,6 @@ sim -> dataserver
}
}
-// FinalizeLogout
-// Callback for when sim is done uploading assets to asset server
-// viewer -> sim
-// reliable
-{
- FinalizeLogout Low NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
-}
// LogoutReply
// it's ok for the viewer to quit.
@@ -6096,7 +5419,7 @@ sim -> dataserver
// reliable
// Includes inventory items to update with new asset ids
{
- LogoutReply Low Trusted Zerocoded
+ LogoutReply Low 253 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6109,16 +5432,6 @@ sim -> dataserver
}
-
-// LogoutDemand
-{
- LogoutDemand Low Trusted Unencoded
- {
- LogoutBlock Single
- { SessionID LLUUID }
- }
-}
-
//-----------------------------------------------------------------------------
// Instant Message
//-----------------------------------------------------------------------------
@@ -6133,7 +5446,7 @@ sim -> dataserver
// BinaryBucket May be used by some dialog types
// reliable
{
- ImprovedInstantMessage Low NotTrusted Zerocoded
+ ImprovedInstantMessage Low 254 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6159,7 +5472,7 @@ sim -> dataserver
// RetrieveInstantMessages - used to get instant messages that
// were persisted out to the database while the user was offline
{
- RetrieveInstantMessages Low NotTrusted Unencoded
+ RetrieveInstantMessages Low 255 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6171,7 +5484,7 @@ sim -> dataserver
// variable sized LocationBlock so that the message can be recycled with
// minimum new messages and handlers.
{
- FindAgent Low NotTrusted Unencoded
+ FindAgent Low 256 NotTrusted Unencoded
{
AgentBlock Single
{ Hunter LLUUID }
@@ -6190,7 +5503,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- RequestGodlikePowers Low NotTrusted Unencoded
+ RequestGodlikePowers Low 257 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6208,7 +5521,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- GrantGodlikePowers Low Trusted Unencoded
+ GrantGodlikePowers Low 258 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6224,7 +5537,7 @@ sim -> dataserver
// GodlikeMessage - generalized construct for Gods to send messages
// around the system. Each Request has it's own internal protocol.
{
- GodlikeMessage Low NotTrusted Zerocoded
+ GodlikeMessage Low 259 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6245,7 +5558,7 @@ sim -> dataserver
// EstateOwnerMessage
// format must be identical to above
{
- EstateOwnerMessage Low NotTrusted Zerocoded
+ EstateOwnerMessage Low 260 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6267,7 +5580,7 @@ sim -> dataserver
// format must be identical to above
// As above, but don't have to be god or estate owner to send.
{
- GenericMessage Low NotTrusted Zerocoded
+ GenericMessage Low 261 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6291,7 +5604,7 @@ sim -> dataserver
// request for mute list
{
- MuteListRequest Low NotTrusted Unencoded
+ MuteListRequest Low 262 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6305,7 +5618,7 @@ sim -> dataserver
// update/add someone in the mute list
{
- UpdateMuteListEntry Low NotTrusted Unencoded
+ UpdateMuteListEntry Low 263 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6322,7 +5635,7 @@ sim -> dataserver
// Remove a mute list entry.
{
- RemoveMuteListEntry Low NotTrusted Unencoded
+ RemoveMuteListEntry Low 264 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6341,7 +5654,7 @@ sim -> dataserver
//
{
- CopyInventoryFromNotecard Low NotTrusted Zerocoded
+ CopyInventoryFromNotecard Low 265 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6364,7 +5677,7 @@ sim -> dataserver
// THIS MESSAGE CAN NOT CREATE NEW INVENTORY ITEMS.
//
{
- UpdateInventoryItem Low NotTrusted Zerocoded
+ UpdateInventoryItem Low 266 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6405,7 +5718,7 @@ sim -> dataserver
// DO NOT ALLOW THIS FROM THE VIEWER.
//
{
- UpdateCreateInventoryItem Low Trusted Zerocoded
+ UpdateCreateInventoryItem Low 267 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6442,7 +5755,7 @@ sim -> dataserver
}
{
- MoveInventoryItem Low NotTrusted Zerocoded
+ MoveInventoryItem Low 268 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6464,7 +5777,7 @@ sim -> dataserver
// the OldItemID needs to be paired with the OldAgentID to
// produce a unique inventory item.
{
- CopyInventoryItem Low NotTrusted Zerocoded
+ CopyInventoryItem Low 269 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6481,7 +5794,7 @@ sim -> dataserver
}
{
- RemoveInventoryItem Low NotTrusted Unencoded
+ RemoveInventoryItem Low 270 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6494,7 +5807,7 @@ sim -> dataserver
}
{
- ChangeInventoryItemFlags Low NotTrusted Unencoded
+ ChangeInventoryItemFlags Low 271 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6513,7 +5826,7 @@ sim -> dataserver
// This message is currently only uses objects, so the viewer ignores
// the asset id.
{
- SaveAssetIntoInventory Low Trusted Unencoded
+ SaveAssetIntoInventory Low 272 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6526,7 +5839,7 @@ sim -> dataserver
}
{
- CreateInventoryFolder Low NotTrusted Unencoded
+ CreateInventoryFolder Low 273 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6542,7 +5855,7 @@ sim -> dataserver
}
{
- UpdateInventoryFolder Low NotTrusted Unencoded
+ UpdateInventoryFolder Low 274 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6558,7 +5871,7 @@ sim -> dataserver
}
{
- MoveInventoryFolder Low NotTrusted Zerocoded
+ MoveInventoryFolder Low 275 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6573,7 +5886,7 @@ sim -> dataserver
}
{
- RemoveInventoryFolder Low NotTrusted Unencoded
+ RemoveInventoryFolder Low 276 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6587,7 +5900,7 @@ sim -> dataserver
// Get inventory segment.
{
- FetchInventoryDescendents Low NotTrusted Zerocoded
+ FetchInventoryDescendents Low 277 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6608,7 +5921,7 @@ sim -> dataserver
// parent_id for folders and the folder_id for items, but this is
// reasonable until we heve server side inventory.
{
- InventoryDescendents Low Trusted Zerocoded
+ InventoryDescendents Low 278 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6652,7 +5965,7 @@ sim -> dataserver
// Get inventory item(s) - response comes through FetchInventoryReply
{
- FetchInventory Low NotTrusted Zerocoded
+ FetchInventory Low 279 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6667,7 +5980,7 @@ sim -> dataserver
// response to fetch inventory
{
- FetchInventoryReply Low Trusted Zerocoded
+ FetchInventoryReply Low 280 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6704,7 +6017,7 @@ sim -> dataserver
// least many bulk updates can be packed.
// Only from dataserver->sim->viewer
{
- BulkUpdateInventory Low Trusted Zerocoded
+ BulkUpdateInventory Low 281 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6749,7 +6062,7 @@ sim -> dataserver
// request permissions for agent id to get the asset for owner_id's
// item_id.
{
- RequestInventoryAsset Low Trusted Unencoded
+ RequestInventoryAsset Low 282 Trusted Unencoded
{
QueryData Single
{ QueryID LLUUID }
@@ -6762,7 +6075,7 @@ sim -> dataserver
// response to RequestInventoryAsset
// lluuid will be null if agentid in the request above cannot read asset
{
- InventoryAssetResponse Low Trusted Unencoded
+ InventoryAssetResponse Low 283 Trusted Unencoded
{
QueryData Single
{ QueryID LLUUID }
@@ -6775,7 +6088,7 @@ sim -> dataserver
// currently only supported in viewer->userserver->dataserver
// messages typically initiated by an empty trash method.
{
- RemoveInventoryObjects Low NotTrusted Unencoded
+ RemoveInventoryObjects Low 284 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6794,7 +6107,7 @@ sim -> dataserver
// This is how you remove inventory when you're not even sure what it
// is - only it's parenting.
{
- PurgeInventoryDescendents Low NotTrusted Zerocoded
+ PurgeInventoryDescendents Low 285 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6810,7 +6123,7 @@ sim -> dataserver
// inventory.
// if Key == 0, itemid is the key. if Key == 1, assetid is the key.
{
- UpdateTaskInventory Low NotTrusted Zerocoded
+ UpdateTaskInventory Low 286 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6848,7 +6161,7 @@ sim -> dataserver
}
{
- RemoveTaskInventory Low NotTrusted Zerocoded
+ RemoveTaskInventory Low 287 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6862,7 +6175,7 @@ sim -> dataserver
}
{
- MoveTaskInventory Low NotTrusted Unencoded
+ MoveTaskInventory Low 288 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6877,7 +6190,7 @@ sim -> dataserver
}
{
- RequestTaskInventory Low NotTrusted Unencoded
+ RequestTaskInventory Low 289 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6890,7 +6203,7 @@ sim -> dataserver
}
{
- ReplyTaskInventory Low Trusted Zerocoded
+ ReplyTaskInventory Low 290 Trusted Zerocoded
{
InventoryData Single
{ TaskID LLUUID }
@@ -6913,7 +6226,7 @@ sim -> dataserver
// just duplicated (it's not that much, and derezzes that span multiple
// packets will be rare.)
{
- DeRezObject Low NotTrusted Zerocoded
+ DeRezObject Low 291 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -6938,7 +6251,7 @@ sim -> dataserver
// know, since no inventory is created on the viewer. For example, when
// saving into task inventory.
{
- DeRezAck Low Trusted Unencoded
+ DeRezAck Low 292 Trusted Unencoded
{
TransactionData Single
{ TransactionID LLUUID }
@@ -6949,7 +6262,7 @@ sim -> dataserver
// This message is sent from viewer -> simulator when the viewer wants
// to rez an object out of inventory.
{
- RezObject Low NotTrusted Zerocoded
+ RezObject Low 293 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7000,7 +6313,7 @@ sim -> dataserver
// This message is sent from viewer -> simulator when the viewer wants
// to rez an object from a notecard.
{
- RezObjectFromNotecard Low NotTrusted Zerocoded
+ RezObjectFromNotecard Low 294 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7033,20 +6346,11 @@ sim -> dataserver
}
}
-// if declined, the destid agent from the GiveInventory message
-// responds with this message to the userserver
-{
- DeclineInventory Low NotTrusted Unencoded
- {
- InfoBlock Single
- { TransactionID LLUUID }
- }
-}
// sim -> dataserver
// sent during agent to agent inventory transfers
{
- TransferInventory Low Trusted Zerocoded
+ TransferInventory Low 295 Trusted Zerocoded
{
InfoBlock Single
{ SourceID LLUUID }
@@ -7064,7 +6368,7 @@ sim -> dataserver
// InventoryID is the id of the inventory object that the end user
// should discard if they deny the transfer.
{
- TransferInventoryAck Low Trusted Zerocoded
+ TransferInventoryAck Low 296 Trusted Zerocoded
{
InfoBlock Single
{ TransactionID LLUUID }
@@ -7072,25 +6376,9 @@ sim -> dataserver
}
}
-// Relationships - the start will be a request from sourceid to dest
-// id when they are located near each other.
-{
- RequestFriendship Low NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- AgentBlock Single
- { FolderID LLUUID } // source ID's calling card folder
- { DestID LLUUID }
- { TransactionID LLUUID }
- }
-}
{
- AcceptFriendship Low NotTrusted Unencoded
+ AcceptFriendship Low 297 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7107,7 +6395,7 @@ sim -> dataserver
}
{
- DeclineFriendship Low NotTrusted Unencoded
+ DeclineFriendship Low 298 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7120,7 +6408,7 @@ sim -> dataserver
}
{
- FormFriendship Low Trusted Unencoded
+ FormFriendship Low 299 Trusted Unencoded
{
AgentBlock Single
{ SourceID LLUUID }
@@ -7134,7 +6422,7 @@ sim -> dataserver
// viewer -> userserver -> dataserver
// reliable
{
- TerminateFriendship Low NotTrusted Unencoded
+ TerminateFriendship Low 300 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7148,7 +6436,7 @@ sim -> dataserver
// used to give someone a calling card.
{
- OfferCallingCard Low NotTrusted Unencoded
+ OfferCallingCard Low 301 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7162,7 +6450,7 @@ sim -> dataserver
}
{
- AcceptCallingCard Low NotTrusted Unencoded
+ AcceptCallingCard Low 302 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7179,7 +6467,7 @@ sim -> dataserver
}
{
- DeclineCallingCard Low NotTrusted Unencoded
+ DeclineCallingCard Low 303 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7194,7 +6482,7 @@ sim -> dataserver
// Rez a script onto an object
{
- RezScript Low NotTrusted Zerocoded
+ RezScript Low 304 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7234,7 +6522,7 @@ sim -> dataserver
// Create inventory
{
- CreateInventoryItem Low NotTrusted Zerocoded
+ CreateInventoryItem Low 305 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7256,7 +6544,7 @@ sim -> dataserver
// give agent a landmark for an event.
{
- CreateLandmarkForEvent Low NotTrusted Zerocoded
+ CreateLandmarkForEvent Low 306 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7274,7 +6562,7 @@ sim -> dataserver
}
{
- EventLocationRequest Low Trusted Zerocoded
+ EventLocationRequest Low 307 Trusted Zerocoded
{
QueryData Single
{ QueryID LLUUID }
@@ -7286,7 +6574,7 @@ sim -> dataserver
}
{
- EventLocationReply Low Trusted Zerocoded
+ EventLocationReply Low 308 Trusted Zerocoded
{
QueryData Single
{ QueryID LLUUID }
@@ -7299,334 +6587,131 @@ sim -> dataserver
}
}
-// get information about landmarks. Used by viewers for determining
-// the location of a landmark, and by simulators for teleport
-{
- RegionHandleRequest Low NotTrusted Unencoded
- {
- RequestBlock Single
- { RegionID LLUUID }
- }
-}
-
-{
- RegionIDAndHandleReply Low Trusted Unencoded
- {
- ReplyBlock Single
- { RegionID LLUUID }
- { RegionHandle U64 }
- }
-}
-
-// Move money from one agent to another. Validation will happen at the
-// simulator, the dataserver will actually do the work. Dataserver
-// generates a MoneyBalance message in reply. The simulator
-// will generate a MoneyTransferBackend in response to this.
-// viewer -> simulator -> dataserver
-{
- MoneyTransferRequest Low NotTrusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- MoneyData Single
- { SourceID LLUUID }
- { DestID LLUUID } // destination of the transfer
- { Flags U8 }
- { Amount S32 }
- { AggregatePermNextOwner U8 }
- { AggregatePermInventory U8 }
- { TransactionType S32 } // see lltransactiontypes.h
- { Description Variable 1 } // string, name of item for purchases
- }
-}
-
-// And, the money transfer
-{
- MoneyTransferBackend Low Trusted Zerocoded
- {
- MoneyData Single
- { TransactionID LLUUID }
- { TransactionTime U32 } // utc seconds since epoch
- { SourceID LLUUID }
- { DestID LLUUID } // destination of the transfer
- { Flags U8 }
- { Amount S32 }
- { AggregatePermNextOwner U8 }
- { AggregatePermInventory U8 }
- { TransactionType S32 } // see lltransactiontypes.h
- { RegionID LLUUID } // region sending the request, for logging
- { GridX U32 } // *HACK: database doesn't have region_id in schema
- { GridY U32 } // *HACK: database doesn't have region_id in schema
- { Description Variable 1 } // string, name of item for purchases
- }
-}
-
-// This message is used to coalesce money transfers on a per-agent
-// basis. It should only be involved in sim->dataserver money communication.
-{
- BulkMoneyTransfer Low Trusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- { RegionX U32 }
- { RegionY U32 }
- }
- {
- MoneyData Variable
- { TransactionID LLUUID }
- { DestID LLUUID } // destination of the transfer
- { Flags U8 }
- { Amount S32 }
- { TransactionType S32 } // see lltransactiontypes.h
- { Description Variable 1 } // string, name of purchased item
- }
-}
-
-
-// This message is sent sim -> viewer when the simulator is queueing
-// up transactions. This is because we do not have an authoritative
-// balance from the dataserver, but we want to 'guess' how much
-// money the agent has on the viewer.
-{
- AdjustBalance Low NotTrusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- { Delta S32 }
- }
-}
-
-// viewer -> userserver -> dataserver
-// Reliable
-{
- MoneyBalanceRequest Low NotTrusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- MoneyData Single
- { TransactionID LLUUID }
- }
-}
-
-
-// dataserver -> simulator -> viewer
-{
- MoneyBalanceReply Low Trusted Zerocoded
- {
- MoneyData Single
- { AgentID LLUUID }
- { TransactionID LLUUID }
- { TransactionSuccess BOOL } // BOOL
- { MoneyBalance S32 }
- { SquareMetersCredit S32 }
- { SquareMetersCommitted S32 }
- { Description Variable 1 } // string
- }
-}
-
-
-// RoutedMoneyBalanceReply
-// This message is used when a dataserver needs to send updated
-// money balance information to a simulator other than the one it
-// is connected to. It uses the standard TransferBlock format.
-// dataserver -> simulator -> spaceserver -> simulator -> viewer
-// reliable
-{
- RoutedMoneyBalanceReply Low Trusted Zerocoded
- {
- TargetBlock Single
- { TargetIP IPADDR } // U32 encoded IP
- { TargetPort IPPORT }
- }
- {
- MoneyData Single
- { AgentID LLUUID }
- { TransactionID LLUUID }
- { TransactionSuccess BOOL } // BOOL
- { MoneyBalance S32 }
- { SquareMetersCredit S32 }
- { SquareMetersCommitted S32 }
- { Description Variable 1 } // string
- }
-}
-
-
-// This will give you a partial money history on the requested agentid.
-// Reliable
-{
- MoneyHistoryRequest Low NotTrusted Unencoded
- {
- MoneyData Single
- { AgentID LLUUID }
- { StartPeriod S32 }
- { EndPeriod S32 }
- }
-}
-
-// Reliable
-{
- MoneyHistoryReply Low NotTrusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- }
- {
- MoneyData Single
- { StartPeriod S32 }
- { EndPeriod S32 }
- { Balance S32 }
- { StartDate Variable 1 } // string
- { TaxEstimate S32 }
- { StipendEstimate S32 }
- { BonusEstimate S32 }
- }
- {
- HistoryData Variable
- { Description Variable 1 } // string
- { Amount S32 }
- }
-}
-
-
-// CurrentInterval = 0 => this period (week, day, etc.)
-// CurrentInterval = 1 => last period
-// viewer -> userserver -> dataserver
-// reliable
-{
- MoneySummaryRequest Low NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- MoneyData Single
- { RequestID LLUUID }
- { IntervalDays S32 }
- { CurrentInterval S32 }
- }
-}
-
-
-// dataserver -> userserver -> viewer
-// Reliable
+// get information about landmarks. Used by viewers for determining
+// the location of a landmark, and by simulators for teleport
{
- MoneySummaryReply Low NotTrusted Zerocoded
+ RegionHandleRequest Low 309 NotTrusted Unencoded
{
- AgentData Single
- { AgentID LLUUID }
+ RequestBlock Single
+ { RegionID LLUUID }
}
+}
+
+{
+ RegionIDAndHandleReply Low 310 Trusted Unencoded
{
- MoneyData Single
- { RequestID LLUUID }
- { IntervalDays S32 }
- { CurrentInterval S32 }
- { StartDate Variable 1 } // string
- { Balance S32 }
- { TotalCredits S32 }
- { TotalDebits S32 }
- { ObjectTaxCurrent S32 }
- { LightTaxCurrent S32 }
- { LandTaxCurrent S32 }
- { GroupTaxCurrent S32 }
- { ParcelDirFeeCurrent S32 }
- { ObjectTaxEstimate S32 }
- { LightTaxEstimate S32 }
- { LandTaxEstimate S32 }
- { GroupTaxEstimate S32 }
- { ParcelDirFeeEstimate S32 }
- { StipendEstimate S32 }
- { BonusEstimate S32 }
- { LastTaxDate Variable 1 } // string
- { TaxDate Variable 1 } // string
+ ReplyBlock Single
+ { RegionID LLUUID }
+ { RegionHandle U64 }
}
}
-
-// Reliable
+// Move money from one agent to another. Validation will happen at the
+// simulator, the dataserver will actually do the work. Dataserver
+// generates a MoneyBalance message in reply. The simulator
+// will generate a MoneyTransferBackend in response to this.
+// viewer -> simulator -> dataserver
{
- MoneyDetailsRequest Low NotTrusted Unencoded
+ MoneyTransferRequest Low 311 NotTrusted Zerocoded
{
AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
+ { AgentID LLUUID }
+ { SessionID LLUUID }
}
{
MoneyData Single
- { RequestID LLUUID }
- { IntervalDays S32 }
- { CurrentInterval S32 }
+ { SourceID LLUUID }
+ { DestID LLUUID } // destination of the transfer
+ { Flags U8 }
+ { Amount S32 }
+ { AggregatePermNextOwner U8 }
+ { AggregatePermInventory U8 }
+ { TransactionType S32 } // see lltransactiontypes.h
+ { Description Variable 1 } // string, name of item for purchases
}
}
-// Reliable
+// And, the money transfer
{
- MoneyDetailsReply Low NotTrusted Zerocoded
- {
- AgentData Single
- { AgentID LLUUID }
- }
+ MoneyTransferBackend Low 312 Trusted Zerocoded
{
MoneyData Single
- { RequestID LLUUID }
- { IntervalDays S32 }
- { CurrentInterval S32 }
- { StartDate Variable 1 } // string
- }
- {
- HistoryData Variable
- { Description Variable 1 } // string
- { Amount S32 }
+ { TransactionID LLUUID }
+ { TransactionTime U32 } // utc seconds since epoch
+ { SourceID LLUUID }
+ { DestID LLUUID } // destination of the transfer
+ { Flags U8 }
+ { Amount S32 }
+ { AggregatePermNextOwner U8 }
+ { AggregatePermInventory U8 }
+ { TransactionType S32 } // see lltransactiontypes.h
+ { RegionID LLUUID } // region sending the request, for logging
+ { GridX U32 } // *HACK: database doesn't have region_id in schema
+ { GridY U32 } // *HACK: database doesn't have region_id in schema
+ { Description Variable 1 } // string, name of item for purchases
}
}
+// viewer -> userserver -> dataserver
// Reliable
{
- MoneyTransactionsRequest Low NotTrusted Unencoded
+ MoneyBalanceRequest Low 313 NotTrusted Zerocoded
{
- AgentData Single
+ AgentData Single
{ AgentID LLUUID }
{ SessionID LLUUID }
}
{
MoneyData Single
- { RequestID LLUUID }
- { IntervalDays S32 }
- { CurrentInterval S32 }
+ { TransactionID LLUUID }
}
}
-// Reliable
+
+// dataserver -> simulator -> viewer
{
- MoneyTransactionsReply Low NotTrusted Zerocoded
+ MoneyBalanceReply Low 314 Trusted Zerocoded
{
- AgentData Single
- { AgentID LLUUID }
+ MoneyData Single
+ { AgentID LLUUID }
+ { TransactionID LLUUID }
+ { TransactionSuccess BOOL } // BOOL
+ { MoneyBalance S32 }
+ { SquareMetersCredit S32 }
+ { SquareMetersCommitted S32 }
+ { Description Variable 1 } // string
}
+}
+
+
+// RoutedMoneyBalanceReply
+// This message is used when a dataserver needs to send updated
+// money balance information to a simulator other than the one it
+// is connected to. It uses the standard TransferBlock format.
+// dataserver -> simulator -> spaceserver -> simulator -> viewer
+// reliable
+{
+ RoutedMoneyBalanceReply Low 315 Trusted Zerocoded
{
- MoneyData Single
- { RequestID LLUUID }
- { IntervalDays S32 }
- { CurrentInterval S32 }
- { StartDate Variable 1 } // string
+ TargetBlock Single
+ { TargetIP IPADDR } // U32 encoded IP
+ { TargetPort IPPORT }
}
{
- HistoryData Variable
- { Time Variable 1 } // string
- { User Variable 1 } // string
- { Type S32 }
- { Item Variable 1 } // string
- { Amount S32 }
+ MoneyData Single
+ { AgentID LLUUID }
+ { TransactionID LLUUID }
+ { TransactionSuccess BOOL } // BOOL
+ { MoneyBalance S32 }
+ { SquareMetersCredit S32 }
+ { SquareMetersCommitted S32 }
+ { Description Variable 1 } // string
}
}
+
+
//---------------------------------------------------------------------------
// Gesture saves/loads
//---------------------------------------------------------------------------
@@ -7635,7 +6720,7 @@ sim -> dataserver
// Tell the database that some gestures are now active
// viewer -> sim -> data
{
- ActivateGestures Low NotTrusted Unencoded
+ ActivateGestures Low 316 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7653,7 +6738,7 @@ sim -> dataserver
// Tell the database some gestures are no longer active
// viewer -> sim -> data
{
- DeactivateGestures Low NotTrusted Unencoded
+ DeactivateGestures Low 317 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7689,7 +6774,7 @@ sim -> dataserver
// dataserver-> userserver -> viewer to move around the mute list
{
- MuteListUpdate Low Trusted Unencoded
+ MuteListUpdate Low 318 Trusted Unencoded
{
MuteData Single
{ AgentID LLUUID }
@@ -7699,7 +6784,7 @@ sim -> dataserver
// tell viewer to use the local mute cache
{
- UseCachedMuteList Low NotTrusted Unencoded
+ UseCachedMuteList Low 319 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7713,7 +6798,7 @@ sim -> dataserver
// agent-related and the same PUT will be issued to the sim host if
// they are online.
{
- GrantUserRights Low NotTrusted Unencoded
+ GrantUserRights Low 320 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7732,7 +6817,7 @@ sim -> dataserver
// right. Adding/removing online status rights will show up as an
// online/offline notification.
{
- ChangeUserRights Low Trusted Unencoded
+ ChangeUserRights Low 321 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7747,14 +6832,14 @@ sim -> dataserver
// notification for login and logout.
// source_sim -> dest_viewer
{
- OnlineNotification Low Trusted Unencoded
+ OnlineNotification Low 322 Trusted Unencoded
{
AgentBlock Variable
{ AgentID LLUUID }
}
}
{
- OfflineNotification Low Trusted Unencoded
+ OfflineNotification Low 323 Trusted Unencoded
{
AgentBlock Variable
{ AgentID LLUUID }
@@ -7767,7 +6852,7 @@ sim -> dataserver
// failure checked at sim and triggers ImprovedInstantMessage
// success triggers SetStartLocation
{
- SetStartLocationRequest Low NotTrusted Zerocoded
+ SetStartLocationRequest Low 324 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7785,7 +6870,7 @@ sim -> dataserver
// SetStartLocation
// sim -> dataserver
{
- SetStartLocation Low Trusted Zerocoded
+ SetStartLocation Low 325 Trusted Zerocoded
{
StartLocationData Single
{ AgentID LLUUID }
@@ -7806,7 +6891,7 @@ sim -> dataserver
// NetTest - This goes back and forth to the space server because of
// problems determining the port
{
- NetTest Low NotTrusted Unencoded
+ NetTest Low 326 NotTrusted Unencoded
{
NetBlock Single
{ Port IPPORT }
@@ -7816,7 +6901,7 @@ sim -> dataserver
// SetChildCount - Sent to launcher to adjust nominal child count
// Simulator sends this increase the sim/cpu ratio on startup
{
- SetCPURatio Low NotTrusted Unencoded
+ SetCPURatio Low 327 NotTrusted Unencoded
{
Data Single
{ Ratio U8 }
@@ -7828,7 +6913,7 @@ sim -> dataserver
// SimCrashed - Sent to dataserver when the sim goes down.
// Maybe we should notify the spaceserver as well?
{
- SimCrashed Low NotTrusted Unencoded
+ SimCrashed Low 328 NotTrusted Unencoded
{
Data Single
{ RegionX U32 }
@@ -7846,7 +6931,7 @@ sim -> dataserver
// NameValuePair - if the specific task exists on simulator, add or replace this name value pair
{
- NameValuePair Low Trusted Unencoded
+ NameValuePair Low 329 Trusted Unencoded
{
TaskData Single
{ ID LLUUID }
@@ -7859,7 +6944,7 @@ sim -> dataserver
// NameValuePair - if the specific task exists on simulator or dataserver, remove the name value pair (value is ignored)
{
- RemoveNameValuePair Low Trusted Unencoded
+ RemoveNameValuePair Low 330 Trusted Unencoded
{
TaskData Single
{ ID LLUUID }
@@ -7871,20 +6956,6 @@ sim -> dataserver
}
-// GetNameValuePair - if the specific task exists on simulator, get the value of this NameVale pair (if it exists)
-// FIXME: No transmit. 12 Sep 2002 mark
-{
- GetNameValuePair Low NotTrusted Unencoded
- {
- TaskData Single
- { ID LLUUID }
- }
- {
- NameValueName Variable
- { Name Variable 2 }
- }
-}
-
// ***************************************************************************
// Add/Remove Attachment messages
// ***************************************************************************
@@ -7894,7 +6965,7 @@ sim -> dataserver
// DO NOT ALLOW THIS FROM THE VIEWER
//
{
- UpdateAttachment Low Trusted Zerocoded
+ UpdateAttachment Low 331 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7939,7 +7010,7 @@ sim -> dataserver
// Simulator informs Dataserver that attachment has been taken off
{
- RemoveAttachment Low NotTrusted Unencoded
+ RemoveAttachment Low 332 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -7959,7 +7030,7 @@ sim -> dataserver
// SoundTrigger - Sent by simulator to viewer to trigger sound outside current region
{
- SoundTrigger High NotTrusted Unencoded
+ SoundTrigger High 29 NotTrusted Unencoded
{
SoundData Single
{ SoundID LLUUID }
@@ -7974,7 +7045,7 @@ sim -> dataserver
// AttachedSound - Sent by simulator to viewer to play sound attached with an object
{
- AttachedSound Medium Trusted Unencoded
+ AttachedSound Medium 13 Trusted Unencoded
{
DataBlock Single
{ SoundID LLUUID }
@@ -7988,7 +7059,7 @@ sim -> dataserver
// AttachedSoundGainChange - Sent by simulator to viewer to change an attached sounds' volume
{
- AttachedSoundGainChange Medium Trusted Unencoded
+ AttachedSoundGainChange Medium 14 Trusted Unencoded
{
DataBlock Single
{ ObjectID LLUUID }
@@ -7996,21 +7067,11 @@ sim -> dataserver
}
}
-// AttachedSoundCutoffRadius - Sent by simulator to viewer to change an attached sounds' cutoff radius
-
-{
- AttachedSoundCutoffRadius Medium Trusted Unencoded
- {
- DataBlock Single
- { ObjectID LLUUID }
- { Radius F32 }
- }
-}
// PreloadSound - Sent by simulator to viewer to preload sound for an object
{
- PreloadSound Medium Trusted Unencoded
+ PreloadSound Medium 15 Trusted Unencoded
{
DataBlock Variable
{ ObjectID LLUUID }
@@ -8026,7 +7087,7 @@ sim -> dataserver
// current assumes an existing UUID, need to enhance for new assets
{
- AssetUploadRequest Low NotTrusted Unencoded
+ AssetUploadRequest Low 333 NotTrusted Unencoded
{
AssetBlock Single
{ TransactionID LLUUID }
@@ -8038,7 +7099,7 @@ sim -> dataserver
}
{
- AssetUploadComplete Low NotTrusted Unencoded
+ AssetUploadComplete Low 334 NotTrusted Unencoded
{
AssetBlock Single
{ UUID LLUUID }
@@ -8047,59 +7108,11 @@ sim -> dataserver
}
}
-//
-// Reputation
-//
-{
- ReputationAgentAssign Low NotTrusted Unencoded
- {
- DataBlock Single
- { RatorID LLUUID }
- { RateeID LLUUID }
- { Behavior F32 } // float, usually -1 or +1
- { Appearance F32 } // float, usually -1 or +1
- { Building F32 } // float, usually -1 or +1
- }
-}
-
-// ReputationIndividualRequest
-// Gets From's rating of To.
-// reliable
-{
- ReputationIndividualRequest Low NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- ReputationData Single
- { ToID LLUUID }
- }
-}
-
-// ReputationIndividualReply
-// reliable
-{
- ReputationIndividualReply Low Trusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- }
- {
- ReputationData Single
- { ToID LLUUID }
- { Behavior F32 } // float, usually -1 or +1
- { Appearance F32 } // float, usually -1 or +1
- { Building F32 } // float, usually -1 or +1
- }
-}
-
// Script on simulator asks dataserver if there are any email messages
// waiting.
{
- EmailMessageRequest Low Trusted Unencoded
+ EmailMessageRequest Low 335 Trusted Unencoded
{
DataBlock Single
{ ObjectID LLUUID }
@@ -8111,7 +7124,7 @@ sim -> dataserver
// Dataserver gives simulator the oldest email message in the queue, along with
// how many messages are left in the queue. And passes back the filter used to request emails.
{
- EmailMessageReply Low Trusted Unencoded
+ EmailMessageReply Low 336 Trusted Unencoded
{
DataBlock Single
{ ObjectID LLUUID }
@@ -8126,7 +7139,7 @@ sim -> dataserver
// Script on simulator sends mail to another script
{
- InternalScriptMail Medium Trusted Unencoded
+ InternalScriptMail Medium 16 Trusted Unencoded
{
DataBlock Single
{ From Variable 1 }
@@ -8138,7 +7151,7 @@ sim -> dataserver
// Script on simulator asks dataserver for information
{
- ScriptDataRequest Low Trusted Unencoded
+ ScriptDataRequest Low 337 Trusted Unencoded
{
DataBlock Variable
{ Hash U64 }
@@ -8149,7 +7162,7 @@ sim -> dataserver
// Data server responds with data
{
- ScriptDataReply Low Trusted Unencoded
+ ScriptDataReply Low 338 Trusted Unencoded
{
DataBlock Variable
{ Hash U64 }
@@ -8167,7 +7180,7 @@ sim -> dataserver
// simulator -> dataserver
// reliable
{
- CreateGroupRequest Low NotTrusted Zerocoded
+ CreateGroupRequest Low 339 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8191,7 +7204,7 @@ sim -> dataserver
// simulator -> viewer
// reliable
{
- CreateGroupReply Low Trusted Unencoded
+ CreateGroupReply Low 340 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8209,7 +7222,7 @@ sim -> dataserver
// simulator -> dataserver
// reliable
{
- UpdateGroupInfo Low NotTrusted Zerocoded
+ UpdateGroupInfo Low 341 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8232,7 +7245,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- GroupRoleChanges Low NotTrusted Unencoded
+ GroupRoleChanges Low 342 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8251,7 +7264,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- JoinGroupRequest Low NotTrusted Zerocoded
+ JoinGroupRequest Low 343 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8266,7 +7279,7 @@ sim -> dataserver
// JoinGroupReply
// dataserver -> simulator -> viewer
{
- JoinGroupReply Low Trusted Unencoded
+ JoinGroupReply Low 344 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8283,7 +7296,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- EjectGroupMemberRequest Low NotTrusted Unencoded
+ EjectGroupMemberRequest Low 345 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8303,7 +7316,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- EjectGroupMemberReply Low Trusted Unencoded
+ EjectGroupMemberReply Low 346 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8322,7 +7335,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- LeaveGroupRequest Low NotTrusted Unencoded
+ LeaveGroupRequest Low 347 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8337,7 +7350,7 @@ sim -> dataserver
// LeaveGroupReply
// dataserver -> simulator -> viewer
{
- LeaveGroupReply Low Trusted Unencoded
+ LeaveGroupReply Low 348 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8353,7 +7366,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- InviteGroupRequest Low NotTrusted Unencoded
+ InviteGroupRequest Low 349 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID } // UUID of inviting agent
@@ -8374,7 +7387,7 @@ sim -> dataserver
// simulator -> dataserver
// reliable
{
- InviteGroupResponse Low Trusted Unencoded
+ InviteGroupResponse Low 350 Trusted Unencoded
{
InviteData Single
{ AgentID LLUUID }
@@ -8389,7 +7402,7 @@ sim -> dataserver
// viewer-> simulator -> dataserver
// reliable
{
- GroupProfileRequest Low NotTrusted Unencoded
+ GroupProfileRequest Low 351 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8405,7 +7418,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- GroupProfileReply Low Trusted Zerocoded
+ GroupProfileReply Low 352 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8436,7 +7449,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- GroupAccountSummaryRequest Low NotTrusted Zerocoded
+ GroupAccountSummaryRequest Low 353 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8455,7 +7468,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// Reliable
{
- GroupAccountSummaryReply Low Trusted Zerocoded
+ GroupAccountSummaryReply Low 354 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8489,7 +7502,7 @@ sim -> dataserver
// Reliable
{
- GroupAccountDetailsRequest Low NotTrusted Zerocoded
+ GroupAccountDetailsRequest Low 355 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8506,7 +7519,7 @@ sim -> dataserver
// Reliable
{
- GroupAccountDetailsReply Low Trusted Zerocoded
+ GroupAccountDetailsReply Low 356 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8529,7 +7542,7 @@ sim -> dataserver
// Reliable
{
- GroupAccountTransactionsRequest Low NotTrusted Zerocoded
+ GroupAccountTransactionsRequest Low 357 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8546,7 +7559,7 @@ sim -> dataserver
// Reliable
{
- GroupAccountTransactionsReply Low Trusted Zerocoded
+ GroupAccountTransactionsReply Low 358 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8573,7 +7586,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
//reliable
{
- GroupActiveProposalsRequest Low NotTrusted Unencoded
+ GroupActiveProposalsRequest Low 359 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8593,7 +7606,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- GroupActiveProposalItemReply Low Trusted Zerocoded
+ GroupActiveProposalItemReply Low 360 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8623,7 +7636,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
//reliable
{
- GroupVoteHistoryRequest Low NotTrusted Unencoded
+ GroupVoteHistoryRequest Low 361 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8643,7 +7656,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- GroupVoteHistoryItemReply Low Trusted Zerocoded
+ GroupVoteHistoryItemReply Low 362 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8679,7 +7692,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- StartGroupProposal Low NotTrusted Zerocoded
+ StartGroupProposal Low 363 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8699,7 +7712,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- GroupProposalBallot Low NotTrusted Unencoded
+ GroupProposalBallot Low 364 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8716,7 +7729,7 @@ sim -> dataserver
// TallyVotes userserver -> dataserver
// reliable
{
- TallyVotes Low Trusted Unencoded
+ TallyVotes Low 365 Trusted Unencoded
}
@@ -8726,7 +7739,7 @@ sim -> dataserver
// simulator -> dataserver
// reliable
{
- GroupMembersRequest Low NotTrusted Unencoded
+ GroupMembersRequest Low 366 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8744,7 +7757,7 @@ sim -> dataserver
// dataserver -> simulator
// reliable
{
- GroupMembersReply Low Trusted Zerocoded
+ GroupMembersReply Low 367 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8769,7 +7782,7 @@ sim -> dataserver
// used to switch an agent's currently active group.
// viewer -> simulator -> dataserver -> AgentDataUpdate...
{
- ActivateGroup Low NotTrusted Zerocoded
+ ActivateGroup Low 368 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8780,7 +7793,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
{
- SetGroupContribution Low NotTrusted Unencoded
+ SetGroupContribution Low 369 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8795,7 +7808,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
{
- SetGroupAcceptNotices Low NotTrusted Unencoded
+ SetGroupAcceptNotices Low 370 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8811,7 +7824,7 @@ sim -> dataserver
// GroupRoleDataRequest
// viewer -> simulator -> dataserver
{
- GroupRoleDataRequest Low NotTrusted Unencoded
+ GroupRoleDataRequest Low 371 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8829,7 +7842,7 @@ sim -> dataserver
// All role data for this group
// dataserver -> simulator -> agent
{
- GroupRoleDataReply Low Trusted Unencoded
+ GroupRoleDataReply Low 372 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8854,7 +7867,7 @@ sim -> dataserver
// GroupRoleMembersRequest
// viewer -> simulator -> dataserver
{
- GroupRoleMembersRequest Low NotTrusted Unencoded
+ GroupRoleMembersRequest Low 373 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8871,7 +7884,7 @@ sim -> dataserver
// All role::member pairs for this group.
// dataserver -> simulator -> agent
{
- GroupRoleMembersReply Low Trusted Unencoded
+ GroupRoleMembersReply Low 374 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8889,7 +7902,7 @@ sim -> dataserver
// GroupTitlesRequest
// viewer -> simulator -> dataserver
{
- GroupTitlesRequest Low NotTrusted Unencoded
+ GroupTitlesRequest Low 375 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8903,7 +7916,7 @@ sim -> dataserver
// GroupTitlesReply
// dataserver -> simulator -> viewer
{
- GroupTitlesReply Low Trusted Zerocoded
+ GroupTitlesReply Low 376 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8921,7 +7934,7 @@ sim -> dataserver
// GroupTitleUpdate
// viewer -> simulator -> dataserver
{
- GroupTitleUpdate Low NotTrusted Unencoded
+ GroupTitleUpdate Low 377 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8934,7 +7947,7 @@ sim -> dataserver
// GroupRoleUpdate
// viewer -> simulator -> dataserver
{
- GroupRoleUpdate Low NotTrusted Unencoded
+ GroupRoleUpdate Low 378 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -8957,7 +7970,7 @@ sim -> dataserver
// Request the members of the live help group needed for requesting agent.
// userserver -> dataserver
{
- LiveHelpGroupRequest Low Trusted Unencoded
+ LiveHelpGroupRequest Low 379 Trusted Unencoded
{
RequestData Single
{ RequestID LLUUID }
@@ -8968,7 +7981,7 @@ sim -> dataserver
// Send down the group
// dataserver -> userserver
{
- LiveHelpGroupReply Low Trusted Unencoded
+ LiveHelpGroupReply Low 380 Trusted Unencoded
{
ReplyData Single
{ RequestID LLUUID }
@@ -8986,7 +7999,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- AgentWearablesRequest Low NotTrusted Unencoded
+ AgentWearablesRequest Low 381 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9000,7 +8013,7 @@ sim -> dataserver
// reliable
// NEVER from viewer to sim
{
- AgentWearablesUpdate Low Trusted Zerocoded
+ AgentWearablesUpdate Low 382 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9021,7 +8034,7 @@ sim -> dataserver
// viewer->sim->dataserver
// reliable
{
- AgentIsNowWearing Low NotTrusted Zerocoded
+ AgentIsNowWearing Low 383 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9040,7 +8053,7 @@ sim -> dataserver
// viewer -> simulator -> dataserver
// reliable
{
- AgentCachedTexture Low NotTrusted Unencoded
+ AgentCachedTexture Low 384 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9059,7 +8072,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- AgentCachedTextureResponse Low Trusted Unencoded
+ AgentCachedTextureResponse Low 385 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9076,7 +8089,7 @@ sim -> dataserver
// Request an AgentDataUpdate without changing any agent data.
{
- AgentDataUpdateRequest Low NotTrusted Unencoded
+ AgentDataUpdateRequest Low 386 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9090,7 +8103,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- AgentDataUpdate Low Trusted Zerocoded
+ AgentDataUpdate Low 387 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9108,7 +8121,7 @@ sim -> dataserver
// This is a bunch of group data that needs to be appropriatly routed based on presence info.
// dataserver -> simulator
{
- GroupDataUpdate Low Trusted Zerocoded
+ GroupDataUpdate Low 388 Trusted Zerocoded
{
AgentGroupData Variable
{ AgentID LLUUID }
@@ -9123,7 +8136,7 @@ sim -> dataserver
// dataserver -> simulator -> viewer
// reliable
{
- AgentGroupDataUpdate Low Trusted Zerocoded
+ AgentGroupDataUpdate Low 389 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9145,7 +8158,7 @@ sim -> dataserver
// dataserver -> userserver
// reliable
{
- AgentDropGroup Low Trusted Zerocoded
+ AgentDropGroup Low 390 Trusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9158,7 +8171,7 @@ sim -> dataserver
// chat and IM log table.
// Sent from userserver (IM logging) and simulator (chat logging).
{
- LogTextMessage Low Trusted Zerocoded
+ LogTextMessage Low 391 Trusted Zerocoded
{
DataBlock Variable
{ FromAgentId LLUUID }
@@ -9176,7 +8189,7 @@ sim -> dataserver
// sim-->viewer (multiple effects that can be seen by viewer)
// the AgentData block used for authentication for viewer-->sim messages
{
- ViewerEffect Medium NotTrusted Zerocoded
+ ViewerEffect Medium 17 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9193,26 +8206,12 @@ sim -> dataserver
}
}
-// SetSunPhase
-// Sets the current phase of the sun - propagated from viewer->sim->spaceserver (if godlike)
-{
- SetSunPhase Medium NotTrusted Unencoded
- {
- AgentData Single
- { AgentID LLUUID }
- { SessionID LLUUID }
- }
- {
- Data Single
- { Phase F32 } // F32 (radians)
- }
-}
// CreateTrustedCircuit
// Sent to establish a trust relationship between two components.
// Only sent in response to a DenyTrustedCircuit message.
{
- CreateTrustedCircuit Low NotTrusted Unencoded
+ CreateTrustedCircuit Low 392 NotTrusted Unencoded
{
DataBlock Single
{ EndPointID LLUUID }
@@ -9227,7 +8226,7 @@ sim -> dataserver
// - the reception of a trusted message on a non-trusted circuit
// This allows us to re-auth a circuit if it gets closed due to timeouts or network failures.
{
- DenyTrustedCircuit Low NotTrusted Unencoded
+ DenyTrustedCircuit Low 393 NotTrusted Unencoded
{
DataBlock Single
{ EndPointID LLUUID }
@@ -9237,12 +8236,12 @@ sim -> dataserver
// RequestTrustedCircuit
// If the destination does not trust the sender, a Deny is sent back.
{
- RequestTrustedCircuit Low Trusted Unencoded
+ RequestTrustedCircuit Low 394 Trusted Unencoded
}
{
- RezSingleAttachmentFromInv Low NotTrusted Zerocoded
+ RezSingleAttachmentFromInv Low 395 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9263,7 +8262,7 @@ sim -> dataserver
}
{
- RezMultipleAttachmentsFromInv Low NotTrusted Zerocoded
+ RezMultipleAttachmentsFromInv Low 396 NotTrusted Zerocoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9291,7 +8290,7 @@ sim -> dataserver
{
- DetachAttachmentIntoInv Low NotTrusted Unencoded
+ DetachAttachmentIntoInv Low 397 NotTrusted Unencoded
{
ObjectData Single
{ AgentID LLUUID }
@@ -9303,7 +8302,7 @@ sim -> dataserver
// Viewer -> Sim
// Used in "Make New Outfit"
{
- CreateNewOutfitAttachments Low NotTrusted Unencoded
+ CreateNewOutfitAttachments Low 398 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9325,7 +8324,7 @@ sim -> dataserver
//-----------------------------------------------------------------------------
{
- UserInfoRequest Low NotTrusted Unencoded
+ UserInfoRequest Low 399 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9334,7 +8333,7 @@ sim -> dataserver
}
{
- UserInfoReply Low NotTrusted Unencoded
+ UserInfoReply Low 400 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9348,7 +8347,7 @@ sim -> dataserver
}
{
- UpdateUserInfo Low NotTrusted Unencoded
+ UpdateUserInfo Low 401 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9367,36 +8366,10 @@ sim -> dataserver
//-----------------------------------------------------------------------------
-// Message to rename identified parcels. script -> userserver -> dataserver
-{
- StartParcelRename Low Trusted Unencoded
- {
- ParcelData Variable
- { ParcelID LLUUID }
- { NewName Variable 1 } // string
- }
-}
-
-// ack the last message. userserver->script
-{
- StartParcelRenameAck Low Trusted Unencoded
-}
-
-// dataserver -> userserver -> spaceserver
-{
- BulkParcelRename Low Trusted Zerocoded
- {
- ParcelData Variable
- { RegionHandle U64 }
- { ParcelID LLUUID }
- { NewName Variable 1 } // string
- }
-}
-
// spaceserver -> sim
// tell a particular simulator to rename a parcel
{
- ParcelRename Low Trusted Unencoded
+ ParcelRename Low 402 Trusted Unencoded
{
ParcelData Variable
{ ParcelID LLUUID }
@@ -9404,36 +8377,11 @@ sim -> dataserver
}
}
-// message to remove specified parcels. script -> userserver -> dataserver
-{
- StartParcelRemove Low Trusted Unencoded
- {
- ParcelData Variable
- { ParcelID LLUUID }
- }
-}
-
-// ack the start parcel remove message
-{
- StartParcelRemoveAck Low Trusted Unencoded
-}
-
-// dataserver -> userserver -> spaceserver
-// The space server will then slice this message into a series of
-// RemoveParcel messages.
-{
- BulkParcelRemove Low Trusted Zerocoded
- {
- ParcelData Variable
- { RegionHandle U64 }
- { ParcelID LLUUID }
- }
-}
// sim -> viewer
// initiate upload. primarily used for uploading raw files.
{
- InitiateDownload Low NotTrusted Unencoded
+ InitiateDownload Low 403 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9448,7 +8396,7 @@ sim -> dataserver
// Generalized system message. Each Requst has its own protocol for
// the StringData block format and contents.
{
- SystemMessage Low Trusted Zerocoded
+ SystemMessage Low 404 Trusted Zerocoded
{
MethodData Single
{ Method Variable 1 }
@@ -9472,7 +8420,7 @@ sim -> dataserver
// of all map layers and NULL-layer sims.
// Returns: MapLayerReply and MapBlockReply
{
- MapLayerRequest Low NotTrusted Unencoded
+ MapLayerRequest Low 405 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9485,7 +8433,7 @@ sim -> dataserver
// sim -> viewer
{
- MapLayerReply Low Trusted Unencoded
+ MapLayerReply Low 406 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9506,7 +8454,7 @@ sim -> dataserver
// of the sims in a specified region.
// Returns: MapBlockReply
{
- MapBlockRequest Low NotTrusted Unencoded
+ MapBlockRequest Low 407 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9529,7 +8477,7 @@ sim -> dataserver
// of the sims with a given name.
// Returns: MapBlockReply
{
- MapNameRequest Low NotTrusted Unencoded
+ MapNameRequest Low 408 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9546,7 +8494,7 @@ sim -> dataserver
// sim -> viewer
{
- MapBlockReply Low Trusted Unencoded
+ MapBlockReply Low 409 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9571,7 +8519,7 @@ sim -> dataserver
// Used for Telehubs, Agents, Events, Popular Places, etc.
// Returns: MapBlockReply
{
- MapItemRequest Low NotTrusted Unencoded
+ MapItemRequest Low 410 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9589,7 +8537,7 @@ sim -> dataserver
// sim -> viewer
{
- MapItemReply Low Trusted Unencoded
+ MapItemReply Low 411 Trusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9615,7 +8563,7 @@ sim -> dataserver
//-----------------------------------------------------------------------------
// reliable
{
- SendPostcard Low NotTrusted Unencoded
+ SendPostcard Low 412 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9636,7 +8584,7 @@ sim -> dataserver
// Script on simulator requests rpc channel from rpcserver
// simulator -> dataserver -> MySQL
{
- RpcChannelRequest Low Trusted Unencoded
+ RpcChannelRequest Low 413 Trusted Unencoded
{
DataBlock Single
{ GridX U32 }
@@ -9650,7 +8598,7 @@ sim -> dataserver
// ChannelID will be the NULL UUID if unable to register
// dataserver -> simulator
{
- RpcChannelReply Low Trusted Unencoded
+ RpcChannelReply Low 414 Trusted Unencoded
{
DataBlock Single
{ TaskID LLUUID }
@@ -9664,7 +8612,7 @@ sim -> dataserver
// RpcScriptRequestInboundForward: spaceserver -> simulator
// reply: simulator -> rpcserver
{
- RpcScriptRequestInbound Low NotTrusted Unencoded
+ RpcScriptRequestInbound Low 415 NotTrusted Unencoded
{
TargetBlock Single
{ GridX U32 }
@@ -9682,7 +8630,7 @@ sim -> dataserver
// spaceserver -> simulator
{
- RpcScriptRequestInboundForward Low Trusted Unencoded
+ RpcScriptRequestInboundForward Low 416 Trusted Unencoded
{
DataBlock Single
{ RPCServerIP IPADDR }
@@ -9698,7 +8646,7 @@ sim -> dataserver
// simulator -> rpcserver
// Not trusted because trust establishment doesn't work here.
{
- RpcScriptReplyInbound Low NotTrusted Unencoded
+ RpcScriptReplyInbound Low 417 NotTrusted Unencoded
{
DataBlock Single
{ TaskID LLUUID }
@@ -9709,37 +8657,11 @@ sim -> dataserver
}
}
-// Simulator asks for what sim a script lives on (intersim object->object email delivery)
-// simulator -> dataserver
-// *NOTE: Not in use. Phoenix 2006-08-16
-{
- MailTaskSimRequest Low Trusted Unencoded
- {
- DataBlock Single
- { TaskID LLUUID }
- }
-}
-
-// Reply from dataserver to simulator about where a mailping needs to go.
-// Same as below, but needs to be different as it has different routing.
-// *NOTE: Not in use. Phoenix 2006-08-16
-{
- MailTaskSimReply Low Trusted Unencoded
- {
- TargetBlock Single
- { TargetIP Variable 1 } // String IP
- { TargetPort IPPORT }
- }
- {
- DataBlock Single
- { TaskID LLUUID }
- }
-}
// ScriptMailRegistration
// Simulator -> dataserver
{
- ScriptMailRegistration Low Trusted Unencoded
+ ScriptMailRegistration Low 418 Trusted Unencoded
{
DataBlock Single
{ TargetIP Variable 1 } // String IP
@@ -9752,7 +8674,7 @@ sim -> dataserver
// ParcelMediaCommandMessage
// Sends a parcel media command
{
- ParcelMediaCommandMessage Low Trusted Unencoded
+ ParcelMediaCommandMessage Low 419 Trusted Unencoded
{
CommandBlock Single
{ Flags U32 }
@@ -9765,7 +8687,7 @@ sim -> dataserver
// Sends a parcel media update to a single user
// For global updates use the parcel manager.
{
- ParcelMediaUpdate Low Trusted Unencoded
+ ParcelMediaUpdate Low 420 Trusted Unencoded
{
DataBlock Single
{ MediaURL Variable 1 } // string
@@ -9777,7 +8699,7 @@ sim -> dataserver
// LandStatRequest
// Sent by the viewer to request collider/script information for a parcel
{
- LandStatRequest Low NotTrusted Unencoded
+ LandStatRequest Low 421 NotTrusted Unencoded
{
AgentData Single
{ AgentID LLUUID }
@@ -9788,14 +8710,14 @@ sim -> dataserver
{ ReportType U32 }
{ RequestFlags U32 }
{ Filter Variable 1 }
- { ParcelLocalID S32 1 }
+ { ParcelLocalID S32 }
}
}
// LandStatReply
// Sent by the simulator in response to LandStatRequest
{
- LandStatReply Low Trusted Unencoded
+ LandStatReply Low 422 Trusted Unencoded
{
RequestData Single
{ ReportType U32 }
@@ -9814,3 +8736,26 @@ sim -> dataserver
{ OwnerName Variable 1 }
}
}
+
+// Generic Error -- this is used for sending an error message
+// to a UDP recipient. The lowest common denominator is to at least
+// log the message. More sophisticated receivers can do something
+// smarter, for example, a money transaction failure can put up a
+// more user visible UI widget.
+{
+ Error Low 423 NotTrusted Zerocoded
+ {
+ AgentData Single
+ { AgentID LLUUID } // will forward to agentid if coming from trusted circuit
+ }
+ {
+ Data Single
+ { Code S32 } // matches http status codes
+ { Token Variable 1 } // some specific short string based message
+ { ID LLUUID } // the transactionid/uniqueid/sessionid whatever.
+ { System Variable 1 } // The hierarchical path to the system, eg, "message/handler"
+ { Message Variable 2 } // Human readable message
+ { Data Variable 2 } // Binary serialized LLSD for extra info.
+ }
+}
+
diff --git a/linden/scripts/setup-path.py b/linden/scripts/setup-path.py
new file mode 100755
index 0000000..30048ba
--- /dev/null
+++ b/linden/scripts/setup-path.py
@@ -0,0 +1,38 @@
+#!/usr/bin/python
+# @file setup-path.py
+# @brief Get the python library directory in the path, so we don't have
+# to screw with PYTHONPATH or symbolic links.
+#
+# 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 sys
+from os.path import realpath, dirname, join
+
+# Walk back to checkout base directory
+dir = dirname(dirname(realpath(__file__)))
+# Walk in to libraries directory
+dir = join(join(join(dir, 'indra'), 'lib'), 'python')
+
+if dir not in sys.path:
+ sys.path.insert(0, dir)
diff --git a/linden/scripts/template_verifier.py b/linden/scripts/template_verifier.py
new file mode 100755
index 0000000..1bc03e7
--- /dev/null
+++ b/linden/scripts/template_verifier.py
@@ -0,0 +1,175 @@
+#!/usr/bin/python
+# @file template_verifier.py
+# @brief Message template compatibility verifier.
+#
+# 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.
+
+"""template_verifier is a script which will compare the
+current repository message template with the "master" message template, accessible
+via http://secondlife.com/app/message_template/master_message_template.msg
+If [FILE] is specified, it will be checked against the master template.
+If [FILE] [FILE] is specified, two local files will be checked against
+each other.
+"""
+
+from os.path import realpath, dirname, join, exists
+setup_path = join(dirname(realpath(__file__)), "setup-path.py")
+if exists(setup_path):
+ execfile(setup_path)
+import optparse
+import os
+import sys
+import urllib
+
+from indra import compatibility
+from indra import llmessage
+
+def die(msg):
+ print >>sys.stderr, msg
+ sys.exit(1)
+
+MESSAGE_TEMPLATE = 'message_template.msg'
+
+PRODUCTION_ACCEPTABLE = (compatibility.Same, compatibility.Newer)
+DEVELOPMENT_ACCEPTABLE = (
+ compatibility.Same, compatibility.Newer,
+ compatibility.Older, compatibility.Mixed)
+
+def getstatusall(command):
+ """ Like commands.getstatusoutput, but returns stdout and
+ stderr separately(to get around "killed by signal 15" getting
+ included as part of the file). Also, works on Windows."""
+ (input, out, err) = os.popen3(command, 't')
+ input.close() # send no input to the command
+ output = out.read()
+ error = err.read()
+ out.close()
+ status = err.close() # the status comes from the *last* pipe you close
+ return status, output, error
+
+def getstatusoutput(command):
+ status, output, error = getstatusall(command)
+ return status, output
+
+def compare(base, current, mode):
+ """Compare the current template against the base template using the given
+ 'mode' strictness:
+
+ development: Allows Same, Newer, Older, and Mixed
+ production: Allows only Same or Newer
+
+ Print out information about whether the current template is compatible
+ with the base template.
+
+ Returns a tuple of (bool, Compatibility)
+ Return True if they are compatible in this mode, False if not.
+ """
+ base = llmessage.parseTemplateString(base)
+ current = llmessage.parseTemplateString(current)
+
+ compat = current.compatibleWithBase(base)
+ if mode == 'production':
+ acceptable = PRODUCTION_ACCEPTABLE
+ else:
+ acceptable = DEVELOPMENT_ACCEPTABLE
+
+ if type(compat) in acceptable:
+ return True, compat
+ return False, compat
+
+def local_template_filename():
+ """Returns the message template's default location relative to template_verifier.py:
+ ./messages/message_template.msg."""
+ d = os.path.dirname(os.path.realpath(__file__))
+ return os.path.join(d, 'messages', MESSAGE_TEMPLATE)
+
+def run(sysargs):
+ parser = optparse.OptionParser(
+ usage="usage: %prog [FILE] [FILE]",
+ description=__doc__)
+ parser.add_option(
+ '-m', '--mode', type='string', dest='mode',
+ default='development',
+ help="""[development|production] The strictness mode to use
+while checking the template; see the wiki page for details about
+what is allowed and disallowed by each mode:
+http://wiki.secondlife.com/wiki/Template_verifier.py
+""")
+ parser.add_option(
+ '-u', '--master_url', type='string', dest='master_url',
+ default='http://secondlife.com/app/message_template/master_message_template.msg',
+ help="""The url of the master message template.""")
+
+ options, args = parser.parse_args(sysargs)
+
+ # both current and master supplied in positional params
+ if len(args) == 2:
+ master_filename, current_filename = args
+ print "base:", master_filename
+ print "current:", current_filename
+ master = file(master_filename).read()
+ current = file(current_filename).read()
+ # only current supplied in positional param
+ elif len(args) == 1:
+ master = None
+ current_filename = args[0]
+ print "base: "
+ print "current:", current_filename
+ current = file(current_filename).read()
+ # nothing specified, use defaults for everything
+ elif len(args) == 0:
+ master = None
+ current = None
+ else:
+ die("Too many arguments")
+
+ # fetch the master from the url (default or supplied)
+ if master is None:
+ master = urllib.urlopen(options.master_url).read()
+
+ # fetch the template for this build
+ if current is None:
+ current_filename = local_template_filename()
+ print "base: "
+ print "current:", current_filename
+ current = file(current_filename).read()
+
+ acceptable, compat = compare(
+ master, current, options.mode)
+
+ def explain(header, compat):
+ print header
+ # indent compatibility explanation
+ print '\n\t'.join(compat.explain().split('\n'))
+
+ if acceptable:
+ explain("--- PASS ---", compat)
+ else:
+ explain("*** FAIL ***", compat)
+ return 1
+
+if __name__ == '__main__':
+ sys.exit(run(sys.argv[1:]))
+
+
--
cgit v1.1