llmediaentry.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:8k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llmediaentry.h
  3.  * @brief This is a single instance of media data related to the face of a prim
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLMEDIAENTRY_H
  33. #define LL_LLMEDIAENTRY_H
  34. #include "llsd.h"
  35. #include "llstring.h"
  36. // For return values of set*
  37. #include "lllslconstants.h"
  38. class LLMediaEntry
  39. {
  40. public: 
  41.     enum MediaControls {
  42.         STANDARD = 0,
  43.         MINI
  44.     };
  45.     
  46.     // Constructors
  47.     LLMediaEntry();
  48.     LLMediaEntry(const LLMediaEntry &rhs);
  49.     LLMediaEntry &operator=(const LLMediaEntry &rhs);
  50.     virtual ~LLMediaEntry();
  51.     bool operator==(const LLMediaEntry &rhs) const;
  52.     bool operator!=(const LLMediaEntry &rhs) const;
  53.     
  54.     // Render as LLSD
  55.     LLSD asLLSD() const;
  56.     void asLLSD(LLSD& sd) const;
  57.     operator LLSD() const { return asLLSD(); }
  58.     // Returns false iff the given LLSD contains fields that violate any bounds
  59.     // limits.
  60.     static bool checkLLSD(const LLSD& sd);
  61.     // This doesn't merge, it overwrites the data, so will use
  62.     // LLSD defaults if need be.  Note: does not check limits!
  63.     // Use checkLLSD() above first to ensure the LLSD is valid.
  64.     void fromLLSD(const LLSD& sd);  
  65.     // This merges data from the incoming LLSD into our fields.
  66.     // Note that it also does NOT check limits!  Use checkLLSD() above first.
  67.     void mergeFromLLSD(const LLSD& sd);
  68.     // "general" fields
  69.     bool getAltImageEnable() const { return mAltImageEnable; }
  70.     MediaControls getControls() const { return mControls; }
  71.     std::string getCurrentURL() const { return mCurrentURL; }
  72.     std::string getHomeURL() const { return mHomeURL; }
  73.     bool getAutoLoop() const { return mAutoLoop; }
  74.     bool getAutoPlay() const { return mAutoPlay; }
  75.     bool getAutoScale() const { return mAutoScale; }
  76.     bool getAutoZoom() const { return mAutoZoom; }
  77.     bool getFirstClickInteract() const { return mFirstClickInteract; }
  78.     U16 getWidthPixels() const { return mWidthPixels; }
  79.     U16 getHeightPixels() const { return mHeightPixels; }
  80.     // "security" fields
  81.     bool getWhiteListEnable() const { return mWhiteListEnable; }
  82.     const std::vector<std::string> &getWhiteList() const { return mWhiteList; }
  83.     // "permissions" fields
  84.     U8 getPermsInteract() const { return mPermsInteract; }
  85.     U8 getPermsControl() const { return mPermsControl; }
  86.     // Setters.  Those that return a U32 return a status error code
  87.     // See lllslconstants.h
  88.     
  89.     // "general" fields
  90.     U32 setAltImageEnable(bool alt_image_enable) { mAltImageEnable = alt_image_enable; return LSL_STATUS_OK; }
  91.     U32 setControls(MediaControls controls);
  92.     U32 setCurrentURL(const std::string& current_url);
  93.     U32 setHomeURL(const std::string& home_url);
  94.     U32 setAutoLoop(bool auto_loop) { mAutoLoop = auto_loop; return LSL_STATUS_OK; }
  95.     U32 setAutoPlay(bool auto_play) { mAutoPlay = auto_play; return LSL_STATUS_OK; }
  96.     U32 setAutoScale(bool auto_scale) { mAutoScale = auto_scale; return LSL_STATUS_OK; }
  97.     U32 setAutoZoom(bool auto_zoom) { mAutoZoom = auto_zoom; return LSL_STATUS_OK; }
  98.     U32 setFirstClickInteract(bool first_click) { mFirstClickInteract = first_click; return LSL_STATUS_OK; }
  99.     U32 setWidthPixels(U16 width);
  100.     U32 setHeightPixels(U16 height);
  101.     // "security" fields
  102.     U32 setWhiteListEnable( bool whitelist_enable ) { mWhiteListEnable = whitelist_enable; return LSL_STATUS_OK; }
  103.     U32 setWhiteList( const std::vector<std::string> &whitelist );
  104.     U32 setWhiteList( const LLSD &whitelist );  // takes an LLSD array
  105.     // "permissions" fields
  106.     U32 setPermsInteract( U8 val );
  107.     U32 setPermsControl( U8 val );
  108.     const LLUUID& getMediaID() const;
  109.     // Helper function to check a candidate URL against the whitelist
  110.     // Returns true iff candidate URL passes (or if there is no whitelist), false otherwise
  111.     bool checkCandidateUrl(const std::string& url) const;
  112. public:
  113.     // Static function to check a URL against a whitelist
  114.     // Returns true iff url passes the given whitelist
  115.     static bool checkUrlAgainstWhitelist(const std::string &url, 
  116.                                          const std::vector<std::string> &whitelist);
  117.     
  118. public:
  119.         // LLSD key defines
  120.     // "general" fields
  121.     static const char*  ALT_IMAGE_ENABLE_KEY;
  122.     static const char*  CONTROLS_KEY;
  123.     static const char*  CURRENT_URL_KEY;
  124.     static const char*  HOME_URL_KEY;
  125.     static const char*  AUTO_LOOP_KEY;
  126.     static const char*  AUTO_PLAY_KEY;
  127.     static const char*  AUTO_SCALE_KEY;
  128.     static const char*  AUTO_ZOOM_KEY;
  129.     static const char*  FIRST_CLICK_INTERACT_KEY;
  130.     static const char*  WIDTH_PIXELS_KEY;
  131.     static const char*  HEIGHT_PIXELS_KEY;
  132.     // "security" fields
  133.     static const char*  WHITELIST_ENABLE_KEY;
  134.     static const char*  WHITELIST_KEY;
  135.     // "permissions" fields
  136.     static const char*  PERMS_INTERACT_KEY;
  137.     static const char*  PERMS_CONTROL_KEY;
  138.     // Field enumerations & constants
  139.     // *NOTE: DO NOT change the order of these, and do not insert values
  140.     // in the middle!
  141.     // Add values to the end, and make sure to change PARAM_MAX_ID!
  142.     enum Fields {
  143.          ALT_IMAGE_ENABLE_ID = 0,
  144.          CONTROLS_ID = 1,
  145.          CURRENT_URL_ID = 2,
  146.          HOME_URL_ID = 3,
  147.          AUTO_LOOP_ID = 4,
  148.          AUTO_PLAY_ID = 5,
  149.          AUTO_SCALE_ID = 6,
  150.          AUTO_ZOOM_ID = 7,
  151.          FIRST_CLICK_INTERACT_ID = 8,
  152.          WIDTH_PIXELS_ID = 9,
  153.          HEIGHT_PIXELS_ID = 10,
  154.          WHITELIST_ENABLE_ID = 11,
  155.          WHITELIST_ID = 12,
  156.          PERMS_INTERACT_ID = 13,
  157.          PERMS_CONTROL_ID = 14,
  158.          PARAM_MAX_ID = PERMS_CONTROL_ID
  159.     };
  160.     // "permissions" values
  161.     // (e.g. (PERM_OWNER | PERM_GROUP) sets permissions on for OWNER and GROUP
  162.     static const U8    PERM_NONE             = 0x0;
  163.     static const U8    PERM_OWNER            = 0x1;
  164.     static const U8    PERM_GROUP            = 0x2;
  165.     static const U8    PERM_ANYONE           = 0x4;
  166.     static const U8    PERM_ALL              = PERM_OWNER|PERM_GROUP|PERM_ANYONE;
  167.     static const U8    PERM_MASK             = PERM_OWNER|PERM_GROUP|PERM_ANYONE;
  168.     // Limits (in bytes)
  169.     static const U32   MAX_URL_LENGTH        = 1024;
  170.     static const U32   MAX_WHITELIST_SIZE    = 1024;
  171.     static const U32   MAX_WHITELIST_COUNT   = 64;
  172.     static const U16   MAX_WIDTH_PIXELS      = 2048;
  173.     static const U16   MAX_HEIGHT_PIXELS     = 2048;
  174. private:
  175.     U32 setStringFieldWithLimit( std::string &field, const std::string &value, U32 limit );
  176.     U32 setCurrentURLInternal( const std::string &url, bool check_whitelist);
  177.     bool fromLLSDInternal(const LLSD &sd, bool overwrite);
  178. private:
  179.      // "general" fields
  180.     bool mAltImageEnable;
  181.     MediaControls mControls;
  182.     std::string mCurrentURL;
  183.     std::string mHomeURL;
  184.     bool mAutoLoop;
  185.     bool mAutoPlay;
  186.     bool mAutoScale;
  187.     bool mAutoZoom;
  188.     bool mFirstClickInteract;
  189.     U16 mWidthPixels;
  190.     U16 mHeightPixels;
  191.     // "security" fields
  192.     bool mWhiteListEnable;
  193.     std::vector<std::string> mWhiteList;
  194.     // "permissions" fields
  195.     U8 mPermsInteract;
  196.     U8 mPermsControl;
  197.     
  198.     mutable LLUUID *mMediaIDp;            // temporary id assigned to media on the viewer
  199. };
  200. #endif