kcar RubyGem user+dev discussion/patches/pulls/bugs/help
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [ANN] kcar 0.7.0 - bytestream to Rack response converter
@ 2020-02-21  2:32  6% Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2020-02-21  2:32 UTC (permalink / raw)
  To: kcar-public

kcar features an HTTP parser that will convert a bytestream into a
3-element array suitable for use as a Rack response.  It is IO interface
agnostic, so it may be used with HTTP streams over Unix domain sockets,
regular files, FIFOs, StringIOs as well as traditional TCP sockets.

* homepage: https://yhbt.net/kcar/
* public inbox: kcar-public@yhbt.net
* git clone https://yhbt.net/kcar.git
* mailing list archives: https://yhbt.net/kcar-public/

Changes:

46 changes since 0.6.0 (2015-08-04):
      README: fix reference to HTTP git viewer
      doc: move site to HTTPS
      pkg.mk: avoid network for "gem install"
      gemspec: use SPDX compatible terms for the license(s)
      archive/slrnpull.conf: add a note explaining the purpose
      drop rb_str_set_len compatibility replacement
      remove rb_str_modify workaround
      TypedData C-API conversion
      test_parser: add lone CR test
      reduce parser size to 88 bytes on 64-bit
      extconf: remove unneeded -fPIC CFLAGS
      rely on String#-@ (str_uminus) to dedupe headers
      update comment about freezing values
      http: reject non-LWS CTL chars (0..31 + 127) in field values
      doc: remove references to a server
      update documentation for contributions, remove private address
      doc: minor updates to describe classes, better
      response: remove unnecessary constant alias
      response: more documentation cleanups
      favor require_relative to speed up loading
      response: remove Ruby 1.8-compatibility check
      fix signedness check on 32-bit systems
      shorten and improve readability of assertion
      HACKING: remove copy+pasted line about N
      olddoc: include NNTP archive link
      gemspec: remove olddoc dev dependency
      README: add info about mailing list subscription
      nodoc Kcar::VERSION
      pkg.mk: support VALGRIND variable for unit tests
      introduce new str_new_dd_freeze internal function
      begin implementing request parsing
      favor bitfields instead flags + macros
      implement request parsing with tests
      pkg.mk: enable warnings by default for tests
      filter_body: rename variables to be like memcpy(3)
      flesh out filter_body for request parsing
      do not assume SERVER_PORT
      do not set "HTTP/0.9" for pre-1.0 requests
      always set non-negative Content-Length for requests
      avoid String#-@ call on request parsing under Ruby 2.6
      request: set env["FRAGMENT"] for WebDAV litmus test
      extconf: fix rb_hash_aset deduplication test
      use rb_gc_register_mark_object
      website: use dark216 to save electricity
      doc: update URLs to point to YHBT.net
      doc: update git:// URLs to HTTPS

^ permalink raw reply	[relevance 6%]

* [PATCH 11/11] avoid String#-@ call on request parsing under Ruby 2.6
  @ 2018-12-01 13:31  7% ` Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2018-12-01 13:31 UTC (permalink / raw)
  To: kcar-public

Ruby 2.6 will unconditionally dedupe all hash key strings
thanks to Anmol Chopra at https://bugs.ruby-lang.org/issues/15251
---
 ext/kcar/extconf.rb | 11 +++++++++++
 ext/kcar/kcar.rl    |  5 +++--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/ext/kcar/extconf.rb b/ext/kcar/extconf.rb
index b65846a..ba69c3c 100644
--- a/ext/kcar/extconf.rb
+++ b/ext/kcar/extconf.rb
@@ -22,4 +22,15 @@ rescue NoMethodError
   message("no, String#-@ not available\n")
 end
 
+message('checking if Hash#[]= (rb_hash_aset) dedupes... ')
+h = {}
+h[%w(m k m f).join('')] = :foo
+if 'mkmf'.freeze.equal?(h.keys[0])
+  $CPPFLAGS += ' -DHASH_ASET_DEDUPE=1 '
+  message("yes\n")
+else
+  $CPPFLAGS += ' -DHASH_ASET_DEDUPE=0 '
+  message("no, needs Ruby 2.6+\n")
+end
+
 create_makefile("kcar_ext")
diff --git a/ext/kcar/kcar.rl b/ext/kcar/kcar.rl
index 336af55..9d04dd8 100644
--- a/ext/kcar/kcar.rl
+++ b/ext/kcar/kcar.rl
@@ -489,7 +489,6 @@ static void write_response_value(struct http_parser *hp, VALUE hdr,
   }
 }
 
-/* TODO cache */
 static VALUE req_field(const char *ptr, size_t len)
 {
   size_t pfxlen = sizeof("HTTP_") - 1;
@@ -501,7 +500,7 @@ static VALUE req_field(const char *ptr, size_t len)
   assert(*(dst + RSTRING_LEN(str)) == '\0' &&
          "string didn't end with \\0"); /* paranoia */
 
-  return str_dd_freeze(str);
+  return str;
 }
 
 static void snake_upcase(char *ptr, size_t len)
@@ -570,6 +569,8 @@ static void write_request_value(struct http_parser *hp, VALUE env,
       hp->v.host = val;
   } else {
     key = req_field(fptr, flen);
+    if (!HASH_ASET_DEDUPE)
+      key = str_dd_freeze(key);
   }
   existing = rb_hash_aref(env, key);
   if (NIL_P(existing)) {

^ permalink raw reply related	[relevance 7%]

Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2018-12-01 13:31     [PATCH v2] request parsing bits Eric Wong
2018-12-01 13:31  7% ` [PATCH 11/11] avoid String#-@ call on request parsing under Ruby 2.6 Eric Wong
2020-02-21  2:32  6% [ANN] kcar 0.7.0 - bytestream to Rack response converter Eric Wong

Code repositories for project(s) associated with this public inbox

	https://yhbt.net/kcar.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).