winlin

move the ts buffer to http message

@@ -515,6 +515,7 @@ SrsHttpMessage::SrsHttpMessage() @@ -515,6 +515,7 @@ SrsHttpMessage::SrsHttpMessage()
515 _uri = new SrsHttpUri(); 515 _uri = new SrsHttpUri();
516 _match = NULL; 516 _match = NULL;
517 _requires_crossdomain = false; 517 _requires_crossdomain = false;
  518 + _http_ts_send_buffer = new char[HTTP_TS_SEND_BUFFER_SIZE];
518 } 519 }
519 520
520 SrsHttpMessage::~SrsHttpMessage() 521 SrsHttpMessage::~SrsHttpMessage()
@@ -522,6 +523,12 @@ SrsHttpMessage::~SrsHttpMessage() @@ -522,6 +523,12 @@ SrsHttpMessage::~SrsHttpMessage()
522 srs_freep(_body); 523 srs_freep(_body);
523 srs_freep(_uri); 524 srs_freep(_uri);
524 srs_freep(_match); 525 srs_freep(_match);
  526 + srs_freepa(_http_ts_send_buffer);
  527 +}
  528 +
  529 +char* SrsHttpMessage::http_ts_send_buffer()
  530 +{
  531 + return _http_ts_send_buffer;
525 } 532 }
526 533
527 void SrsHttpMessage::reset() 534 void SrsHttpMessage::reset()
@@ -145,6 +145,9 @@ class SrsHttpHandler; @@ -145,6 +145,9 @@ class SrsHttpHandler;
145 #define HTTP_GatewayTimeout_str "Gateway Timeout" 145 #define HTTP_GatewayTimeout_str "Gateway Timeout"
146 #define HTTP_HTTPVersionNotSupported_str "HTTP Version Not Supported" 146 #define HTTP_HTTPVersionNotSupported_str "HTTP Version Not Supported"
147 147
  148 +// @see SrsHttpMessage._http_ts_send_buffer
  149 +#define HTTP_TS_SEND_BUFFER_SIZE 4096
  150 +
148 // linux path seprator 151 // linux path seprator
149 #define __PATH_SEP '/' 152 #define __PATH_SEP '/'
150 // query string seprator 153 // query string seprator
@@ -310,10 +313,15 @@ private: @@ -310,10 +313,15 @@ private:
310 * whether the message requires crossdomain. 313 * whether the message requires crossdomain.
311 */ 314 */
312 bool _requires_crossdomain; 315 bool _requires_crossdomain;
  316 + /**
  317 + * use a buffer to read and send ts file.
  318 + */
  319 + char* _http_ts_send_buffer;
313 public: 320 public:
314 SrsHttpMessage(); 321 SrsHttpMessage();
315 virtual ~SrsHttpMessage(); 322 virtual ~SrsHttpMessage();
316 public: 323 public:
  324 + virtual char* http_ts_send_buffer();
317 virtual void reset(); 325 virtual void reset();
318 virtual int parse_uri(); 326 virtual int parse_uri();
319 public: 327 public:
@@ -195,14 +195,12 @@ int SrsHttpVhost::do_process_request(SrsSocket* skt, SrsHttpMessage* req) @@ -195,14 +195,12 @@ int SrsHttpVhost::do_process_request(SrsSocket* skt, SrsHttpMessage* req)
195 195
196 // write body. 196 // write body.
197 int64_t left = length; 197 int64_t left = length;
198 - const static int HTTP_PKT_SIZE = 4096;  
199 - char* buf = new char[HTTP_PKT_SIZE];  
200 - SrsAutoFree(char, buf, true); 198 + char* buf = req->http_ts_send_buffer();
201 199
202 while (left > 0) { 200 while (left > 0) {
203 ssize_t nread = -1; 201 ssize_t nread = -1;
204 // TODO: FIXME: use st_read. 202 // TODO: FIXME: use st_read.
205 - if ((nread = ::read(fd, buf, HTTP_PKT_SIZE)) < 0) { 203 + if ((nread = ::read(fd, buf, HTTP_TS_SEND_BUFFER_SIZE)) < 0) {
206 ::close(fd); 204 ::close(fd);
207 ret = ERROR_HTTP_READ_FILE; 205 ret = ERROR_HTTP_READ_FILE;
208 srs_warn("read file %s failed, ret=%d", fullpath.c_str(), ret); 206 srs_warn("read file %s failed, ret=%d", fullpath.c_str(), ret);