diff options
author | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
---|---|---|
committer | James Cook <james@lindenlab.com> | 2007-01-02 08:33:20 +0000 |
commit | 420b91db29485df39fd6e724e782c449158811cb (patch) | |
tree | b471a94563af914d3ed3edd3e856d21cb1b69945 /indra/llmessage/llinstantmessage.h |
Print done when done.
Diffstat (limited to 'indra/llmessage/llinstantmessage.h')
-rw-r--r-- | indra/llmessage/llinstantmessage.h | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/indra/llmessage/llinstantmessage.h b/indra/llmessage/llinstantmessage.h new file mode 100644 index 0000000000..c8138cf491 --- /dev/null +++ b/indra/llmessage/llinstantmessage.h @@ -0,0 +1,308 @@ +/** + * @file llinstantmessage.h + * @brief Constants and declarations used by instant messages. + * + * Copyright (c) 2002-$CurrentYear$, Linden Research, Inc. + * $License$ + */ + +#ifndef LL_LLINSTANTMESSAGE_H +#define LL_LLINSTANTMESSAGE_H + +#include "llhost.h" +#include "lluuid.h" +#include "llsd.h" +#include "llmemory.h" +#include "v3math.h" + +class LLMessageSystem; + +// The ImprovedInstantMessage only supports 8 bits in the "Dialog" +// field, so don't go past the byte boundary +enum EInstantMessage +{ + // default. ID is meaningless, nothing in the binary bucket. + IM_NOTHING_SPECIAL = 0, + + // pops a messagebox with a single OK button + IM_MESSAGEBOX = 1, + + // pops a countdown messagebox with a single OK button + // IM_MESSAGEBOX_COUNTDOWN = 2, + + // You've been invited to join a group. + // ID is the group id. + + // The binary bucket contains a null terminated string + // representation of the officer/member status and join cost for + // the invitee. (bug # 7672) The format is 1 byte for + // officer/member (O for officer, M for member), and as many bytes + // as necessary for cost. + IM_GROUP_INVITATION = 3, + + // Inventory offer. + // ID is the transaction id + // Binary bucket is a list of inventory uuid and type. + IM_INVENTORY_OFFERED = 4, + IM_INVENTORY_ACCEPTED = 5, + IM_INVENTORY_DECLINED = 6, + + // Group vote + // Name is name of person who called vote. + // ID is vote ID used for internal tracking + IM_GROUP_VOTE = 7, + + // Group message + // This means that the message is meant for everyone in the + // agent's group. This will result in a database query to find all + // participants and start an im session. + IM_GROUP_MESSAGE_DEPRECATED = 8, + + // Task inventory offer. + // ID is the transaction id + // Binary bucket is a (mostly) complete packed inventory item + IM_TASK_INVENTORY_OFFERED = 9, + IM_TASK_INVENTORY_ACCEPTED = 10, + IM_TASK_INVENTORY_DECLINED = 11, + + // Copied as pending, type LL_NOTHING_SPECIAL, for new users + // used by offline tools + IM_NEW_USER_DEFAULT = 12, + + // + // session based messaging - the way that people usually actually + // communicate with each other. + // + + // Start a session, or add users to a session. + IM_SESSION_ADD = 13, + + // Start a session, but don't prune offline users + IM_SESSION_OFFLINE_ADD = 14, + + // start a session with your gruop + IM_SESSION_GROUP_START = 15, + + // start a session without a calling card (finder or objects) + IM_SESSION_CARDLESS_START = 16, + + // send a message to a session. + IM_SESSION_SEND = 17, + + // leave a session + IM_SESSION_DROP = 18, + + // an instant message from an object - for differentiation on the + // viewer, since you can't IM an object yet. + IM_FROM_TASK = 19, + + // sent an IM to a busy user, this is the auto response + IM_BUSY_AUTO_RESPONSE = 20, + + // Shows the message in the console and chat history + IM_CONSOLE_AND_CHAT_HISTORY = 21, + + // IM Types used for luring your friends + IM_LURE_USER = 22, + IM_LURE_ACCEPTED = 23, + IM_LURE_DECLINED = 24, + IM_GODLIKE_LURE_USER = 25, + IM_YET_TO_BE_USED = 26, + + // IM that notifie of a new group election. + // Name is name of person who called vote. + // ID is election ID used for internal tracking + IM_GROUP_ELECTION_DEPRECATED = 27, + + // IM to tell the user to go to an URL. Put a text message in the + // message field, and put the url with a trailing \0 in the binary + // bucket. + IM_GOTO_URL = 28, + + // IM for help from the GAURDIAN_ANGELS + // Binary bucket contains the name of the session. + IM_SESSION_911_START = 29, + + // IM sent automatically on call for help, + // sends a lure to each Helper reached + IM_LURE_911 = 30, + + // a message generated by a script which we don't want to + // be sent through e-mail. Similar to IM_FROM_TASK, but + // it is shown as an alert on the viewer. + IM_FROM_TASK_AS_ALERT = 31, + + // IM from group officer to all group members. + IM_GROUP_NOTICE = 32, + IM_GROUP_NOTICE_INVENTORY_ACCEPTED = 33, + IM_GROUP_NOTICE_INVENTORY_DECLINED = 34, + + IM_GROUP_INVITATION_ACCEPT = 35, + IM_GROUP_INVITATION_DECLINE = 36, + + IM_GROUP_NOTICE_REQUESTED = 37, + + IM_FRIENDSHIP_OFFERED = 38, + IM_FRIENDSHIP_ACCEPTED = 39, + IM_FRIENDSHIP_DECLINED = 40, + + IM_TYPING_START = 41, + IM_TYPING_STOP = 42, + + IM_COUNT +}; + + +// Hooks for quickly hacking in experimental admin debug messages +// without needing to recompile the viewer +// *NOTE: This functionality has been moved to be a string based +// operation so that we don't even have to do a full recompile. This +// enumeration will be phased out soon. +enum EGodlikeRequest +{ + GOD_WANTS_NOTHING, + + // for requesting physics information about an object + GOD_WANTS_HAVOK_INFO, + + // two unused requests that can be appropriated for debug + // purposes (no viewer recompile necessary) + GOD_WANTS_FOO, + GOD_WANTS_BAR, + + // to dump simulator terrain data to terrain.raw file + GOD_WANTS_TERRAIN_SAVE, + // to load simulator terrain data from terrain.raw file + GOD_WANTS_TERRAIN_LOAD, + + GOD_WANTS_TOGGLE_AVATAR_GEOMETRY, // HACK for testing new avatar geom + + // real-time telehub operations + GOD_WANTS_TELEHUB_INFO, + GOD_WANTS_CONNECT_TELEHUB, + GOD_WANTS_DELETE_TELEHUB, + GOD_WANTS_ADD_TELEHUB_SPAWNPOINT, + GOD_WANTS_REMOVE_TELEHUB_SPAWNPOINT, + +}; + +enum EIMSource +{ + IM_FROM_VIEWER, + IM_FROM_DATASERVER, + IM_FROM_SIM +}; + +extern const U8 IM_ONLINE; +extern const U8 IM_OFFLINE; + +extern const S32 VOTE_YES; +extern const S32 VOTE_NO; +extern const S32 VOTE_ABSTAIN; + +extern const S32 VOTE_MAJORITY; +extern const S32 VOTE_SUPER_MAJORITY; +extern const S32 VOTE_UNANIMOUS; + +extern const char EMPTY_BINARY_BUCKET[]; +extern const S32 EMPTY_BINARY_BUCKET_SIZE; + +extern const U32 NO_TIMESTAMP; +extern const char SYSTEM_FROM[]; + +// Number of retry attempts on sending the im. +extern const S32 IM_TTL; + + +class LLIMInfo : public LLRefCount +{ +protected: + LLIMInfo(); + ~LLIMInfo(); + +public: + LLIMInfo(LLMessageSystem* msg, + EIMSource source = IM_FROM_SIM, + S32 ttl = IM_TTL); + + LLIMInfo( + const LLUUID& from_id, + BOOL from_group, + const LLUUID& to_id, + EInstantMessage im_type, + const std::string& name, + const std::string& message, + const LLUUID& id, + U32 parent_estate_id, + const LLUUID& region_id, + const LLVector3& position, + LLSD data, + U8 offline, + U32 timestamp, + EIMSource source, + S32 ttl = IM_TTL); + + void packInstantMessage(LLMessageSystem* msg) const; + void packMessageBlock(LLMessageSystem* msg) const; + void unpackMessageBlock(LLMessageSystem* msg); + LLPointer<LLIMInfo> clone(); +public: + LLUUID mFromID; + BOOL mFromGroup; + LLUUID mToID; + U32 mParentEstateID; + LLUUID mRegionID; + LLVector3 mPosition; + U8 mOffline; + bool mViewerThinksToIsOnline; + EInstantMessage mIMType; + LLUUID mID; + U32 mTimeStamp; + std::string mName; + std::string mMessage; + LLSD mData; + + EIMSource mSource; + S32 mTTL; +}; + + +void pack_instant_message( + LLMessageSystem* msgsystem, + const LLUUID& from_id, + BOOL from_group, + const LLUUID& session_id, + const LLUUID& to_id, + const char* name, + const char* message, + U8 offline = IM_ONLINE, + EInstantMessage dialog = IM_NOTHING_SPECIAL, + const LLUUID& id = LLUUID::null, + U32 parent_estate_id = 0, + const LLUUID& region_id = LLUUID::null, + const LLVector3& position = LLVector3::zero, + U32 timestamp = NO_TIMESTAMP, + const U8* binary_bucket = (U8*)EMPTY_BINARY_BUCKET, + S32 binary_bucket_size = EMPTY_BINARY_BUCKET_SIZE); + +void pack_instant_message_block( + LLMessageSystem* msgsystem, + const LLUUID& from_id, + BOOL from_group, + const LLUUID& session_id, + const LLUUID& to_id, + const char* name, + const char* message, + U8 offline = IM_ONLINE, + EInstantMessage dialog = IM_NOTHING_SPECIAL, + const LLUUID& id = LLUUID::null, + U32 parent_estate_id = 0, + const LLUUID& region_id = LLUUID::null, + const LLVector3& position = LLVector3::zero, + U32 timestamp = NO_TIMESTAMP, + const U8* binary_bucket = (U8*)EMPTY_BINARY_BUCKET, + S32 binary_bucket_size = EMPTY_BINARY_BUCKET_SIZE); + + +#endif // LL_LLINSTANTMESSAGE_H + |