From 096b07a20160e93a102eb2b15cb466bbe881d5ea Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Wed, 19 Mar 2014 09:44:15 -0700 Subject: [PATCH] #22 Exposed hooks to monitor bytes read and written --- CGDWebServer/GCDWebServerConnection.h | 2 ++ CGDWebServer/GCDWebServerConnection.m | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/CGDWebServer/GCDWebServerConnection.h b/CGDWebServer/GCDWebServerConnection.h index 644e060..b0b95e2 100644 --- a/CGDWebServer/GCDWebServerConnection.h +++ b/CGDWebServer/GCDWebServerConnection.h @@ -38,6 +38,8 @@ @interface GCDWebServerConnection (Subclassing) - (void)open; +- (void)didUpdateBytesRead; // Called from arbitrary thread after @totalBytesRead is updated - Default implementation does nothing +- (void)didUpdateBytesWritten; // Called from arbitrary thread after @totalBytesWritten is updated - Default implementation does nothing - (GCDWebServerResponse*)processRequest:(GCDWebServerRequest*)request withBlock:(GCDWebServerProcessBlock)block; - (void)close; @end diff --git a/CGDWebServer/GCDWebServerConnection.m b/CGDWebServer/GCDWebServerConnection.m index 7e36d43..03afa62 100644 --- a/CGDWebServer/GCDWebServerConnection.m +++ b/CGDWebServer/GCDWebServerConnection.m @@ -72,6 +72,7 @@ static dispatch_queue_t _formatterQueue = NULL; if (size > 0) { LOG_DEBUG(@"Connection received %i bytes on socket %i", size, _socket); _bytesRead += size; + [self didUpdateBytesRead]; block(buffer); } else { if (_bytesRead > 0) { @@ -195,6 +196,7 @@ static dispatch_queue_t _formatterQueue = NULL; DCHECK(data == NULL); LOG_DEBUG(@"Connection sent %i bytes on socket %i", size, _socket); _bytesWritten += size; + [self didUpdateBytesWritten]; block(YES); } else { LOG_ERROR(@"Error while writing to socket %i: %s (%i)", _socket, strerror(error), error); @@ -495,6 +497,14 @@ static dispatch_queue_t _formatterQueue = NULL; [self _readRequestHeaders]; } +- (void)didUpdateBytesRead { + ; +} + +- (void)didUpdateBytesWritten { + ; +} + - (GCDWebServerResponse*)processRequest:(GCDWebServerRequest*)request withBlock:(GCDWebServerProcessBlock)block { LOG_DEBUG(@"Connection on socket %i processing %@ request for \"%@\" (%i bytes body)", _socket, _request.method, _request.path, _request.contentLength); GCDWebServerResponse* response = nil;