PageRenderTime 27ms CodeModel.GetById 15ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 0ms

/indra/llmessage/lltemplatemessagereader.h

https://bitbucket.org/lindenlab/viewer-beta/
C++ Header | 127 lines | 80 code | 21 blank | 26 comment | 0 complexity | 794091cb98fbe5e7b1acd4ea373f515e MD5 | raw file
  1/** 
  2 * @file lltemplatemessagereader.h
  3 * @brief Declaration of LLTemplateMessageReader class.
  4 *
  5 * $LicenseInfo:firstyear=2007&license=viewerlgpl$
  6 * Second Life Viewer Source Code
  7 * Copyright (C) 2010, Linden Research, Inc.
  8 * 
  9 * This library is free software; you can redistribute it and/or
 10 * modify it under the terms of the GNU Lesser General Public
 11 * License as published by the Free Software Foundation;
 12 * version 2.1 of the License only.
 13 * 
 14 * This library is distributed in the hope that it will be useful,
 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 17 * Lesser General Public License for more details.
 18 * 
 19 * You should have received a copy of the GNU Lesser General Public
 20 * License along with this library; if not, write to the Free Software
 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 22 * 
 23 * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 24 * $/LicenseInfo$
 25 */
 26
 27#ifndef LL_LLTEMPLATEMESSAGEREADER_H
 28#define LL_LLTEMPLATEMESSAGEREADER_H
 29
 30#include "llmessagereader.h"
 31
 32#include <map>
 33
 34class LLMessageTemplate;
 35class LLMsgData;
 36
 37class LLTemplateMessageReader : public LLMessageReader
 38{
 39public:
 40
 41	typedef std::map<U32, LLMessageTemplate*> message_template_number_map_t;
 42
 43	LLTemplateMessageReader(message_template_number_map_t&);
 44	virtual ~LLTemplateMessageReader();
 45
 46	/** All get* methods expect pointers to canonical strings. */
 47	virtual void getBinaryData(const char *blockname, const char *varname, 
 48							   void *datap, S32 size, S32 blocknum = 0, 
 49							   S32 max_size = S32_MAX);
 50	virtual void getBOOL(const char *block, const char *var, BOOL &data, 
 51						 S32 blocknum = 0);
 52	virtual void getS8(const char *block, const char *var, S8 &data, 
 53					   S32 blocknum = 0);
 54	virtual void getU8(const char *block, const char *var, U8 &data, 
 55					   S32 blocknum = 0);
 56	virtual void getS16(const char *block, const char *var, S16 &data, 
 57						S32 blocknum = 0);
 58	virtual void getU16(const char *block, const char *var, U16 &data, 
 59						S32 blocknum = 0);
 60	virtual void getS32(const char *block, const char *var, S32 &data, 
 61						S32 blocknum = 0);
 62	virtual void getF32(const char *block, const char *var, F32 &data, 
 63						S32 blocknum = 0);
 64	virtual void getU32(const char *block, const char *var, U32 &data, 
 65						S32 blocknum = 0);
 66	virtual void getU64(const char *block, const char *var, U64 &data, 
 67						S32 blocknum = 0);
 68	virtual void getF64(const char *block, const char *var, F64 &data, 
 69						S32 blocknum = 0);
 70	virtual void getVector3(const char *block, const char *var, 
 71							LLVector3 &vec, S32 blocknum = 0);
 72	virtual void getVector4(const char *block, const char *var, 
 73							LLVector4 &vec, S32 blocknum = 0);
 74	virtual void getVector3d(const char *block, const char *var, 
 75							 LLVector3d &vec, S32 blocknum = 0);
 76	virtual void getQuat(const char *block, const char *var, LLQuaternion &q, 
 77						 S32 blocknum = 0);
 78	virtual void getUUID(const char *block, const char *var, LLUUID &uuid, 
 79						 S32 blocknum = 0);
 80	virtual void getIPAddr(const char *block, const char *var, U32 &ip, 
 81						   S32 blocknum = 0);
 82	virtual void getIPPort(const char *block, const char *var, U16 &port, 
 83						   S32 blocknum = 0);
 84	virtual void getString(const char *block, const char *var, 
 85						   S32 buffer_size, char *buffer, S32 blocknum = 0);
 86	virtual void getString(const char *block, const char *var,  std::string& outstr,
 87						   S32 blocknum = 0);
 88
 89	virtual S32	getNumberOfBlocks(const char *blockname);
 90	virtual S32	getSize(const char *blockname, const char *varname);
 91	virtual S32	getSize(const char *blockname, S32 blocknum, 
 92						const char *varname);
 93
 94	virtual void clearMessage();
 95
 96	virtual const char* getMessageName() const;
 97	virtual S32 getMessageSize() const;
 98
 99	virtual void copyToBuilder(LLMessageBuilder&) const;
100
101	BOOL validateMessage(const U8* buffer, S32 buffer_size, 
102						 const LLHost& sender, bool trusted = false);
103	BOOL readMessage(const U8* buffer, const LLHost& sender);
104
105	bool isTrusted() const;
106	bool isBanned(bool trusted_source) const;
107	bool isUdpBanned() const;
108	
109private:
110
111	void getData(const char *blockname, const char *varname, void *datap, 
112				 S32 size = 0, S32 blocknum = 0, S32 max_size = S32_MAX);
113
114	BOOL decodeTemplate(const U8* buffer, S32 buffer_size,  // inputs
115						LLMessageTemplate** msg_template ); // outputs
116
117	void logRanOffEndOfPacket( const LLHost& host, const S32 where, const S32 wanted );
118
119	BOOL decodeData(const U8* buffer, const LLHost& sender );
120
121	S32	mReceiveSize;
122	LLMessageTemplate* mCurrentRMessageTemplate;
123	LLMsgData* mCurrentRMessageData;
124	message_template_number_map_t& mMessageNumbers;
125};
126
127#endif // LL_LLTEMPLATEMESSAGEREADER_H