diff options
Diffstat (limited to 'src/input/libreal')
-rw-r--r-- | src/input/libreal/Makefile.am | 19 | ||||
-rw-r--r-- | src/input/libreal/asmrp.c | 6 | ||||
-rw-r--r-- | src/input/libreal/asmrp.h | 4 | ||||
-rw-r--r-- | src/input/libreal/real.c | 204 | ||||
-rw-r--r-- | src/input/libreal/real.h | 5 | ||||
-rw-r--r-- | src/input/libreal/rmff.c | 417 | ||||
-rw-r--r-- | src/input/libreal/rmff.h | 20 | ||||
-rw-r--r-- | src/input/libreal/sdpplin.c | 12 | ||||
-rw-r--r-- | src/input/libreal/sdpplin.h | 5 |
9 files changed, 349 insertions, 343 deletions
diff --git a/src/input/libreal/Makefile.am b/src/input/libreal/Makefile.am index 5b10d1bca..bd97a7548 100644 --- a/src/input/libreal/Makefile.am +++ b/src/input/libreal/Makefile.am @@ -1,19 +1,10 @@ include $(top_srcdir)/misc/Makefile.common -AM_CPPFLAGS = -D_LARGEFILE64_SOURCE -I$(srcdir)/../librtsp +AM_CFLAGS = $(DEFAULT_OCFLAGS) $(VISIBILITY_FLAG) +AM_CPPFLAGS = -I$(top_srcdir)/src/input/librtsp -noinst_LTLIBRARIES = libreal.la - -libreal_la_SOURCES = \ - real.c \ - asmrp.c \ - rmff.c \ - sdpplin.c +noinst_HEADERS = real.h asmrp.h rmff.h sdpplin.h -libreal_la_CFLAGS = $(VISIBILITY_FLAG) +noinst_LTLIBRARIES = libreal.la -noinst_HEADERS = \ - real.h \ - asmrp.h \ - rmff.h \ - sdpplin.h +libreal_la_SOURCES = real.c asmrp.c rmff.c sdpplin.c diff --git a/src/input/libreal/asmrp.c b/src/input/libreal/asmrp.c index 8afc19df6..9fc7a3867 100644 --- a/src/input/libreal/asmrp.c +++ b/src/input/libreal/asmrp.c @@ -15,9 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - * - * $Id: asmrp.c,v 1.10 2006/12/25 15:39:31 dgp85 Exp $ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * a parser for real's asm rules * @@ -45,7 +43,7 @@ */ #include "asmrp.h" -#include "xineutils.h" +#include <xine/xineutils.h> #define ASMRP_SYM_NONE 0 #define ASMRP_SYM_EOF 1 diff --git a/src/input/libreal/asmrp.h b/src/input/libreal/asmrp.h index d787eb330..dcc373bd0 100644 --- a/src/input/libreal/asmrp.h +++ b/src/input/libreal/asmrp.h @@ -15,9 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - * - * $Id: asmrp.h,v 1.3 2006/11/29 19:43:01 dgp85 Exp $ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * a parser for real's asm rules * diff --git a/src/input/libreal/real.c b/src/input/libreal/real.c index dc0c001bd..078b12757 100644 --- a/src/input/libreal/real.c +++ b/src/input/libreal/real.c @@ -15,13 +15,10 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - * - * $Id: real.c,v 1.26 2007/01/19 01:19:06 dgp85 Exp $ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * special functions for real streams. * adopted from joschkas real tools. - * */ #include <stdio.h> @@ -36,8 +33,8 @@ #include "real.h" #include "asmrp.h" #include "sdpplin.h" -#include "xine_internal.h" -#include "xineutils.h" +#include <xine/xine_internal.h> +#include <xine/xineutils.h> #include "bswap.h" #define XOR_TABLE_LEN 37 @@ -48,8 +45,8 @@ static const unsigned char xor_table[] = { 0x63, 0x11, 0x03, 0x71, 0x08, 0x08, 0x70, 0x02, 0x10, 0x57, 0x05, 0x18, 0x54, 0x00, 0x00, 0x00 }; -#define BE_32C(x,y) do { *(uint32_t *)(x) = be2me_32((y)); } while(0) -#define LE_32C(x,y) do { *(uint32_t *)(x) = le2me_32((y)); } while(0) +#define _X_BE_32C(x,y) do { *(uint32_t *)(x) = be2me_32((y)); } while(0) +#define _X_LE_32C(x,y) do { *(uint32_t *)(x) = le2me_32((y)); } while(0) #define MAX(x,y) ((x>y) ? x : y) @@ -60,10 +57,10 @@ static void hash(char *field, char *param) { /* fill variables */ - a = LE_32(field); - b = LE_32(field+4); - c = LE_32(field+8); - d = LE_32(field+12); + a = _X_LE_32(field); + b = _X_LE_32(field+4); + c = _X_LE_32(field+8); + d = _X_LE_32(field+12); lprintf("hash input: %x %x %x %x\n", a, b, c, d); lprintf("hash parameter:\n"); @@ -71,149 +68,149 @@ static void hash(char *field, char *param) { xine_hexdump(param, 64); #endif - a = ((b & c) | (~b & d)) + LE_32((param+0x00)) + a - 0x28955B88; + a = ((b & c) | (~b & d)) + _X_LE_32((param+0x00)) + a - 0x28955B88; a = ((a << 0x07) | (a >> 0x19)) + b; - d = ((a & b) | (~a & c)) + LE_32((param+0x04)) + d - 0x173848AA; + d = ((a & b) | (~a & c)) + _X_LE_32((param+0x04)) + d - 0x173848AA; d = ((d << 0x0c) | (d >> 0x14)) + a; - c = ((d & a) | (~d & b)) + LE_32((param+0x08)) + c + 0x242070DB; + c = ((d & a) | (~d & b)) + _X_LE_32((param+0x08)) + c + 0x242070DB; c = ((c << 0x11) | (c >> 0x0f)) + d; - b = ((c & d) | (~c & a)) + LE_32((param+0x0c)) + b - 0x3E423112; + b = ((c & d) | (~c & a)) + _X_LE_32((param+0x0c)) + b - 0x3E423112; b = ((b << 0x16) | (b >> 0x0a)) + c; - a = ((b & c) | (~b & d)) + LE_32((param+0x10)) + a - 0x0A83F051; + a = ((b & c) | (~b & d)) + _X_LE_32((param+0x10)) + a - 0x0A83F051; a = ((a << 0x07) | (a >> 0x19)) + b; - d = ((a & b) | (~a & c)) + LE_32((param+0x14)) + d + 0x4787C62A; + d = ((a & b) | (~a & c)) + _X_LE_32((param+0x14)) + d + 0x4787C62A; d = ((d << 0x0c) | (d >> 0x14)) + a; - c = ((d & a) | (~d & b)) + LE_32((param+0x18)) + c - 0x57CFB9ED; + c = ((d & a) | (~d & b)) + _X_LE_32((param+0x18)) + c - 0x57CFB9ED; c = ((c << 0x11) | (c >> 0x0f)) + d; - b = ((c & d) | (~c & a)) + LE_32((param+0x1c)) + b - 0x02B96AFF; + b = ((c & d) | (~c & a)) + _X_LE_32((param+0x1c)) + b - 0x02B96AFF; b = ((b << 0x16) | (b >> 0x0a)) + c; - a = ((b & c) | (~b & d)) + LE_32((param+0x20)) + a + 0x698098D8; + a = ((b & c) | (~b & d)) + _X_LE_32((param+0x20)) + a + 0x698098D8; a = ((a << 0x07) | (a >> 0x19)) + b; - d = ((a & b) | (~a & c)) + LE_32((param+0x24)) + d - 0x74BB0851; + d = ((a & b) | (~a & c)) + _X_LE_32((param+0x24)) + d - 0x74BB0851; d = ((d << 0x0c) | (d >> 0x14)) + a; - c = ((d & a) | (~d & b)) + LE_32((param+0x28)) + c - 0x0000A44F; + c = ((d & a) | (~d & b)) + _X_LE_32((param+0x28)) + c - 0x0000A44F; c = ((c << 0x11) | (c >> 0x0f)) + d; - b = ((c & d) | (~c & a)) + LE_32((param+0x2C)) + b - 0x76A32842; + b = ((c & d) | (~c & a)) + _X_LE_32((param+0x2C)) + b - 0x76A32842; b = ((b << 0x16) | (b >> 0x0a)) + c; - a = ((b & c) | (~b & d)) + LE_32((param+0x30)) + a + 0x6B901122; + a = ((b & c) | (~b & d)) + _X_LE_32((param+0x30)) + a + 0x6B901122; a = ((a << 0x07) | (a >> 0x19)) + b; - d = ((a & b) | (~a & c)) + LE_32((param+0x34)) + d - 0x02678E6D; + d = ((a & b) | (~a & c)) + _X_LE_32((param+0x34)) + d - 0x02678E6D; d = ((d << 0x0c) | (d >> 0x14)) + a; - c = ((d & a) | (~d & b)) + LE_32((param+0x38)) + c - 0x5986BC72; + c = ((d & a) | (~d & b)) + _X_LE_32((param+0x38)) + c - 0x5986BC72; c = ((c << 0x11) | (c >> 0x0f)) + d; - b = ((c & d) | (~c & a)) + LE_32((param+0x3c)) + b + 0x49B40821; + b = ((c & d) | (~c & a)) + _X_LE_32((param+0x3c)) + b + 0x49B40821; b = ((b << 0x16) | (b >> 0x0a)) + c; - a = ((b & d) | (~d & c)) + LE_32((param+0x04)) + a - 0x09E1DA9E; + a = ((b & d) | (~d & c)) + _X_LE_32((param+0x04)) + a - 0x09E1DA9E; a = ((a << 0x05) | (a >> 0x1b)) + b; - d = ((a & c) | (~c & b)) + LE_32((param+0x18)) + d - 0x3FBF4CC0; + d = ((a & c) | (~c & b)) + _X_LE_32((param+0x18)) + d - 0x3FBF4CC0; d = ((d << 0x09) | (d >> 0x17)) + a; - c = ((d & b) | (~b & a)) + LE_32((param+0x2c)) + c + 0x265E5A51; + c = ((d & b) | (~b & a)) + _X_LE_32((param+0x2c)) + c + 0x265E5A51; c = ((c << 0x0e) | (c >> 0x12)) + d; - b = ((c & a) | (~a & d)) + LE_32((param+0x00)) + b - 0x16493856; + b = ((c & a) | (~a & d)) + _X_LE_32((param+0x00)) + b - 0x16493856; b = ((b << 0x14) | (b >> 0x0c)) + c; - a = ((b & d) | (~d & c)) + LE_32((param+0x14)) + a - 0x29D0EFA3; + a = ((b & d) | (~d & c)) + _X_LE_32((param+0x14)) + a - 0x29D0EFA3; a = ((a << 0x05) | (a >> 0x1b)) + b; - d = ((a & c) | (~c & b)) + LE_32((param+0x28)) + d + 0x02441453; + d = ((a & c) | (~c & b)) + _X_LE_32((param+0x28)) + d + 0x02441453; d = ((d << 0x09) | (d >> 0x17)) + a; - c = ((d & b) | (~b & a)) + LE_32((param+0x3c)) + c - 0x275E197F; + c = ((d & b) | (~b & a)) + _X_LE_32((param+0x3c)) + c - 0x275E197F; c = ((c << 0x0e) | (c >> 0x12)) + d; - b = ((c & a) | (~a & d)) + LE_32((param+0x10)) + b - 0x182C0438; + b = ((c & a) | (~a & d)) + _X_LE_32((param+0x10)) + b - 0x182C0438; b = ((b << 0x14) | (b >> 0x0c)) + c; - a = ((b & d) | (~d & c)) + LE_32((param+0x24)) + a + 0x21E1CDE6; + a = ((b & d) | (~d & c)) + _X_LE_32((param+0x24)) + a + 0x21E1CDE6; a = ((a << 0x05) | (a >> 0x1b)) + b; - d = ((a & c) | (~c & b)) + LE_32((param+0x38)) + d - 0x3CC8F82A; + d = ((a & c) | (~c & b)) + _X_LE_32((param+0x38)) + d - 0x3CC8F82A; d = ((d << 0x09) | (d >> 0x17)) + a; - c = ((d & b) | (~b & a)) + LE_32((param+0x0c)) + c - 0x0B2AF279; + c = ((d & b) | (~b & a)) + _X_LE_32((param+0x0c)) + c - 0x0B2AF279; c = ((c << 0x0e) | (c >> 0x12)) + d; - b = ((c & a) | (~a & d)) + LE_32((param+0x20)) + b + 0x455A14ED; + b = ((c & a) | (~a & d)) + _X_LE_32((param+0x20)) + b + 0x455A14ED; b = ((b << 0x14) | (b >> 0x0c)) + c; - a = ((b & d) | (~d & c)) + LE_32((param+0x34)) + a - 0x561C16FB; + a = ((b & d) | (~d & c)) + _X_LE_32((param+0x34)) + a - 0x561C16FB; a = ((a << 0x05) | (a >> 0x1b)) + b; - d = ((a & c) | (~c & b)) + LE_32((param+0x08)) + d - 0x03105C08; + d = ((a & c) | (~c & b)) + _X_LE_32((param+0x08)) + d - 0x03105C08; d = ((d << 0x09) | (d >> 0x17)) + a; - c = ((d & b) | (~b & a)) + LE_32((param+0x1c)) + c + 0x676F02D9; + c = ((d & b) | (~b & a)) + _X_LE_32((param+0x1c)) + c + 0x676F02D9; c = ((c << 0x0e) | (c >> 0x12)) + d; - b = ((c & a) | (~a & d)) + LE_32((param+0x30)) + b - 0x72D5B376; + b = ((c & a) | (~a & d)) + _X_LE_32((param+0x30)) + b - 0x72D5B376; b = ((b << 0x14) | (b >> 0x0c)) + c; - a = (b ^ c ^ d) + LE_32((param+0x14)) + a - 0x0005C6BE; + a = (b ^ c ^ d) + _X_LE_32((param+0x14)) + a - 0x0005C6BE; a = ((a << 0x04) | (a >> 0x1c)) + b; - d = (a ^ b ^ c) + LE_32((param+0x20)) + d - 0x788E097F; + d = (a ^ b ^ c) + _X_LE_32((param+0x20)) + d - 0x788E097F; d = ((d << 0x0b) | (d >> 0x15)) + a; - c = (d ^ a ^ b) + LE_32((param+0x2c)) + c + 0x6D9D6122; + c = (d ^ a ^ b) + _X_LE_32((param+0x2c)) + c + 0x6D9D6122; c = ((c << 0x10) | (c >> 0x10)) + d; - b = (c ^ d ^ a) + LE_32((param+0x38)) + b - 0x021AC7F4; + b = (c ^ d ^ a) + _X_LE_32((param+0x38)) + b - 0x021AC7F4; b = ((b << 0x17) | (b >> 0x09)) + c; - a = (b ^ c ^ d) + LE_32((param+0x04)) + a - 0x5B4115BC; + a = (b ^ c ^ d) + _X_LE_32((param+0x04)) + a - 0x5B4115BC; a = ((a << 0x04) | (a >> 0x1c)) + b; - d = (a ^ b ^ c) + LE_32((param+0x10)) + d + 0x4BDECFA9; + d = (a ^ b ^ c) + _X_LE_32((param+0x10)) + d + 0x4BDECFA9; d = ((d << 0x0b) | (d >> 0x15)) + a; - c = (d ^ a ^ b) + LE_32((param+0x1c)) + c - 0x0944B4A0; + c = (d ^ a ^ b) + _X_LE_32((param+0x1c)) + c - 0x0944B4A0; c = ((c << 0x10) | (c >> 0x10)) + d; - b = (c ^ d ^ a) + LE_32((param+0x28)) + b - 0x41404390; + b = (c ^ d ^ a) + _X_LE_32((param+0x28)) + b - 0x41404390; b = ((b << 0x17) | (b >> 0x09)) + c; - a = (b ^ c ^ d) + LE_32((param+0x34)) + a + 0x289B7EC6; + a = (b ^ c ^ d) + _X_LE_32((param+0x34)) + a + 0x289B7EC6; a = ((a << 0x04) | (a >> 0x1c)) + b; - d = (a ^ b ^ c) + LE_32((param+0x00)) + d - 0x155ED806; + d = (a ^ b ^ c) + _X_LE_32((param+0x00)) + d - 0x155ED806; d = ((d << 0x0b) | (d >> 0x15)) + a; - c = (d ^ a ^ b) + LE_32((param+0x0c)) + c - 0x2B10CF7B; + c = (d ^ a ^ b) + _X_LE_32((param+0x0c)) + c - 0x2B10CF7B; c = ((c << 0x10) | (c >> 0x10)) + d; - b = (c ^ d ^ a) + LE_32((param+0x18)) + b + 0x04881D05; + b = (c ^ d ^ a) + _X_LE_32((param+0x18)) + b + 0x04881D05; b = ((b << 0x17) | (b >> 0x09)) + c; - a = (b ^ c ^ d) + LE_32((param+0x24)) + a - 0x262B2FC7; + a = (b ^ c ^ d) + _X_LE_32((param+0x24)) + a - 0x262B2FC7; a = ((a << 0x04) | (a >> 0x1c)) + b; - d = (a ^ b ^ c) + LE_32((param+0x30)) + d - 0x1924661B; + d = (a ^ b ^ c) + _X_LE_32((param+0x30)) + d - 0x1924661B; d = ((d << 0x0b) | (d >> 0x15)) + a; - c = (d ^ a ^ b) + LE_32((param+0x3c)) + c + 0x1fa27cf8; + c = (d ^ a ^ b) + _X_LE_32((param+0x3c)) + c + 0x1fa27cf8; c = ((c << 0x10) | (c >> 0x10)) + d; - b = (c ^ d ^ a) + LE_32((param+0x08)) + b - 0x3B53A99B; + b = (c ^ d ^ a) + _X_LE_32((param+0x08)) + b - 0x3B53A99B; b = ((b << 0x17) | (b >> 0x09)) + c; - a = ((~d | b) ^ c) + LE_32((param+0x00)) + a - 0x0BD6DDBC; + a = ((~d | b) ^ c) + _X_LE_32((param+0x00)) + a - 0x0BD6DDBC; a = ((a << 0x06) | (a >> 0x1a)) + b; - d = ((~c | a) ^ b) + LE_32((param+0x1c)) + d + 0x432AFF97; + d = ((~c | a) ^ b) + _X_LE_32((param+0x1c)) + d + 0x432AFF97; d = ((d << 0x0a) | (d >> 0x16)) + a; - c = ((~b | d) ^ a) + LE_32((param+0x38)) + c - 0x546BDC59; + c = ((~b | d) ^ a) + _X_LE_32((param+0x38)) + c - 0x546BDC59; c = ((c << 0x0f) | (c >> 0x11)) + d; - b = ((~a | c) ^ d) + LE_32((param+0x14)) + b - 0x036C5FC7; + b = ((~a | c) ^ d) + _X_LE_32((param+0x14)) + b - 0x036C5FC7; b = ((b << 0x15) | (b >> 0x0b)) + c; - a = ((~d | b) ^ c) + LE_32((param+0x30)) + a + 0x655B59C3; + a = ((~d | b) ^ c) + _X_LE_32((param+0x30)) + a + 0x655B59C3; a = ((a << 0x06) | (a >> 0x1a)) + b; - d = ((~c | a) ^ b) + LE_32((param+0x0C)) + d - 0x70F3336E; + d = ((~c | a) ^ b) + _X_LE_32((param+0x0C)) + d - 0x70F3336E; d = ((d << 0x0a) | (d >> 0x16)) + a; - c = ((~b | d) ^ a) + LE_32((param+0x28)) + c - 0x00100B83; + c = ((~b | d) ^ a) + _X_LE_32((param+0x28)) + c - 0x00100B83; c = ((c << 0x0f) | (c >> 0x11)) + d; - b = ((~a | c) ^ d) + LE_32((param+0x04)) + b - 0x7A7BA22F; + b = ((~a | c) ^ d) + _X_LE_32((param+0x04)) + b - 0x7A7BA22F; b = ((b << 0x15) | (b >> 0x0b)) + c; - a = ((~d | b) ^ c) + LE_32((param+0x20)) + a + 0x6FA87E4F; + a = ((~d | b) ^ c) + _X_LE_32((param+0x20)) + a + 0x6FA87E4F; a = ((a << 0x06) | (a >> 0x1a)) + b; - d = ((~c | a) ^ b) + LE_32((param+0x3c)) + d - 0x01D31920; + d = ((~c | a) ^ b) + _X_LE_32((param+0x3c)) + d - 0x01D31920; d = ((d << 0x0a) | (d >> 0x16)) + a; - c = ((~b | d) ^ a) + LE_32((param+0x18)) + c - 0x5CFEBCEC; + c = ((~b | d) ^ a) + _X_LE_32((param+0x18)) + c - 0x5CFEBCEC; c = ((c << 0x0f) | (c >> 0x11)) + d; - b = ((~a | c) ^ d) + LE_32((param+0x34)) + b + 0x4E0811A1; + b = ((~a | c) ^ d) + _X_LE_32((param+0x34)) + b + 0x4E0811A1; b = ((b << 0x15) | (b >> 0x0b)) + c; - a = ((~d | b) ^ c) + LE_32((param+0x10)) + a - 0x08AC817E; + a = ((~d | b) ^ c) + _X_LE_32((param+0x10)) + a - 0x08AC817E; a = ((a << 0x06) | (a >> 0x1a)) + b; - d = ((~c | a) ^ b) + LE_32((param+0x2c)) + d - 0x42C50DCB; + d = ((~c | a) ^ b) + _X_LE_32((param+0x2c)) + d - 0x42C50DCB; d = ((d << 0x0a) | (d >> 0x16)) + a; - c = ((~b | d) ^ a) + LE_32((param+0x08)) + c + 0x2AD7D2BB; + c = ((~b | d) ^ a) + _X_LE_32((param+0x08)) + c + 0x2AD7D2BB; c = ((c << 0x0f) | (c >> 0x11)) + d; - b = ((~a | c) ^ d) + LE_32((param+0x24)) + b - 0x14792C6F; + b = ((~a | c) ^ d) + _X_LE_32((param+0x24)) + b - 0x14792C6F; b = ((b << 0x15) | (b >> 0x0b)) + c; lprintf("hash output: %x %x %x %x\n", a, b, c, d); - a += LE_32(field); - b += LE_32(field+4); - c += LE_32(field+8); - d += LE_32(field+12); - - LE_32C(field, a); - LE_32C(field+4, b); - LE_32C(field+8, c); - LE_32C(field+12, d); + a += _X_LE_32(field); + b += _X_LE_32(field+4); + c += _X_LE_32(field+8); + d += _X_LE_32(field+12); + + _X_LE_32C(field, a); + _X_LE_32C(field+4, b); + _X_LE_32C(field+8, c); + _X_LE_32C(field+12, d); } static void call_hash (char *key, char *challenge, unsigned int len) { @@ -224,10 +221,10 @@ static void call_hash (char *key, char *challenge, unsigned int len) { ptr1=(key+16); ptr2=(key+20); - a = LE_32(ptr1); + a = _X_LE_32(ptr1); b = (a >> 3) & 0x3f; a += len * 8; - LE_32C(ptr1, a); + _X_LE_32C(ptr1, a); if (a < (len << 3)) { @@ -235,8 +232,8 @@ static void call_hash (char *key, char *challenge, unsigned int len) { ptr2 += 4; } - tmp = LE_32(ptr2) + (len >> 0x1d); - LE_32C(ptr2, tmp); + tmp = _X_LE_32(ptr2) + (len >> 0x1d); + _X_LE_32C(ptr2, tmp); a = 64 - b; c = 0; if (a <= len) @@ -270,7 +267,7 @@ static void calc_response (char *result, char *field) { memcpy (buf2, field+16, 8); - i = ( LE_32((buf2)) >> 3 ) & 0x3f; + i = ( _X_LE_32((buf2)) >> 3 ) & 0x3f; if (i < 56) { i = 56 - i; @@ -319,18 +316,17 @@ void real_calc_response_and_checksum (char *response, char *chksum, char *challe int ch_len, resp_len; int i; char *ptr; - char buf[128]; + char buf[128] = { 0, }; /* initialize return values */ memset(response, 0, 64); memset(chksum, 0, 34); /* initialize buffer */ - memset(buf, 0, 128); ptr=buf; - BE_32C(ptr, 0xa1e9149d); + _X_BE_32C(ptr, 0xa1e9149d); ptr+=4; - BE_32C(ptr, 0x0e6b3b59); + _X_BE_32C(ptr, 0x0e6b3b59); ptr+=4; /* some (length) checks */ @@ -356,10 +352,10 @@ void real_calc_response_and_checksum (char *response, char *chksum, char *challe calc_response_string (response, buf); /* add tail */ - resp_len = strlen (response); - strcpy (&response[resp_len], "01d0a8e3"); + strcat(response, "01d0a8e3"); /* calculate checksum */ + resp_len = strlen (response); for (i=0; i<resp_len/4; i++) chksum[i] = response[i*4]; } @@ -390,7 +386,7 @@ static int select_mlti_data(const char *mlti_chunk, int mlti_size, int selection mlti_chunk+=4; /* next 16 bits are the number of rules */ - numrules=BE_16(mlti_chunk); + numrules=_X_BE_16(mlti_chunk); if (selection >= numrules) return 0; /* now <numrules> indices of codecs follows */ @@ -398,13 +394,13 @@ static int select_mlti_data(const char *mlti_chunk, int mlti_size, int selection mlti_chunk+=(selection+1)*2; /* get our index */ - codec=BE_16(mlti_chunk); + codec=_X_BE_16(mlti_chunk); /* skip to number of codecs */ mlti_chunk+=(numrules-selection)*2; /* get number of codecs */ - numrules=BE_16(mlti_chunk); + numrules=_X_BE_16(mlti_chunk); if (codec >= numrules) { lprintf("codec index >= number of codecs. %i %i\n", codec, numrules); @@ -415,11 +411,11 @@ static int select_mlti_data(const char *mlti_chunk, int mlti_size, int selection /* now seek to selected codec */ for (i=0; i<codec; i++) { - size=BE_32(mlti_chunk); + size=_X_BE_32(mlti_chunk); mlti_chunk+=size+4; } - size=BE_32(mlti_chunk); + size=_X_BE_32(mlti_chunk); #ifdef LOG xine_hexdump(mlti_chunk+4, size); @@ -461,7 +457,7 @@ rmff_header_t *real_parse_sdp(char *data, char **stream_rules, uint32_t bandwidt desc->copyright, desc->abstract); header->data=rmff_new_dataheader(0,0); - header->streams = xine_xmalloc(sizeof(rmff_mdpr_t*)*(desc->stream_count+1)); + header->streams = xine_xcalloc((desc->stream_count+1), sizeof(rmff_mdpr_t*)); lprintf("number of streams: %u\n", desc->stream_count); for (i=0; i<desc->stream_count; i++) { @@ -578,7 +574,7 @@ int real_get_rdt_chunk(rtsp_t *rtsp_session, unsigned char **buffer) { unknown1=(header[5]<<16)+(header[6]<<8)+(header[7]); n=rtsp_read_data(rtsp_session, header, 6); if (n<6) return 0; - ts=BE_32(header); + ts=_X_BE_32(header); lprintf("ts: %u size: %u, flags: 0x%02x, unknown values: %u 0x%02x 0x%02x\n", ts, size, flags1, unknown1, header[4], header[5]); @@ -663,7 +659,7 @@ rmff_header_t *real_setup_and_get_header(rtsp_t *rtsp_session, uint32_t bandwid lprintf("Stream description size: %i\n", size); - description = malloc(sizeof(char)*(size+1)); + description = calloc(size+1, sizeof(char)); if( rtsp_read_data(rtsp_session, description, size) <= 0) { xine_buffer_free(buf); diff --git a/src/input/libreal/real.h b/src/input/libreal/real.h index ef9778dbc..edcd170f8 100644 --- a/src/input/libreal/real.h +++ b/src/input/libreal/real.h @@ -15,13 +15,10 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - * - * $Id: real.h,v 1.5 2004/04/24 16:55:42 miguelfreitas Exp $ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * special functions for real streams. * adopted from joschkas real tools. - * */ #ifndef HAVE_REAL_H diff --git a/src/input/libreal/rmff.c b/src/input/libreal/rmff.c index 0c4ee2ccd..1600e967a 100644 --- a/src/input/libreal/rmff.c +++ b/src/input/libreal/rmff.c @@ -15,9 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - * - * $Id: rmff.c,v 1.8 2006/06/20 01:07:58 dgp85 Exp $ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * functions for real media file format * adopted from joschkas real tools @@ -29,56 +27,61 @@ #define LOG */ -#include "xineutils.h" +#include <xine/xineutils.h> +#include "bswap.h" #include "rmff.h" -#define BE_16(x) ((((uint8_t*)(x))[0] << 8) | ((uint8_t*)(x))[1]) -#define BE_32(x) ((((uint8_t*)(x))[0] << 24) | \ - (((uint8_t*)(x))[1] << 16) | \ - (((uint8_t*)(x))[2] << 8) | \ - ((uint8_t*)(x))[3]) - /* * writes header data to a buffer */ -static void rmff_dump_fileheader(rmff_fileheader_t *fileheader, char *buffer) { +static int rmff_dump_fileheader(rmff_fileheader_t *fileheader, uint8_t *buffer, int bufsize) { + + if (!fileheader) return 0; - if (!fileheader) return; - fileheader->object_id=BE_32(&fileheader->object_id); - fileheader->size=BE_32(&fileheader->size); - fileheader->object_version=BE_16(&fileheader->object_version); - fileheader->file_version=BE_32(&fileheader->file_version); - fileheader->num_headers=BE_32(&fileheader->num_headers); + if (bufsize < RMFF_FILEHEADER_SIZE) + return -1; + + fileheader->object_id=_X_BE_32(&fileheader->object_id); + fileheader->size=_X_BE_32(&fileheader->size); + fileheader->object_version=_X_BE_16(&fileheader->object_version); + fileheader->file_version=_X_BE_32(&fileheader->file_version); + fileheader->num_headers=_X_BE_32(&fileheader->num_headers); memcpy(buffer, fileheader, 8); memcpy(&buffer[8], &fileheader->object_version, 2); memcpy(&buffer[10], &fileheader->file_version, 8); - fileheader->size=BE_32(&fileheader->size); - fileheader->object_version=BE_16(&fileheader->object_version); - fileheader->file_version=BE_32(&fileheader->file_version); - fileheader->num_headers=BE_32(&fileheader->num_headers); - fileheader->object_id=BE_32(&fileheader->object_id); + fileheader->size=_X_BE_32(&fileheader->size); + fileheader->object_version=_X_BE_16(&fileheader->object_version); + fileheader->file_version=_X_BE_32(&fileheader->file_version); + fileheader->num_headers=_X_BE_32(&fileheader->num_headers); + fileheader->object_id=_X_BE_32(&fileheader->object_id); + + return RMFF_FILEHEADER_SIZE; } -static void rmff_dump_prop(rmff_prop_t *prop, char *buffer) { - - if (!prop) return; - prop->object_id=BE_32(&prop->object_id); - prop->size=BE_32(&prop->size); - prop->object_version=BE_16(&prop->object_version); - prop->max_bit_rate=BE_32(&prop->max_bit_rate); - prop->avg_bit_rate=BE_32(&prop->avg_bit_rate); - prop->max_packet_size=BE_32(&prop->max_packet_size); - prop->avg_packet_size=BE_32(&prop->avg_packet_size); - prop->num_packets=BE_32(&prop->num_packets); - prop->duration=BE_32(&prop->duration); - prop->preroll=BE_32(&prop->preroll); - prop->index_offset=BE_32(&prop->index_offset); - prop->data_offset=BE_32(&prop->data_offset); - prop->num_streams=BE_16(&prop->num_streams); - prop->flags=BE_16(&prop->flags); +static int rmff_dump_prop(rmff_prop_t *prop, uint8_t *buffer, int bufsize) { + + if (!prop) return 0; + + if (bufsize < RMFF_PROPHEADER_SIZE) + return -1; + + prop->object_id=_X_BE_32(&prop->object_id); + prop->size=_X_BE_32(&prop->size); + prop->object_version=_X_BE_16(&prop->object_version); + prop->max_bit_rate=_X_BE_32(&prop->max_bit_rate); + prop->avg_bit_rate=_X_BE_32(&prop->avg_bit_rate); + prop->max_packet_size=_X_BE_32(&prop->max_packet_size); + prop->avg_packet_size=_X_BE_32(&prop->avg_packet_size); + prop->num_packets=_X_BE_32(&prop->num_packets); + prop->duration=_X_BE_32(&prop->duration); + prop->preroll=_X_BE_32(&prop->preroll); + prop->index_offset=_X_BE_32(&prop->index_offset); + prop->data_offset=_X_BE_32(&prop->data_offset); + prop->num_streams=_X_BE_16(&prop->num_streams); + prop->flags=_X_BE_16(&prop->flags); memcpy(buffer, prop, 8); memcpy(&buffer[8], &prop->object_version, 2); @@ -86,38 +89,44 @@ static void rmff_dump_prop(rmff_prop_t *prop, char *buffer) { memcpy(&buffer[46], &prop->num_streams, 2); memcpy(&buffer[48], &prop->flags, 2); - prop->size=BE_32(&prop->size); - prop->object_version=BE_16(&prop->object_version); - prop->max_bit_rate=BE_32(&prop->max_bit_rate); - prop->avg_bit_rate=BE_32(&prop->avg_bit_rate); - prop->max_packet_size=BE_32(&prop->max_packet_size); - prop->avg_packet_size=BE_32(&prop->avg_packet_size); - prop->num_packets=BE_32(&prop->num_packets); - prop->duration=BE_32(&prop->duration); - prop->preroll=BE_32(&prop->preroll); - prop->index_offset=BE_32(&prop->index_offset); - prop->data_offset=BE_32(&prop->data_offset); - prop->num_streams=BE_16(&prop->num_streams); - prop->flags=BE_16(&prop->flags); - prop->object_id=BE_32(&prop->object_id); + prop->size=_X_BE_32(&prop->size); + prop->object_version=_X_BE_16(&prop->object_version); + prop->max_bit_rate=_X_BE_32(&prop->max_bit_rate); + prop->avg_bit_rate=_X_BE_32(&prop->avg_bit_rate); + prop->max_packet_size=_X_BE_32(&prop->max_packet_size); + prop->avg_packet_size=_X_BE_32(&prop->avg_packet_size); + prop->num_packets=_X_BE_32(&prop->num_packets); + prop->duration=_X_BE_32(&prop->duration); + prop->preroll=_X_BE_32(&prop->preroll); + prop->index_offset=_X_BE_32(&prop->index_offset); + prop->data_offset=_X_BE_32(&prop->data_offset); + prop->num_streams=_X_BE_16(&prop->num_streams); + prop->flags=_X_BE_16(&prop->flags); + prop->object_id=_X_BE_32(&prop->object_id); + + return RMFF_PROPHEADER_SIZE; } -static void rmff_dump_mdpr(rmff_mdpr_t *mdpr, char *buffer) { +static int rmff_dump_mdpr(rmff_mdpr_t *mdpr, uint8_t *buffer, int bufsize) { int s1, s2, s3; - if (!mdpr) return; - mdpr->object_id=BE_32(&mdpr->object_id); - mdpr->size=BE_32(&mdpr->size); - mdpr->object_version=BE_16(&mdpr->object_version); - mdpr->stream_number=BE_16(&mdpr->stream_number); - mdpr->max_bit_rate=BE_32(&mdpr->max_bit_rate); - mdpr->avg_bit_rate=BE_32(&mdpr->avg_bit_rate); - mdpr->max_packet_size=BE_32(&mdpr->max_packet_size); - mdpr->avg_packet_size=BE_32(&mdpr->avg_packet_size); - mdpr->start_time=BE_32(&mdpr->start_time); - mdpr->preroll=BE_32(&mdpr->preroll); - mdpr->duration=BE_32(&mdpr->duration); + if (!mdpr) return 0; + + if (bufsize < RMFF_MDPRHEADER_SIZE + mdpr->type_specific_len + mdpr->stream_name_size + mdpr->mime_type_size) + return -1; + + mdpr->object_id=_X_BE_32(&mdpr->object_id); + mdpr->size=_X_BE_32(&mdpr->size); + mdpr->object_version=_X_BE_16(&mdpr->object_version); + mdpr->stream_number=_X_BE_16(&mdpr->stream_number); + mdpr->max_bit_rate=_X_BE_32(&mdpr->max_bit_rate); + mdpr->avg_bit_rate=_X_BE_32(&mdpr->avg_bit_rate); + mdpr->max_packet_size=_X_BE_32(&mdpr->max_packet_size); + mdpr->avg_packet_size=_X_BE_32(&mdpr->avg_packet_size); + mdpr->start_time=_X_BE_32(&mdpr->start_time); + mdpr->preroll=_X_BE_32(&mdpr->preroll); + mdpr->duration=_X_BE_32(&mdpr->duration); memcpy(buffer, mdpr, 8); memcpy(&buffer[8], &mdpr->object_version, 2); @@ -131,113 +140,138 @@ static void rmff_dump_mdpr(rmff_mdpr_t *mdpr, char *buffer) { s2=mdpr->mime_type_size; memcpy(&buffer[42+s1], mdpr->mime_type, s2); - mdpr->type_specific_len=BE_32(&mdpr->type_specific_len); + mdpr->type_specific_len=_X_BE_32(&mdpr->type_specific_len); memcpy(&buffer[42+s1+s2], &mdpr->type_specific_len, 4); - mdpr->type_specific_len=BE_32(&mdpr->type_specific_len); + mdpr->type_specific_len=_X_BE_32(&mdpr->type_specific_len); s3=mdpr->type_specific_len; memcpy(&buffer[46+s1+s2], mdpr->type_specific_data, s3); - mdpr->size=BE_32(&mdpr->size); - mdpr->stream_number=BE_16(&mdpr->stream_number); - mdpr->max_bit_rate=BE_32(&mdpr->max_bit_rate); - mdpr->avg_bit_rate=BE_32(&mdpr->avg_bit_rate); - mdpr->max_packet_size=BE_32(&mdpr->max_packet_size); - mdpr->avg_packet_size=BE_32(&mdpr->avg_packet_size); - mdpr->start_time=BE_32(&mdpr->start_time); - mdpr->preroll=BE_32(&mdpr->preroll); - mdpr->duration=BE_32(&mdpr->duration); - mdpr->object_id=BE_32(&mdpr->object_id); - + mdpr->size=_X_BE_32(&mdpr->size); + mdpr->stream_number=_X_BE_16(&mdpr->stream_number); + mdpr->max_bit_rate=_X_BE_32(&mdpr->max_bit_rate); + mdpr->avg_bit_rate=_X_BE_32(&mdpr->avg_bit_rate); + mdpr->max_packet_size=_X_BE_32(&mdpr->max_packet_size); + mdpr->avg_packet_size=_X_BE_32(&mdpr->avg_packet_size); + mdpr->start_time=_X_BE_32(&mdpr->start_time); + mdpr->preroll=_X_BE_32(&mdpr->preroll); + mdpr->duration=_X_BE_32(&mdpr->duration); + mdpr->object_id=_X_BE_32(&mdpr->object_id); + + return RMFF_MDPRHEADER_SIZE + s1 + s2 + s3; } -static void rmff_dump_cont(rmff_cont_t *cont, char *buffer) { +static int rmff_dump_cont(rmff_cont_t *cont, uint8_t *buffer, int bufsize) { int p; - if (!cont) return; - cont->object_id=BE_32(&cont->object_id); - cont->size=BE_32(&cont->size); - cont->object_version=BE_16(&cont->object_version); + if (!cont) return 0; + + if (bufsize < RMFF_CONTHEADER_SIZE + cont->title_len + cont->author_len + + cont->copyright_len + cont->comment_len) + return -1; + + cont->object_id=_X_BE_32(&cont->object_id); + cont->size=_X_BE_32(&cont->size); + cont->object_version=_X_BE_16(&cont->object_version); memcpy(buffer, cont, 8); memcpy(&buffer[8], &cont->object_version, 2); - cont->title_len=BE_16(&cont->title_len); + cont->title_len=_X_BE_16(&cont->title_len); memcpy(&buffer[10], &cont->title_len, 2); - cont->title_len=BE_16(&cont->title_len); + cont->title_len=_X_BE_16(&cont->title_len); memcpy(&buffer[12], cont->title, cont->title_len); p=12+cont->title_len; - cont->author_len=BE_16(&cont->author_len); + cont->author_len=_X_BE_16(&cont->author_len); memcpy(&buffer[p], &cont->author_len, 2); - cont->author_len=BE_16(&cont->author_len); + cont->author_len=_X_BE_16(&cont->author_len); memcpy(&buffer[p+2], cont->author, cont->author_len); p+=2+cont->author_len; - cont->copyright_len=BE_16(&cont->copyright_len); + cont->copyright_len=_X_BE_16(&cont->copyright_len); memcpy(&buffer[p], &cont->copyright_len, 2); - cont->copyright_len=BE_16(&cont->copyright_len); + cont->copyright_len=_X_BE_16(&cont->copyright_len); memcpy(&buffer[p+2], cont->copyright, cont->copyright_len); p+=2+cont->copyright_len; - cont->comment_len=BE_16(&cont->comment_len); + cont->comment_len=_X_BE_16(&cont->comment_len); memcpy(&buffer[p], &cont->comment_len, 2); - cont->comment_len=BE_16(&cont->comment_len); + cont->comment_len=_X_BE_16(&cont->comment_len); memcpy(&buffer[p+2], cont->comment, cont->comment_len); - cont->size=BE_32(&cont->size); - cont->object_version=BE_16(&cont->object_version); - cont->object_id=BE_32(&cont->object_id); + cont->size=_X_BE_32(&cont->size); + cont->object_version=_X_BE_16(&cont->object_version); + cont->object_id=_X_BE_32(&cont->object_id); + + return RMFF_CONTHEADER_SIZE + cont->title_len + cont->author_len + + cont->copyright_len + cont->comment_len; } -static void rmff_dump_dataheader(rmff_data_t *data, char *buffer) { +static int rmff_dump_dataheader(rmff_data_t *data, uint8_t *buffer, int bufsize) { + + if (!data) return 0; + + if (bufsize < RMFF_DATAHEADER_SIZE) + return -1; - if (!data) return; - data->object_id=BE_32(&data->object_id); - data->size=BE_32(&data->size); - data->object_version=BE_16(&data->object_version); - data->num_packets=BE_32(&data->num_packets); - data->next_data_header=BE_32(&data->next_data_header); + data->object_id=_X_BE_32(&data->object_id); + data->size=_X_BE_32(&data->size); + data->object_version=_X_BE_16(&data->object_version); + data->num_packets=_X_BE_32(&data->num_packets); + data->next_data_header=_X_BE_32(&data->next_data_header); memcpy(buffer, data, 8); memcpy(&buffer[8], &data->object_version, 2); memcpy(&buffer[10], &data->num_packets, 8); - data->num_packets=BE_32(&data->num_packets); - data->next_data_header=BE_32(&data->next_data_header); - data->size=BE_32(&data->size); - data->object_version=BE_16(&data->object_version); - data->object_id=BE_32(&data->object_id); + data->num_packets=_X_BE_32(&data->num_packets); + data->next_data_header=_X_BE_32(&data->next_data_header); + data->size=_X_BE_32(&data->size); + data->object_version=_X_BE_16(&data->object_version); + data->object_id=_X_BE_32(&data->object_id); + + return RMFF_DATAHEADER_SIZE; } -int rmff_dump_header(rmff_header_t *h, char *buffer, int max) { +int rmff_dump_header(rmff_header_t *h, void *buf_gen, int max) { + uint8_t *buffer = buf_gen; - int written=0; + int written=0, size; rmff_mdpr_t **stream=h->streams; - rmff_dump_fileheader(h->fileheader, &buffer[written]); - written+=h->fileheader->size; - rmff_dump_prop(h->prop, &buffer[written]); - written+=h->prop->size; - rmff_dump_cont(h->cont, &buffer[written]); - written+=h->cont->size; + if ((size=rmff_dump_fileheader(h->fileheader, &buffer[written], max)) < 0) + return -1; + written+=size; + max -= size; + if ((size=rmff_dump_prop(h->prop, &buffer[written], max)) < 0) + return -1; + written+=size; + max -= size; + if ((size=rmff_dump_cont(h->cont, &buffer[written], max)) < 0) + return -1; + written+=size; + max -= size; if (stream) { while(*stream) { - rmff_dump_mdpr(*stream, &buffer[written]); - written+=(*stream)->size; + if ((size=rmff_dump_mdpr(*stream, &buffer[written], max)) < 0) + return -1; + written+=size; + max -= size; stream++; } } - rmff_dump_dataheader(h->data, &buffer[written]); - written+=18; + if ((size=rmff_dump_dataheader(h->data, &buffer[written], max)) < 0) + return -1; + written+=size; return written; } -void rmff_dump_pheader(rmff_pheader_t *h, char *data) { +void rmff_dump_pheader(rmff_pheader_t *h, uint8_t *data) { data[0]=(h->object_version>>8) & 0xff; data[1]=h->object_version & 0xff; @@ -257,15 +291,15 @@ static rmff_fileheader_t *rmff_scan_fileheader(const char *data) { rmff_fileheader_t *fileheader = malloc(sizeof(rmff_fileheader_t)); - fileheader->object_id=BE_32(data); - fileheader->size=BE_32(&data[4]); - fileheader->object_version=BE_16(&data[8]); + fileheader->object_id=_X_BE_32(data); + fileheader->size=_X_BE_32(&data[4]); + fileheader->object_version=_X_BE_16(&data[8]); if (fileheader->object_version != 0) { lprintf("warning: unknown object version in .RMF: 0x%04x\n", fileheader->object_version); } - fileheader->file_version=BE_32(&data[10]); - fileheader->num_headers=BE_32(&data[14]); + fileheader->file_version=_X_BE_32(&data[10]); + fileheader->num_headers=_X_BE_32(&data[14]); return fileheader; } @@ -274,24 +308,24 @@ static rmff_prop_t *rmff_scan_prop(const char *data) { rmff_prop_t *prop = malloc(sizeof(rmff_prop_t)); - prop->object_id=BE_32(data); - prop->size=BE_32(&data[4]); - prop->object_version=BE_16(&data[8]); + prop->object_id=_X_BE_32(data); + prop->size=_X_BE_32(&data[4]); + prop->object_version=_X_BE_16(&data[8]); if (prop->object_version != 0) { lprintf("warning: unknown object version in PROP: 0x%04x\n", prop->object_version); } - prop->max_bit_rate=BE_32(&data[10]); - prop->avg_bit_rate=BE_32(&data[14]); - prop->max_packet_size=BE_32(&data[18]); - prop->avg_packet_size=BE_32(&data[22]); - prop->num_packets=BE_32(&data[26]); - prop->duration=BE_32(&data[30]); - prop->preroll=BE_32(&data[34]); - prop->index_offset=BE_32(&data[38]); - prop->data_offset=BE_32(&data[42]); - prop->num_streams=BE_16(&data[46]); - prop->flags=BE_16(&data[48]); + prop->max_bit_rate=_X_BE_32(&data[10]); + prop->avg_bit_rate=_X_BE_32(&data[14]); + prop->max_packet_size=_X_BE_32(&data[18]); + prop->avg_packet_size=_X_BE_32(&data[22]); + prop->num_packets=_X_BE_32(&data[26]); + prop->duration=_X_BE_32(&data[30]); + prop->preroll=_X_BE_32(&data[34]); + prop->index_offset=_X_BE_32(&data[38]); + prop->data_offset=_X_BE_32(&data[42]); + prop->num_streams=_X_BE_16(&data[46]); + prop->flags=_X_BE_16(&data[48]); return prop; } @@ -300,36 +334,30 @@ static rmff_mdpr_t *rmff_scan_mdpr(const char *data) { rmff_mdpr_t *mdpr = malloc(sizeof(rmff_mdpr_t)); - mdpr->object_id=BE_32(data); - mdpr->size=BE_32(&data[4]); - mdpr->object_version=BE_16(&data[8]); + mdpr->object_id=_X_BE_32(data); + mdpr->size=_X_BE_32(&data[4]); + mdpr->object_version=_X_BE_16(&data[8]); if (mdpr->object_version != 0) { lprintf("warning: unknown object version in MDPR: 0x%04x\n", mdpr->object_version); } - mdpr->stream_number=BE_16(&data[10]); - mdpr->max_bit_rate=BE_32(&data[12]); - mdpr->avg_bit_rate=BE_32(&data[16]); - mdpr->max_packet_size=BE_32(&data[20]); - mdpr->avg_packet_size=BE_32(&data[24]); - mdpr->start_time=BE_32(&data[28]); - mdpr->preroll=BE_32(&data[32]); - mdpr->duration=BE_32(&data[36]); + mdpr->stream_number=_X_BE_16(&data[10]); + mdpr->max_bit_rate=_X_BE_32(&data[12]); + mdpr->avg_bit_rate=_X_BE_32(&data[16]); + mdpr->max_packet_size=_X_BE_32(&data[20]); + mdpr->avg_packet_size=_X_BE_32(&data[24]); + mdpr->start_time=_X_BE_32(&data[28]); + mdpr->preroll=_X_BE_32(&data[32]); + mdpr->duration=_X_BE_32(&data[36]); mdpr->stream_name_size=data[40]; - mdpr->stream_name = malloc(sizeof(char)*(mdpr->stream_name_size+1)); - memcpy(mdpr->stream_name, &data[41], mdpr->stream_name_size); - mdpr->stream_name[mdpr->stream_name_size]=0; + mdpr->stream_name = xine_memdup0(&data[41], mdpr->stream_name_size); mdpr->mime_type_size=data[41+mdpr->stream_name_size]; - mdpr->mime_type = malloc(sizeof(char)*(mdpr->mime_type_size+1)); - memcpy(mdpr->mime_type, &data[42+mdpr->stream_name_size], mdpr->mime_type_size); - mdpr->mime_type[mdpr->mime_type_size]=0; + mdpr->mime_type = xine_memdup0(&data[42+mdpr->stream_name_size], mdpr->mime_type_size); - mdpr->type_specific_len=BE_32(&data[42+mdpr->stream_name_size+mdpr->mime_type_size]); - mdpr->type_specific_data = malloc(sizeof(char)*(mdpr->type_specific_len)); - memcpy(mdpr->type_specific_data, - &data[46+mdpr->stream_name_size+mdpr->mime_type_size], mdpr->type_specific_len); + mdpr->type_specific_len=_X_BE_32(&data[42+mdpr->stream_name_size+mdpr->mime_type_size]); + mdpr->type_specific_data = xine_memdup(&data[46+mdpr->stream_name_size+mdpr->mime_type_size], mdpr->type_specific_len); return mdpr; } @@ -339,32 +367,25 @@ static rmff_cont_t *rmff_scan_cont(const char *data) { rmff_cont_t *cont = malloc(sizeof(rmff_cont_t)); int pos; - cont->object_id=BE_32(data); - cont->size=BE_32(&data[4]); - cont->object_version=BE_16(&data[8]); + cont->object_id=_X_BE_32(data); + cont->size=_X_BE_32(&data[4]); + cont->object_version=_X_BE_16(&data[8]); if (cont->object_version != 0) { lprintf("warning: unknown object version in CONT: 0x%04x\n", cont->object_version); } - cont->title_len=BE_16(&data[10]); - cont->title = malloc(sizeof(char)*(cont->title_len+1)); - memcpy(cont->title, &data[12], cont->title_len); - cont->title[cont->title_len]=0; + cont->title_len=_X_BE_16(&data[10]); + cont->title = xine_memdup0(&data[12], cont->title_len); pos=cont->title_len+12; - cont->author_len=BE_16(&data[pos]); - cont->author = malloc(sizeof(char)*(cont->author_len+1)); - memcpy(cont->author, &data[pos+2], cont->author_len); - cont->author[cont->author_len]=0; + cont->author_len=_X_BE_16(&data[pos]); + cont->author = xine_memdup0(&data[pos+2], cont->author_len); pos=pos+2+cont->author_len; - cont->copyright_len=BE_16(&data[pos]); - cont->copyright = malloc(sizeof(char)*(cont->copyright_len+1)); - memcpy(cont->copyright, &data[pos+2], cont->copyright_len); + cont->copyright_len=_X_BE_16(&data[pos]); + cont->copyright = xine_memdup0(&data[pos+2], cont->copyright_len); cont->copyright[cont->copyright_len]=0; pos=pos+2+cont->copyright_len; - cont->comment_len=BE_16(&data[pos]); - cont->comment = malloc(sizeof(char)*(cont->comment_len+1)); - memcpy(cont->comment, &data[pos+2], cont->comment_len); - cont->comment[cont->comment_len]=0; + cont->comment_len=_X_BE_16(&data[pos]); + cont->comment = xine_memdup0(&data[pos+2], cont->comment_len); return cont; } @@ -373,15 +394,15 @@ static rmff_data_t *rmff_scan_dataheader(const char *data) { rmff_data_t *dh = malloc(sizeof(rmff_data_t)); - dh->object_id=BE_32(data); - dh->size=BE_32(&data[4]); - dh->object_version=BE_16(&data[8]); + dh->object_id=_X_BE_32(data); + dh->size=_X_BE_32(&data[4]); + dh->object_version=_X_BE_16(&data[8]); if (dh->object_version != 0) { lprintf("warning: unknown object version in DATA: 0x%04x\n", dh->object_version); } - dh->num_packets=BE_32(&data[10]); - dh->next_data_header=BE_32(&data[14]); + dh->num_packets=_X_BE_32(&data[10]); + dh->next_data_header=_X_BE_32(&data[14]); return dh; } @@ -400,7 +421,7 @@ rmff_header_t *rmff_scan_header(const char *data) { header->cont=NULL; header->data=NULL; - chunk_type = BE_32(ptr); + chunk_type = _X_BE_32(ptr); if (chunk_type != RMF_TAG) { lprintf("rmff: not an real media file header (.RMF tag not found).\n"); @@ -410,13 +431,10 @@ rmff_header_t *rmff_scan_header(const char *data) { header->fileheader=rmff_scan_fileheader(ptr); ptr += header->fileheader->size; - header->streams = malloc(sizeof(rmff_mdpr_t*)*(header->fileheader->num_headers)); - for (i=0; i<header->fileheader->num_headers; i++) { - header->streams[i]=NULL; - } + header->streams = calloc(header->fileheader->num_headers, sizeof(rmff_mdpr_t*)); for (i=1; i<header->fileheader->num_headers; i++) { - chunk_type = BE_32(ptr); + chunk_type = _X_BE_32(ptr); if (ptr[0] == 0) { @@ -457,6 +475,7 @@ rmff_header_t *rmff_scan_header(const char *data) { return header; } +#if 0 rmff_header_t *rmff_scan_header_stream(int fd) { rmff_header_t *header; @@ -468,8 +487,8 @@ rmff_header_t *rmff_scan_header_stream(int fd) { do { xine_buffer_ensure_size(buf, index+8); read(fd, buf+index, 8); - chunk_type=BE_32(buf+index); index+=4; - chunk_size=BE_32(buf+index); index+=4; + chunk_type=_X_BE_32(buf+index); index+=4; + chunk_size=_X_BE_32(buf+index); index+=4; switch (chunk_type) { case DATA_TAG: @@ -500,13 +519,14 @@ rmff_header_t *rmff_scan_header_stream(int fd) { void rmff_scan_pheader(rmff_pheader_t *h, char *data) { - h->object_version=BE_16(data); - h->length=BE_16(data+2); - h->stream_number=BE_16(data+4); - h->timestamp=BE_32(data+6); + h->object_version=_X_BE_16(data); + h->length=_X_BE_16(data+2); + h->stream_number=_X_BE_16(data+4); + h->timestamp=_X_BE_32(data+6); h->reserved=(uint8_t)data[10]; h->flags=(uint8_t)data[11]; } +#endif rmff_fileheader_t *rmff_new_fileheader(uint32_t num_headers) { @@ -593,8 +613,7 @@ rmff_mdpr_t *rmff_new_mdpr( mdpr->mime_type_size=strlen(mime_type); } mdpr->type_specific_len=type_specific_len; - mdpr->type_specific_data = malloc(sizeof(char)*type_specific_len); - memcpy(mdpr->type_specific_data,type_specific_data,type_specific_len); + mdpr->type_specific_data = xine_memdup(type_specific_data,type_specific_len); mdpr->mlti_data=NULL; mdpr->size=mdpr->stream_name_size+mdpr->mime_type_size+mdpr->type_specific_len+46; @@ -653,6 +672,7 @@ rmff_data_t *rmff_new_dataheader(uint32_t num_packets, uint32_t next_data_header return data; } +#if 0 void rmff_print_header(rmff_header_t *h) { rmff_mdpr_t **stream; @@ -719,6 +739,7 @@ void rmff_print_header(rmff_header_t *h) { printf("next DATA : 0x%08x\n", h->data->next_data_header); } } +#endif void rmff_fix_header(rmff_header_t *h) { @@ -827,6 +848,7 @@ void rmff_fix_header(rmff_header_t *h) { } } +#if 0 int rmff_get_header_size(rmff_header_t *h) { if (!h) return 0; @@ -866,3 +888,4 @@ void rmff_free_header(rmff_header_t *h) { } free(h); } +#endif diff --git a/src/input/libreal/rmff.h b/src/input/libreal/rmff.h index 4f33d93a5..3fe3af284 100644 --- a/src/input/libreal/rmff.h +++ b/src/input/libreal/rmff.h @@ -15,9 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - * - * $Id: rmff.h,v 1.5 2004/04/06 19:20:16 valtri Exp $ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * some functions for real media file headers * adopted from joschkas real tools @@ -41,6 +39,12 @@ #define RMFF_HEADER_SIZE 0x12 +#define RMFF_FILEHEADER_SIZE 18 +#define RMFF_PROPHEADER_SIZE 50 +#define RMFF_MDPRHEADER_SIZE 46 +#define RMFF_CONTHEADER_SIZE 18 +#define RMFF_DATAHEADER_SIZE 18 + #define FOURCC_TAG( ch0, ch1, ch2, ch3 ) \ (((long)(unsigned char)(ch3) ) | \ ( (long)(unsigned char)(ch2) << 8 ) | \ @@ -218,6 +222,7 @@ rmff_data_t *rmff_new_dataheader( */ rmff_header_t *rmff_scan_header(const char *data); +#if 0 /* * scans a data packet header. Notice, that this function does not allocate * the header struct itself. @@ -233,30 +238,35 @@ rmff_header_t *rmff_scan_header_stream(int fd); * prints header information in human readible form to stdout */ void rmff_print_header(rmff_header_t *h); +#endif /* * does some checks and fixes header if possible */ void rmff_fix_header(rmff_header_t *h); +#if 0 /* * returns the size of the header (incl. first data-header) */ int rmff_get_header_size(rmff_header_t *h); +#endif /* * dumps the header <h> to <buffer>. <max> is the size of <buffer> */ -int rmff_dump_header(rmff_header_t *h, char *buffer, int max); +int rmff_dump_header(rmff_header_t *h, void *buffer, int max); /* * dumps a packet header */ -void rmff_dump_pheader(rmff_pheader_t *h, char *data); +void rmff_dump_pheader(rmff_pheader_t *h, uint8_t *data); +#if 0 /* * frees a header struct */ void rmff_free_header(rmff_header_t *h); +#endif #endif diff --git a/src/input/libreal/sdpplin.c b/src/input/libreal/sdpplin.c index 019237243..d58a3d1fe 100644 --- a/src/input/libreal/sdpplin.c +++ b/src/input/libreal/sdpplin.c @@ -15,12 +15,9 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - * - * $Id: sdpplin.c,v 1.8 2006/12/25 16:21:56 dgp85 Exp $ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * sdp/sdpplin parser. - * */ #define LOG_MODULE "sdpplin" @@ -32,7 +29,7 @@ #include "rmff.h" #include "rtsp.h" #include "sdpplin.h" -#include "xineutils.h" +#include <xine/xineutils.h> /* * Decodes base64 strings (based upon b64 package) @@ -202,8 +199,7 @@ static sdpplin_stream_t *sdpplin_parse_stream(char **data) { if(filter(*data,"a=OpaqueData:buffer;",&buf)) { decoded = b64_decode(buf, decoded, &(desc->mlti_data_size)); if ( decoded != NULL ) { - desc->mlti_data = malloc(sizeof(char)*desc->mlti_data_size); - memcpy(desc->mlti_data, decoded, desc->mlti_data_size); + desc->mlti_data = xine_memdup(decoded, desc->mlti_data_size); handled=1; *data=nl(*data); lprintf("mlti_data_size: %i\n", desc->mlti_data_size); @@ -297,7 +293,7 @@ sdpplin_t *sdpplin_parse(char *data) { if(filter(data,"a=StreamCount:integer;",&buf)) { desc->stream_count=atoi(buf); - desc->stream = malloc(sizeof(sdpplin_stream_t*)*desc->stream_count); + desc->stream = calloc(desc->stream_count, sizeof(sdpplin_stream_t*)); handled=1; data=nl(data); } diff --git a/src/input/libreal/sdpplin.h b/src/input/libreal/sdpplin.h index ae03cf0cf..cb3b434d4 100644 --- a/src/input/libreal/sdpplin.h +++ b/src/input/libreal/sdpplin.h @@ -15,12 +15,9 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - * - * $Id: sdpplin.h,v 1.2 2003/12/09 00:02:30 f1rmb Exp $ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * sdp/sdpplin parser. - * */ #ifndef HAVE_SDPPLIN_H |