Sha256: 81ffe3ad03eb7fa7dcc44423675ac7d44733e0459426498b8f784f8ce2c259c5
Contents?: true
Size: 932 Bytes
Versions: 29
Compression:
Stored size: 932 Bytes
Contents
# frozen_string_literal: true require 'bundler/setup' require 'polyphony' require 'h1p' server = Polyphony::Net.tcp_listen('localhost', 1234, reuse_addr: true, reuse_port: true, dont_linger: true ) puts 'Serving HTTP on port 1234' def respond_default(conn) conn << "HTTP/1.1 204\r\n\r\n" end def respond_splice(conn, path) f = File.open(path, 'r') do |f| conn << "HTTP/1.1 200\r\nTransfer-Encoding: chunked\r\n\r\n" IO.http1_splice_chunked(f, conn, 16384) end rescue => e p e # conn << "HTTP/1.1 500\r\nContent-Length: 0\r\n\r\n" end def handle_client(conn) parser = H1P::Parser.new(conn, :server) while true headers = parser.parse_headers break unless headers case headers[':path'] when /^\/splice\/(.+)$/ respond_splice(conn, $1) else respond_default(conn) end end rescue Errno::ECONNRESET # ignore end server.accept_loop do |conn| handle_client(conn) end
Version data entries
29 entries across 29 versions & 1 rubygems