Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
db9cc3a5
Commit
db9cc3a5
authored
Jul 26, 2010
by
Ronald S. Bultje
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reindent after r24516.
Originally committed as revision 24517 to
svn://svn.ffmpeg.org/ffmpeg/trunk
parent
e87b7d72
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
103 additions
and
106 deletions
+103
-106
mmst.c
libavformat/mmst.c
+103
-106
No files found.
libavformat/mmst.c
View file @
db9cc3a5
...
@@ -282,120 +282,117 @@ static MMSSCPacketType get_tcp_server_response(MMSContext *mms)
...
@@ -282,120 +282,117 @@ static MMSSCPacketType get_tcp_server_response(MMSContext *mms)
return
packet_type
;
return
packet_type
;
}
}
// handle command packet.
// handle command packet.
if
(
AV_RL32
(
mms
->
in_buffer
+
4
)
==
0xb00bface
)
{
if
(
AV_RL32
(
mms
->
in_buffer
+
4
)
==
0xb00bface
)
{
int
length_remaining
,
hr
;
int
length_remaining
,
hr
;
mms
->
incoming_flags
=
mms
->
in_buffer
[
3
];
mms
->
incoming_flags
=
mms
->
in_buffer
[
3
];
read_result
=
url_read_complete
(
mms
->
mms_hd
,
mms
->
in_buffer
+
8
,
4
);
read_result
=
url_read_complete
(
mms
->
mms_hd
,
mms
->
in_buffer
+
8
,
4
);
if
(
read_result
!=
4
)
{
if
(
read_result
!=
4
)
{
av_log
(
NULL
,
AV_LOG_ERROR
,
av_log
(
NULL
,
AV_LOG_ERROR
,
"Reading command packet length failed: %d (%s)
\n
"
,
"Reading command packet length failed: %d (%s)
\n
"
,
read_result
,
read_result
,
read_result
<
0
?
strerror
(
read_result
)
:
read_result
<
0
?
strerror
(
read_result
)
:
"The server closed the connection"
);
"The server closed the connection"
);
return
read_result
<
0
?
read_result
:
AVERROR_IO
;
return
read_result
<
0
?
read_result
:
AVERROR_IO
;
}
}
length_remaining
=
AV_RL32
(
mms
->
in_buffer
+
8
)
+
4
;
length_remaining
=
AV_RL32
(
mms
->
in_buffer
+
8
)
+
4
;
dprintf
(
NULL
,
"Length remaining is %d
\n
"
,
length_remaining
);
dprintf
(
NULL
,
"Length remaining is %d
\n
"
,
length_remaining
);
// read the rest of the packet.
// read the rest of the packet.
if
(
length_remaining
<
0
if
(
length_remaining
<
0
||
length_remaining
>
sizeof
(
mms
->
in_buffer
)
-
12
)
{
||
length_remaining
>
sizeof
(
mms
->
in_buffer
)
-
12
)
{
av_log
(
NULL
,
AV_LOG_ERROR
,
av_log
(
NULL
,
AV_LOG_ERROR
,
"Incoming packet length %d exceeds bufsize %zu
\n
"
,
"Incoming packet length %d exceeds bufsize %zu
\n
"
,
length_remaining
,
sizeof
(
mms
->
in_buffer
)
-
12
);
length_remaining
,
sizeof
(
mms
->
in_buffer
)
-
12
);
return
AVERROR_INVALIDDATA
;
return
AVERROR_INVALIDDATA
;
}
}
read_result
=
url_read_complete
(
mms
->
mms_hd
,
mms
->
in_buffer
+
12
,
read_result
=
url_read_complete
(
mms
->
mms_hd
,
mms
->
in_buffer
+
12
,
length_remaining
)
;
length_remaining
)
;
if
(
read_result
!=
length_remaining
)
{
if
(
read_result
!=
length_remaining
)
{
av_log
(
NULL
,
AV_LOG_ERROR
,
av_log
(
NULL
,
AV_LOG_ERROR
,
"Reading pkt data (length=%d) failed: %d (%s)
\n
"
,
"Reading pkt data (length=%d) failed: %d (%s)
\n
"
,
length_remaining
,
read_result
,
length_remaining
,
read_result
,
read_result
<
0
?
strerror
(
read_result
)
:
read_result
<
0
?
strerror
(
read_result
)
:
"The server closed the connection"
);
"The server closed the connection"
);
return
read_result
<
0
?
read_result
:
AVERROR_IO
;
return
read_result
<
0
?
read_result
:
AVERROR_IO
;
}
}
packet_type
=
AV_RL16
(
mms
->
in_buffer
+
36
);
packet_type
=
AV_RL16
(
mms
->
in_buffer
+
36
);
hr
=
AV_RL32
(
mms
->
in_buffer
+
40
);
hr
=
AV_RL32
(
mms
->
in_buffer
+
40
);
if
(
hr
)
{
if
(
hr
)
{
av_log
(
NULL
,
AV_LOG_ERROR
,
av_log
(
NULL
,
AV_LOG_ERROR
,
"Server sent an error status code: 0x%08x
\n
"
,
"Server sent an error status code: 0x%08x
\n
"
,
hr
);
hr
);
return
AVERROR_UNKNOWN
;
return
AVERROR_UNKNOWN
;
}
}
}
else
{
}
else
{
int
length_remaining
;
int
length_remaining
;
int
packet_id_type
;
int
packet_id_type
;
int
tmp
;
int
tmp
;
// note we cache the first 8 bytes,
// note we cache the first 8 bytes,
// then fill up the buffer with the others
// then fill up the buffer with the others
tmp
=
AV_RL16
(
mms
->
in_buffer
+
6
);
tmp
=
AV_RL16
(
mms
->
in_buffer
+
6
);
length_remaining
=
(
tmp
-
8
)
&
0xffff
;
length_remaining
=
(
tmp
-
8
)
&
0xffff
;
mms
->
incoming_packet_seq
=
AV_RL32
(
mms
->
in_buffer
);
mms
->
incoming_packet_seq
=
AV_RL32
(
mms
->
in_buffer
);
packet_id_type
=
mms
->
in_buffer
[
4
];
packet_id_type
=
mms
->
in_buffer
[
4
];
mms
->
incoming_flags
=
mms
->
in_buffer
[
5
];
mms
->
incoming_flags
=
mms
->
in_buffer
[
5
];
if
(
length_remaining
<
0
if
(
length_remaining
<
0
||
length_remaining
>
sizeof
(
mms
->
in_buffer
)
-
8
)
{
||
length_remaining
>
sizeof
(
mms
->
in_buffer
)
-
8
)
{
av_log
(
NULL
,
AV_LOG_ERROR
,
av_log
(
NULL
,
AV_LOG_ERROR
,
"Data length %d is invalid or too large (max=%zu)
\n
"
,
"Data length %d is invalid or too large (max=%zu)
\n
"
,
length_remaining
,
sizeof
(
mms
->
in_buffer
));
length_remaining
,
sizeof
(
mms
->
in_buffer
));
return
AVERROR_INVALIDDATA
;
return
AVERROR_INVALIDDATA
;
}
}
mms
->
remaining_in_len
=
length_remaining
;
mms
->
remaining_in_len
=
length_remaining
;
mms
->
read_in_ptr
=
mms
->
in_buffer
;
mms
->
read_in_ptr
=
mms
->
in_buffer
;
read_result
=
url_read_complete
(
mms
->
mms_hd
,
mms
->
in_buffer
,
length_remaining
);
read_result
=
url_read_complete
(
mms
->
mms_hd
,
mms
->
in_buffer
,
length_remaining
);
if
(
read_result
!=
length_remaining
)
{
if
(
read_result
!=
length_remaining
)
{
av_log
(
NULL
,
AV_LOG_ERROR
,
av_log
(
NULL
,
AV_LOG_ERROR
,
"Failed to read packet data of size %d: %d (%s)
\n
"
,
"Failed to read packet data of size %d: %d (%s)
\n
"
,
length_remaining
,
read_result
,
length_remaining
,
read_result
,
read_result
<
0
?
strerror
(
read_result
)
:
read_result
<
0
?
strerror
(
read_result
)
:
"The server closed the connection"
);
"The server closed the connection"
);
return
read_result
<
0
?
read_result
:
AVERROR_IO
;
return
read_result
<
0
?
read_result
:
AVERROR_IO
;
}
// if we successfully read everything.
if
(
packet_id_type
==
mms
->
header_packet_id
)
{
packet_type
=
SC_PKT_ASF_HEADER
;
// Store the asf header
if
(
!
mms
->
header_parsed
)
{
void
*
p
=
av_realloc
(
mms
->
asf_header
,
mms
->
asf_header_size
+
mms
->
remaining_in_len
);
if
(
!
p
)
{
av_freep
(
&
mms
->
asf_header
);
return
AVERROR
(
ENOMEM
);
}
mms
->
asf_header
=
p
;
memcpy
(
mms
->
asf_header
+
mms
->
asf_header_size
,
mms
->
read_in_ptr
,
mms
->
remaining_in_len
);
mms
->
asf_header_size
+=
mms
->
remaining_in_len
;
}
// 0x04 means asf header is sent in multiple packets.
if
(
mms
->
incoming_flags
==
0x04
)
continue
;
}
else
if
(
packet_id_type
==
mms
->
packet_id
)
{
packet_type
=
SC_PKT_ASF_MEDIA
;
}
else
{
dprintf
(
NULL
,
"packet id type %d is old."
,
packet_id_type
);
continue
;
}
}
}
// preprocess some packet type
// if we successfully read everything.
if
(
packet_type
==
SC_PKT_KEEPALIVE
)
{
if
(
packet_id_type
==
mms
->
header_packet_id
)
{
send_keepalive_packet
(
mms
);
packet_type
=
SC_PKT_ASF_HEADER
;
// Store the asf header
if
(
!
mms
->
header_parsed
)
{
void
*
p
=
av_realloc
(
mms
->
asf_header
,
mms
->
asf_header_size
+
mms
->
remaining_in_len
);
if
(
!
p
)
{
av_freep
(
&
mms
->
asf_header
);
return
AVERROR
(
ENOMEM
);
}
mms
->
asf_header
=
p
;
memcpy
(
mms
->
asf_header
+
mms
->
asf_header_size
,
mms
->
read_in_ptr
,
mms
->
remaining_in_len
);
mms
->
asf_header_size
+=
mms
->
remaining_in_len
;
}
// 0x04 means asf header is sent in multiple packets.
if
(
mms
->
incoming_flags
==
0x04
)
continue
;
}
else
if
(
packet_id_type
==
mms
->
packet_id
)
{
packet_type
=
SC_PKT_ASF_MEDIA
;
}
else
{
dprintf
(
NULL
,
"packet id type %d is old."
,
packet_id_type
);
continue
;
continue
;
}
else
if
(
packet_type
==
SC_PKT_STREAM_CHANGING
)
{
handle_packet_stream_changing_type
(
mms
);
}
else
if
(
packet_type
==
SC_PKT_ASF_MEDIA
)
{
pad_media_packet
(
mms
);
}
}
return
packet_type
;
}
// preprocess some packet type
if
(
packet_type
==
SC_PKT_KEEPALIVE
)
{
send_keepalive_packet
(
mms
);
continue
;
}
else
if
(
packet_type
==
SC_PKT_STREAM_CHANGING
)
{
handle_packet_stream_changing_type
(
mms
);
}
else
if
(
packet_type
==
SC_PKT_ASF_MEDIA
)
{
pad_media_packet
(
mms
);
}
return
packet_type
;
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment