Merge pull request #155 from sergiou87/master
Add remote and local addresses to GCDWebServerRequest
diff --git a/GCDWebServer/Core/GCDWebServerConnection.m b/GCDWebServer/Core/GCDWebServerConnection.m
index 5f6c023..40911fa 100644
--- a/GCDWebServer/Core/GCDWebServerConnection.m
+++ b/GCDWebServer/Core/GCDWebServerConnection.m
@@ -548,6 +548,8 @@
}
}
if (_request) {
+ _request.localAddressData = self.localAddressData;
+ _request.remoteAddressData = self.remoteAddressData;
if ([_request hasBody]) {
[_request prepareForWriting];
if (_request.usesChunkedTransferEncoding || (extraData.length <= _request.contentLength)) {
diff --git a/GCDWebServer/Core/GCDWebServerPrivate.h b/GCDWebServer/Core/GCDWebServerPrivate.h
index e1cd87e..1330a18 100644
--- a/GCDWebServer/Core/GCDWebServerPrivate.h
+++ b/GCDWebServer/Core/GCDWebServerPrivate.h
@@ -211,6 +211,8 @@
@interface GCDWebServerRequest ()
@property(nonatomic, readonly) BOOL usesChunkedTransferEncoding;
+@property(nonatomic, readwrite) NSData* localAddressData;
+@property(nonatomic, readwrite) NSData* remoteAddressData;
- (void)prepareForWriting;
- (BOOL)performOpen:(NSError**)error;
- (BOOL)performWriteData:(NSData*)data error:(NSError**)error;
diff --git a/GCDWebServer/Core/GCDWebServerRequest.h b/GCDWebServer/Core/GCDWebServerRequest.h
index 3b517b6..698d974 100644
--- a/GCDWebServer/Core/GCDWebServerRequest.h
+++ b/GCDWebServer/Core/GCDWebServerRequest.h
@@ -158,6 +158,30 @@
@property(nonatomic, readonly) BOOL acceptsGzipContentEncoding;
/**
+ * Returns the address of the local peer (i.e. server) for the request
+ * as a raw "struct sockaddr".
+ */
+@property(nonatomic, readonly) NSData* localAddressData;
+
+/**
+ * Returns the address of the local peer (i.e. server) for the request
+ * as a string.
+ */
+@property(nonatomic, readonly) NSString* localAddressString;
+
+/**
+ * Returns the address of the remote peer (i.e. client) for the request
+ * as a raw "struct sockaddr".
+ */
+@property(nonatomic, readonly) NSData* remoteAddressData;
+
+/**
+ * Returns the address of the remote peer (i.e. client) for the request
+ * as a string.
+ */
+@property(nonatomic, readonly) NSString* remoteAddressString;
+
+/**
* This method is the designated initializer for the class.
*/
- (instancetype)initWithMethod:(NSString*)method url:(NSURL*)url headers:(NSDictionary*)headers path:(NSString*)path query:(NSDictionary*)query;
diff --git a/GCDWebServer/Core/GCDWebServerRequest.m b/GCDWebServer/Core/GCDWebServerRequest.m
index 2cde54f..200dca3 100644
--- a/GCDWebServer/Core/GCDWebServerRequest.m
+++ b/GCDWebServer/Core/GCDWebServerRequest.m
@@ -157,6 +157,8 @@
NSString* _noneMatch;
NSRange _range;
BOOL _gzipAccepted;
+ NSData* _localAddress;
+ NSData* _remoteAddress;
BOOL _opened;
NSMutableArray* _decoders;
@@ -168,7 +170,7 @@
@implementation GCDWebServerRequest : NSObject
@synthesize method=_method, URL=_url, headers=_headers, path=_path, query=_query, contentType=_type, contentLength=_length, ifModifiedSince=_modifiedSince, ifNoneMatch=_noneMatch,
- byteRange=_range, acceptsGzipContentEncoding=_gzipAccepted, usesChunkedTransferEncoding=_chunked;
+ byteRange=_range, acceptsGzipContentEncoding=_gzipAccepted, usesChunkedTransferEncoding=_chunked, localAddressData=_localAddress, remoteAddressData=_remoteAddress;
- (instancetype)initWithMethod:(NSString*)method url:(NSURL*)url headers:(NSDictionary*)headers path:(NSString*)path query:(NSDictionary*)query {
if ((self = [super init])) {
@@ -308,6 +310,14 @@
[_attributes setValue:attribute forKey:key];
}
+- (NSString*)localAddressString {
+ return GCDWebServerStringFromSockAddr(_localAddress.bytes, YES);
+}
+
+- (NSString*)remoteAddressString {
+ return GCDWebServerStringFromSockAddr(_remoteAddress.bytes, YES);
+}
+
- (NSString*)description {
NSMutableString* description = [NSMutableString stringWithFormat:@"%@ %@", _method, _path];
for (NSString* argument in [[_query allKeys] sortedArrayUsingSelector:@selector(compare:)]) {