Expose local and remote address on GCDWebServerConnection

This commit is contained in:
Pierre-Olivier Latour
2014-03-29 21:17:51 -07:00
parent 4a93b19385
commit d32ea02b97
4 changed files with 52 additions and 12 deletions
+32 -5
View File
@@ -25,6 +25,8 @@
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <netdb.h>
#import "GCDWebServerPrivate.h"
#define kHeadersReadBuffer 1024
@@ -48,7 +50,8 @@ static dispatch_queue_t _formatterQueue = NULL;
@interface GCDWebServerConnection () {
@private
GCDWebServer* _server;
NSData* _address;
NSData* _localAddress;
NSData* _remoteAddress;
CFSocketNativeHandle _socket;
NSUInteger _bytesRead;
NSUInteger _bytesWritten;
@@ -259,7 +262,7 @@ static dispatch_queue_t _formatterQueue = NULL;
@implementation GCDWebServerConnection
@synthesize server=_server, address=_address, totalBytesRead=_bytesRead, totalBytesWritten=_bytesWritten;
@synthesize server=_server, localAddressData=_localAddress, remoteAddressData=_remoteAddress, totalBytesRead=_bytesRead, totalBytesWritten=_bytesWritten;
+ (void)initialize {
if (_separatorData == nil) {
@@ -458,10 +461,11 @@ static dispatch_queue_t _formatterQueue = NULL;
}];
}
- (id)initWithServer:(GCDWebServer*)server address:(NSData*)address socket:(CFSocketNativeHandle)socket {
- (id)initWithServer:(GCDWebServer*)server localAddress:(NSData*)localAddress remoteAddress:(NSData*)remoteAddress socket:(CFSocketNativeHandle)socket {
if ((self = [super init])) {
_server = ARC_RETAIN(server);
_address = ARC_RETAIN(address);
_localAddress = ARC_RETAIN(localAddress);
_remoteAddress = ARC_RETAIN(remoteAddress);
_socket = socket;
[self open];
@@ -469,11 +473,33 @@ static dispatch_queue_t _formatterQueue = NULL;
return self;
}
static NSString* _StringFromAddressData(NSData* data) {
NSString* string = nil;
const struct sockaddr* addr = data.bytes;
char hostBuffer[NI_MAXHOST];
char serviceBuffer[NI_MAXSERV];
if (getnameinfo(addr, addr->sa_len, hostBuffer, sizeof(hostBuffer), serviceBuffer, sizeof(serviceBuffer), NI_NUMERICHOST | NI_NUMERICSERV | NI_NOFQDN) >= 0) {
string = [NSString stringWithFormat:@"%s:%s", hostBuffer, serviceBuffer];
} else {
DNOT_REACHED();
}
return string;
}
- (NSString*)localAddressString {
return _StringFromAddressData(_localAddress);
}
- (NSString*)remoteAddressString {
return _StringFromAddressData(_remoteAddress);
}
- (void)dealloc {
[self close];
ARC_RELEASE(_server);
ARC_RELEASE(_address);
ARC_RELEASE(_localAddress);
ARC_RELEASE(_remoteAddress);
if (_requestMessage) {
CFRelease(_requestMessage);
@@ -510,6 +536,7 @@ static dispatch_queue_t _formatterQueue = NULL;
GCDWebServerResponse* response = nil;
@try {
response = block(request);
LOG_VERBOSE(@"%@ | %@ \"%@ %@\" %i %lu", self.localAddressString, self.remoteAddressString, _request.method, _request.path, (int)response.statusCode, (unsigned long)response.contentLength);
}
@catch (NSException* exception) {
LOG_EXCEPTION(exception);