aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Api/Implementation
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs235
1 files changed, 235 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index f26fc2e..139b4f1 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -7842,6 +7842,241 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7842 return res; 7842 return res;
7843 } 7843 }
7844 7844
7845 public LSL_List llGetPrimMediaParams(int face, LSL_List rules)
7846 {
7847 m_host.AddScriptLPS(1);
7848 ScriptSleep(1000);
7849
7850 // LSL Spec http://wiki.secondlife.com/wiki/LlGetPrimMediaParams says to fail silently if face is invalid
7851 // TODO: Need to correctly handle case where a face has no media (which gives back an empty list).
7852 // Assuming silently fail means give back an empty list. Ideally, need to check this.
7853 if (face < 0 || face > m_host.GetNumberOfSides() - 1)
7854 return new LSL_List();
7855
7856 return GetPrimMediaParams(face, rules);
7857 }
7858
7859 private LSL_List GetPrimMediaParams(int face, LSL_List rules)
7860 {
7861 IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>();
7862 if (null == module)
7863 throw new Exception("Media on a prim functions not available");
7864
7865 MediaEntry me = module.GetMediaEntry(m_host, face);
7866
7867 // As per http://wiki.secondlife.com/wiki/LlGetPrimMediaParams
7868 if (null == me)
7869 return new LSL_List();
7870
7871 LSL_List res = new LSL_List();
7872
7873 for (int i = 0; i < rules.Length; i++)
7874 {
7875 int code = (int)rules.GetLSLIntegerItem(i);
7876
7877 switch (code)
7878 {
7879 case ScriptBaseClass.PRIM_MEDIA_ALT_IMAGE_ENABLE:
7880 // Not implemented
7881 res.Add(new LSL_Integer(0));
7882 break;
7883
7884 case ScriptBaseClass.PRIM_MEDIA_CONTROLS:
7885 if (me.Controls == MediaControls.Standard)
7886 res.Add(new LSL_Integer(ScriptBaseClass.PRIM_MEDIA_CONTROLS_STANDARD));
7887 else
7888 res.Add(new LSL_Integer(ScriptBaseClass.PRIM_MEDIA_CONTROLS_MINI));
7889 break;
7890
7891 case ScriptBaseClass.PRIM_MEDIA_CURRENT_URL:
7892 res.Add(new LSL_String(me.CurrentURL));
7893 break;
7894
7895 case ScriptBaseClass.PRIM_MEDIA_HOME_URL:
7896 res.Add(new LSL_String(me.HomeURL));
7897 break;
7898
7899 case ScriptBaseClass.PRIM_MEDIA_AUTO_LOOP:
7900 res.Add(me.AutoLoop ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE);
7901 break;
7902
7903 case ScriptBaseClass.PRIM_MEDIA_AUTO_PLAY:
7904 res.Add(me.AutoPlay ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE);
7905 break;
7906
7907 case ScriptBaseClass.PRIM_MEDIA_AUTO_SCALE:
7908 res.Add(me.AutoScale ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE);
7909 break;
7910
7911 case ScriptBaseClass.PRIM_MEDIA_AUTO_ZOOM:
7912 res.Add(me.AutoZoom ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE);
7913 break;
7914
7915 case ScriptBaseClass.PRIM_MEDIA_FIRST_CLICK_INTERACT:
7916 res.Add(me.InteractOnFirstClick ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE);
7917 break;
7918
7919 case ScriptBaseClass.PRIM_MEDIA_WIDTH_PIXELS:
7920 res.Add(new LSL_Integer(me.Width));
7921 break;
7922
7923 case ScriptBaseClass.PRIM_MEDIA_HEIGHT_PIXELS:
7924 res.Add(new LSL_Integer(me.Height));
7925 break;
7926
7927 case ScriptBaseClass.PRIM_MEDIA_WHITELIST_ENABLE:
7928 res.Add(me.EnableWhiteList ? ScriptBaseClass.TRUE : ScriptBaseClass.FALSE);
7929 break;
7930
7931 case ScriptBaseClass.PRIM_MEDIA_WHITELIST:
7932 string[] urls = (string[])me.WhiteList.Clone();
7933
7934 for (int j = 0; j < urls.Length; j++)
7935 urls[j] = Uri.EscapeDataString(urls[j]);
7936
7937 res.Add(new LSL_String(string.Join(", ", urls)));
7938 break;
7939
7940 case ScriptBaseClass.PRIM_MEDIA_PERMS_INTERACT:
7941 res.Add(new LSL_Integer((int)me.InteractPermissions));
7942 break;
7943
7944 case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL:
7945 res.Add(new LSL_Integer((int)me.ControlPermissions));
7946 break;
7947 }
7948 }
7949
7950 return res;
7951 }
7952
7953 public LSL_Integer llSetPrimMediaParams(int face, LSL_List rules)
7954 {
7955 m_host.AddScriptLPS(1);
7956 ScriptSleep(1000);
7957
7958 // LSL Spec http://wiki.secondlife.com/wiki/LlSetPrimMediaParams says to fail silently if face is invalid
7959 // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this.
7960 // Don't perform the media check directly
7961 if (face < 0 || face > m_host.GetNumberOfSides() - 1)
7962 return ScriptBaseClass.LSL_STATUS_OK;
7963
7964 return SetPrimMediaParams(face, rules);
7965 }
7966
7967 private LSL_Integer SetPrimMediaParams(int face, LSL_List rules)
7968 {
7969 IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>();
7970 if (null == module)
7971 throw new Exception("Media on a prim functions not available");
7972
7973 MediaEntry me = module.GetMediaEntry(m_host, face);
7974 if (null == me)
7975 me = new MediaEntry();
7976
7977 int i = 0;
7978
7979 while (i < rules.Length - 1)
7980 {
7981 int code = rules.GetLSLIntegerItem(i++);
7982
7983 switch (code)
7984 {
7985 case ScriptBaseClass.PRIM_MEDIA_ALT_IMAGE_ENABLE:
7986 me.EnableAlterntiveImage = (rules.GetLSLIntegerItem(i++) != 0 ? true : false);
7987 break;
7988
7989 case ScriptBaseClass.PRIM_MEDIA_CONTROLS:
7990 int v = rules.GetLSLIntegerItem(i++);
7991 if (ScriptBaseClass.PRIM_MEDIA_CONTROLS_STANDARD == v)
7992 me.Controls = MediaControls.Standard;
7993 else
7994 me.Controls = MediaControls.Mini;
7995 break;
7996
7997 case ScriptBaseClass.PRIM_MEDIA_CURRENT_URL:
7998 me.CurrentURL = rules.GetLSLStringItem(i++);
7999 break;
8000
8001 case ScriptBaseClass.PRIM_MEDIA_HOME_URL:
8002 me.HomeURL = rules.GetLSLStringItem(i++);
8003 break;
8004
8005 case ScriptBaseClass.PRIM_MEDIA_AUTO_LOOP:
8006 me.AutoLoop = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false);
8007 break;
8008
8009 case ScriptBaseClass.PRIM_MEDIA_AUTO_PLAY:
8010 me.AutoPlay = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false);
8011 break;
8012
8013 case ScriptBaseClass.PRIM_MEDIA_AUTO_SCALE:
8014 me.AutoScale = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false);
8015 break;
8016
8017 case ScriptBaseClass.PRIM_MEDIA_AUTO_ZOOM:
8018 me.AutoZoom = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false);
8019 break;
8020
8021 case ScriptBaseClass.PRIM_MEDIA_FIRST_CLICK_INTERACT:
8022 me.InteractOnFirstClick = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false);
8023 break;
8024
8025 case ScriptBaseClass.PRIM_MEDIA_WIDTH_PIXELS:
8026 me.Width = (int)rules.GetLSLIntegerItem(i++);
8027 break;
8028
8029 case ScriptBaseClass.PRIM_MEDIA_HEIGHT_PIXELS:
8030 me.Height = (int)rules.GetLSLIntegerItem(i++);
8031 break;
8032
8033 case ScriptBaseClass.PRIM_MEDIA_WHITELIST_ENABLE:
8034 me.EnableWhiteList = (ScriptBaseClass.TRUE == rules.GetLSLIntegerItem(i++) ? true : false);
8035 break;
8036
8037 case ScriptBaseClass.PRIM_MEDIA_WHITELIST:
8038 string[] rawWhiteListUrls = rules.GetLSLStringItem(i++).ToString().Split(new char[] { ',' });
8039 List<string> whiteListUrls = new List<string>();
8040 Array.ForEach(
8041 rawWhiteListUrls, delegate(string rawUrl) { whiteListUrls.Add(rawUrl.Trim()); });
8042 me.WhiteList = whiteListUrls.ToArray();
8043 break;
8044
8045 case ScriptBaseClass.PRIM_MEDIA_PERMS_INTERACT:
8046 me.InteractPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++);
8047 break;
8048
8049 case ScriptBaseClass.PRIM_MEDIA_PERMS_CONTROL:
8050 me.ControlPermissions = (MediaPermission)(byte)(int)rules.GetLSLIntegerItem(i++);
8051 break;
8052 }
8053 }
8054
8055 module.SetMediaEntry(m_host, face, me);
8056
8057 return ScriptBaseClass.LSL_STATUS_OK;
8058 }
8059
8060 public LSL_Integer llClearPrimMedia(LSL_Integer face)
8061 {
8062 m_host.AddScriptLPS(1);
8063 ScriptSleep(1000);
8064
8065 // LSL Spec http://wiki.secondlife.com/wiki/LlClearPrimMedia says to fail silently if face is invalid
8066 // Assuming silently fail means sending back LSL_STATUS_OK. Ideally, need to check this.
8067 // FIXME: Don't perform the media check directly
8068 if (face < 0 || face > m_host.GetNumberOfSides() - 1)
8069 return ScriptBaseClass.LSL_STATUS_OK;
8070
8071 IMoapModule module = m_ScriptEngine.World.RequestModuleInterface<IMoapModule>();
8072 if (null == module)
8073 throw new Exception("Media on a prim functions not available");
8074
8075 module.ClearMediaEntry(m_host, face);
8076
8077 return ScriptBaseClass.LSL_STATUS_OK;
8078 }
8079
7845 // <remarks> 8080 // <remarks>
7846 // <para> 8081 // <para>
7847 // The .NET definition of base 64 is: 8082 // The .NET definition of base 64 is: