Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2014-04-02 12:55:10 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
eae9b94153ac7c0d22e1c0f22f86408809aefbc4
eae9b941
1 parent
0ba0c14f
add api framework code
隐藏空白字符变更
内嵌
并排对比
正在显示
3 个修改的文件
包含
85 行增加
和
2 行删除
trunk/src/app/srs_app_http_api.cpp
trunk/src/app/srs_app_http_api.hpp
trunk/src/app/srs_app_http_conn.cpp
trunk/src/app/srs_app_http_api.cpp
查看文件 @
eae9b94
...
...
@@ -25,16 +25,24 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifdef SRS_HTTP_API
#include <sstream>
using
namespace
std
;
#include <srs_kernel_log.hpp>
#include <srs_kernel_error.hpp>
#include <srs_app_http.hpp>
#include <srs_app_socket.hpp>
#include <srs_core_autofree.hpp>
SrsHttpApi
::
SrsHttpApi
(
SrsServer
*
srs_server
,
st_netfd_t
client_stfd
)
:
SrsConnection
(
srs_server
,
client_stfd
)
{
parser
=
new
SrsHttpParser
();
}
SrsHttpApi
::~
SrsHttpApi
()
{
srs_freep
(
parser
);
}
int
SrsHttpApi
::
do_cycle
()
...
...
@@ -47,6 +55,73 @@ int SrsHttpApi::do_cycle()
}
srs_trace
(
"api get peer ip success. ip=%s"
,
ip
);
// initialize parser
if
((
ret
=
parser
->
initialize
(
HTTP_REQUEST
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"api initialize http parser failed. ret=%d"
,
ret
);
return
ret
;
}
// underlayer socket
SrsSocket
skt
(
stfd
);
// process http messages.
for
(;;)
{
SrsHttpMessage
*
req
=
NULL
;
// get a http message
if
((
ret
=
parser
->
parse_message
(
&
skt
,
&
req
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
// if SUCCESS, always NOT-NULL and completed message.
srs_assert
(
req
);
srs_assert
(
req
->
is_complete
());
// always free it in this scope.
SrsAutoFree
(
SrsHttpMessage
,
req
,
false
);
// ok, handle http request.
if
((
ret
=
process_request
(
&
skt
,
req
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
}
return
ret
;
}
int
SrsHttpApi
::
process_request
(
SrsSocket
*
skt
,
SrsHttpMessage
*
req
)
{
int
ret
=
ERROR_SUCCESS
;
if
(
req
->
method
()
==
HTTP_OPTIONS
)
{
char
data
[]
=
"HTTP/1.1 200 OK"
__CRLF
"Content-Length: 0"
__CRLF
"Server: SRS/"
RTMP_SIG_SRS_VERSION
""
__CRLF
"Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT"
__CRLF
"Access-Control-Allow-Origin: *"
__CRLF
"Access-Control-Allow-Methods: GET, POST, HEAD, PUT, DELETE"
__CRLF
"Access-Control-Allow-Headers: Cache-Control,X-Proxy-Authorization,X-Requested-With,Content-Type"
__CRLF
"Content-Type: text/html;charset=utf-8"
__CRLFCRLF
""
;
return
skt
->
write
(
data
,
sizeof
(
data
),
NULL
);
}
else
{
std
::
string
tilte
=
"SRS/"
RTMP_SIG_SRS_VERSION
;
tilte
+=
" hello http/1.1 api~
\n
"
;
std
::
stringstream
ss
;
ss
<<
"HTTP/1.1 200 OK "
<<
__CRLF
<<
"Content-Length: "
<<
tilte
.
length
()
+
req
->
body_size
()
<<
__CRLF
<<
"Server: SRS/"
RTMP_SIG_SRS_VERSION
""
<<
__CRLF
<<
"Allow: DELETE, GET, HEAD, OPTIONS, POST, PUT"
<<
__CRLF
<<
"Access-Control-Allow-Origin: *"
<<
__CRLF
<<
"Access-Control-Allow-Methods: GET, POST, HEAD, PUT, DELETE"
<<
__CRLF
<<
"Access-Control-Allow-Headers: Cache-Control,X-Proxy-Authorization,X-Requested-With,Content-Type"
<<
__CRLF
<<
"Content-Type: text/html;charset=utf-8"
<<
__CRLFCRLF
<<
tilte
<<
req
->
body
().
c_str
()
<<
""
;
return
skt
->
write
(
ss
.
str
().
c_str
(),
ss
.
str
().
length
(),
NULL
);
}
return
ret
;
}
...
...
trunk/src/app/srs_app_http_api.hpp
查看文件 @
eae9b94
...
...
@@ -32,16 +32,24 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifdef SRS_HTTP_API
class
SrsSocket
;
class
SrsHttpMessage
;
class
SrsHttpParser
;
#include <srs_app_st.hpp>
#include <srs_app_conn.hpp>
class
SrsHttpApi
:
public
SrsConnection
{
private
:
SrsHttpParser
*
parser
;
public
:
SrsHttpApi
(
SrsServer
*
srs_server
,
st_netfd_t
client_stfd
);
virtual
~
SrsHttpApi
();
protected
:
virtual
int
do_cycle
();
private
:
virtual
int
process_request
(
SrsSocket
*
skt
,
SrsHttpMessage
*
req
);
};
#endif
...
...
trunk/src/app/srs_app_http_conn.cpp
查看文件 @
eae9b94
...
...
@@ -60,7 +60,7 @@ int SrsHttpConn::do_cycle()
// initialize parser
if
((
ret
=
parser
->
initialize
(
HTTP_REQUEST
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"initialize http parser failed. ret=%d"
,
ret
);
srs_error
(
"
http
initialize http parser failed. ret=%d"
,
ret
);
return
ret
;
}
...
...
@@ -109,7 +109,7 @@ int SrsHttpConn::process_request(SrsSocket* skt, SrsHttpMessage* req)
return
skt
->
write
(
data
,
sizeof
(
data
),
NULL
);
}
else
{
std
::
string
tilte
=
"SRS/"
RTMP_SIG_SRS_VERSION
;
tilte
+=
" hello http/1.1~
\n
"
;
tilte
+=
" hello http/1.1
server
~
\n
"
;
std
::
stringstream
ss
;
ss
<<
"HTTP/1.1 200 OK "
<<
__CRLF
...
...
请
注册
或
登录
后发表评论