[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
- [elpa] branch master updated (f64a801 -> 4f28097), Eric Schulte, 2014/03/10
- [elpa] 02/119: logging support, Eric Schulte, 2014/03/10
- [elpa] 03/119: parsing HTTP headers, Eric Schulte, 2014/03/10
- [elpa] 01/119: initial commit, echo server working, Eric Schulte, 2014/03/10
- [elpa] 04/119: simple hello world server working, Eric Schulte, 2014/03/10
- [elpa] 05/119: stub out (but don't write any) tests, Eric Schulte, 2014/03/10
- [elpa] 08/119: NOTES file for tasks and notes, Eric Schulte, 2014/03/10
- [elpa] 07/119: TODO: handle post data, Eric Schulte, 2014/03/10
- [elpa] 06/119: helper for HTTP headers,
Eric Schulte <=
- [elpa] 09/119: parsing form data in POST, Eric Schulte, 2014/03/10
- [elpa] 11/119: more flexible network process creation, Eric Schulte, 2014/03/10
- [elpa] 10/119: some simple examples, Eric Schulte, 2014/03/10
- [elpa] 15/119: more lenient parsing of multipart forms, Eric Schulte, 2014/03/10
- [elpa] 12/119: compiling to .elc, Eric Schulte, 2014/03/10
- [elpa] 13/119: tasks, Eric Schulte, 2014/03/10
- [elpa] 18/119: 404 not found helper, Eric Schulte, 2014/03/10
- [elpa] 17/119: handling errors, Eric Schulte, 2014/03/10
- [elpa] 14/119: better requirements for test, Eric Schulte, 2014/03/10
- [elpa] 16/119: tasks, Eric Schulte, 2014/03/10