Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/kprobe for http1 #8

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions clervers/http1/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## Run server
```bash
sudo go run server/main.go
```

## Running test client
```bash
bash ./client/client.sh
```
1 change: 1 addition & 0 deletions clervers/http1/client/client.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
curl -X POST -v localhost:8080/customResponse -d '{"size": 10}'
33 changes: 33 additions & 0 deletions clervers/http1/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
module http1_clerver_modules

go 1.22

replace http1_clerver_modules => ./

require (
github.com/bytedance/sonic v1.9.1 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/gin-gonic/gin v1.9.1 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.14.0 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
golang.org/x/arch v0.3.0 // indirect
golang.org/x/crypto v0.9.0 // indirect
golang.org/x/net v0.10.0 // indirect
golang.org/x/sys v0.8.0 // indirect
golang.org/x/text v0.9.0 // indirect
google.golang.org/protobuf v1.30.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
78 changes: 78 additions & 0 deletions clervers/http1/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js=
github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
72 changes: 72 additions & 0 deletions clervers/http1/server/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package main

import (
"fmt"
"log"
"math/rand"
"net/http"
"os"
"time"

"github.com/gin-gonic/gin"
)

const (
defaultPort = "8080"
maxPayloadSize = 10 * 1024 * 1024 // 10 MB
)

var (
// source is a static, global rand object.
source *rand.Rand
letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890~!@#$"
)

func randStringBytes(n int) string {
b := make([]byte, n)
for i := range b {
b[i] = letterBytes[source.Intn(len(letterBytes))]
}
return string(b)
}

func init() {
source = rand.New(rand.NewSource(time.Now().UnixNano()))
}

// customResponse holds the requested size for the response payload.
type customResponse struct {
Size int `json:"size"`
}

func postCustomResponse(context *gin.Context) {
var customResp customResponse
if err := context.BindJSON(&customResp); err != nil {
_ = context.AbortWithError(http.StatusBadRequest, err)
return
}

if customResp.Size > maxPayloadSize {
_ = context.AbortWithError(http.StatusBadRequest, fmt.Errorf("requested size %d is bigger than max allowed %d", customResp, maxPayloadSize))
return
}

context.JSON(http.StatusOK, map[string]string{"answer": randStringBytes(customResp.Size)})
}

func main() {
engine := gin.New()

engine.Use(gin.Recovery())
engine.POST("/customResponse", postCustomResponse)

port := os.Getenv("PORT")
if port == "" {
port = defaultPort
}

fmt.Printf("listening on 0.0.0.0:%s\n", port)
if err := engine.Run(fmt.Sprintf("0.0.0.0:%s", port)); err != nil {
log.Fatal(err)
}
}
15 changes: 15 additions & 0 deletions clervers/http1s/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
## Generate certs
```bash
cd main_src/server/certs
openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout key.pem
```

## Run server
```bash
python3 ./server/https_server.py 43421
```

## Run client
```bash
python3 ./client/client.py
```
3 changes: 3 additions & 0 deletions clervers/http1s/client/client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import requests
body = {"Hello World": "I'm testing my HTTPS sniffer", "Results=": "Good"}
resp = requests.post("https://127.0.0.1:43421/example", json=body, verify=False)
21 changes: 21 additions & 0 deletions clervers/http1s/server/certs/cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
-----BEGIN CERTIFICATE-----
MIIDazCCAlOgAwIBAgIULjhok7bMSNcfH6Iyf4y0OPclIDcwDQYJKoZIhvcNAQEL
BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yMjAyMjgxMjA4MTlaFw0yMzAy
MjgxMjA4MTlaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw
HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQCqXkApH3U29xdOhwrWUDODFyY3M+xfzAgoYD/ZixpM
Sr4y1P+B9x4I9yI1KIUgrwcypn3Igpz0f/YltG+amX3TTtmkJuDcA54QDiQEEUXj
ZlhKxt2TnhDXGoI2yQx1weKzjfbZhug8TpnFrpu446imOqiA09BTOhiC8Fe+ajQx
GmPndBk09QtEG1gDCo4/0ckLdNYjBExAzbRy/LjuokDE7KlJ5ocRLcI9VdGiJ9iP
+opDuKuTJynwoK6hkCK0hQFZSXXerg8kkWE7RnV8U5ZqTQ6xvThwCslCoGI5vpVK
3iGSOjzHDPyRSXJhTDadFcJD+afURcnahR5Rg5l/UJzRAgMBAAGjUzBRMB0GA1Ud
DgQWBBRMZePjcX4WEpDdvJgYJR7fjSsr1TAfBgNVHSMEGDAWgBRMZePjcX4WEpDd
vJgYJR7fjSsr1TAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCJ
IKSyEMtmLILLAK6PQ0EQIwUYmVCpU/FlesMg9vew8WEfxKEzK0m1qrleBfh46Qtm
TUHcEFovVtrMEJ8j4ythQtOcaQHHp7rW8QSexpUrjCZdP64Oo6BD1jI5Cj+w7h0h
HSsNo7igWNXtOri+DGKX+A9u8OfvDPddfc/EGawB1Knt3Um/hh8EM66KUFXco1LE
oSS7hVWnQC7YEuGH9N+fCApdkzn1UvHE9nmgn9jSCcf3Q+A7t7UYnW5x22hX7FMx
cGcq82PhjLFfg8L1pprG4irvNjs6MJUWRdNiN0CyariWSvpvAxtEBtIeXnhqj33b
nWcsrhu+uVbkholAbrGy
-----END CERTIFICATE-----
28 changes: 28 additions & 0 deletions clervers/http1s/server/certs/key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCqXkApH3U29xdO
hwrWUDODFyY3M+xfzAgoYD/ZixpMSr4y1P+B9x4I9yI1KIUgrwcypn3Igpz0f/Yl
tG+amX3TTtmkJuDcA54QDiQEEUXjZlhKxt2TnhDXGoI2yQx1weKzjfbZhug8TpnF
rpu446imOqiA09BTOhiC8Fe+ajQxGmPndBk09QtEG1gDCo4/0ckLdNYjBExAzbRy
/LjuokDE7KlJ5ocRLcI9VdGiJ9iP+opDuKuTJynwoK6hkCK0hQFZSXXerg8kkWE7
RnV8U5ZqTQ6xvThwCslCoGI5vpVK3iGSOjzHDPyRSXJhTDadFcJD+afURcnahR5R
g5l/UJzRAgMBAAECggEBAIPbrKbnTQ48kZJanH2g1y2XpiFFk6XVQV8Wl3Rk3/a6
RpkLF7JcM6fWtmgUM21Haje+ek3NIXNu8nDeRR6Pu73nIjWVTaWbOyPL/f4T7FaC
6MT/Q5Ez3m7NeoiydG1ToYU81Bgp/OZoI0XHzYh80xPNBIuo5Gz14vC82fxrMHfr
ZINH5A0E2QYJ1gyMlhbp6hLigY6NptfAELoVvoctjoYAgozEjEAAQjOG1s4Cocdk
zkq1uJFTVhKT+IED9/HKzPWlBNCdPvDAbehkcsEJb7A4DeKF+1eVNL354yUtVlr0
0yf1OeTxtdwp7eFf0j/AxdJ0XXtmql+kj2PTS0MJmAECgYEA18ZSemR3Pnu7I83Q
GvmXMWQWs7B5gn8AUPZh+Yqhvi5yIqzm+za9eEXDb+M0hp5wmWtKs5/7qx89Dt+0
3g1BFJyRyduvkJGV6AnSJkOimcApM/9oVEKBgBtbTES+eCvKiFUzK+o9LGuYxN1t
Ag4F11oKm1ZSfZRpQeOAGak8HoECgYEAyiDwAF5k2OVpeZEybBwuoD/3a6EBAzcg
M+hgTM77tj8MhfNh7YKl8A9/4LWhp8NOIAcEvzNxtmqUxYJP6Pm4Q85d9CpuZOev
QUnKDXOHT2B9fSRihNoZ6VmV4gXa5POdok8ZW2VlbtdgaOY8Gkf5i9y0YKRjQx30
f8osgYZ79lECgYEAx6KjDsBDH1llBLRYNYz1WOosouXFFnqgdUfvz+x2xzm7ud9U
+dpkpJGPR8bkAyU2Mov1GooLVADcAhXyBnwm2YYe0K9kGRLJqlzjxSlQmIYU2RoW
kdbScA9fggocW5zQjyCc7qWTIbUPLB1dzMfimaOiKqRMQAn+9Moi7BsLF4ECgYEA
iQ1eTpGyhZLAOsqlysItJ0FYLWVE/34gWrHkog/ygrcrcaP+MYJVq3mG9sGRM+Rs
k7DOmipynwKTj3x1XH3+YBOMhyNCKS8jGPzEgOxlwf+l9vV1y6jqytuQkmnv6y/4
IXbKtbsB1O86ksYR2KwW26uxrpmoKHkmMIPQO58JbJECgYBQ0eDn/253h6VLkTBn
3djuA1Ghey1Q7zSySViXYYK9y+SR1kT44o6LBpKVss0KL0SudYiVdfv+pLNXyk4v
5kPtXyIM1Dpcb3mMh1um47R3UOmM+R3f0ekUsBxkqkBP2LQeVkjCmDXY7m46fthT
Fh5u/vW4J72AJIVcFCsfmn/jwA==
-----END PRIVATE KEY-----
66 changes: 66 additions & 0 deletions clervers/http1s/server/https_server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#!/usr/bin/env python
import os.path
from http.server import HTTPServer, BaseHTTPRequestHandler

import ssl
import contextlib
import threading
import json
import sys
import signal

CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
CERTS_DIR = os.path.join(CURRENT_DIR, "certs")
KEY_PEM = os.path.join(CERTS_DIR, "key.pem")
CERT_PEM = os.path.join(CERTS_DIR, "cert.pem")


class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):

def do_POST(self):
content_len = int(self.headers.get('content-length'))
post_body = self.rfile.read(content_len)
try:
json.loads(post_body)
except Exception:
self.send_response(400)
self.end_headers()
self.wfile.write(json.dumps({
"error": "request body is not json",
"original body": post_body
}).encode())
return

self.send_response(200)
self.send_header('Content-type', 'application/json')
self.send_header('Content-length', str(content_len))

self.end_headers()
self.wfile.write(post_body)


@contextlib.contextmanager
def tls_server(host, port):
httpd = HTTPServer((host, port), SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, keyfile=KEY_PEM, certfile=CERT_PEM, server_side=True)
thread = threading.Thread(target=httpd.serve_forever, daemon=True)
thread.start()
yield
httpd.server_close()
thread.join(timeout=5)


def signal_handler(sig, frame):
print('You pressed Ctrl+C!')
sys.exit(0)


if __name__ == "__main__":
if len(sys.argv) != 2:
print(f"{sys.argv[0]} <port>")
sys.exit(1)
with tls_server("0.0.0.0", int(sys.argv[1])):
print(f"TLS server (PID {os.getpid()}) is listening on 0.0.0.0:{sys.argv[1]}")
signal.signal(signal.SIGINT, signal_handler)
print('Press Ctrl+C')
signal.pause()
9 changes: 9 additions & 0 deletions clervers/http2/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## Run server
```bash
sudo go build -o /tmp/grpc_server server/main.go && /tmp/grpc_server
```

## Run client
```bash
sudo go build -o ./tmp/grpc_client client/main.go && ./tmp/grpc_client --count 1
```
Loading