123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #ifndef __AMF_H__
- #define __AMF_H__
- /*
- * Copyright (C) 2005-2008 Team XBMC
- * http://www.xbmc.org
- * Copyright (C) 2008-2009 Andrej Stepanchuk
- * Copyright (C) 2009-2010 Howard Chu
- *
- * This file is part of librtmp.
- *
- * librtmp 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; either version 2.1,
- * or (at your option) any later version.
- *
- * librtmp 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 General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with librtmp see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/lgpl.html
- */
- #include <stdint.h>
- #ifndef TRUE
- #define TRUE 1
- #define FALSE 0
- #endif
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- typedef enum
- { AMF_NUMBER = 0, AMF_BOOLEAN, AMF_STRING, AMF_OBJECT,
- AMF_MOVIECLIP, /* reserved, not used */
- AMF_NULL, AMF_UNDEFINED, AMF_REFERENCE, AMF_ECMA_ARRAY, AMF_OBJECT_END,
- AMF_STRICT_ARRAY, AMF_DATE, AMF_LONG_STRING, AMF_UNSUPPORTED,
- AMF_RECORDSET, /* reserved, not used */
- AMF_XML_DOC, AMF_TYPED_OBJECT,
- AMF_AVMPLUS, /* switch to AMF3 */
- AMF_INVALID = 0xff
- } AMFDataType;
- typedef enum
- { AMF3_UNDEFINED = 0, AMF3_NULL, AMF3_FALSE, AMF3_TRUE,
- AMF3_INTEGER, AMF3_DOUBLE, AMF3_STRING, AMF3_XML_DOC, AMF3_DATE,
- AMF3_ARRAY, AMF3_OBJECT, AMF3_XML, AMF3_BYTE_ARRAY
- } AMF3DataType;
- typedef struct AVal
- {
- char *av_val;
- int av_len;
- } AVal;
- #define AVC(str) {str,sizeof(str)-1}
- #define AVMATCH(a1,a2) ((a1)->av_len == (a2)->av_len && !memcmp((a1)->av_val,(a2)->av_val,(a1)->av_len))
- struct AMFObjectProperty;
- typedef struct AMFObject
- {
- int o_num;
- struct AMFObjectProperty *o_props;
- } AMFObject;
- typedef struct AMFObjectProperty
- {
- AVal p_name;
- AMFDataType p_type;
- union
- {
- double p_number;
- AVal p_aval;
- AMFObject p_object;
- } p_vu;
- int16_t p_UTCoffset;
- } AMFObjectProperty;
- char *AMF_EncodeString(char *output, char *outend, const AVal * str);
- char *AMF_EncodeNumber(char *output, char *outend, double dVal);
- char *AMF_EncodeInt16(char *output, char *outend, short nVal);
- char *AMF_EncodeInt24(char *output, char *outend, int nVal);
- char *AMF_EncodeInt32(char *output, char *outend, int nVal);
- char *AMF_EncodeBoolean(char *output, char *outend, int bVal);
- /* Shortcuts for AMFProp_Encode */
- char *AMF_EncodeNamedString(char *output, char *outend, const AVal * name, const AVal * value);
- char *AMF_EncodeNamedNumber(char *output, char *outend, const AVal * name, double dVal);
- char *AMF_EncodeNamedBoolean(char *output, char *outend, const AVal * name, int bVal);
- unsigned short AMF_DecodeInt16(const char *data);
- unsigned int AMF_DecodeInt24(const char *data);
- unsigned int AMF_DecodeInt32(const char *data);
- void AMF_DecodeString(const char *data, AVal * str);
- void AMF_DecodeLongString(const char *data, AVal * str);
- int AMF_DecodeBoolean(const char *data);
- double AMF_DecodeNumber(const char *data);
- char *AMF_Encode(AMFObject * obj, char *pBuffer, char *pBufEnd);
- char *AMF_EncodeEcmaArray(AMFObject *obj, char *pBuffer, char *pBufEnd);
- char *AMF_EncodeArray(AMFObject *obj, char *pBuffer, char *pBufEnd);
- int AMF_Decode(AMFObject * obj, const char *pBuffer, int nSize,
- int bDecodeName);
- int AMF_DecodeArray(AMFObject * obj, const char *pBuffer, int nSize,
- int nArrayLen, int bDecodeName);
- int AMF3_Decode(AMFObject * obj, const char *pBuffer, int nSize,
- int bDecodeName);
- void AMF_Dump(AMFObject * obj);
- void AMF_Reset(AMFObject * obj);
- void AMF_AddProp(AMFObject * obj, const AMFObjectProperty * prop);
- int AMF_CountProp(AMFObject * obj);
- AMFObjectProperty *AMF_GetProp(AMFObject * obj, const AVal * name,
- int nIndex);
- AMFDataType AMFProp_GetType(AMFObjectProperty * prop);
- void AMFProp_SetNumber(AMFObjectProperty * prop, double dval);
- void AMFProp_SetBoolean(AMFObjectProperty * prop, int bflag);
- void AMFProp_SetString(AMFObjectProperty * prop, AVal * str);
- void AMFProp_SetObject(AMFObjectProperty * prop, AMFObject * obj);
- void AMFProp_GetName(AMFObjectProperty * prop, AVal * name);
- void AMFProp_SetName(AMFObjectProperty * prop, AVal * name);
- double AMFProp_GetNumber(AMFObjectProperty * prop);
- int AMFProp_GetBoolean(AMFObjectProperty * prop);
- void AMFProp_GetString(AMFObjectProperty * prop, AVal * str);
- void AMFProp_GetObject(AMFObjectProperty * prop, AMFObject * obj);
- int AMFProp_IsValid(AMFObjectProperty * prop);
- char *AMFProp_Encode(AMFObjectProperty * prop, char *pBuffer, char *pBufEnd);
- int AMF3Prop_Decode(AMFObjectProperty * prop, const char *pBuffer,
- int nSize, int bDecodeName);
- int AMFProp_Decode(AMFObjectProperty * prop, const char *pBuffer,
- int nSize, int bDecodeName);
- void AMFProp_Dump(AMFObjectProperty * prop);
- void AMFProp_Reset(AMFObjectProperty * prop);
- typedef struct AMF3ClassDef
- {
- AVal cd_name;
- char cd_externalizable;
- char cd_dynamic;
- int cd_num;
- AVal *cd_props;
- } AMF3ClassDef;
- void AMF3CD_AddProp(AMF3ClassDef * cd, AVal * prop);
- AVal *AMF3CD_GetProp(AMF3ClassDef * cd, int idx);
- #ifdef __cplusplus
- }
- #endif
- #endif /* __AMF_H__ */
|