Просмотр исходного кода

Fixed Socket.writeString method for long responses.

Damian Kołakowski 12 лет назад
Родитель
Сommit
a7a6deb2ff

BIN
Swifter.xcodeproj/project.xcworkspace/xcuserdata/damiankolakowski.xcuserdatad/UserInterfaceState.xcuserstate


+ 19 - 3
Swifter.xcodeproj/xcuserdata/damiankolakowski.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -10,14 +10,30 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "Swifter/Socket.swift"
-            timestampString = "424022966.473838"
+            timestampString = "424026137.840619"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "61"
-            endingLineNumber = "61"
+            startingLineNumber = "60"
+            endingLineNumber = "60"
             landmarkName = "nosigpipe(_:)"
             landmarkType = "5">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "Swifter/AppDelegate.swift"
+            timestampString = "424025015.113078"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "20"
+            endingLineNumber = "20"
+            landmarkName = "application(_:didFinishLaunchingWithOptions:)"
+            landmarkType = "5">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 8 - 0
Swifter/AppDelegate.swift

@@ -25,6 +25,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
             return (200, "<html><body>Hello !</body></html>")
         }
         
+        server["/long"] = { () -> (CInt, String) in
+            var longResponse = ""
+            for k in 0..100000 {
+                longResponse += "(\(k)),"
+            }
+            return (200, longResponse)
+        }
+        
         server["/demo"] = { () -> (CInt, String) in
             return (200, "<html><body><center><h2>Hello Swift</h2>" +
                 "<img src=\"https://devimages.apple.com.edgekey.net/swift/images/swift-hero_2x.png\"/><br>" +

+ 5 - 1
Swifter/HttpParser.swift

@@ -32,7 +32,11 @@ class HttpParser {
             }
             let headerTokens = split(headerLine, { $0 == ":" })
             if ( headerTokens.count >= 2 ) {
-                headers.updateValue(headerTokens[1], forKey: headerTokens[0])
+                let headerName = headerTokens[0]
+                let headerValue = headerTokens[1]
+                if ( !headerName.isEmpty && !headerValue.isEmpty ) {
+                    headers.updateValue(headerValue, forKey: headerName)
+                }
             }
         }
         return nil

+ 1 - 1
Swifter/HttpServer.swift

@@ -45,7 +45,7 @@ class HttpServer
                         if let handler = self.handlers[path] {
                             let (status, response) = handler()
                             // no support for keep-alive for now so let's stay with HTTP 1.0
-                            Socket.writeString(socket, response: "HTTP/1.0 \(status) OK\r\n\r\n\(response)")
+                            Socket.writeString(socket, response: "HTTP/1.0 \(status)\r\n\r\n\(response)")
                         }
                     }
                     Socket.release(socket)

+ 2 - 3
Swifter/Socket.swift

@@ -44,10 +44,9 @@ struct Socket {
     static func writeString(socket: CInt, response: String) {
         var sent = 0;
         let nsdata = response.bridgeToObjectiveC().dataUsingEncoding(NSUTF8StringEncoding)
-        let pointer = nsdata.bytes
+        let unsafePointer = UnsafePointer<UInt8>(nsdata.bytes)
         while ( sent < nsdata.length ) {
-            // TODO pointer + sent
-            let s = write(socket, pointer, UInt(nsdata.length - sent))
+            let s = write(socket, unsafePointer + sent, UInt(nsdata.length - sent))
             if ( s <= 0 ) {
                 return
             }

+ 0 - 2
Swifter/ViewController.swift

@@ -19,7 +19,5 @@ class ViewController: UIViewController {
         super.didReceiveMemoryWarning()
         // Dispose of any resources that can be recreated.
     }
-
-
 }