Changeset 15536 in project


Ignore:
Timestamp:
08/22/09 20:32:41 (10 years ago)
Author:
sjamaan
Message:

Simplify response parsers a bit

File:
1 edited

Legend:

Unmodified
Added
Removed
  • release/4/intarweb/trunk/intarweb.scm

    r15162 r15536  
    583583;;;;;;;;;;;;;;;;;;;;;;;;;;
    584584
    585 ;; I don't like this code. Clean it up!
    586585(define (http-1.x-response-parser line in)
    587586  (regex-let
    588587   line "[Hh][Tt][Tt][Pp]/([0-9]+)\\.([0-9]+) +([0-9]+) +(.*)"
    589588   (_ major minor code reason)
    590    (let ((major (string->number major))
    591          (minor (string->number minor)))
    592      (and (or (> major 1)
    593               (and (= major 1)
    594                    (> minor 0)))
    595           (let ((response (make-response code: (string->number code)
    596                                          reason: reason
    597                                          major: major
    598                                          minor: minor
    599                                          headers: (read-headers in)
    600                                          port: in)))
    601             (if (memq 'chunked (header-values 'transfer-encoding
    602                                               (response-headers response)))
    603                 (update-response response
    604                                  port: (chunked-input-port
    605                                         (response-port response)))
    606                 response))))))
     589   (and-let* ((major (string->number major))
     590              (minor (string->number minor))
     591              ((or (> major 1)
     592                   (and (= major 1)
     593                        (> minor 0))))
     594              (h (read-headers in))
     595              (port (if (memq 'chunked (header-values 'transfer-encoding h))
     596                        (chunked-input-port in)
     597                        in)))
     598     (make-response code: (string->number code) reason: reason
     599                    major: major minor: minor
     600                    headers: h
     601                    port: port))))
    607602
    608603(define (http-1.0-response-parser line in)
     
    610605   line "[Hh][Tt][Tt][Pp]/1\\.0 +([0-9]+) +(.*)"
    611606   (_ code reason)
    612    (let ((response (make-response code: (string->number code) reason: reason
    613                                   major: 1 minor: 0
    614                                   headers: (read-headers in)
    615                                   port: in)))
    616      response)))
     607   (make-response code: (string->number code) reason: reason
     608                  major: 1 minor: 0
     609                  headers: (read-headers in)
     610                  port: in)))
    617611
    618612;; You can't "detect" a 0.9 response, because there is no response line.
Note: See TracChangeset for help on using the changeset viewer.