winlin

support multiple http hooks for a event.

... ... @@ -28,13 +28,13 @@ when srs get some event, for example, when client connect
to srs, srs can invoke the http api of the api-server
"""
import sys;
import sys
# reload sys model to enable the getdefaultencoding method.
reload(sys);
reload(sys)
# set the default encoding to utf-8
# using exec to set the encoding, to avoid error in IDE.
exec("sys.setdefaultencoding('utf-8')");
assert sys.getdefaultencoding().lower() == "utf-8";
exec("sys.setdefaultencoding('utf-8')")
assert sys.getdefaultencoding().lower() == "utf-8"
import json, datetime, cherrypy
... ... @@ -66,25 +66,46 @@ class RESTClients(object):
exposed = True
def GET(self):
enable_crossdomain();
clients = {};
return json.dumps(clients);
enable_crossdomain()
# for SRS hook: on_connect
clients = {}
return json.dumps(clients)
'''
for SRS hook: on_connect
when client connect to vhost/app, call the hook,
the request in the POST data string is a object encode by json:
{
"ip": "192.168.1.10", "vhost": "video.test.com", "app": "live",
"pageUrl": "http://www.test.com/live.html"
}
if valid, the hook must return HTTP code 200(Stauts OK) and response
an int value specifies the error code(0 corresponding to success):
0
'''
def POST(self):
enable_crossdomain();
enable_crossdomain()
req = cherrypy.request.body.read();
trace("post to clients, req=%s"%(req));
# return the error code in str
ret = Error.success
req = cherrypy.request.body.read()
trace("post to clients, req=%s"%(req))
try:
json_req = json.loads(req)
except Exception, ex:
trace("parse the request to json failed, req=%s, ex=%s"%(req, ex))
return str(Error.system_parse_json);
ret = Error.system_parse_json
trace("parse the request to json failed, req=%s, ex=%s, ret=%s"%(req, ex, ret))
return str(ret)
trace("srs on_connect: client ip=%s, vhost=%s, app=%s, pageUrl=%s"%(
json_req["ip"], json_req["vhost"], json_req["app"], json_req["pageUrl"]
))
# TODO: valid the client.
trace("valid clients post request success.")
return str(Error.success);
return str(ret)
def OPTIONS(self):
enable_crossdomain()
... ... @@ -108,7 +129,7 @@ main code start.
'''
# donot support use this module as library.
if __name__ != "__main__":
raise Exception("embed not support");
raise Exception("embed not support")
# check the user options
if len(sys.argv) <= 1:
... ...