winlin

for #742, refine the file reader and writer interface.

@@ -156,7 +156,7 @@ ModuleLibIncs=(${SRS_OBJS_DIR}) @@ -156,7 +156,7 @@ ModuleLibIncs=(${SRS_OBJS_DIR})
156 MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_buffer" 156 MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_buffer"
157 "srs_kernel_utility" "srs_kernel_flv" "srs_kernel_codec" "srs_kernel_file" 157 "srs_kernel_utility" "srs_kernel_flv" "srs_kernel_codec" "srs_kernel_file"
158 "srs_kernel_consts" "srs_kernel_aac" "srs_kernel_mp3" "srs_kernel_ts" 158 "srs_kernel_consts" "srs_kernel_aac" "srs_kernel_mp3" "srs_kernel_ts"
159 - "srs_kernel_stream" "srs_kernel_balance" "srs_kernel_mp4") 159 + "srs_kernel_stream" "srs_kernel_balance" "srs_kernel_mp4" "srs_kernel_io")
160 KERNEL_INCS="src/kernel"; MODULE_DIR=${KERNEL_INCS} . auto/modules.sh 160 KERNEL_INCS="src/kernel"; MODULE_DIR=${KERNEL_INCS} . auto/modules.sh
161 KERNEL_OBJS="${MODULE_OBJS[@]}" 161 KERNEL_OBJS="${MODULE_OBJS[@]}"
162 # 162 #
@@ -115,6 +115,7 @@ @@ -115,6 +115,7 @@
115 3C7175B91E1DEA8000E8C49F /* sync.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C7175B11E1DEA8000E8C49F /* sync.c */; }; 115 3C7175B91E1DEA8000E8C49F /* sync.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C7175B11E1DEA8000E8C49F /* sync.c */; };
116 3C82802C1BAFF8CC004A1794 /* srs_kafka_stack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C82802A1BAFF8CC004A1794 /* srs_kafka_stack.cpp */; }; 116 3C82802C1BAFF8CC004A1794 /* srs_kafka_stack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C82802A1BAFF8CC004A1794 /* srs_kafka_stack.cpp */; };
117 3C8CE01E1C3F482100548CC6 /* srs_app_hourglass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C8CE01D1C3F482100548CC6 /* srs_app_hourglass.cpp */; }; 117 3C8CE01E1C3F482100548CC6 /* srs_app_hourglass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C8CE01D1C3F482100548CC6 /* srs_app_hourglass.cpp */; };
  118 + 3CA432A81E3F46DD001DA0C6 /* srs_kernel_io.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CA432A61E3F46DD001DA0C6 /* srs_kernel_io.cpp */; };
118 3CB25C2A1BB269FD00C97A63 /* jmp_sp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CB25C291BB269FD00C97A63 /* jmp_sp.cpp */; }; 119 3CB25C2A1BB269FD00C97A63 /* jmp_sp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CB25C291BB269FD00C97A63 /* jmp_sp.cpp */; };
119 3CC52DD81ACE4023006FEB01 /* srs_utest_amf0.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CC52DCA1ACE4023006FEB01 /* srs_utest_amf0.cpp */; }; 120 3CC52DD81ACE4023006FEB01 /* srs_utest_amf0.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CC52DCA1ACE4023006FEB01 /* srs_utest_amf0.cpp */; };
120 3CC52DD91ACE4023006FEB01 /* srs_utest_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CC52DCC1ACE4023006FEB01 /* srs_utest_config.cpp */; }; 121 3CC52DD91ACE4023006FEB01 /* srs_utest_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CC52DCC1ACE4023006FEB01 /* srs_utest_config.cpp */; };
@@ -403,6 +404,8 @@ @@ -403,6 +404,8 @@
403 3C82802B1BAFF8CC004A1794 /* srs_kafka_stack.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kafka_stack.hpp; path = ../../../src/protocol/srs_kafka_stack.hpp; sourceTree = "<group>"; }; 404 3C82802B1BAFF8CC004A1794 /* srs_kafka_stack.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kafka_stack.hpp; path = ../../../src/protocol/srs_kafka_stack.hpp; sourceTree = "<group>"; };
404 3C8CE01C1C3F482100548CC6 /* srs_app_hourglass.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_hourglass.hpp; path = ../../../src/app/srs_app_hourglass.hpp; sourceTree = "<group>"; }; 405 3C8CE01C1C3F482100548CC6 /* srs_app_hourglass.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_app_hourglass.hpp; path = ../../../src/app/srs_app_hourglass.hpp; sourceTree = "<group>"; };
405 3C8CE01D1C3F482100548CC6 /* srs_app_hourglass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_hourglass.cpp; path = ../../../src/app/srs_app_hourglass.cpp; sourceTree = "<group>"; }; 406 3C8CE01D1C3F482100548CC6 /* srs_app_hourglass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_app_hourglass.cpp; path = ../../../src/app/srs_app_hourglass.cpp; sourceTree = "<group>"; };
  407 + 3CA432A61E3F46DD001DA0C6 /* srs_kernel_io.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kernel_io.cpp; path = ../../../src/kernel/srs_kernel_io.cpp; sourceTree = "<group>"; };
  408 + 3CA432A71E3F46DD001DA0C6 /* srs_kernel_io.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kernel_io.hpp; path = ../../../src/kernel/srs_kernel_io.hpp; sourceTree = "<group>"; };
406 3CB25C281BB2596300C97A63 /* setup_variables.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = setup_variables.sh; path = ../../../auto/setup_variables.sh; sourceTree = "<group>"; }; 409 3CB25C281BB2596300C97A63 /* setup_variables.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = setup_variables.sh; path = ../../../auto/setup_variables.sh; sourceTree = "<group>"; };
407 3CB25C291BB269FD00C97A63 /* jmp_sp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jmp_sp.cpp; path = ../../../research/arm/jmp_sp.cpp; sourceTree = "<group>"; }; 410 3CB25C291BB269FD00C97A63 /* jmp_sp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jmp_sp.cpp; path = ../../../research/arm/jmp_sp.cpp; sourceTree = "<group>"; };
408 3CC52DCA1ACE4023006FEB01 /* srs_utest_amf0.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_utest_amf0.cpp; path = ../../src/utest/srs_utest_amf0.cpp; sourceTree = "<group>"; }; 411 3CC52DCA1ACE4023006FEB01 /* srs_utest_amf0.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_utest_amf0.cpp; path = ../../src/utest/srs_utest_amf0.cpp; sourceTree = "<group>"; };
@@ -534,6 +537,8 @@ @@ -534,6 +537,8 @@
534 3C1232131AAE814D00CE8F6C /* srs_kernel_file.hpp */, 537 3C1232131AAE814D00CE8F6C /* srs_kernel_file.hpp */,
535 3C1232141AAE814D00CE8F6C /* srs_kernel_flv.cpp */, 538 3C1232141AAE814D00CE8F6C /* srs_kernel_flv.cpp */,
536 3C1232151AAE814D00CE8F6C /* srs_kernel_flv.hpp */, 539 3C1232151AAE814D00CE8F6C /* srs_kernel_flv.hpp */,
  540 + 3CA432A61E3F46DD001DA0C6 /* srs_kernel_io.cpp */,
  541 + 3CA432A71E3F46DD001DA0C6 /* srs_kernel_io.hpp */,
537 3C1232161AAE814D00CE8F6C /* srs_kernel_log.cpp */, 542 3C1232161AAE814D00CE8F6C /* srs_kernel_log.cpp */,
538 3C1232171AAE814D00CE8F6C /* srs_kernel_log.hpp */, 543 3C1232171AAE814D00CE8F6C /* srs_kernel_log.hpp */,
539 3C1232181AAE814D00CE8F6C /* srs_kernel_mp3.cpp */, 544 3C1232181AAE814D00CE8F6C /* srs_kernel_mp3.cpp */,
@@ -1074,6 +1079,7 @@ @@ -1074,6 +1079,7 @@
1074 3C12329D1AAE81D900CE8F6C /* srs_app_heartbeat.cpp in Sources */, 1079 3C12329D1AAE81D900CE8F6C /* srs_app_heartbeat.cpp in Sources */,
1075 3C1232231AAE814D00CE8F6C /* srs_kernel_consts.cpp in Sources */, 1080 3C1232231AAE814D00CE8F6C /* srs_kernel_consts.cpp in Sources */,
1076 3C1232AF1AAE81D900CE8F6C /* srs_app_rtsp.cpp in Sources */, 1081 3C1232AF1AAE81D900CE8F6C /* srs_app_rtsp.cpp in Sources */,
  1082 + 3CA432A81E3F46DD001DA0C6 /* srs_kernel_io.cpp in Sources */,
1077 3CC52DDD1ACE4023006FEB01 /* srs_utest_reload.cpp in Sources */, 1083 3CC52DDD1ACE4023006FEB01 /* srs_utest_reload.cpp in Sources */,
1078 3C689FA11AB6AAC800C9CEEE /* sync.c in Sources */, 1084 3C689FA11AB6AAC800C9CEEE /* sync.c in Sources */,
1079 3C068D6A1B10149F00AA722C /* srs_protocol_kbps.cpp in Sources */, 1085 3C068D6A1B10149F00AA722C /* srs_protocol_kbps.cpp in Sources */,
@@ -155,7 +155,7 @@ int SrsHttpResponseWriter::write(char* data, int size) @@ -155,7 +155,7 @@ int SrsHttpResponseWriter::write(char* data, int size)
155 return ret; 155 return ret;
156 } 156 }
157 157
158 -int SrsHttpResponseWriter::writev(iovec* iov, int iovcnt, ssize_t* pnwrite) 158 +int SrsHttpResponseWriter::writev(const iovec* iov, int iovcnt, ssize_t* pnwrite)
159 { 159 {
160 int ret = ERROR_SUCCESS; 160 int ret = ERROR_SUCCESS;
161 161
@@ -163,7 +163,7 @@ int SrsHttpResponseWriter::writev(iovec* iov, int iovcnt, ssize_t* pnwrite) @@ -163,7 +163,7 @@ int SrsHttpResponseWriter::writev(iovec* iov, int iovcnt, ssize_t* pnwrite)
163 if (!header_wrote || content_length != -1) { 163 if (!header_wrote || content_length != -1) {
164 ssize_t nwrite = 0; 164 ssize_t nwrite = 0;
165 for (int i = 0; i < iovcnt; i++) { 165 for (int i = 0; i < iovcnt; i++) {
166 - iovec* piovc = iov + i; 166 + const iovec* piovc = iov + i;
167 nwrite += piovc->iov_len; 167 nwrite += piovc->iov_len;
168 if ((ret = write((char*)piovc->iov_base, (int)piovc->iov_len)) != ERROR_SUCCESS) { 168 if ((ret = write((char*)piovc->iov_base, (int)piovc->iov_len)) != ERROR_SUCCESS) {
169 return ret; 169 return ret;
@@ -196,7 +196,7 @@ int SrsHttpResponseWriter::writev(iovec* iov, int iovcnt, ssize_t* pnwrite) @@ -196,7 +196,7 @@ int SrsHttpResponseWriter::writev(iovec* iov, int iovcnt, ssize_t* pnwrite)
196 // chunk size. 196 // chunk size.
197 int size = 0; 197 int size = 0;
198 for (int i = 0; i < iovcnt; i++) { 198 for (int i = 0; i < iovcnt; i++) {
199 - iovec* data_iov = iov + i; 199 + const iovec* data_iov = iov + i;
200 size += data_iov->iov_len; 200 size += data_iov->iov_len;
201 } 201 }
202 written += size; 202 written += size;
@@ -215,7 +215,7 @@ int SrsHttpResponseWriter::writev(iovec* iov, int iovcnt, ssize_t* pnwrite) @@ -215,7 +215,7 @@ int SrsHttpResponseWriter::writev(iovec* iov, int iovcnt, ssize_t* pnwrite)
215 215
216 // chunk body. 216 // chunk body.
217 for (int i = 0; i < iovcnt; i++) { 217 for (int i = 0; i < iovcnt; i++) {
218 - iovec* data_iov = iov + i; 218 + const iovec* data_iov = iov + i;
219 iovs[0].iov_base = (char*)data_iov->iov_base; 219 iovs[0].iov_base = (char*)data_iov->iov_base;
220 iovs[0].iov_len = (int)data_iov->iov_len; 220 iovs[0].iov_len = (int)data_iov->iov_len;
221 iovs++; 221 iovs++;
@@ -103,7 +103,7 @@ public: @@ -103,7 +103,7 @@ public:
103 virtual int final_request(); 103 virtual int final_request();
104 virtual SrsHttpHeader* header(); 104 virtual SrsHttpHeader* header();
105 virtual int write(char* data, int size); 105 virtual int write(char* data, int size);
106 - virtual int writev(iovec* iov, int iovcnt, ssize_t* pnwrite); 106 + virtual int writev(const iovec* iov, int iovcnt, ssize_t* pnwrite);
107 virtual void write_header(int code); 107 virtual void write_header(int code);
108 virtual int send_header(char* data, int size); 108 virtual int send_header(char* data, int size);
109 }; 109 };
@@ -440,7 +440,7 @@ int SrsBufferWriter::write(void* buf, size_t count, ssize_t* pnwrite) @@ -440,7 +440,7 @@ int SrsBufferWriter::write(void* buf, size_t count, ssize_t* pnwrite)
440 return writer->write((char*)buf, (int)count); 440 return writer->write((char*)buf, (int)count);
441 } 441 }
442 442
443 -int SrsBufferWriter::writev(iovec* iov, int iovcnt, ssize_t* pnwrite) 443 +int SrsBufferWriter::writev(const iovec* iov, int iovcnt, ssize_t* pnwrite)
444 { 444 {
445 return writer->writev(iov, iovcnt, pnwrite); 445 return writer->writev(iov, iovcnt, pnwrite);
446 } 446 }
@@ -210,7 +210,7 @@ public: @@ -210,7 +210,7 @@ public:
210 virtual int64_t tellg(); 210 virtual int64_t tellg();
211 public: 211 public:
212 virtual int write(void* buf, size_t count, ssize_t* pnwrite); 212 virtual int write(void* buf, size_t count, ssize_t* pnwrite);
213 - virtual int writev(iovec* iov, int iovcnt, ssize_t* pnwrite); 213 + virtual int writev(const iovec* iov, int iovcnt, ssize_t* pnwrite);
214 }; 214 };
215 215
216 /** 216 /**
@@ -146,13 +146,13 @@ int SrsFileWriter::write(void* buf, size_t count, ssize_t* pnwrite) @@ -146,13 +146,13 @@ int SrsFileWriter::write(void* buf, size_t count, ssize_t* pnwrite)
146 return ret; 146 return ret;
147 } 147 }
148 148
149 -int SrsFileWriter::writev(iovec* iov, int iovcnt, ssize_t* pnwrite) 149 +int SrsFileWriter::writev(const iovec* iov, int iovcnt, ssize_t* pnwrite)
150 { 150 {
151 int ret = ERROR_SUCCESS; 151 int ret = ERROR_SUCCESS;
152 152
153 ssize_t nwrite = 0; 153 ssize_t nwrite = 0;
154 for (int i = 0; i < iovcnt; i++) { 154 for (int i = 0; i < iovcnt; i++) {
155 - iovec* piov = iov + i; 155 + const iovec* piov = iov + i;
156 ssize_t this_nwrite = 0; 156 ssize_t this_nwrite = 0;
157 if ((ret = write(piov->iov_base, piov->iov_len, &this_nwrite)) != ERROR_SUCCESS) { 157 if ((ret = write(piov->iov_base, piov->iov_len, &this_nwrite)) != ERROR_SUCCESS) {
158 return ret; 158 return ret;
@@ -29,6 +29,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -29,6 +29,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 */ 29 */
30 #include <srs_core.hpp> 30 #include <srs_core.hpp>
31 31
  32 +#include <srs_kernel_io.hpp>
  33 +
32 #include <string> 34 #include <string>
33 35
34 // for srs-librtmp, @see https://github.com/ossrs/srs/issues/213 36 // for srs-librtmp, @see https://github.com/ossrs/srs/issues/213
@@ -39,7 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -39,7 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39 /** 41 /**
40 * file writer, to write to file. 42 * file writer, to write to file.
41 */ 43 */
42 -class SrsFileWriter 44 +class SrsFileWriter : public ISrsBufferWriter
43 { 45 {
44 private: 46 private:
45 std::string path; 47 std::string path;
@@ -77,13 +79,13 @@ public: @@ -77,13 +79,13 @@ public:
77 * for the HTTP FLV, to writev to improve performance. 79 * for the HTTP FLV, to writev to improve performance.
78 * @see https://github.com/ossrs/srs/issues/405 80 * @see https://github.com/ossrs/srs/issues/405
79 */ 81 */
80 - virtual int writev(iovec* iov, int iovcnt, ssize_t* pnwrite); 82 + virtual int writev(const iovec* iov, int iovcnt, ssize_t* pnwrite);
81 }; 83 };
82 84
83 /** 85 /**
84 * file reader, to read from file. 86 * file reader, to read from file.
85 */ 87 */
86 -class SrsFileReader 88 +class SrsFileReader : public ISrsBufferReader
87 { 89 {
88 private: 90 private:
89 std::string path; 91 std::string path;
  1 +/*
  2 +The MIT License (MIT)
  3 +
  4 +Copyright (c) 2013-2017 SRS(ossrs)
  5 +
  6 +Permission is hereby granted, free of charge, to any person obtaining a copy of
  7 +this software and associated documentation files (the "Software"), to deal in
  8 +the Software without restriction, including without limitation the rights to
  9 +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  10 +the Software, and to permit persons to whom the Software is furnished to do so,
  11 +subject to the following conditions:
  12 +
  13 +The above copyright notice and this permission notice shall be included in all
  14 +copies or substantial portions of the Software.
  15 +
  16 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  18 +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  19 +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  20 +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  21 +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  22 +*/
  23 +
  24 +#include <srs_kernel_io.hpp>
  25 +
  26 +ISrsBufferReader::ISrsBufferReader()
  27 +{
  28 +}
  29 +
  30 +ISrsBufferReader::~ISrsBufferReader()
  31 +{
  32 +}
  33 +
  34 +ISrsBufferWriter::ISrsBufferWriter()
  35 +{
  36 +}
  37 +
  38 +ISrsBufferWriter::~ISrsBufferWriter()
  39 +{
  40 +}
  41 +
  1 +/*
  2 +The MIT License (MIT)
  3 +
  4 +Copyright (c) 2013-2017 SRS(ossrs)
  5 +
  6 +Permission is hereby granted, free of charge, to any person obtaining a copy of
  7 +this software and associated documentation files (the "Software"), to deal in
  8 +the Software without restriction, including without limitation the rights to
  9 +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  10 +the Software, and to permit persons to whom the Software is furnished to do so,
  11 +subject to the following conditions:
  12 +
  13 +The above copyright notice and this permission notice shall be included in all
  14 +copies or substantial portions of the Software.
  15 +
  16 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  18 +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  19 +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  20 +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  21 +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  22 +*/
  23 +
  24 +#ifndef SRS_KERNEL_IO_HPP
  25 +#define SRS_KERNEL_IO_HPP
  26 +
  27 +/*
  28 +#include <srs_kernel_io.hpp>
  29 +*/
  30 +
  31 +#include <srs_core.hpp>
  32 +
  33 +// for srs-librtmp, @see https://github.com/ossrs/srs/issues/213
  34 +#ifndef _WIN32
  35 +#include <sys/uio.h>
  36 +#endif
  37 +
  38 +/**
  39 + * the reader for the buffer to read from whatever channel.
  40 + */
  41 +class ISrsBufferReader
  42 +{
  43 +public:
  44 + ISrsBufferReader();
  45 + virtual ~ISrsBufferReader();
  46 + // for protocol/amf0/msg-codec
  47 +public:
  48 + virtual int read(void* buf, size_t size, ssize_t* nread) = 0;
  49 +};
  50 +
  51 +/**
  52 + * the writer for the buffer to write to whatever channel.
  53 + */
  54 +class ISrsBufferWriter
  55 +{
  56 +public:
  57 + ISrsBufferWriter();
  58 + virtual ~ISrsBufferWriter();
  59 + // for protocol
  60 +public:
  61 + /**
  62 + * write bytes over writer.
  63 + * @nwrite the actual written bytes. NULL to ignore.
  64 + */
  65 + virtual int write(void* buf, size_t size, ssize_t* nwrite) = 0;
  66 + /**
  67 + * write iov over writer.
  68 + * @nwrite the actual written bytes. NULL to ignore.
  69 + */
  70 + virtual int writev(const iovec *iov, int iov_size, ssize_t* nwrite) = 0;
  71 +};
  72 +
  73 +#endif
  74 +
@@ -201,7 +201,7 @@ public: @@ -201,7 +201,7 @@ public:
201 * for the HTTP FLV, to writev to improve performance. 201 * for the HTTP FLV, to writev to improve performance.
202 * @see https://github.com/ossrs/srs/issues/405 202 * @see https://github.com/ossrs/srs/issues/405
203 */ 203 */
204 - virtual int writev(iovec* iov, int iovcnt, ssize_t* pnwrite) = 0; 204 + virtual int writev(const iovec* iov, int iovcnt, ssize_t* pnwrite) = 0;
205 205
206 // WriteHeader sends an HTTP response header with status code. 206 // WriteHeader sends an HTTP response header with status code.
207 // If WriteHeader is not called explicitly, the first call to Write 207 // If WriteHeader is not called explicitly, the first call to Write
@@ -23,22 +23,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -23,22 +23,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 23
24 #include <srs_protocol_io.hpp> 24 #include <srs_protocol_io.hpp>
25 25
26 -ISrsBufferReader::ISrsBufferReader()  
27 -{  
28 -}  
29 -  
30 -ISrsBufferReader::~ISrsBufferReader()  
31 -{  
32 -}  
33 -  
34 -ISrsBufferWriter::ISrsBufferWriter()  
35 -{  
36 -}  
37 -  
38 -ISrsBufferWriter::~ISrsBufferWriter()  
39 -{  
40 -}  
41 -  
42 ISrsProtocolStatistic::ISrsProtocolStatistic() 26 ISrsProtocolStatistic::ISrsProtocolStatistic()
43 { 27 {
44 } 28 }
@@ -30,10 +30,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -30,10 +30,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 30
31 #include <srs_core.hpp> 31 #include <srs_core.hpp>
32 32
33 -// for srs-librtmp, @see https://github.com/ossrs/srs/issues/213  
34 -#ifndef _WIN32  
35 -#include <sys/uio.h>  
36 -#endif 33 +#include <srs_kernel_io.hpp>
37 34
38 /** 35 /**
39 * the system io reader/writer architecture: 36 * the system io reader/writer architecture:
@@ -61,41 +58,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -61,41 +58,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
61 */ 58 */
62 59
63 /** 60 /**
64 -* the reader for the buffer to read from whatever channel.  
65 -*/  
66 -class ISrsBufferReader  
67 -{  
68 -public:  
69 - ISrsBufferReader();  
70 - virtual ~ISrsBufferReader();  
71 -// for protocol/amf0/msg-codec  
72 -public:  
73 - virtual int read(void* buf, size_t size, ssize_t* nread) = 0;  
74 -};  
75 -  
76 -/**  
77 -* the writer for the buffer to write to whatever channel.  
78 -*/  
79 -class ISrsBufferWriter  
80 -{  
81 -public:  
82 - ISrsBufferWriter();  
83 - virtual ~ISrsBufferWriter();  
84 -// for protocol  
85 -public:  
86 - /**  
87 - * write bytes over writer.  
88 - * @nwrite the actual written bytes. NULL to ignore.  
89 - */  
90 - virtual int write(void* buf, size_t size, ssize_t* nwrite) = 0;  
91 - /**  
92 - * write iov over writer.  
93 - * @nwrite the actual written bytes. NULL to ignore.  
94 - */  
95 - virtual int writev(const iovec *iov, int iov_size, ssize_t* nwrite) = 0;  
96 -};  
97 -  
98 -/**  
99 * get the statistic of channel. 61 * get the statistic of channel.
100 */ 62 */
101 class ISrsProtocolStatistic 63 class ISrsProtocolStatistic