Skip to content

Commit dfe5e92

Browse files
committed
init
1 parent 8b10e95 commit dfe5e92

44 files changed

Lines changed: 3045 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/pipeline-ci.yml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
name: SNET-CI
2+
3+
on:
4+
push:
5+
branches: [master, release/**]
6+
pull_request:
7+
branches: [master, release/**]
8+
9+
env:
10+
BUILD_TYPE: Release
11+
12+
jobs:
13+
run-build:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@v4
17+
with:
18+
ref: ${{ inputs.branch }}
19+
20+
- name: install gcc
21+
run: |
22+
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
23+
sudo apt update
24+
sudo apt install -y gcc-11 g++-11 gcc-12 g++-12 gcc-13 g++-13
25+
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 1
26+
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 1
27+
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 1
28+
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 1
29+
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 1
30+
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 1
31+
32+
- name: check compiler versions
33+
run: |
34+
g++-11 --version
35+
g++-12 --version
36+
g++-13 --version
37+
38+
- name: build with gcc 11
39+
run: |
40+
sudo update-alternatives --set gcc /usr/bin/gcc-11
41+
sudo update-alternatives --set g++ /usr/bin/g++-11
42+
./tcpdump_demo/build.sh
43+
make -j BUILD_TYPE=${BUILD_TYPE}
44+
ldd lib/*
45+
ldd bin/*
46+
47+
- name: build with gcc 12
48+
run: |
49+
sudo update-alternatives --set gcc /usr/bin/gcc-12
50+
sudo update-alternatives --set g++ /usr/bin/g++-12
51+
./tcpdump_demo/build.sh
52+
make -j BUILD_TYPE=${BUILD_TYPE}
53+
ldd lib/*
54+
ldd bin/*
55+
56+
- name: build with gcc 13
57+
run: |
58+
sudo update-alternatives --set gcc /usr/bin/gcc-13
59+
sudo update-alternatives --set g++ /usr/bin/g++-13
60+
./tcpdump_demo/build.sh
61+
make -j BUILD_TYPE=${BUILD_TYPE}
62+
ldd lib/*
63+
ldd bin/*

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.vscode
2+
build
3+
debug
4+
lib
5+
bin

.travis.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
language: cpp
2+
dist: jammy
3+
script:
4+
- make

Makefile

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
$(shell if [ -e lib ]; then rm -rf lib; fi; mkdir lib)
2+
$(shell if [ -e bin ]; then rm -rf bin; fi; mkdir bin)
3+
CXX = g++
4+
CXXFLAGS = -std=c++20 -Wall
5+
LDFLAGS = -Isrc -Llib -lsnet -lpthread -Wl,-rpath=lib
6+
BUILD_TYPE=Release
7+
8+
ifeq ($(BUILD_TYPE), Release)
9+
CXXFLAGS += -O2 -DNDEBUG
10+
else
11+
CXXFLAGS += -O0 -g
12+
endif
13+
14+
all: libsnet.so \
15+
test_epoll_connection \
16+
test_epoll_ping_pong \
17+
test_epoll_timer \
18+
test_poll_connection \
19+
test_poll_ping_pong \
20+
test_poll_timer \
21+
test_select_connection \
22+
test_select_ping_pong \
23+
test_select_timer \
24+
test_tcp_connection \
25+
test_tcp_ping_pong \
26+
test_udp_recv \
27+
test_tcp_fork \
28+
29+
libsnet.so: src/net/*.cpp
30+
$(CXX) $(CXXFLAGS) -shared -fpic -Isrc src/net/*.cpp -o lib/libsnet.so
31+
32+
test_epoll_connection: test/test_epoll_connection.cpp libsnet.so
33+
$(CXX) $(CXXFLAGS) test/test_epoll_connection.cpp $(LDFLAGS) -o bin/test_epoll_connection
34+
35+
test_epoll_ping_pong: test/test_epoll_ping_pong.cpp libsnet.so
36+
$(CXX) $(CXXFLAGS) test/test_epoll_ping_pong.cpp $(LDFLAGS) -o bin/test_epoll_ping_pong
37+
38+
test_epoll_timer: test/test_epoll_timer.cpp libsnet.so
39+
$(CXX) $(CXXFLAGS) test/test_epoll_timer.cpp $(LDFLAGS) -o bin/test_epoll_timer
40+
41+
test_poll_connection: test/test_poll_connection.cpp libsnet.so
42+
$(CXX) $(CXXFLAGS) test/test_poll_connection.cpp $(LDFLAGS) -o bin/test_poll_connection
43+
44+
test_poll_ping_pong: test/test_poll_ping_pong.cpp libsnet.so
45+
$(CXX) $(CXXFLAGS) test/test_poll_ping_pong.cpp $(LDFLAGS) -o bin/test_poll_ping_pong
46+
47+
test_poll_timer: test/test_poll_timer.cpp libsnet.so
48+
$(CXX) $(CXXFLAGS) test/test_poll_timer.cpp $(LDFLAGS) -o bin/test_poll_timer
49+
50+
test_select_connection: test/test_select_connection.cpp libsnet.so
51+
$(CXX) $(CXXFLAGS) test/test_select_connection.cpp $(LDFLAGS) -o bin/test_select_connection
52+
53+
test_select_ping_pong: test/test_select_ping_pong.cpp libsnet.so
54+
$(CXX) $(CXXFLAGS) test/test_select_ping_pong.cpp $(LDFLAGS) -o bin/test_select_ping_pong
55+
56+
test_select_timer: test/test_select_timer.cpp libsnet.so
57+
$(CXX) $(CXXFLAGS) test/test_select_timer.cpp $(LDFLAGS) -o bin/test_select_timer
58+
59+
test_tcp_connection: test/test_tcp_connection.cpp libsnet.so
60+
$(CXX) $(CXXFLAGS) test/test_tcp_connection.cpp $(LDFLAGS) -o bin/test_tcp_connection
61+
62+
test_tcp_ping_pong: test/test_tcp_ping_pong.cpp libsnet.so
63+
$(CXX) $(CXXFLAGS) test/test_tcp_ping_pong.cpp $(LDFLAGS) -o bin/test_tcp_ping_pong
64+
65+
test_udp_recv: test/test_udp_recv.cpp libsnet.so
66+
$(CXX) $(CXXFLAGS) test/test_udp_recv.cpp $(LDFLAGS) -o bin/test_udp_recv
67+
68+
test_tcp_fork: test/test_tcp_fork.cpp libsnet.so
69+
$(CXX) $(CXXFLAGS) test/test_tcp_fork.cpp $(LDFLAGS) -o bin/test_tcp_fork
70+
71+
clean:
72+
rm -rf lib
73+
rm -rf bin

README.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
![Supported Platforms](https://img.shields.io/badge/platform-Linux-red.svg)
2+
[![SNET-CI](https://github.com/downdemo/SNET/actions/workflows/pipeline-ci.yml/badge.svg)](https://github.com/downdemo/SNET/actions/workflows/pipeline-ci.yml)
3+
[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/downdemo/SNET/blob/master/LICENSE)
4+
5+
## Documentation
6+
7+
* [tcpdump](docs/tcpdump.md)
8+
* [Network I/O mode](docs/network_io_mode.md)
9+
* [Socket API](docs/socket_api.md)
10+
* [I/O multiplexing API](docs/io_multiplexing_api.md)
11+
12+
## Build
13+
14+
```sh
15+
make
16+
```
17+
18+
## [RFC](https://www.rfc-editor.org/)
19+
20+
* Ethernet: [RFC 894, A Standard for the Transmission of IP Datagrams over Ethernet Networks](https://www.rfc-editor.org/rfc/rfc894.html)
21+
* ARP: [RFC 826, An Ethernet Address Resolution Protocol](https://www.rfc-editor.org/rfc/rfc826.html)
22+
* PPP: [RFC 1661, The Point-to-Point Protocol (PPP)](https://www.rfc-editor.org/rfc/rfc1661.html)
23+
* PPPoE: [RFC 2516, A Method for Transmitting PPP Over Ethernet (PPPoE)](https://www.rfc-editor.org/rfc/rfc2516.html)
24+
* ICMPv4: [RFC 792, INTERNET CONTROL MESSAGE PROTOCOL](https://www.rfc-editor.org/rfc/rfc792.html)
25+
* ICMPv6: [RFC 2463, Internet Control Message Protocol (ICMPv6)](https://www.rfc-editor.org/rfc/rfc2463.html)
26+
* IPv4: [RFC 791, INTERNET PROTOCOL](https://www.rfc-editor.org/rfc/rfc791.html)
27+
* IPv6: [RFC 8200, Internet Protocol, Version 6 (IPv6) Specification](https://www.rfc-editor.org/rfc/rfc8200.html)
28+
* IANA IPv4 Address Space Registry: [RFC 1466, Guidelines for Management of IP Address Space](https://www.rfc-editor.org/rfc/rfc1466.html)
29+
* Private IPv4 addresses: [RFC 1918, Address Allocation for Private Internets](https://www.rfc-editor.org/rfc/rfc1918.html)
30+
* Private IPv6 addresses: [RFC 4193, Unique Local IPv6 Unicast Addresses](https://www.rfc-editor.org/rfc/rfc4193.html)
31+
* NAT: [RFC 2663, IP Network Address Translator (NAT) Terminology and Considerations](https://www.rfc-editor.org/rfc/rfc2663.html)
32+
* IGMPv3: [RFC 3376, Internet Group Management Protocol, Version 3](https://www.rfc-editor.org/rfc/rfc3376.html)
33+
* IPSec: [RFC 2401, Security Architecture for the Internet Protocol](https://www.rfc-editor.org/rfc/rfc2401.html)
34+
* PPTP: [RFC 2637, Point-to-Point Tunneling Protocol (PPTP)](https://www.rfc-editor.org/rfc/rfc2637.html)
35+
* L2TP: [RFC 2661, Layer Two Tunneling Protocol "L2TP"](https://www.rfc-editor.org/rfc/rfc2661.html)
36+
* TCP: [RFC 793, TRANSMISSION CONTROL PROTOCOL](https://www.rfc-editor.org/rfc/rfc793.html)
37+
* TCP Extensions: [RFC 1323, TCP Extensions for High Performance](https://www.rfc-editor.org/rfc/rfc1323.html)
38+
* UDP: [RFC 768, User Datagram Protocol](https://www.rfc-editor.org/rfc/rfc768.html)
39+
* SOCKS5: [RFC 1928, SOCKS Protocol Version 5](https://www.rfc-editor.org/rfc/rfc1928.html)
40+
* PNG: [RFC 2083, PNG (Portable Network Graphics) Specification Version 1.0](https://www.rfc-editor.org/rfc/rfc2083.html)
41+
* JSON: [RFC 7159, The JavaScript Object Notation (JSON) Data Interchange Format](https://www.rfc-editor.org/rfc/rfc7159.html)
42+
* SIP: [RFC 3261, SIP: Session Initiation Protocol](https://www.rfc-editor.org/rfc/rfc3261.html)
43+
* RTP: [RFC 3550, RTP: A Transport Protocol for Real-Time Applications](https://www.rfc-editor.org/rfc/rfc3550.html)
44+
* SSL: [RFC 6101, The Secure Sockets Layer (SSL) Protocol Version 3.0](https://www.rfc-editor.org/rfc/rfc6101.html)
45+
* TLS 1.3: [RFC 8446, The Transport Layer Security (TLS) Protocol Version 1.3](https://www.rfc-editor.org/rfc/rfc8446.html)
46+
* X.509: [RFC 8017, Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile](https://www.rfc-editor.org/rfc/rfc5280.html)
47+
* PKCS #1: [RFC 8017, PKCS #1: RSA Cryptography Specifications Version 2.2](https://www.rfc-editor.org/rfc/rfc8017.html)
48+
* PKCS #8: [RFC 5208, Public-Key Cryptography Standards (PKCS) #8: Private-Key Information Syntax Specification Version 1.2](https://www.rfc-editor.org/rfc/rfc5208.html)
49+
* PKCS #12: [RFC 7972, PKCS #12: Personal Information Exchange Syntax v1.1](https://www.rfc-editor.org/rfc/rfc7292.html)
50+
* HTTP/1.1: [RFC 7230, Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing](https://www.rfc-editor.org/rfc/rfc7230.html)
51+
* HTTP/2: [RFC 7540, Hypertext Transfer Protocol Version 2 (HTTP/2)](https://www.rfc-editor.org/rfc/rfc7540.html)
52+
* HTTP/3: [RFC 9114, HTTP/3](https://www.rfc-editor.org/rfc/rfc9114.html)
53+
* QUIC: [RFC 9000, QUIC: A UDP-Based Multiplexed and Secure Transport](https://www.rfc-editor.org/rfc/rfc9000.html)
54+
* HTTPS: [RFC 2818, HTTP Over TLS](https://www.rfc-editor.org/rfc/rfc2818.html)
55+
* WebSocket: [RFC 6455, The WebSocket Protocol](https://www.rfc-editor.org/rfc/rfc6455.html)
56+
* TELNET: [RFC 854, TELNET PROTOCOL SPECIFICATION](https://www.rfc-editor.org/rfc/rfc854.html)
57+
* SSH: [RFC 4254, The Secure Shell (SSH) Connection Protocol](https://www.rfc-editor.org/rfc/rfc4254.html)
58+
* DNS: [RFC 1034, DOMAIN NAMES](https://www.rfc-editor.org/rfc/rfc1034.html)
59+
* DHCP: [RFC 2131, Dynamic Host Configuration Protocol](https://www.rfc-editor.org/rfc/rfc2131.html)
60+
* NTP: [RFC 1305, Network Time Protocol (Version 3)](https://www.rfc-editor.org/rfc/rfc1305.html)
61+
* TZif: [RFC 8536, The Time Zone Information Format (TZif)](https://www.rfc-editor.org/rfc/rfc8536.html)
62+
* FTP: [RFC 959, FILE TRANSFER PROTOCOL (FTP)](https://www.rfc-editor.org/rfc/rfc959.html)
63+
* NFSv4.2: [RFC 7862, Network File System (NFS) Version 4 Minor Version 2 Protocol](https://www.rfc-editor.org/rfc/rfc7862.html)
64+
* NNTP: [RFC 977, Network News Transfer Protocol](https://www.rfc-editor.org/rfc/rfc977.html)
65+
* POP3: [RFC 1939, Post Office Protocol - Version 3](https://www.rfc-editor.org/rfc/rfc1939.html)
66+
* IMAP4: [RFC 1730, INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4](https://www.rfc-editor.org/rfc/rfc1730.html)
67+
* SMTP: [RFC 2821, Simple Mail Transfer Protocol](https://www.rfc-editor.org/rfc/rfc2821.html)

docs/_config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
theme: jekyll-theme-hacker

docs/index.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
![Supported Platforms](https://img.shields.io/badge/platform-Linux-red.svg)
2+
[![SNET-CI](https://github.com/downdemo/SNET/actions/workflows/pipeline-ci.yml/badge.svg)](https://github.com/downdemo/SNET/actions/workflows/pipeline-ci.yml)
3+
[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/downdemo/SNET/blob/master/LICENSE)
4+
5+
## Documentation
6+
7+
* [tcpdump](tcpdump.html)
8+
* [Network I/O mode](network_io_mode.html)
9+
* [Socket API](socket_api.html)
10+
* [I/O multiplexing API](io_multiplexing_api.html)
11+
12+
## Build
13+
14+
```sh
15+
make
16+
```
17+
18+
## [RFC](https://www.rfc-editor.org/)
19+
20+
* Ethernet: [RFC 894, A Standard for the Transmission of IP Datagrams over Ethernet Networks](https://www.rfc-editor.org/rfc/rfc894.html)
21+
* ARP: [RFC 826, An Ethernet Address Resolution Protocol](https://www.rfc-editor.org/rfc/rfc826.html)
22+
* PPP: [RFC 1661, The Point-to-Point Protocol (PPP)](https://www.rfc-editor.org/rfc/rfc1661.html)
23+
* PPPoE: [RFC 2516, A Method for Transmitting PPP Over Ethernet (PPPoE)](https://www.rfc-editor.org/rfc/rfc2516.html)
24+
* ICMPv4: [RFC 792, INTERNET CONTROL MESSAGE PROTOCOL](https://www.rfc-editor.org/rfc/rfc792.html)
25+
* ICMPv6: [RFC 2463, Internet Control Message Protocol (ICMPv6)](https://www.rfc-editor.org/rfc/rfc2463.html)
26+
* IPv4: [RFC 791, INTERNET PROTOCOL](https://www.rfc-editor.org/rfc/rfc791.html)
27+
* IPv6: [RFC 8200, Internet Protocol, Version 6 (IPv6) Specification](https://www.rfc-editor.org/rfc/rfc8200.html)
28+
* IANA IPv4 Address Space Registry: [RFC 1466, Guidelines for Management of IP Address Space](https://www.rfc-editor.org/rfc/rfc1466.html)
29+
* Private IPv4 addresses: [RFC 1918, Address Allocation for Private Internets](https://www.rfc-editor.org/rfc/rfc1918.html)
30+
* Private IPv6 addresses: [RFC 4193, Unique Local IPv6 Unicast Addresses](https://www.rfc-editor.org/rfc/rfc4193.html)
31+
* NAT: [RFC 2663, IP Network Address Translator (NAT) Terminology and Considerations](https://www.rfc-editor.org/rfc/rfc2663.html)
32+
* IGMPv3: [RFC 3376, Internet Group Management Protocol, Version 3](https://www.rfc-editor.org/rfc/rfc3376.html)
33+
* IPSec: [RFC 2401, Security Architecture for the Internet Protocol](https://www.rfc-editor.org/rfc/rfc2401.html)
34+
* PPTP: [RFC 2637, Point-to-Point Tunneling Protocol (PPTP)](https://www.rfc-editor.org/rfc/rfc2637.html)
35+
* L2TP: [RFC 2661, Layer Two Tunneling Protocol "L2TP"](https://www.rfc-editor.org/rfc/rfc2661.html)
36+
* TCP: [RFC 793, TRANSMISSION CONTROL PROTOCOL](https://www.rfc-editor.org/rfc/rfc793.html)
37+
* TCP Extensions: [RFC 1323, TCP Extensions for High Performance](https://www.rfc-editor.org/rfc/rfc1323.html)
38+
* UDP: [RFC 768, User Datagram Protocol](https://www.rfc-editor.org/rfc/rfc768.html)
39+
* SOCKS5: [RFC 1928, SOCKS Protocol Version 5](https://www.rfc-editor.org/rfc/rfc1928.html)
40+
* PNG: [RFC 2083, PNG (Portable Network Graphics) Specification Version 1.0](https://www.rfc-editor.org/rfc/rfc2083.html)
41+
* JSON: [RFC 7159, The JavaScript Object Notation (JSON) Data Interchange Format](https://www.rfc-editor.org/rfc/rfc7159.html)
42+
* SIP: [RFC 3261, SIP: Session Initiation Protocol](https://www.rfc-editor.org/rfc/rfc3261.html)
43+
* RTP: [RFC 3550, RTP: A Transport Protocol for Real-Time Applications](https://www.rfc-editor.org/rfc/rfc3550.html)
44+
* SSL: [RFC 6101, The Secure Sockets Layer (SSL) Protocol Version 3.0](https://www.rfc-editor.org/rfc/rfc6101.html)
45+
* TLS 1.3: [RFC 8446, The Transport Layer Security (TLS) Protocol Version 1.3](https://www.rfc-editor.org/rfc/rfc8446.html)
46+
* X.509: [RFC 8017, Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile](https://www.rfc-editor.org/rfc/rfc5280.html)
47+
* PKCS #1: [RFC 8017, PKCS #1: RSA Cryptography Specifications Version 2.2](https://www.rfc-editor.org/rfc/rfc8017.html)
48+
* PKCS #8: [RFC 5208, Public-Key Cryptography Standards (PKCS) #8: Private-Key Information Syntax Specification Version 1.2](https://www.rfc-editor.org/rfc/rfc5208.html)
49+
* PKCS #12: [RFC 7972, PKCS #12: Personal Information Exchange Syntax v1.1](https://www.rfc-editor.org/rfc/rfc7292.html)
50+
* HTTP/1.1: [RFC 7230, Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing](https://www.rfc-editor.org/rfc/rfc7230.html)
51+
* HTTP/2: [RFC 7540, Hypertext Transfer Protocol Version 2 (HTTP/2)](https://www.rfc-editor.org/rfc/rfc7540.html)
52+
* HTTP/3: [RFC 9114, HTTP/3](https://www.rfc-editor.org/rfc/rfc9114.html)
53+
* QUIC: [RFC 9000, QUIC: A UDP-Based Multiplexed and Secure Transport](https://www.rfc-editor.org/rfc/rfc9000.html)
54+
* HTTPS: [RFC 2818, HTTP Over TLS](https://www.rfc-editor.org/rfc/rfc2818.html)
55+
* WebSocket: [RFC 6455, The WebSocket Protocol](https://www.rfc-editor.org/rfc/rfc6455.html)
56+
* TELNET: [RFC 854, TELNET PROTOCOL SPECIFICATION](https://www.rfc-editor.org/rfc/rfc854.html)
57+
* SSH: [RFC 4254, The Secure Shell (SSH) Connection Protocol](https://www.rfc-editor.org/rfc/rfc4254.html)
58+
* DNS: [RFC 1034, DOMAIN NAMES](https://www.rfc-editor.org/rfc/rfc1034.html)
59+
* DHCP: [RFC 2131, Dynamic Host Configuration Protocol](https://www.rfc-editor.org/rfc/rfc2131.html)
60+
* NTP: [RFC 1305, Network Time Protocol (Version 3)](https://www.rfc-editor.org/rfc/rfc1305.html)
61+
* TZif: [RFC 8536, The Time Zone Information Format (TZif)](https://www.rfc-editor.org/rfc/rfc8536.html)
62+
* FTP: [RFC 959, FILE TRANSFER PROTOCOL (FTP)](https://www.rfc-editor.org/rfc/rfc959.html)
63+
* NFSv4.2: [RFC 7862, Network File System (NFS) Version 4 Minor Version 2 Protocol](https://www.rfc-editor.org/rfc/rfc7862.html)
64+
* NNTP: [RFC 977, Network News Transfer Protocol](https://www.rfc-editor.org/rfc/rfc977.html)
65+
* POP3: [RFC 1939, Post Office Protocol - Version 3](https://www.rfc-editor.org/rfc/rfc1939.html)
66+
* IMAP4: [RFC 1730, INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4](https://www.rfc-editor.org/rfc/rfc1730.html)
67+
* SMTP: [RFC 2821, Simple Mail Transfer Protocol](https://www.rfc-editor.org/rfc/rfc2821.html)

0 commit comments

Comments
 (0)