Files
SingularityViewer/indra/llmessage/llinstantmessage.h
Siana Gearz 8b6f462d13 Wholesale update of llmessage to V3.2
Note that this removes message logger for now.
2012-03-06 07:31:15 +01:00

323 lines
8.5 KiB
C++

/**
* @file llinstantmessage.h
* @brief Constants and declarations used by instant messages.
*
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2010, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_LLINSTANTMESSAGE_H
#define LL_LLINSTANTMESSAGE_H
#include "llhost.h"
#include "lluuid.h"
#include "llsd.h"
#include "llrefcount.h"
#include "llpointer.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
// TODO: _DEPRECATED suffix as part of vote removal - DEV-24856
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.
//
// Invite users to a session.
IM_SESSION_INVITE = 13,
IM_SESSION_P2P_INVITE = 14,
// start a session with your gruop
IM_SESSION_GROUP_START = 15,
// start a session without a calling card (finder or objects)
IM_SESSION_CONFERENCE_START = 16,
// send a message to a session.
IM_SESSION_SEND = 17,
// leave a session
IM_SESSION_LEAVE = 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,
// 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_DEPRECATED = 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_PHYSICS_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 std::string SYSTEM_FROM;
extern const std::string INTERACTIVE_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;
};
LLPointer<LLIMInfo> llsd_to_im_info(const LLSD& im_info_sd);
LLSD im_info_to_llsd(LLPointer<LLIMInfo> im_info);
void pack_instant_message(
LLMessageSystem* msgsystem,
const LLUUID& from_id,
BOOL from_group,
const LLUUID& session_id,
const LLUUID& to_id,
const std::string& name,
const std::string& 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 std::string& name,
const std::string& 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