Nico de Jager <[EMAIL PROTECTED]> 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@common-lisp.net > http://common-lisp.net/cgi-bin/mailman/listinfo/drakma-devel _______________________________________________ drakma-devel mailing list drakma-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/drakma-devel