Skip to content

Commit

Permalink
Request object extended by client's IP address.
Browse files Browse the repository at this point in the history
  • Loading branch information
damian-kolakowski committed Jun 15, 2015
1 parent bde3e53 commit a18e5ee
Show file tree
Hide file tree
Showing 7 changed files with 99 additions and 35 deletions.
2 changes: 1 addition & 1 deletion Common/DemoServer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func demoServer(publicDir: String?) -> HttpServer {
for (name, value) in request.urlParams {
queryParamsInfo += "\(name) : \(value)<br>"
}
return .OK(.HTML("<h3>Url:</h3> \(request.url)<h3>Method: \(request.method)</h3><h3>Headers:</h3>\(headersInfo)<h3>Query:</h3>\(queryParamsInfo)"))
return .OK(.HTML("<h3>Address: \(request.address)</h3><h3>Url:</h3> \(request.url)<h3>Method: \(request.method)</h3><h3>Headers:</h3>\(headersInfo)<h3>Query:</h3>\(queryParamsInfo)"))
}
server["/params/(.+)/(.+)"] = { request in
var capturedGroups = ""
Expand Down
4 changes: 2 additions & 2 deletions Common/HttpParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ class HttpParser {
// 'multipart' -> Dictionary
if let contentSize = headers["content-length"]?.toInt() {
let body = nextBody(socket, size: contentSize, error: error)
return HttpRequest(url: path, urlParams: urlParams, method: method, headers: headers, body: body, capturedUrlGroups: [])
return HttpRequest(url: path, urlParams: urlParams, method: method, headers: headers, body: body, capturedUrlGroups: [], address: nil)
}
return HttpRequest(url: path, urlParams: urlParams, method: method, headers: headers, body: nil, capturedUrlGroups: [])
return HttpRequest(url: path, urlParams: urlParams, method: method, headers: headers, body: nil, capturedUrlGroups: [], address: nil)
}
}
return nil
Expand Down
1 change: 1 addition & 0 deletions Common/HttpRequest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ struct HttpRequest {
let headers: [String: String]
let body: String?
var capturedUrlGroups: [String]
var address: String?
}
3 changes: 2 additions & 1 deletion Common/HttpServer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,14 @@ class HttpServer
self.clientSockets.insert(socket)
}
if self.acceptSocket == -1 { return }
let socektAddress = Socket.peername(socket)

This comment has been minimized.

Copy link
@spro

spro Jun 15, 2015

small typo socektAddress -> socketAddress

This comment has been minimized.

Copy link
@damian-kolakowski

damian-kolakowski Jun 16, 2015

Author Member

thanks man !
It's corrected ( 903551b ).

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), {
let parser = HttpParser()
while let request = parser.nextHttpRequest(socket) {
let keepAlive = parser.supportsKeepAlive(request.headers)
if let (expression, handler) = self.findHandler(request.url) {
let capturedUrlsGroups = self.captureExpressionGroups(expression, value: request.url)
let updatedRequest = HttpRequest(url: request.url, urlParams: request.urlParams, method: request.method, headers: request.headers, body: request.body, capturedUrlGroups: capturedUrlsGroups)
let updatedRequest = HttpRequest(url: request.url, urlParams: request.urlParams, method: request.method, headers: request.headers, body: request.body, capturedUrlGroups: capturedUrlsGroups, address: socektAddress)
HttpServer.respond(socket, response: handler(updatedRequest), keepAlive: keepAlive)
} else {
HttpServer.respond(socket, response: HttpResponse.NotFound, keepAlive: keepAlive)
Expand Down
14 changes: 14 additions & 0 deletions Common/Socket.swift
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,18 @@ struct Socket {
shutdown(socket, SHUT_RDWR)
close(socket)
}

static func peername(socket: CInt, error: NSErrorPointer = nil) -> String? {
var addr = sockaddr(), len: socklen_t = socklen_t(sizeof(sockaddr))
if getpeername(socket, &addr, &len) != 0 {
if error != nil { error.memory = lastErr("getpeername(...) failed.") }
return nil
}
var hostBuffer = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0)
if getnameinfo(&addr, len, &hostBuffer, socklen_t(hostBuffer.count), nil, 0, NI_NUMERICHOST) != 0 {
if error != nil { error.memory = lastErr("getnameinfo(...) failed.") }
return nil
}
return String.fromCString(hostBuffer)
}
}
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -266,11 +266,11 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/HttpServer.swift"
timestampString = "456068345.283285"
timestampString = "456081779.082475"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "47"
endingLineNumber = "47"
startingLineNumber = "48"
endingLineNumber = "48"
landmarkName = "start(listenPort:error:)"
landmarkType = "5">
</BreakpointContent>
Expand All @@ -282,11 +282,11 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/HttpServer.swift"
timestampString = "456068345.283285"
timestampString = "456081779.082475"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "49"
endingLineNumber = "49"
startingLineNumber = "50"
endingLineNumber = "50"
landmarkName = "start(listenPort:error:)"
landmarkType = "5">
</BreakpointContent>
Expand All @@ -298,11 +298,11 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/HttpServer.swift"
timestampString = "456068345.283285"
timestampString = "456081779.082475"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "51"
endingLineNumber = "51"
startingLineNumber = "52"
endingLineNumber = "52"
landmarkName = "start(listenPort:error:)"
landmarkType = "5">
</BreakpointContent>
Expand All @@ -314,11 +314,11 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/HttpServer.swift"
timestampString = "456068345.283285"
timestampString = "456081779.082475"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "55"
endingLineNumber = "55"
startingLineNumber = "56"
endingLineNumber = "56"
landmarkName = "start(listenPort:error:)"
landmarkType = "5">
</BreakpointContent>
Expand All @@ -330,11 +330,11 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/HttpServer.swift"
timestampString = "456068345.283285"
timestampString = "456081779.082475"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "56"
endingLineNumber = "56"
startingLineNumber = "57"
endingLineNumber = "57"
landmarkName = "start(listenPort:error:)"
landmarkType = "5">
</BreakpointContent>
Expand Down Expand Up @@ -362,11 +362,11 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/HttpServer.swift"
timestampString = "456068345.283285"
timestampString = "456081779.082475"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "79"
endingLineNumber = "79"
startingLineNumber = "80"
endingLineNumber = "80"
landmarkName = "captureExpressionGroups(_:value:)"
landmarkType = "5">
</BreakpointContent>
Expand All @@ -378,7 +378,7 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/DemoServer.swift"
timestampString = "438294105.63842"
timestampString = "456083936.619071"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "54"
Expand All @@ -394,11 +394,11 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/HttpServer.swift"
timestampString = "456068345.283285"
timestampString = "456081779.082475"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "52"
endingLineNumber = "52"
startingLineNumber = "53"
endingLineNumber = "53"
landmarkName = "start(listenPort:error:)"
landmarkType = "5">
</BreakpointContent>
Expand All @@ -410,7 +410,7 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/DemoServer.swift"
timestampString = "438294105.63842"
timestampString = "456083936.619071"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "56"
Expand All @@ -426,7 +426,7 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/DemoServer.swift"
timestampString = "438294105.63842"
timestampString = "456083936.619071"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "68"
Expand Down Expand Up @@ -554,11 +554,11 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/HttpServer.swift"
timestampString = "456068345.283285"
timestampString = "456081779.082475"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "112"
endingLineNumber = "112"
startingLineNumber = "113"
endingLineNumber = "113"
landmarkName = "respond(_:response:keepAlive:)"
landmarkType = "5">
</BreakpointContent>
Expand All @@ -570,11 +570,11 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/HttpServer.swift"
timestampString = "456068345.283285"
timestampString = "456081779.082475"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "113"
endingLineNumber = "113"
startingLineNumber = "114"
endingLineNumber = "114"
landmarkName = "respond(_:response:keepAlive:)"
landmarkType = "5">
</BreakpointContent>
Expand Down Expand Up @@ -869,7 +869,7 @@
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/DemoServer.swift"
timestampString = "448798123.272156"
timestampString = "456083936.619071"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "64"
Expand Down Expand Up @@ -926,5 +926,53 @@
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/Socket.swift"
timestampString = "456081776.855702"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "108"
endingLineNumber = "108"
landmarkName = "peername(_:error:)"
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/Socket.swift"
timestampString = "456083512.241377"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "115"
endingLineNumber = "115"
landmarkName = "peername(_:error:)"
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Common/Socket.swift"
timestampString = "456083787.052298"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "117"
endingLineNumber = "117"
landmarkName = "peername(_:error:)"
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>

0 comments on commit a18e5ee

Please sign in to comment.