Skip to content

Instantly share code, notes, and snippets.

@masakielastic
masakielastic / H2FrameIter.php
Last active July 21, 2024 22:39
HTTP/2 Frame Iterater
<?php
function H2FrameIter(string $chunk): Generator {
$chunk_size = strlen($chunk);
$index = 0;
$next = 0;
while (true) {
if ($next > $chunk_size || $next + 3 > $chunk_size) {
break;
@masakielastic
masakielastic / cgiserver.py
Last active July 13, 2024 18:43
CGIHTTPRequestHandler の使い方 (Python 3.13 で非推奨、Python 3.15 で削除)
from http.server import HTTPServer, CGIHTTPRequestHandler
import ssl
def run(host, port, ctx, handler):
server = HTTPServer((host, port), handler)
server.socket = ctx.wrap_socket(server.socket)
print('Server Starts - %s:%s' % (host, port))
try:
server.serve_forever()
@masakielastic
masakielastic / h2frames.py
Last active July 13, 2024 23:33
HTTP/2 frame example
def h2frames(name):
frames = {
'pri': b'PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n',
'settings': b'\x00\x00\x0C' \
b'\x04' \
b'\x00' \
b'\x00\x00\x00\x00) \
b'\x00\x02\x00\x00\x00\x00' \
b'\x00\x03\x00\x00\x00\x64',
'ack': b'\x00\x00\x00' \
@masakielastic
masakielastic / h2frames.rb
Last active July 7, 2024 20:20
http/2 frames example
def h2frames(name)
frames = {
'pri' => "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n",
'settings' => "\x00\x00\x0C" +
"\x04" +
"\x00" +
"\x00\x00\x00\x00" +
"\x00\x02\x00\x00\x00\x00" +
"\x00\x03\x00\x00\x00\x64",
'ack' => "\x00\x00\x00" +
@masakielastic
masakielastic / h2frames.php
Last active July 7, 2024 20:21
HTTP/2 frames test data
<?php
function dump($chunk, $name) {
var_dump(
$name,
[
'size' => strlen($chunk),
'hex' => bin2hex($chunk)
]
);
Output (Go 1.22.3)
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4
D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9
EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
@masakielastic
masakielastic / ffi_example.php
Last active May 3, 2024 23:11
PHP FFI example
<?php
$x = FFI::new('int');
$x->cdata = 5;
var_dump(
5 === $x->cdata
);
@masakielastic
masakielastic / hpack.c
Last active May 1, 2024 10:47
PHP エクステンションで nghttp2 による HPACK エンコードの例です
/* hpack extension for PHP */
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "php.h"
#include "ext/standard/info.h"
#include "php_hpack.h"
#include "hpack_arginfo.h"
@masakielastic
masakielastic / hpack_encode.c
Last active May 1, 2024 10:21
nghttp2 の HPACK エンコードの例です
#include <stdio.h>
#include <nghttp2/nghttp2.h>
// https://nghttp2.org/documentation/tutorial-hpack.html
#define MAKE_NV(K, V) \
{ \
(uint8_t *)K, (uint8_t *)V, sizeof(K) - 1, sizeof(V) - 1, \
NGHTTP2_NV_FLAG_NONE \
}
@masakielastic
masakielastic / conversion.php
Created October 11, 2023 08:07
Round-trip conversion between Shift_JIS (CP932) and Unicode
<?php
count_unsafe_chars('cp932');
function roundtrip($char, $enc) {
return mb_convert_encoding(mb_convert_encoding($char, 'utf-8', $enc), $enc, 'utf-8');
}
function tohexupper($char) {
return strtoupper(bin2hex($char));