diff --git a/README.md b/README.md
index 511c0f0fd..2f4cae688 100755
--- a/README.md
+++ b/README.md
@@ -131,6 +131,35 @@ Stream Architecture:
| ...) | +-> DVR --------------+-> FILE |
+-----------+-------------------------+----------------+
+Bandwidth Test Workflow:
+
+ +------------+ +----------+
+ | Client | | Server |
+ +-----+------+ +-----+----+
+ | |
+ | connect vhost------> | if vhost enable bandwidth,
+ | <-----result(success) | do bandwidth check.
+ | |
+ | <----call(start play) | onSrsBandCheckStartPlayBytes
+ | result(playing)-----> | onSrsBandCheckStartingPlayBytes
+ | <-------data(playing) | onSrsBandCheckStartingPlayBytes
+ | <-----call(stop play) | onSrsBandCheckStopPlayBytes
+ | result(stopped)-----> | onSrsBandCheckStoppedPlayBytes
+ | |
+ | <-call(start publish) | onSrsBandCheckStartPublishBytes
+ | result(publishing)--> | onSrsBandCheckStartingPublishBytes
+ | data(publishing)----> | onSrsBandCheckStartingPublishBytes
+ | <--call(stop publish) | onSrsBandCheckStopPublishBytes
+ | result(stopped)(1)--> | onSrsBandCheckStoppedPublishBytes
+ | |
+ | <--------------report |
+ | final(2)------------> | finalClientPacket
+ | |
+1. when flash client, server ignore the publish stopped result,
+ and directly send the report to flash client.
+2. flash client only. when got report, flash client should send out
+ a final packet and close the connection immediately.
+
### System Requirements
Supported operating systems and hardware:
diff --git a/trunk/src/core/srs_core_bandwidth.hpp b/trunk/src/core/srs_core_bandwidth.hpp
old mode 100644
new mode 100755
index 472459157..2e7cd0b27
--- a/trunk/src/core/srs_core_bandwidth.hpp
+++ b/trunk/src/core/srs_core_bandwidth.hpp
@@ -1,93 +1,93 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2013 wenjiegit
-
-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_CORE_BANDWIDTH_HPP
-#define SRS_CORE_BANDWIDTH_HPP
-
-/*
-#include
-*/
-#include
-
-class SrsRequest;
-class SrsRtmp;
-
-/**
-* bandwidth test agent which provides the interfaces for bandwidth check.
-* 1. if vhost disabled bandwidth check, ignore.
-* 2. otherwise, check the key, error if verify failed.
-* 3. check the interval limit, error if bandwidth in the interval window.
-* 4. check the bandwidth under the max kbps.
-* 5. send the bandwidth data to client.
-* bandwidth workflow:
-* +------------+ +----------+
-* | Client | | Server |
-* +-----+------+ +-----+----+
-* | |
-* | connect vhost------> | if vhost enable bandwidth,
-* | <-----result(success) | do bandwidth check.
-* | |
-* | <----call(start play) | onSrsBandCheckStartPlayBytes
-* | result(playing)-----> | onSrsBandCheckStartingPlayBytes
-* | <-------data(playing) | onSrsBandCheckStartingPlayBytes
-* | <-----call(stop play) | onSrsBandCheckStopPlayBytes
-* | result(stopped)-----> | onSrsBandCheckStoppedPlayBytes
-* | |
-* | <-call(start publish) | onSrsBandCheckStartPublishBytes
-* | result(publishing)--> | onSrsBandCheckStartingPublishBytes
-* | data(publishing)----> | onSrsBandCheckStartingPublishBytes
-* | <--call(stop publish) | onSrsBandCheckStopPublishBytes
-* | result(stopped)-----> | onSrsBandCheckStoppedPublishBytes(1)
-* | |
-* | <--------------report |
-* | final---------------> | finalClientPacket(2)
-* | |
-* 1. when flash client, server ignore the publish stopped result,
-* and directly send the report to flash client.
-* 2. flash client only. when got report, flash client should send out
-* a final packet and close the connection immediately.
-*/
-class SrsBandwidth
-{
-private:
- SrsRequest* req;
- SrsRtmp* rtmp;
-public:
- SrsBandwidth();
- virtual ~SrsBandwidth();
-public:
- /**
- * do the bandwidth test.
- */
- virtual int bandwidth_test(SrsRequest* _req, st_netfd_t stfd, SrsRtmp* _rtmp);
-private:
- virtual int get_local_ip(st_netfd_t stfd, char *&local_ip);
- /**
- * used to process band width check from client.
- */
- virtual int do_bandwidth_check();
- virtual int check_play(int duration_ms, int interval_ms, int& actual_duration_ms, int& play_bytes, int max_play_kbps);
- virtual int check_publish(int duration_ms, int interval_ms, int& actual_duration_ms, int& publish_bytes, int max_pub_kbps);
-};
-
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013 wenjiegit
+
+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_CORE_BANDWIDTH_HPP
+#define SRS_CORE_BANDWIDTH_HPP
+
+/*
+#include
+*/
+#include
+
+class SrsRequest;
+class SrsRtmp;
+
+/**
+* bandwidth test agent which provides the interfaces for bandwidth check.
+* 1. if vhost disabled bandwidth check, ignore.
+* 2. otherwise, check the key, error if verify failed.
+* 3. check the interval limit, error if bandwidth in the interval window.
+* 4. check the bandwidth under the max kbps.
+* 5. send the bandwidth data to client.
+* bandwidth workflow:
+* +------------+ +----------+
+* | Client | | Server |
+* +-----+------+ +-----+----+
+* | |
+* | connect vhost------> | if vhost enable bandwidth,
+* | <-----result(success) | do bandwidth check.
+* | |
+* | <----call(start play) | onSrsBandCheckStartPlayBytes
+* | result(playing)-----> | onSrsBandCheckStartingPlayBytes
+* | <-------data(playing) | onSrsBandCheckStartingPlayBytes
+* | <-----call(stop play) | onSrsBandCheckStopPlayBytes
+* | result(stopped)-----> | onSrsBandCheckStoppedPlayBytes
+* | |
+* | <-call(start publish) | onSrsBandCheckStartPublishBytes
+* | result(publishing)--> | onSrsBandCheckStartingPublishBytes
+* | data(publishing)----> | onSrsBandCheckStartingPublishBytes
+* | <--call(stop publish) | onSrsBandCheckStopPublishBytes
+* | result(stopped)(1)--> | onSrsBandCheckStoppedPublishBytes
+* | |
+* | <--------------report |
+* | final(2)------------> | finalClientPacket
+* | |
+* 1. when flash client, server ignore the publish stopped result,
+* and directly send the report to flash client.
+* 2. flash client only. when got report, flash client should send out
+* a final packet and close the connection immediately.
+*/
+class SrsBandwidth
+{
+private:
+ SrsRequest* req;
+ SrsRtmp* rtmp;
+public:
+ SrsBandwidth();
+ virtual ~SrsBandwidth();
+public:
+ /**
+ * do the bandwidth test.
+ */
+ virtual int bandwidth_test(SrsRequest* _req, st_netfd_t stfd, SrsRtmp* _rtmp);
+private:
+ virtual int get_local_ip(st_netfd_t stfd, char *&local_ip);
+ /**
+ * used to process band width check from client.
+ */
+ virtual int do_bandwidth_check();
+ virtual int check_play(int duration_ms, int interval_ms, int& actual_duration_ms, int& play_bytes, int max_play_kbps);
+ virtual int check_publish(int duration_ms, int interval_ms, int& actual_duration_ms, int& publish_bytes, int max_pub_kbps);
+};
+
#endif
\ No newline at end of file