Skip to content

Commit 8e91e4b

Browse files
committed
aleph seems to be working
1 parent 4e7af85 commit 8e91e4b

File tree

5 files changed

+33
-46
lines changed

5 files changed

+33
-46
lines changed

src/pcp/core.clj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@
175175

176176
(defn body-handler [req]
177177
(let [type (:content-type req)]
178+
;; (print "\n\n\n" (slurp (:body req)) "\n\n\n")
178179
(if (nil? type)
179180
req
180181
(cond
@@ -200,7 +201,7 @@
200201
([path]
201202
(let [scgi-port (Integer/parseInt (or (System/getenv "SCGI_PORT") "9000"))]
202203
(case path
203-
"" (scgi/serve scgi-handler scgi-port);(server/start-server handler {:port scgi-port});
204+
"" (scgi/serve scgi-handler scgi-port)
204205
(run-script path)))))
205206

206207

src/pcp/scgi.clj

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
(defn to-byte-array [^String text]
1515
(-> text (.getBytes "UTF-8") ByteBuffer/wrap))
1616

17-
(defn to-string [bytes]
18-
(bs/to-string bytes))
17+
(defn to-string [str-as-bytes]
18+
(bs/to-string str-as-bytes))
1919

2020
(defn extract-headers [header]
2121
(let [data (str/split header #"\u0000")
@@ -57,17 +57,17 @@
5757

5858

5959
(defn size [bts]
60-
(let [seg (bs/to-string (byte-array (take 50 bts)))
60+
(let [seg (to-string (byte-array (vec (take 50 bts))))
6161
header-len (str/replace seg #":.*" "")
6262
len (count header-len)
63-
header-int (Integer/parseInt header-len)
63+
header-int (Integer/parseInt (if-not (str/blank? header-len) header-len "0" ))
6464
body (re-find #"(\d+)" (subs seg (inc len)))
65-
body-int (Integer/parseInt (second body))]
65+
body-int (Integer/parseInt (if-not (str/blank? (second body)) (second body) "0"))]
6666
{:drop (inc len)
6767
:header header-int
6868
:body body-int
69-
:end (+ len header-int 1)
70-
:total (+ body-int header-int (inc len) 1)}))
69+
:end (+ len header-int 1 1)
70+
:total (+ body-int header-int len 1 1)}))
7171

7272
(defn str+bin [string binary]
7373
(str string (bs/to-string binary)))
@@ -81,7 +81,6 @@
8181
(d/chain
8282
(fn [msg]
8383
(let [meta (size msg)
84-
len (count msg)
8584
dmsg (d/deferred)
8685
total (:total meta)]
8786
(d/success! dmsg msg)
@@ -93,8 +92,6 @@
9392
[meta (mapcat seq (conj bin @m))]
9493
(d/recur (s/take! s null) (conj bin @m) progress))))))
9594
(fn [res]
96-
;; (with-open [w (clojure.java.io/output-stream "test-resources/multipart.bin")]
97-
;; (.write w (byte-array (second res))))
9895
(let [meta (first res)
9996
msg (second res)
10097
main (drop (:drop meta) msg)

src/pcp/utility.clj

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,18 @@ Options:
106106
(resp/content-type mime))))
107107

108108
(defn create-resp [scgi-response]
109-
(let [resp-array (str/split scgi-response #"\r\n")
110-
resp-status (first resp-array)
111-
end (+ 4 (str/index-of scgi-response "\r\n\r\n"))
112-
status (Integer/parseInt (if (empty? resp-status) "404" resp-status))
113-
body (subs scgi-response end)
114-
header-vals (re-seq #"(.*?): (.*?)\r\n" (subs scgi-response 0 end))
115-
headers (apply merge (for [h header-vals] {(nth h 1) (nth h 2)}))]
116-
{:status status :body body :headers headers}))
109+
(when-not (str/blank? scgi-response)
110+
(let [resp-array (str/split scgi-response #"\r\n")
111+
resp-status (first resp-array)
112+
status (Integer/parseInt (if (empty? resp-status) "404" resp-status))
113+
body (last resp-array )
114+
header-vals' (-> scgi-response
115+
(str/replace (first resp-array) "")
116+
(str/replace (last resp-array) "")
117+
(str/trim))
118+
header-vals (re-seq #"(.*?): (.*?)\r\n" header-vals')
119+
headers (apply merge (for [h header-vals] {(nth h 1) (nth h 2)}))]
120+
{:status status :body body :headers headers})))
117121

118122
(defn file-exists? [path]
119123
(-> path ^File io/file .exists))
@@ -140,10 +144,9 @@ Options:
140144
(-> (assoc full :document-uri "/404.clj") http-to-scgi (forward (:scgi-port opts)) create-resp)
141145
:else (format-response 404 nil nil)))))
142146

143-
(defn run-file [path port]
147+
(defn run-file [path scgi-port]
144148
(let [path (str/replace (str "/" path) "//" "/")
145149
root (.getCanonicalPath ^File (io/file "./"))
146-
scgi-port (Integer/parseInt (or (System/getenv "SCGI_PORT") (str port) "9000"))
147150
request {:document-root root :document-uri path :request-method :get}]
148151
(-> request http-to-scgi (forward scgi-port) create-resp :body)))
149152

@@ -259,21 +262,6 @@ Options:
259262
(slurp (str (template-path) "/api/info.clj")))
260263
(println (str "Created pcp project `" project-name "` in directory") (.getAbsolutePath ^File (io/file path)))))
261264

262-
;; (def cli-options
263-
;; ;; An option with a required argument
264-
;; [["-s" "--serve PATH" "Server root"
265-
;; :default "./public"
266-
;; :parse-fn #(Integer/parseInt %)
267-
;; :validate [#(< 0 % 0x10000) "Must be a number between 0 and 65536"]]
268-
;; ["-t" nil "SCGI server port"
269-
;; :default 9000
270-
;; :validate [#(< 0 % 0x10000) "Must be a number between 0 and 65536"]]
271-
;; ["-v" "--version"]
272-
;; ["-h" "--help"]])
273-
274-
;; (defn -main [& args]
275-
;; (println (parse-opts args cli-options)))
276-
277265
(defn -main
278266
([]
279267
(-main "" ""))
@@ -285,8 +273,8 @@ Options:
285273
"--serve" (start-local-server {:root value})
286274
"-v" (println "pcp" version)
287275
"--version" (println "pcp" version)
288-
"-e" (println (run-file value 9000))
289-
"--evaluate" (println (run-file value 9000))
276+
"-e" (println (run-file value (Integer/parseInt (or (System/getenv "SCGI_PORT") "9000"))))
277+
"--evaluate" (println (run-file value (Integer/parseInt (or (System/getenv "SCGI_PORT") "9000"))))
290278
"new" (new-project value)
291279
"passphrase" (add-passphrase value)
292280
"secret" (add-secret {:root value})

test/pcp/scgi_test.clj

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
(:require [clojure.test :refer :all]
33
[pcp.scgi :as scgi]
44
[pcp.core :as core]
5-
[clojure.java.io :as io])
5+
[clojure.java.io :as io]
6+
[byte-streams :as bs])
67
(:import [java.net Socket InetAddress]
78
[org.apache.commons.io IOUtils]))
89

@@ -13,7 +14,7 @@
1314
(let [handler #(core/scgi-handler %)
1415
scgi-port 55555
1516
server (scgi/serve handler scgi-port)
16-
message (IOUtils/toByteArray (io/input-stream "test-resources/scgi.bin"))
17+
message (bs/to-byte-array (io/input-stream "test-resources/scgi.bin"))
1718
len (count message)]
1819
(Thread/sleep boot-time)
1920
(let [socket (Socket. (InetAddress/getByName "127.0.0.1") scgi-port)]
@@ -32,14 +33,14 @@
3233
(let [handler #(core/scgi-handler %)
3334
scgi-port 11112
3435
server (scgi/serve handler scgi-port)
35-
message (IOUtils/toByteArray (io/input-stream "test-resources/multipart.bin"))
36+
message (bs/to-byte-array (io/input-stream "test-resources/multipart.bin"))
3637
len (count message)]
3738
(Thread/sleep boot-time)
3839
(let [socket (Socket. (InetAddress/getByName "127.0.0.1") scgi-port)]
3940
(with-open [os (io/output-stream (.getOutputStream socket))]
4041
(.write os message 0 len)
4142
(.flush os)
42-
(let [ans (IOUtils/toString (.getInputStream socket))]
43+
(let [ans (bs/to-string (.getInputStream socket))]
4344
(is (= "200\r\nContent-Type: text/plain\r\n\r\n1275" ans))
4445
(Thread/sleep 2000)
4546
(.close socket)
@@ -52,14 +53,14 @@
5253
(let [handler #(core/scgi-handler %)
5354
scgi-port 11113
5455
server (scgi/serve handler scgi-port)
55-
message (IOUtils/toByteArray (io/input-stream "test-resources/json.bin"))
56+
message (bs/to-byte-array (io/input-stream "test-resources/json.bin"))
5657
len (count message)]
5758
(Thread/sleep boot-time)
5859
(let [socket (Socket. (InetAddress/getByName "127.0.0.1") scgi-port)]
5960
(with-open [os (io/output-stream (.getOutputStream socket))]
6061
(.write os message 0 len)
6162
(.flush os)
62-
(let [ans (IOUtils/toString (.getInputStream socket))
63+
(let [ans (bs/to-string (.getInputStream socket))
6364
_ (.close socket)]
6465
(is (= "200\r\nContent-Type: text/plain\r\n\r\n1275" ans))
6566
(is (true? (.isClosed socket)))

test/pcp/utility_test.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@
155155
scgi (core/-main)
156156
_ (Thread/sleep boot-time)
157157
local (utility/-main "-s" root)
158-
file-eval (json/decode (with-out-str (utility/-main "-e" (str root "/index.clj"))) true)
159-
file-eval2 (json/decode (with-out-str (utility/-main "--evaluate" (str root "/index.clj"))) true)
158+
file-eval (json/decode (with-out-str (utility/-main "-e" "./test-resources/site/index.clj")) true)
159+
file-eval2 (json/decode (with-out-str (utility/-main "--evaluate" "./test-resources/site/index.clj")) true)
160160
file-eval-expected (json/decode "{\"num\":1275,\"name\":\"Test\",\"end\":null}" true)
161161
resp-index (client/get (str "http://localhost:3000/"))
162162
resp-text (client/get (str "http://localhost:3000/text.txt"))]

0 commit comments

Comments
 (0)