diff --git a/README.md b/README.md index 960c085eb..4f3ace3f4 100755 --- a/README.md +++ b/README.md @@ -183,6 +183,20 @@ System Architecture: | All Linux(RHEL,CentOS,Ubuntu,Fedora...) | +------------------------------------------------------+ +Modularity Architecture: +
++------------------------------------------------------+
+|             Main(srs/bandwidth/librtmp)              |
++------------------------------------------------------+
+|           App(Server/Client application)             |
++------------------------------------------------------+
+|               RTMP(Protocol stack)                   |
++------------------------------------------------------+
+|      Kernel(depends on Core, provides error/log)     |
++------------------------------------------------------+
+|         Core(depends only on system apis)            |
++------------------------------------------------------+
+
Stream Architecture:
         +---------+              +----------+ 
diff --git a/trunk/configure b/trunk/configure
index 22505c189..84a0642c9 100755
--- a/trunk/configure
+++ b/trunk/configure
@@ -133,8 +133,8 @@ CORE_OBJS="${MODULE_OBJS[@]}"
 MODULE_ID="KERNEL" 
 MODULE_DEPENDS=("CORE") 
 ModuleLibIncs=(${SRS_OBJS})
-MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_reload" "srs_kernel_config" 
-        "srs_kernel_stream" "srs_kernel_buffer" "srs_kernel_pithy_print")
+MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_reload" "srs_kernel_stream" 
+        "srs_kernel_buffer")
 MODULE_DIR="src/kernel" . auto/modules.sh
 KERNEL_OBJS="${MODULE_OBJS[@]}"
 #
@@ -143,7 +143,7 @@ MODULE_ID="RTMP"
 MODULE_DEPENDS=("CORE" "KERNEL") 
 ModuleLibIncs=(${SRS_OBJS} ${LibSSLRoot})
 MODULE_FILES=("srs_protocol_amf0" "srs_protocol_io" "srs_protocol_rtmp_stack" "srs_protocol_rtmp"
-        "srs_protocol_handshake")
+        "srs_protocol_handshake" "srs_protocol_utility")
 MODULE_DIR="src/rtmp" . auto/modules.sh
 RTMP_OBJS="${MODULE_OBJS[@]}"
 #
@@ -151,14 +151,10 @@ RTMP_OBJS="${MODULE_OBJS[@]}"
 MODULE_ID="APP" 
 MODULE_DEPENDS=("CORE" "KERNEL" "RTMP") 
 ModuleLibIncs=(${LibSTRoot} ${LibHttpParserRoot} ${SRS_OBJS})
-MODULE_FILES=("srs_core_server" 
-        "srs_core_conn" "srs_core_client" 
-        "srs_core_socket" 
-        "srs_core_source" "srs_core_codec"
-        "srs_core_refer"
-        "srs_core_hls" "srs_core_forward" "srs_core_encoder"
-        "srs_core_http" "srs_core_thread" "srs_core_bandwidth"
-        "srs_core_st" "srs_core_log_context")
+MODULE_FILES=("srs_core_server" "srs_core_conn" "srs_core_client" "srs_core_socket" "srs_core_source" 
+        "srs_core_codec" "srs_core_refer" "srs_core_hls" "srs_core_forward" "srs_core_encoder"
+        "srs_core_http" "srs_core_thread" "srs_core_bandwidth" "srs_core_st" "srs_core_log_context"
+        "srs_kernel_config" "srs_kernel_pithy_print")
 MODULE_DIR="src/app" . auto/modules.sh
 APP_OBJS="${MODULE_OBJS[@]}"
 #
diff --git a/trunk/src/app/srs_core_client.cpp b/trunk/src/app/srs_core_client.cpp
index f6a2dbd22..ca49e4d8e 100644
--- a/trunk/src/app/srs_core_client.cpp
+++ b/trunk/src/app/srs_core_client.cpp
@@ -103,6 +103,24 @@ int SrsClient::do_cycle()
 	}
 	srs_verbose("rtmp connect app success");
 	
+	// discovery vhost, resolve the vhost from config
+	SrsConfDirective* parsed_vhost = config->get_vhost(req->vhost);
+	if (parsed_vhost) {
+		req->vhost = parsed_vhost->arg0();
+	}
+	
+	srs_info("discovery app success. schema=%s, vhost=%s, port=%s, app=%s",
+		req->schema.c_str(), req->vhost.c_str(), req->port.c_str(), req->app.c_str());
+	
+	if (req->schema.empty() || req->vhost.empty() || req->port.empty() || req->app.empty()) {
+		ret = ERROR_RTMP_REQ_TCURL;
+		srs_error("discovery tcUrl failed. "
+			"tcUrl=%s, schema=%s, vhost=%s, port=%s, app=%s, ret=%d",
+			req->tcUrl.c_str(), req->schema.c_str(), req->vhost.c_str(), req->port.c_str(), req->app.c_str(), ret);
+		return ret;
+	}
+	
+	// check vhost
 	if ((ret = check_vhost()) != ERROR_SUCCESS) {
 		srs_error("check vhost failed. ret=%d", ret);
 		return ret;
diff --git a/trunk/src/app/srs_core_forward.cpp b/trunk/src/app/srs_core_forward.cpp
index d5c451f62..3e6182455 100644
--- a/trunk/src/app/srs_core_forward.cpp
+++ b/trunk/src/app/srs_core_forward.cpp
@@ -28,16 +28,17 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include 
 #include 
 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
 #include 
 #include 
 #include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
 
 SrsForwarder::SrsForwarder(SrsSource* _source)
 {
diff --git a/trunk/src/kernel/srs_kernel_config.cpp b/trunk/src/app/srs_kernel_config.cpp
similarity index 99%
rename from trunk/src/kernel/srs_kernel_config.cpp
rename to trunk/src/app/srs_kernel_config.cpp
index 764ad5860..2952f43f4 100644
--- a/trunk/src/kernel/srs_kernel_config.cpp
+++ b/trunk/src/app/srs_kernel_config.cpp
@@ -39,6 +39,7 @@ using namespace std;
 
 #include 
 #include 
+#include 
 #include 
 
 #define FILE_OFFSET(fd) lseek(fd, 0, SEEK_CUR)
diff --git a/trunk/src/kernel/srs_kernel_config.hpp b/trunk/src/app/srs_kernel_config.hpp
similarity index 97%
rename from trunk/src/kernel/srs_kernel_config.hpp
rename to trunk/src/app/srs_kernel_config.hpp
index 0f535ced0..12354dc66 100644
--- a/trunk/src/kernel/srs_kernel_config.hpp
+++ b/trunk/src/app/srs_kernel_config.hpp
@@ -38,8 +38,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define RTMP_VHOST_DEFAULT "__defaultVhost__"
 
 #define SRS_LOCALHOST "127.0.0.1"
-#define RTMP_DEFAULT_PORT 1935
-#define RTMP_DEFAULT_PORTS "1935"
 
 #define SRS_CONF_DEFAULT_HLS_PATH "./objs/nginx/html"
 #define SRS_CONF_DEFAULT_HLS_FRAGMENT 10
@@ -57,9 +55,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 // the interval in seconds for bandwidth check
 #define SRS_CONF_DEFAULT_BANDWIDTH_LIMIT_KBPS 1000
 
-// the default chunk size for system.
-#define SRS_CONF_DEFAULT_CHUNK_SIZE 60000
-
 #define SRS_STAGE_PLAY_USER_INTERVAL_MS 1300
 #define SRS_STAGE_PUBLISH_USER_INTERVAL_MS 1100
 #define SRS_STAGE_FORWARDER_INTERVAL_MS 2000
diff --git a/trunk/src/kernel/srs_kernel_pithy_print.cpp b/trunk/src/app/srs_kernel_pithy_print.cpp
similarity index 100%
rename from trunk/src/kernel/srs_kernel_pithy_print.cpp
rename to trunk/src/app/srs_kernel_pithy_print.cpp
diff --git a/trunk/src/kernel/srs_kernel_pithy_print.hpp b/trunk/src/app/srs_kernel_pithy_print.hpp
similarity index 100%
rename from trunk/src/kernel/srs_kernel_pithy_print.hpp
rename to trunk/src/app/srs_kernel_pithy_print.hpp
diff --git a/trunk/src/core/srs_core.cpp b/trunk/src/core/srs_core.cpp
index 1099e346e..4574837bb 100644
--- a/trunk/src/core/srs_core.cpp
+++ b/trunk/src/core/srs_core.cpp
@@ -85,27 +85,3 @@ std::string srs_dns_resolve(std::string host)
     return ipv4;
 }
 
-void srs_vhost_resolve(std::string& vhost, std::string& app)
-{
-	app = srs_replace(app, "...", "?");
-	
-	size_t pos = 0;
-	if ((pos = app.find("?")) == std::string::npos) {
-		return;
-	}
-	
-	std::string query = app.substr(pos + 1);
-	app = app.substr(0, pos);
-	
-	if ((pos = query.find("vhost?")) != std::string::npos
-		|| (pos = query.find("vhost=")) != std::string::npos
-		|| (pos = query.find("Vhost?")) != std::string::npos
-		|| (pos = query.find("Vhost=")) != std::string::npos
-	) {
-		query = query.substr(pos + 6);
-		if (!query.empty()) {
-			vhost = query;
-		}
-	}
-}
-
diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp
index f6a4693ad..ddcf5e7ec 100644
--- a/trunk/src/core/srs_core.hpp
+++ b/trunk/src/core/srs_core.hpp
@@ -96,11 +96,6 @@ extern void srs_update_system_time_ms();
 extern std::string srs_replace(std::string str, std::string old_str, std::string new_str);
 // dns resolve utility, return the resolved ip address.
 extern std::string srs_dns_resolve(std::string host);
-// resolve the vhost in query string
-// @param app, may contains the vhost in query string format:
-// 		app?vhost=request_vhost
-//		app...vhost...request_vhost
-extern void srs_vhost_resolve(std::string& vhost, std::string& app);
 
 /**
 * disable copy constructor of class
diff --git a/trunk/src/rtmp/srs_protocol_rtmp.cpp b/trunk/src/rtmp/srs_protocol_rtmp.cpp
index 4c4a5d7c3..65984e0d4 100644
--- a/trunk/src/rtmp/srs_protocol_rtmp.cpp
+++ b/trunk/src/rtmp/srs_protocol_rtmp.cpp
@@ -24,13 +24,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include 
 
 #include 
-#include 
 #include 
 #include 
-#include 
 #include 
-#include 
 #include 
+#include 
+#include 
+#include 
 
 using namespace std;
 
@@ -127,27 +127,6 @@ int SrsRequest::discovery_app()
 	srs_vhost_resolve(vhost, app);
 	strip();
 	
-	// resolve the vhost from config
-	SrsConfDirective* parsed_vhost = config->get_vhost(vhost);
-	if (parsed_vhost) {
-		vhost = parsed_vhost->arg0();
-	}
-
-	// TODO: discovery the params of vhost.
-	
-	srs_info("discovery app success. schema=%s, vhost=%s, port=%s, app=%s",
-		schema.c_str(), vhost.c_str(), port.c_str(), app.c_str());
-	
-	if (schema.empty() || vhost.empty() || port.empty() || app.empty()) {
-		ret = ERROR_RTMP_REQ_TCURL;
-		srs_error("discovery tcUrl failed. "
-			"tcUrl=%s, schema=%s, vhost=%s, port=%s, app=%s, ret=%d",
-			tcUrl.c_str(), schema.c_str(), vhost.c_str(), port.c_str(), app.c_str(), ret);
-		return ret;
-	}
-	
-	strip();
-	
 	return ret;
 }
 
diff --git a/trunk/src/rtmp/srs_protocol_utility.cpp b/trunk/src/rtmp/srs_protocol_utility.cpp
new file mode 100644
index 000000000..00f60bfa6
--- /dev/null
+++ b/trunk/src/rtmp/srs_protocol_utility.cpp
@@ -0,0 +1,48 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013-2014 winlin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include 
+
+void srs_vhost_resolve(std::string& vhost, std::string& app)
+{
+	app = srs_replace(app, "...", "?");
+	
+	size_t pos = 0;
+	if ((pos = app.find("?")) == std::string::npos) {
+		return;
+	}
+	
+	std::string query = app.substr(pos + 1);
+	app = app.substr(0, pos);
+	
+	if ((pos = query.find("vhost?")) != std::string::npos
+		|| (pos = query.find("vhost=")) != std::string::npos
+		|| (pos = query.find("Vhost?")) != std::string::npos
+		|| (pos = query.find("Vhost=")) != std::string::npos
+	) {
+		query = query.substr(pos + 6);
+		if (!query.empty()) {
+			vhost = query;
+		}
+	}
+}
diff --git a/trunk/src/rtmp/srs_protocol_utility.hpp b/trunk/src/rtmp/srs_protocol_utility.hpp
new file mode 100644
index 000000000..e40359bdc
--- /dev/null
+++ b/trunk/src/rtmp/srs_protocol_utility.hpp
@@ -0,0 +1,44 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013-2014 winlin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef SRS_RTMP_PROTOCOL_CONSTS_HPP
+#define SRS_RTMP_PROTOCOL_CONSTS_HPP
+
+/*
+#include 
+*/
+#include 
+
+#define RTMP_DEFAULT_PORT 1935
+#define RTMP_DEFAULT_PORTS "1935"
+
+// the default chunk size for system.
+#define SRS_CONF_DEFAULT_CHUNK_SIZE 60000
+
+// resolve the vhost in query string
+// @param app, may contains the vhost in query string format:
+// 		app?vhost=request_vhost
+//		app...vhost...request_vhost
+extern void srs_vhost_resolve(std::string& vhost, std::string& app);
+
+#endif
diff --git a/trunk/src/srs/srs.upp b/trunk/src/srs/srs.upp
index da8aea401..eb4db85af 100755
--- a/trunk/src/srs/srs.upp
+++ b/trunk/src/srs/srs.upp
@@ -12,14 +12,10 @@ file
     kernel readonly separator,
     ..\kernel\srs_kernel_buffer.hpp,
     ..\kernel\srs_kernel_buffer.cpp,
-    ..\kernel\srs_kernel_config.hpp,
-    ..\kernel\srs_kernel_config.cpp,
     ..\kernel\srs_kernel_error.hpp,
     ..\kernel\srs_kernel_error.cpp,
     ..\kernel\srs_kernel_log.hpp,
     ..\kernel\srs_kernel_log.cpp,
-    ..\kernel\srs_kernel_pithy_print.hpp,
-    ..\kernel\srs_kernel_pithy_print.cpp,
     ..\kernel\srs_kernel_reload.hpp,
     ..\kernel\srs_kernel_reload.cpp,
     ..\kernel\srs_kernel_stream.hpp,
@@ -35,6 +31,8 @@ file
     ..\rtmp\srs_protocol_rtmp.cpp,
     ..\rtmp\srs_protocol_rtmp_stack.hpp,
     ..\rtmp\srs_protocol_rtmp_stack.cpp,
+    ..\rtmp\srs_protocol_utility.hpp,
+    ..\rtmp\srs_protocol_utility.cpp,
     app readonly separator,
     ..\app\srs_core_bandwidth.hpp,
     ..\app\srs_core_bandwidth.cpp,
@@ -44,6 +42,8 @@ file
     ..\app\srs_core_codec.cpp,
     ..\app\srs_core_conn.hpp,
     ..\app\srs_core_conn.cpp,
+    ..\app\srs_kernel_config.hpp,
+    ..\app\srs_kernel_config.cpp,
     ..\app\srs_core_encoder.hpp,
     ..\app\srs_core_encoder.cpp,
     ..\app\srs_core_forward.hpp,
@@ -56,6 +56,8 @@ file
     ..\app\srs_core_log_context.cpp,
     ..\app\srs_core_refer.hpp,
     ..\app\srs_core_refer.cpp,
+    ..\app\srs_kernel_pithy_print.hpp,
+    ..\app\srs_kernel_pithy_print.cpp,
     ..\app\srs_core_thread.hpp,
     ..\app\srs_core_thread.cpp,
     ..\app\srs_core_server.hpp,