[drakma-devel] CHUNGA:INPUT-CHUNKING-UNEXPECTED-END-OF-FILE
Nico de Jager
ndj at hivsa.com
Wed Dec 12 13:59:20 UTC 2007
Nico de Jager <ndj at hivsa.com> writes:
> Hi
>
> I have a fingerprint scanning application, that uploads fingerprint images using Drakma to a Hunchentoot server. Everything works great as long as I don't use a secure connection. With https, I get a CHUNGA:INPUT-CHUNKING-UNEXPECTED-END-OF-FILE condition on the server, and "Timeout while writing 8192 bytes to #<COMM:SOCKET-STREAM >" on the client. Sometimes the uploads are successful with https, though.
>
> The server runs LispWorks 5.0.2 on Debian Etch. The client runs on LispWorks 5.0.2 on Windows XP SP2. Part of the application pulls in the trivial-ldap module which depends on cl+ssl - not sure if this can be an issue as cl+ssl is not needed on LispWorks for Drakma and Hunchentoot.
Trying to isolate the problem, I set up a general upload easy handlers in a separate application. All https uploads work fine from Linux clients but not from Windows, so I guess it is my version of OpenSSL on the Windows box. I use a binary version which I downloaded here (Win32 OpenSSL v0.9.8g): http://www.slproweb.com/products/Win32OpenSSL.html. I followed this link from the FAQ on www.openssl.org.
Does anyone have advice on easily getting a reliable/working copy of OpenSSL on Windows (preferably a binary package), before I compile my own? Or is it something else?
Thanks.
Nico
>
> I am sure I am doing something stupid. The handler that does the actual upload on the client (which also uses Hunchentoot) is:
> (define-easy-handler (upload-fp-image.action :uri "/hunchentoot/patient-study-db/upload-fp-image.action") ()
> (let ((cookie-jar (make-instance 'drakma:cookie-jar
> :cookies (list (make-instance 'drakma:cookie :name (session-value :hs-name) :value (session-value :hs-id)
> :path (session-value :hs-path) :domain (session-value :hs-domain))))))
> (handler-case
> (let ((html-result (drakma:http-request (session-value :upload-url)
> :method :post
> :parameters (list (cons "finger" (session-value :finger))
> (cons "img-file" (pathname *scanned-file*))
> (cons "hs-id" (session-value :hs-id)))
> :user-agent (session-value :user-agent)
> :cookie-jar cookie-jar)))
> (delete-file *scanned-file*)
> (with-html-output-to-string (*standard-output*)
> (str html-result)))
> (condition (con)
> (delete-file *scanned-file*)
> (show-condition-html con (session-value :back-caption) (session-value :back-url))))))
>
> The Hunchentoot server log spits out:
> [2007-12-12 11:35:39 [ERROR]] While parsing multipart/form-data parameters: The condition #<CHUNGA:INPUT-CHUNKING-UNEXPECTED-END-OF-FILE 200B000C> occurred
> [2007-12-12 11:35:39] 10.38.1.45 - "POST /hunchentoot/patient-study-db/identify-patient.action HTTP/1.1" 200 1058 "-" "Opera/9.10 (Windows NT 5.1; U; en)"
> [2007-12-12 11:35:39 [ERROR]] Error while processing connection: Not all chunks from #<CHUNGA:CHUNKED-IO-STREAM 223A7893> have been read completely.
>
> Backtraces on the server and client are included below.
>
> Thanks.
> Nico
>
> Backtrace on server:
> Error: The condition #<CHUNGA:INPUT-CHUNKING-UNEXPECTED-END-OF-FILE 223AB36C> occurred
> 1 (abort) Quit process.
>
> Type :b for backtrace, :c <option number> to proceed, or :? for other options
>
> CL-USER 1 : 1 > :b
> Call to SIGNAL
> Call to (METHOD CHUNGA::FILL-BUFFER (CHUNGA:CHUNKED-INPUT-STREAM))
> Call to (METHOD STREAM:STREAM-READ-BYTE (CHUNGA:CHUNKED-INPUT-STREAM))
> Call to READ-BYTE
> Call to (METHOD FLEXI-STREAMS::READ-BYTE* (FLEXI-STREAMS::FLEXI-BINARY-INPUT-STREAM))
> Call to (METHOD STREAM:STREAM-READ-CHAR (FLEXI-STREAMS::FLEXI-LATIN-1-INPUT-STREAM))
> Call to READ-CHAR
> Call to (SUBFUNCTION RFC2388::RUN RFC2388::READ-UNTIL-NEXT-BOUNDARY)
> Call to RFC2388::READ-UNTIL-NEXT-BOUNDARY
> Call to (METHOD RFC2388:PARSE-MIME (STREAM T))
> Call to HUNCHENTOOT::PARSE-RFC2388-FORM-DATA
> Call to (METHOD INITIALIZE-INSTANCE :AFTER (HUNCHENTOOT::REQUEST))
> Call to CLOS::METHOD-COMBINATION-TEMPLATE
> Call to CLOS::MAKE-INSTANCE-FROM-CLASS-1
> Call to HUNCHENTOOT::PROCESS-REQUEST
> Call to HUNCHENTOOT::PROCESS-CONNECTION
> Call to (SUBFUNCTION MP::PROCESS-SG-FUNCTION MP::INITIALIZE-PROCESS-STACK)
>
>
> Backtrace on client:
> Error: Timeout while writing 8192 bytes to #<COMM:SOCKET-STREAM 2009C0E7>.
> 1 (abort) Quit process.
>
> Type :b for backtrace, :c <option number> to proceed, or :? for other options
>
> CL-USER 1 : 1 > :b
> Call to SIGNAL
> Call to (METHOD STREAM:STREAM-FLUSH-BUFFER (STREAM:BUFFERED-STREAM))
> Call to (METHOD STREAM:STREAM-WRITE-SEQUENCE (STREAM:BUFFERED-STREAM T T T))
> Call to CLOS::METHOD-COMBINATION-TEMPLATE
> Call to WRITE-SEQUENCE
> Call to WRITE-SEQUENCE
> Call to (METHOD CHUNGA::WRITE-CHUNK (CHUNGA:CHUNKED-OUTPUT-STREAM T))
> Call to (METHOD CHUNGA::FLUSH-BUFFER (CHUNGA:CHUNKED-OUTPUT-STREAM))
> Call to (METHOD TRIVIAL-GRAY-STREAMS:STREAM-WRITE-SEQUENCE (CHUNGA:CHUNKED-OUTPUT-STREAM T T T))
> Call to WRITE-SEQUENCE
> Call to WRITE-SEQUENCE
> Call to DRAKMA::SEND-CONTENT
> Call to DRAKMA::SEND-CONTENT
> Call to (SUBFUNCTION 1 DRAKMA::MAKE-FORM-DATA-FUNCTION)
> Call to (SUBFUNCTION (LABELS DRAKMA::FINISH-REQUEST) DRAKMA:HTTP-REQUEST)
> Call to DRAKMA:HTTP-REQUEST
> Interpreted call to PATIENT-STUDY-DB-CLIENT::UPLOAD-FP-IMAGE.ACTION
> Call to HUNCHENTOOT::PROCESS-REQUEST
> Call to HUNCHENTOOT::PROCESS-CONNECTION
> Call to (SUBFUNCTION MP::PROCESS-SG-FUNCTION MP::INITIALIZE-PROCESS-STACK)
> _______________________________________________
> drakma-devel mailing list
> drakma-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/drakma-devel
More information about the Drakma-devel
mailing list