emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] 06/119: helper for HTTP headers


From: Eric Schulte
Subject: [elpa] 06/119: helper for HTTP headers
Date: Mon, 10 Mar 2014 16:56:58 +0000

eschulte pushed a commit to branch master
in repository elpa.

commit 38630cb3664dd7ada0f05cd748479ab7da312868
Author: Eric Schulte <address@hidden>
Date:   Wed Dec 18 00:49:43 2013 -0700

    helper for HTTP headers
---
 emacs-web-server-status-codes.el |   91 ++++++++++++++++++++++++++++++++++++++
 emacs-web-server.el              |   26 +++++++++++
 2 files changed, 117 insertions(+), 0 deletions(-)

diff --git a/emacs-web-server-status-codes.el b/emacs-web-server-status-codes.el
new file mode 100644
index 0000000..b2cf2dc
--- /dev/null
+++ b/emacs-web-server-status-codes.el
@@ -0,0 +1,91 @@
+;;; emacs-web-server-status-codes.el --- Emacs Web Server HTML status codes
+
+;;; Code:
+(defvar ews-status-codes
+  '((100 . "Continue")
+    (101 . "Switching Protocols")
+    (102 . "Processing")
+    (200 . "OK")
+    (201 . "Created")
+    (202 . "Accepted")
+    (203 . "Non-Authoritative Information")
+    (204 . "No Content")
+    (205 . "Reset Content")
+    (206 . "Partial Content")
+    (207 . "Multi-Status")
+    (208 . "Already Reported")
+    (226 . "IM Used")
+    (300 . "Multiple Choices")
+    (301 . "Moved Permanently")
+    (302 . "Found")
+    (303 . "See Other")
+    (304 . "Not Modified")
+    (305 . "Use Proxy")
+    (306 . "Switch Proxy")
+    (307 . "Temporary Redirect")
+    (308 . "Permanent Redirect")
+    (400 . "Bad Request")
+    (401 . "Unauthorized")
+    (402 . "Payment Required")
+    (403 . "Forbidden")
+    (404 . "Not Found")
+    (405 . "Method Not Allowed")
+    (406 . "Not Acceptable")
+    (407 . "Proxy Authentication Required")
+    (408 . "Request Timeout")
+    (409 . "Conflict")
+    (410 . "Gone")
+    (411 . "Length Required")
+    (412 . "Precondition Failed")
+    (413 . "Request Entity Too Large")
+    (414 . "Request-URI Too Long")
+    (415 . "Unsupported Media Type")
+    (416 . "Requested Range Not Satisfiable")
+    (417 . "Expectation Failed")
+    (418 . "I'm a teapot")
+    (419 . "Authentication Timeout")
+    (420 . "Method Failure")
+    (420 . "Enhance Your Calm")
+    (422 . "Unprocessable Entity")
+    (423 . "Locked")
+    (424 . "Failed Dependency")
+    (424 . "Method Failure")
+    (425 . "Unordered Collection")
+    (426 . "Upgrade Required")
+    (428 . "Precondition Required")
+    (429 . "Too Many Requests")
+    (431 . "Request Header Fields Too Large")
+    (440 . "Login Timeout")
+    (444 . "No Response")
+    (449 . "Retry With")
+    (450 . "Blocked by Windows Parental Controls")
+    (451 . "Unavailable For Legal Reasons")
+    (451 . "Redirect")
+    (494 . "Request Header Too Large")
+    (495 . "Cert Error")
+    (496 . "No Cert")
+    (497 . "HTTP to HTTPS")
+    (499 . "Client Closed Request")
+    (500 . "Internal Server Error")
+    (501 . "Not Implemented")
+    (502 . "Bad Gateway")
+    (503 . "Service Unavailable")
+    (504 . "Gateway Timeout")
+    (505 . "HTTP Version Not Supported")
+    (506 . "Variant Also Negotiates")
+    (507 . "Insufficient Storage")
+    (508 . "Loop Detected")
+    (509 . "Bandwidth Limit Exceeded")
+    (510 . "Not Extended")
+    (511 . "Network Authentication Required")
+    (520 . "Origin Error")
+    (522 . "Connection timed out")
+    (523 . "Proxy Declined Request")
+    (524 . "A timeout occurred")
+    (598 . "Network read timeout error")
+    (599 . "Network connect timeout error"))
+  "Possible HTML status codes with names.
+From http://en.wikipedia.org/wiki/List_of_HTTP_status_codes.";)
+
+(provide 'emacs-web-server-status-codes)
+;;; emacs-web-server-status-codes.el ends here
diff --git a/emacs-web-server.el b/emacs-web-server.el
index 8e69ec6..98530cd 100644
--- a/emacs-web-server.el
+++ b/emacs-web-server.el
@@ -7,6 +7,7 @@
 ;; License: GPLV3 (see the COPYING file in this directory)
 
 ;;; Code:
+(require 'emacs-web-server-status-codes)
 (require 'eieio)
 (require 'cl-lib)
 
@@ -44,6 +45,18 @@ port 8080.
         t)))
    8080)
 
+Equivalently, the following starts an identical server using a
+function MATCH and the `ews-response-header' convenience
+function.
+
+  (ews-start
+   '(((lambda (_) t) .
+      (lambda (proc request)
+        (ews-response-header proc 200 '(\"Content-type\" . \"text/plain\"))
+        (process-send-string proc \"hello world\")
+        t)))
+   8080)
+
 "
   (let ((server (make-instance 'ews-server :handler handler :port port)))
     (setf (process server)
@@ -118,5 +131,18 @@ port 8080.
           handler)
     (error "[ews] no handler matched request:%S" request)))
 
+
+;;; Convenience functions to write responses
+(defun ews-response-header (proc code &rest header)
+  "Send the headers for an HTTP response to PROC.
+Currently CODE should be an HTTP status code, see
+`ews-status-codes' for a list of known codes."
+  (let ((headers
+         (cons
+          (format "HTTP/1.1 %d %s" code (cdr (assoc code ews-status-codes)))
+          (mapcar (lambda (h) (format "%s: %s" (car h) (cdr h))) header))))
+    (setcdr (last headers) (list "" ""))
+    (process-send-string proc (mapconcat #'identity headers "\r\n"))))
+
 (provide 'emacs-web-server)
 ;;; emacs-web-server.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]