Browse Source

#22 Exposed hooks to monitor bytes read and written

Pierre-Olivier Latour 11 years ago
parent
commit
096b07a201
2 changed files with 12 additions and 0 deletions
  1. 2 0
      CGDWebServer/GCDWebServerConnection.h
  2. 10 0
      CGDWebServer/GCDWebServerConnection.m

+ 2 - 0
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

+ 10 - 0
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;