mirror of
https://github.com/nghttp2/nghttp2.git
synced 2025-12-08 02:58:53 +08:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
53dfaad925 | ||
|
|
2f2da110a1 | ||
|
|
8a14435aa8 | ||
|
|
dbaa59908e | ||
|
|
ca41f2faab | ||
|
|
daae20d4a5 | ||
|
|
6d9667dc74 |
@@ -2,35 +2,15 @@
|
|||||||
Language: Cpp
|
Language: Cpp
|
||||||
AccessModifierOffset: -2
|
AccessModifierOffset: -2
|
||||||
AlignAfterOpenBracket: Align
|
AlignAfterOpenBracket: Align
|
||||||
AlignArrayOfStructures: None
|
AlignConsecutiveMacros: None
|
||||||
AlignConsecutiveAssignments:
|
AlignConsecutiveAssignments: None
|
||||||
Enabled: false
|
AlignConsecutiveBitFields: None
|
||||||
AcrossEmptyLines: false
|
AlignConsecutiveDeclarations: None
|
||||||
AcrossComments: false
|
|
||||||
AlignCompound: false
|
|
||||||
PadOperators: true
|
|
||||||
AlignConsecutiveBitFields:
|
|
||||||
Enabled: false
|
|
||||||
AcrossEmptyLines: false
|
|
||||||
AcrossComments: false
|
|
||||||
AlignCompound: false
|
|
||||||
PadOperators: true
|
|
||||||
AlignConsecutiveDeclarations:
|
|
||||||
Enabled: false
|
|
||||||
AcrossEmptyLines: false
|
|
||||||
AcrossComments: false
|
|
||||||
AlignCompound: false
|
|
||||||
PadOperators: true
|
|
||||||
AlignConsecutiveMacros:
|
|
||||||
Enabled: false
|
|
||||||
AcrossEmptyLines: false
|
|
||||||
AcrossComments: false
|
|
||||||
AlignCompound: false
|
|
||||||
PadOperators: true
|
|
||||||
AlignEscapedNewlines: Right
|
AlignEscapedNewlines: Right
|
||||||
AlignOperands: Align
|
AlignOperands: Align
|
||||||
AlignTrailingComments: true
|
AlignTrailingComments: true
|
||||||
AllowAllArgumentsOnNextLine: true
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllConstructorInitializersOnNextLine: true
|
||||||
AllowAllParametersOfDeclarationOnNextLine: true
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
AllowShortEnumsOnASingleLine: true
|
AllowShortEnumsOnASingleLine: true
|
||||||
AllowShortBlocksOnASingleLine: Never
|
AllowShortBlocksOnASingleLine: Never
|
||||||
@@ -67,7 +47,7 @@ BraceWrapping:
|
|||||||
SplitEmptyRecord: true
|
SplitEmptyRecord: true
|
||||||
SplitEmptyNamespace: true
|
SplitEmptyNamespace: true
|
||||||
BreakBeforeBinaryOperators: None
|
BreakBeforeBinaryOperators: None
|
||||||
BreakBeforeConceptDeclarations: Always
|
BreakBeforeConceptDeclarations: true
|
||||||
BreakBeforeBraces: Attach
|
BreakBeforeBraces: Attach
|
||||||
BreakBeforeInheritanceComma: false
|
BreakBeforeInheritanceComma: false
|
||||||
BreakInheritanceList: BeforeColon
|
BreakInheritanceList: BeforeColon
|
||||||
@@ -78,28 +58,23 @@ BreakAfterJavaFieldAnnotations: false
|
|||||||
BreakStringLiterals: true
|
BreakStringLiterals: true
|
||||||
ColumnLimit: 80
|
ColumnLimit: 80
|
||||||
CommentPragmas: '^ IWYU pragma:'
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
QualifierAlignment: Leave
|
|
||||||
CompactNamespaces: false
|
CompactNamespaces: false
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
ConstructorInitializerIndentWidth: 4
|
ConstructorInitializerIndentWidth: 4
|
||||||
ContinuationIndentWidth: 4
|
ContinuationIndentWidth: 4
|
||||||
Cpp11BracedListStyle: true
|
Cpp11BracedListStyle: true
|
||||||
DeriveLineEnding: true
|
DeriveLineEnding: true
|
||||||
DerivePointerAlignment: false
|
DerivePointerAlignment: false
|
||||||
DisableFormat: false
|
DisableFormat: false
|
||||||
EmptyLineAfterAccessModifier: Never
|
|
||||||
EmptyLineBeforeAccessModifier: LogicalBlock
|
EmptyLineBeforeAccessModifier: LogicalBlock
|
||||||
ExperimentalAutoDetectBinPacking: false
|
ExperimentalAutoDetectBinPacking: false
|
||||||
PackConstructorInitializers: NextLine
|
|
||||||
BasedOnStyle: ''
|
|
||||||
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
|
||||||
AllowAllConstructorInitializersOnNextLine: true
|
|
||||||
FixNamespaceComments: true
|
FixNamespaceComments: true
|
||||||
ForEachMacros:
|
ForEachMacros:
|
||||||
- foreach
|
- foreach
|
||||||
- Q_FOREACH
|
- Q_FOREACH
|
||||||
- BOOST_FOREACH
|
- BOOST_FOREACH
|
||||||
IfMacros:
|
StatementAttributeLikeMacros:
|
||||||
- KJ_IF_MAYBE
|
- Q_EMIT
|
||||||
IncludeBlocks: Preserve
|
IncludeBlocks: Preserve
|
||||||
IncludeCategories:
|
IncludeCategories:
|
||||||
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
||||||
@@ -116,21 +91,18 @@ IncludeCategories:
|
|||||||
CaseSensitive: false
|
CaseSensitive: false
|
||||||
IncludeIsMainRegex: '$'
|
IncludeIsMainRegex: '$'
|
||||||
IncludeIsMainSourceRegex: ''
|
IncludeIsMainSourceRegex: ''
|
||||||
IndentAccessModifiers: false
|
|
||||||
IndentCaseLabels: false
|
IndentCaseLabels: false
|
||||||
IndentCaseBlocks: false
|
IndentCaseBlocks: false
|
||||||
IndentGotoLabels: true
|
IndentGotoLabels: true
|
||||||
IndentPPDirectives: AfterHash
|
IndentPPDirectives: AfterHash
|
||||||
IndentExternBlock: AfterExternBlock
|
IndentExternBlock: AfterExternBlock
|
||||||
IndentRequiresClause: false
|
IndentRequires: false
|
||||||
IndentWidth: 2
|
IndentWidth: 2
|
||||||
IndentWrappedFunctionNames: false
|
IndentWrappedFunctionNames: false
|
||||||
InsertBraces: false
|
|
||||||
InsertTrailingCommas: None
|
InsertTrailingCommas: None
|
||||||
JavaScriptQuotes: Leave
|
JavaScriptQuotes: Leave
|
||||||
JavaScriptWrapImports: true
|
JavaScriptWrapImports: true
|
||||||
KeepEmptyLinesAtTheStartOfBlocks: true
|
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||||
LambdaBodyIndentation: Signature
|
|
||||||
MacroBlockBegin: ''
|
MacroBlockBegin: ''
|
||||||
MacroBlockEnd: ''
|
MacroBlockEnd: ''
|
||||||
MaxEmptyLinesToKeep: 1
|
MaxEmptyLinesToKeep: 1
|
||||||
@@ -144,21 +116,14 @@ PenaltyBreakAssignment: 2
|
|||||||
PenaltyBreakBeforeFirstCallParameter: 19
|
PenaltyBreakBeforeFirstCallParameter: 19
|
||||||
PenaltyBreakComment: 300
|
PenaltyBreakComment: 300
|
||||||
PenaltyBreakFirstLessLess: 120
|
PenaltyBreakFirstLessLess: 120
|
||||||
PenaltyBreakOpenParenthesis: 0
|
|
||||||
PenaltyBreakString: 1000
|
PenaltyBreakString: 1000
|
||||||
PenaltyBreakTemplateDeclaration: 10
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
PenaltyExcessCharacter: 1000000
|
PenaltyExcessCharacter: 1000000
|
||||||
PenaltyReturnTypeOnItsOwnLine: 60
|
PenaltyReturnTypeOnItsOwnLine: 60
|
||||||
PenaltyIndentedWhitespace: 0
|
PenaltyIndentedWhitespace: 0
|
||||||
PointerAlignment: Right
|
PointerAlignment: Right
|
||||||
PPIndentWidth: -1
|
|
||||||
ReferenceAlignment: Pointer
|
|
||||||
ReflowComments: true
|
ReflowComments: true
|
||||||
RemoveBracesLLVM: false
|
SortIncludes: false
|
||||||
RequiresClausePosition: OwnLine
|
|
||||||
SeparateDefinitionBlocks: Leave
|
|
||||||
ShortNamespaceLines: 1
|
|
||||||
SortIncludes: Never
|
|
||||||
SortJavaStaticImport: Before
|
SortJavaStaticImport: Before
|
||||||
SortUsingDeclarations: true
|
SortUsingDeclarations: true
|
||||||
SpaceAfterCStyleCast: false
|
SpaceAfterCStyleCast: false
|
||||||
@@ -170,35 +135,20 @@ SpaceBeforeCpp11BracedList: false
|
|||||||
SpaceBeforeCtorInitializerColon: true
|
SpaceBeforeCtorInitializerColon: true
|
||||||
SpaceBeforeInheritanceColon: true
|
SpaceBeforeInheritanceColon: true
|
||||||
SpaceBeforeParens: ControlStatements
|
SpaceBeforeParens: ControlStatements
|
||||||
SpaceBeforeParensOptions:
|
|
||||||
AfterControlStatements: true
|
|
||||||
AfterForeachMacros: true
|
|
||||||
AfterFunctionDefinitionName: false
|
|
||||||
AfterFunctionDeclarationName: false
|
|
||||||
AfterIfMacros: true
|
|
||||||
AfterOverloadedOperator: false
|
|
||||||
AfterRequiresInClause: false
|
|
||||||
AfterRequiresInExpression: false
|
|
||||||
BeforeNonEmptyParentheses: false
|
|
||||||
SpaceAroundPointerQualifiers: Default
|
SpaceAroundPointerQualifiers: Default
|
||||||
SpaceBeforeRangeBasedForLoopColon: true
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
SpaceInEmptyBlock: false
|
SpaceInEmptyBlock: false
|
||||||
SpaceInEmptyParentheses: false
|
SpaceInEmptyParentheses: false
|
||||||
SpacesBeforeTrailingComments: 1
|
SpacesBeforeTrailingComments: 1
|
||||||
SpacesInAngles: Never
|
SpacesInAngles: false
|
||||||
SpacesInConditionalStatement: false
|
SpacesInConditionalStatement: false
|
||||||
SpacesInContainerLiterals: true
|
SpacesInContainerLiterals: true
|
||||||
SpacesInCStyleCastParentheses: false
|
SpacesInCStyleCastParentheses: false
|
||||||
SpacesInLineCommentPrefix:
|
|
||||||
Minimum: 1
|
|
||||||
Maximum: -1
|
|
||||||
SpacesInParentheses: false
|
SpacesInParentheses: false
|
||||||
SpacesInSquareBrackets: false
|
SpacesInSquareBrackets: false
|
||||||
SpaceBeforeSquareBrackets: false
|
SpaceBeforeSquareBrackets: false
|
||||||
BitFieldColonSpacing: Both
|
BitFieldColonSpacing: Both
|
||||||
Standard: Latest
|
Standard: Latest
|
||||||
StatementAttributeLikeMacros:
|
|
||||||
- Q_EMIT
|
|
||||||
StatementMacros:
|
StatementMacros:
|
||||||
- Q_UNUSED
|
- Q_UNUSED
|
||||||
- QT_REQUIRE_VERSION
|
- QT_REQUIRE_VERSION
|
||||||
|
|||||||
6
.github/dependabot.yml
vendored
6
.github/dependabot.yml
vendored
@@ -1,6 +0,0 @@
|
|||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "weekly"
|
|
||||||
470
.github/workflows/build.yml
vendored
470
.github/workflows/build.yml
vendored
@@ -1,236 +1,32 @@
|
|||||||
name: build
|
name: build
|
||||||
|
|
||||||
on: [push, pull_request]
|
on: push
|
||||||
|
|
||||||
permissions: read-all
|
|
||||||
|
|
||||||
env:
|
|
||||||
LIBBPF_VERSION: v1.3.0
|
|
||||||
OPENSSL1_VERSION: 1_1_1w+quic
|
|
||||||
OPENSSL3_VERSION: 3.1.4+quic
|
|
||||||
BORINGSSL_VERSION: f42be90d665b6a376177648ccbb76fbbd6497c13
|
|
||||||
AWSLC_VERSION: v1.20.0
|
|
||||||
NGHTTP3_VERSION: v1.1.0
|
|
||||||
NGTCP2_VERSION: v1.2.0
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-cache:
|
build:
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-22.04, macos-12]
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Restore libbpf cache
|
|
||||||
id: cache-libbpf
|
|
||||||
uses: actions/cache@v3
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
with:
|
|
||||||
path: libbpf/build
|
|
||||||
key: ${{ runner.os }}-libbpf-${{ env.LIBBPF_VERSION }}
|
|
||||||
- name: Restore OpenSSL v1.1.1 cache
|
|
||||||
id: cache-openssl1
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: openssl1/build
|
|
||||||
key: ${{ runner.os }}-openssl-${{ env.OPENSSL1_VERSION }}
|
|
||||||
- name: Restore OpenSSL v3.x cache
|
|
||||||
id: cache-openssl3
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: openssl3/build
|
|
||||||
key: ${{ runner.os }}-openssl-${{ env.OPENSSL3_VERSION }}
|
|
||||||
- name: Restore BoringSSL cache
|
|
||||||
id: cache-boringssl
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
boringssl/build/crypto/libcrypto.a
|
|
||||||
boringssl/build/ssl/libssl.a
|
|
||||||
boringssl/include
|
|
||||||
key: ${{ runner.os }}-boringssl-${{ env.BORINGSSL_VERSION }}
|
|
||||||
- name: Restore aws-lc cache
|
|
||||||
id: cache-awslc
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
aws-lc/build/crypto/libcrypto.a
|
|
||||||
aws-lc/build/ssl/libssl.a
|
|
||||||
aws-lc/include
|
|
||||||
key: ${{ runner.os }}-awslc-${{ env.AWSLC_VERSION }}
|
|
||||||
- name: Restore nghttp3 cache
|
|
||||||
id: cache-nghttp3
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: nghttp3/build
|
|
||||||
key: ${{ runner.os }}-nghttp3-${{ env.NGHTTP3_VERSION }}
|
|
||||||
- name: Restore ngtcp2 + quictls/openssl v1.1.1 cache
|
|
||||||
id: cache-ngtcp2-openssl1
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: ngtcp2-openssl1/build
|
|
||||||
key: ${{ runner.os }}-ngtcp2-${{ env.NGTCP2_VERSION }}-openssl-${{ env.OPENSSL1_VERSION }}
|
|
||||||
- name: Restore ngtcp2 + quictls/openssl v3.x cache
|
|
||||||
id: cache-ngtcp2-openssl3
|
|
||||||
uses: actions/cache@v3
|
|
||||||
with:
|
|
||||||
path: ngtcp2-openssl3/build
|
|
||||||
key: ${{ runner.os }}-ngtcp2-${{ env.NGTCP2_VERSION }}-openssl-${{ env.OPENSSL3_VERSION }}
|
|
||||||
- id: settings
|
|
||||||
if: |
|
|
||||||
(steps.cache-libbpf.outputs.cache-hit != 'true' && runner.os == 'Linux') ||
|
|
||||||
steps.cache-openssl1.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-openssl3.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-boringssl.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-awslc.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-nghttp3.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-ngtcp2-openssl1.outputs.cache-hit != 'true' ||
|
|
||||||
steps.cache-ngtcp2-openssl3.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
echo 'needs-build=true' >> $GITHUB_OUTPUT
|
|
||||||
- name: Linux setup
|
|
||||||
if: runner.os == 'Linux' && steps.settings.outputs.needs-build == 'true'
|
|
||||||
run: |
|
|
||||||
sudo apt-get install \
|
|
||||||
g++-12 \
|
|
||||||
clang-15 \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
autotools-dev \
|
|
||||||
libtool \
|
|
||||||
pkg-config \
|
|
||||||
libelf-dev \
|
|
||||||
cmake \
|
|
||||||
cmake-data
|
|
||||||
- name: MacOS setup
|
|
||||||
if: runner.os == 'macOS' && steps.settings.outputs.needs-build == 'true'
|
|
||||||
run: |
|
|
||||||
brew install \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
pkg-config \
|
|
||||||
libtool
|
|
||||||
- name: Build libbpf
|
|
||||||
if: steps.cache-libbpf.outputs.cache-hit != 'true' && runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
git clone -b ${{ env.LIBBPF_VERSION }} https://github.com/libbpf/libbpf
|
|
||||||
cd libbpf
|
|
||||||
make -C src install PREFIX=$PWD/build
|
|
||||||
- name: Build quictls/openssl v1.1.1
|
|
||||||
if: steps.cache-openssl1.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --depth 1 -b OpenSSL_${{ env.OPENSSL1_VERSION }} https://github.com/quictls/openssl openssl1
|
|
||||||
cd openssl1
|
|
||||||
./config --prefix=$PWD/build
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
|
|
||||||
make install_sw
|
|
||||||
- name: Build quictls/openssl v3.x
|
|
||||||
if: steps.cache-openssl3.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --depth 1 -b openssl-${{ env.OPENSSL3_VERSION }} https://github.com/quictls/openssl openssl3
|
|
||||||
cd openssl3
|
|
||||||
./config enable-ktls --prefix=$PWD/build --libdir=$PWD/build/lib
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
|
|
||||||
make install_sw
|
|
||||||
- name: Build BoringSSL
|
|
||||||
if: steps.cache-boringssl.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone https://boringssl.googlesource.com/boringssl
|
|
||||||
cd boringssl
|
|
||||||
git checkout ${{ env.BORINGSSL_VERSION }}
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON ..
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
|
|
||||||
- name: Build aws-lc
|
|
||||||
if: steps.cache-awslc.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --depth 1 -b "${AWSLC_VERSION}" https://github.com/aws/aws-lc
|
|
||||||
cd aws-lc
|
|
||||||
cmake -B build -DDISABLE_GO=ON
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)" -C build
|
|
||||||
- name: Build nghttp3
|
|
||||||
if: steps.cache-nghttp3.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --depth 1 -b ${{ env.NGHTTP3_VERSION}} https://github.com/ngtcp2/nghttp3
|
|
||||||
cd nghttp3
|
|
||||||
autoreconf -i
|
|
||||||
./configure --prefix=$PWD/build --enable-lib-only
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)" check
|
|
||||||
make install
|
|
||||||
- name: Build ngtcp2 + quictls/openssl v1.1.1 + BoringSSL
|
|
||||||
if: steps.cache-ngtcp2-openssl1.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --depth 1 -b ${{ env.NGTCP2_VERSION }} https://github.com/ngtcp2/ngtcp2 ngtcp2-openssl1
|
|
||||||
cd ngtcp2-openssl1
|
|
||||||
autoreconf -i
|
|
||||||
./configure --prefix=$PWD/build --enable-lib-only \
|
|
||||||
PKG_CONFIG_PATH="../openssl1/build/lib/pkgconfig" \
|
|
||||||
BORINGSSL_CFLAGS="-I$PWD/../boringssl/include/" \
|
|
||||||
BORINGSSL_LIBS="-L$PWD/../boringssl/build/ssl -lssl -L$PWD/../boringssl/build/crypto -lcrypto" \
|
|
||||||
--with-boringssl
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)" check
|
|
||||||
make install
|
|
||||||
- name: Build ngtcp2 + quictls/openssl v3.x + aws-lc
|
|
||||||
if: steps.cache-ngtcp2-openssl3.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
git clone --depth 1 -b ${{ env.NGTCP2_VERSION }} https://github.com/ngtcp2/ngtcp2 ngtcp2-openssl3
|
|
||||||
cd ngtcp2-openssl3
|
|
||||||
autoreconf -i
|
|
||||||
./configure --prefix=$PWD/build --enable-lib-only \
|
|
||||||
PKG_CONFIG_PATH="../openssl3/build/lib/pkgconfig" \
|
|
||||||
BORINGSSL_CFLAGS="-I$PWD/../aws-lc/include/" \
|
|
||||||
BORINGSSL_LIBS="-L$PWD/../aws-lc/build/ssl -lssl -L$PWD/../aws-lc/build/crypto -lcrypto" \
|
|
||||||
--with-boringssl
|
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)" check
|
|
||||||
make install
|
|
||||||
|
|
||||||
build:
|
|
||||||
needs:
|
|
||||||
- build-cache
|
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-22.04, macos-12]
|
os: [ubuntu-20.04, macos-10.15]
|
||||||
compiler: [gcc, clang]
|
compiler: [gcc, clang]
|
||||||
buildtool: [autotools, cmake]
|
buildtool: [autotools, cmake]
|
||||||
http3: [http3, no-http3]
|
http3: [http3, no-http3]
|
||||||
openssl: [openssl1, openssl3, boringssl, awslc]
|
openssl: [openssl1, openssl3]
|
||||||
exclude:
|
exclude:
|
||||||
- os: macos-12
|
- os: macos-10.15
|
||||||
openssl: openssl3
|
openssl: openssl3
|
||||||
- http3: no-http3
|
- http3: no-http3
|
||||||
openssl: openssl3
|
openssl: openssl3
|
||||||
- os: macos-12
|
|
||||||
compiler: gcc
|
|
||||||
- # disable macos cmake because of include path issue
|
|
||||||
os: macos-12
|
|
||||||
buildtool: cmake
|
|
||||||
- os: macos-12
|
|
||||||
openssl: boringssl
|
|
||||||
- openssl: boringssl
|
|
||||||
buildtool: cmake
|
|
||||||
- openssl: boringssl
|
|
||||||
compiler: gcc
|
|
||||||
- os: macos-12
|
|
||||||
openssl: awslc
|
|
||||||
- openssl: awslc
|
|
||||||
buildtool: cmake
|
|
||||||
- openssl: awslc
|
|
||||||
compiler: gcc
|
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
- name: Linux setup
|
- name: Linux setup
|
||||||
if: runner.os == 'Linux'
|
if: runner.os == 'Linux'
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get install \
|
sudo apt-get install \
|
||||||
g++-12 \
|
g++-8 \
|
||||||
clang-15 \
|
clang-10 \
|
||||||
autoconf \
|
autoconf \
|
||||||
automake \
|
automake \
|
||||||
autotools-dev \
|
autotools-dev \
|
||||||
@@ -267,8 +63,8 @@ jobs:
|
|||||||
- name: Setup clang (Linux)
|
- name: Setup clang (Linux)
|
||||||
if: runner.os == 'Linux' && matrix.compiler == 'clang'
|
if: runner.os == 'Linux' && matrix.compiler == 'clang'
|
||||||
run: |
|
run: |
|
||||||
echo 'CC=clang-15' >> $GITHUB_ENV
|
echo 'CC=clang-10' >> $GITHUB_ENV
|
||||||
echo 'CXX=clang++-15' >> $GITHUB_ENV
|
echo 'CXX=clang++-10' >> $GITHUB_ENV
|
||||||
- name: Setup clang (MacOS)
|
- name: Setup clang (MacOS)
|
||||||
if: runner.os == 'macOS' && matrix.compiler == 'clang'
|
if: runner.os == 'macOS' && matrix.compiler == 'clang'
|
||||||
run: |
|
run: |
|
||||||
@@ -277,125 +73,71 @@ jobs:
|
|||||||
- name: Setup gcc (Linux)
|
- name: Setup gcc (Linux)
|
||||||
if: runner.os == 'Linux' && matrix.compiler == 'gcc'
|
if: runner.os == 'Linux' && matrix.compiler == 'gcc'
|
||||||
run: |
|
run: |
|
||||||
echo 'CC=gcc-12' >> $GITHUB_ENV
|
echo 'CC=gcc-8' >> $GITHUB_ENV
|
||||||
echo 'CXX=g++-12' >> $GITHUB_ENV
|
echo 'CXX=g++-8' >> $GITHUB_ENV
|
||||||
- name: Setup gcc (MacOS)
|
- name: Setup gcc (MacOS)
|
||||||
if: runner.os == 'macOS' && matrix.compiler == 'gcc'
|
if: runner.os == 'macOS' && matrix.compiler == 'gcc'
|
||||||
run: |
|
run: |
|
||||||
echo 'CC=gcc' >> $GITHUB_ENV
|
echo 'CC=gcc' >> $GITHUB_ENV
|
||||||
echo 'CXX=g++' >> $GITHUB_ENV
|
echo 'CXX=g++' >> $GITHUB_ENV
|
||||||
- name: Restore libbpf cache
|
- name: Build libbpf
|
||||||
uses: actions/cache/restore@v3
|
|
||||||
if: matrix.http3 == 'http3' && matrix.compiler == 'clang' && runner.os == 'Linux'
|
|
||||||
with:
|
|
||||||
path: libbpf/build
|
|
||||||
key: ${{ runner.os }}-libbpf-${{ env.LIBBPF_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Set libbpf variables
|
|
||||||
if: matrix.http3 == 'http3' && matrix.compiler == 'clang' && runner.os == 'Linux'
|
if: matrix.http3 == 'http3' && matrix.compiler == 'clang' && runner.os == 'Linux'
|
||||||
run: |
|
run: |
|
||||||
|
git clone -b v0.4.0 https://github.com/libbpf/libbpf
|
||||||
cd libbpf
|
cd libbpf
|
||||||
|
PREFIX=$PWD/build make -C src install
|
||||||
|
|
||||||
EXTRA_AUTOTOOLS_OPTS="--with-libbpf"
|
EXTRA_AUTOTOOLS_OPTS="--with-libbpf"
|
||||||
EXTRA_CMAKE_OPTS="-DWITH_LIBBPF=1"
|
|
||||||
|
|
||||||
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
||||||
echo 'EXTRA_CMAKE_OPTS='"$EXTRA_CMAKE_OPTS" >> $GITHUB_ENV
|
- name: Build quictls/openssl v1.1.1
|
||||||
- name: Restore quictls/openssl v1.1.1 cache
|
|
||||||
uses: actions/cache/restore@v3
|
|
||||||
if: matrix.http3 == 'http3' && matrix.openssl == 'openssl1'
|
if: matrix.http3 == 'http3' && matrix.openssl == 'openssl1'
|
||||||
with:
|
run: |
|
||||||
path: openssl1/build
|
git clone --depth 1 -b OpenSSL_1_1_1l+quic https://github.com/quictls/openssl
|
||||||
key: ${{ runner.os }}-openssl-${{ env.OPENSSL1_VERSION }}
|
cd openssl
|
||||||
fail-on-cache-miss: true
|
./config enable-tls1_3 --prefix=$PWD/build
|
||||||
- name: Restore quictls/openssl v3.x cache
|
make -j$(nproc)
|
||||||
uses: actions/cache/restore@v3
|
make install_sw
|
||||||
|
- name: Build quictls/openssl v3.0.0
|
||||||
if: matrix.http3 == 'http3' && matrix.openssl == 'openssl3'
|
if: matrix.http3 == 'http3' && matrix.openssl == 'openssl3'
|
||||||
with:
|
|
||||||
path: openssl3/build
|
|
||||||
key: ${{ runner.os }}-openssl-${{ env.OPENSSL3_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Restore BoringSSL cache
|
|
||||||
uses: actions/cache/restore@v3
|
|
||||||
if: matrix.openssl == 'boringssl'
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
boringssl/build/crypto/libcrypto.a
|
|
||||||
boringssl/build/ssl/libssl.a
|
|
||||||
boringssl/include
|
|
||||||
key: ${{ runner.os }}-boringssl-${{ env.BORINGSSL_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Restore aws-lc cache
|
|
||||||
uses: actions/cache/restore@v3
|
|
||||||
if: matrix.openssl == 'awslc'
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
aws-lc/build/crypto/libcrypto.a
|
|
||||||
aws-lc/build/ssl/libssl.a
|
|
||||||
aws-lc/include
|
|
||||||
key: ${{ runner.os }}-awslc-${{ env.AWSLC_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Set BoringSSL variables
|
|
||||||
if: matrix.openssl == 'boringssl'
|
|
||||||
run: |
|
run: |
|
||||||
cd boringssl
|
unset CPPFLAGS
|
||||||
|
unset LDFLAGS
|
||||||
|
|
||||||
OPENSSL_CFLAGS="-I$PWD/include/"
|
git clone --depth 1 -b openssl-3.0.0+quic https://github.com/quictls/openssl
|
||||||
OPENSSL_LIBS="-L$PWD/build/ssl -lssl -L$PWD/build/crypto -lcrypto -pthread"
|
cd openssl
|
||||||
EXTRA_AUTOTOOLS_OPTS="$EXTRA_AUTOTOOLS_OPTS --without-neverbleed --without-jemalloc"
|
./config enable-tls1_3 --prefix=$PWD/build --libdir=$PWD/build/lib
|
||||||
|
make -j$(nproc)
|
||||||
echo 'OPENSSL_CFLAGS='"$OPENSSL_CFLAGS" >> $GITHUB_ENV
|
make install_sw
|
||||||
echo 'OPENSSL_LIBS='"$OPENSSL_LIBS" >> $GITHUB_ENV
|
- name: Build nghttp3
|
||||||
echo 'BORINGSSL_CFLAGS='"$OPENSSL_CFLAGS" >> $GITHUB_ENV
|
|
||||||
echo 'BORINGSSL_LIBS='"$OPENSSL_LIBS" >> $GITHUB_ENV
|
|
||||||
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
|
||||||
- name: Set aws-lc variables
|
|
||||||
if: matrix.openssl == 'awslc'
|
|
||||||
run: |
|
|
||||||
cd aws-lc
|
|
||||||
|
|
||||||
OPENSSL_CFLAGS="-I$PWD/include/"
|
|
||||||
OPENSSL_LIBS="-L$PWD/build/ssl -lssl -L$PWD/build/crypto -lcrypto -pthread"
|
|
||||||
EXTRA_AUTOTOOLS_OPTS="$EXTRA_AUTOTOOLS_OPTS --without-neverbleed --without-jemalloc"
|
|
||||||
|
|
||||||
echo 'OPENSSL_CFLAGS='"$OPENSSL_CFLAGS" >> $GITHUB_ENV
|
|
||||||
echo 'OPENSSL_LIBS='"$OPENSSL_LIBS" >> $GITHUB_ENV
|
|
||||||
echo 'BORINGSSL_CFLAGS='"$OPENSSL_CFLAGS" >> $GITHUB_ENV
|
|
||||||
echo 'BORINGSSL_LIBS='"$OPENSSL_LIBS" >> $GITHUB_ENV
|
|
||||||
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
|
||||||
- name: Restore nghttp3 cache
|
|
||||||
uses: actions/cache/restore@v3
|
|
||||||
if: matrix.http3 == 'http3'
|
if: matrix.http3 == 'http3'
|
||||||
with:
|
run: |
|
||||||
path: nghttp3/build
|
git clone https://github.com/ngtcp2/nghttp3
|
||||||
key: ${{ runner.os }}-nghttp3-${{ env.NGHTTP3_VERSION }}
|
cd nghttp3
|
||||||
fail-on-cache-miss: true
|
autoreconf -i
|
||||||
- name: Restore ngtcp2 + quictls/openssl v1.1.1 cache + BoringSSL
|
./configure --prefix=$PWD/build --enable-lib-only
|
||||||
uses: actions/cache/restore@v3
|
make -j$(nproc) check
|
||||||
if: matrix.http3 == 'http3' && (matrix.openssl == 'openssl1' || matrix.openssl == 'boringssl')
|
make install
|
||||||
with:
|
- name: Build ngtcp2
|
||||||
path: ngtcp2-openssl1/build
|
if: matrix.http3 == 'http3'
|
||||||
key: ${{ runner.os }}-ngtcp2-${{ env.NGTCP2_VERSION }}-openssl-${{ env.OPENSSL1_VERSION }}
|
run: |
|
||||||
fail-on-cache-miss: true
|
git clone https://github.com/ngtcp2/ngtcp2
|
||||||
- name: Restore ngtcp2 + quictls/openssl v3.x cache + aws-lc
|
cd ngtcp2
|
||||||
uses: actions/cache/restore@v3
|
autoreconf -i
|
||||||
if: matrix.http3 == 'http3' && (matrix.openssl == 'openssl3' || matrix.openssl == 'awslc')
|
./configure --prefix=$PWD/build --enable-lib-only PKG_CONFIG_PATH="../openssl/build/lib/pkgconfig"
|
||||||
with:
|
make -j$(nproc) check
|
||||||
path: ngtcp2-openssl3/build
|
make install
|
||||||
key: ${{ runner.os }}-ngtcp2-${{ env.NGTCP2_VERSION }}-openssl-${{ env.OPENSSL3_VERSION }}
|
|
||||||
fail-on-cache-miss: true
|
|
||||||
- name: Setup extra environment variables for HTTP/3
|
- name: Setup extra environment variables for HTTP/3
|
||||||
if: matrix.http3 == 'http3'
|
if: matrix.http3 == 'http3'
|
||||||
run: |
|
run: |
|
||||||
PKG_CONFIG_PATH="$PWD/openssl1/build/lib/pkgconfig:$PWD/openssl3/build/lib/pkgconfig:$PWD/nghttp3/build/lib/pkgconfig:$PWD/ngtcp2-openssl1/build/lib/pkgconfig:$PWD/ngtcp2-openssl3/build/lib/pkgconfig:$PWD/libbpf/build/lib64/pkgconfig:$PKG_CONFIG_PATH"
|
PKG_CONFIG_PATH="$PWD/openssl/build/lib/pkgconfig:$PWD/nghttp3/build/lib/pkgconfig:$PWD/ngtcp2/build/lib/pkgconfig:$PWD/libbpf/build/lib64/pkgconfig:$PKG_CONFIG_PATH"
|
||||||
LDFLAGS="$LDFLAGS -Wl,-rpath,$PWD/openssl1/build/lib -Wl,-rpath,$PWD/openssl3/build/lib -Wl,-rpath,$PWD/libbpf/build/lib64"
|
LDFLAGS="$LDFLAGS -Wl,-rpath,$PWD/openssl/build/lib -Wl,-rpath,$PWD/libbpf/build/lib64"
|
||||||
EXTRA_AUTOTOOLS_OPTS="--enable-http3 $EXTRA_AUTOTOOLS_OPTS"
|
EXTRA_AUTOTOOLS_OPTS="--enable-http3 $EXTRA_AUTOTOOLS_OPTS"
|
||||||
EXTRA_CMAKE_OPTS="-DENABLE_HTTP3=1 $EXTRA_CMAKE_OPTS"
|
|
||||||
|
|
||||||
echo 'PKG_CONFIG_PATH='"$PKG_CONFIG_PATH" >> $GITHUB_ENV
|
echo 'PKG_CONFIG_PATH='"$PKG_CONFIG_PATH" >> $GITHUB_ENV
|
||||||
echo 'LDFLAGS='"$LDFLAGS" >> $GITHUB_ENV
|
echo 'LDFLAGS='"$LDFLAGS" >> $GITHUB_ENV
|
||||||
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
echo 'EXTRA_AUTOTOOLS_OPTS='"$EXTRA_AUTOTOOLS_OPTS" >> $GITHUB_ENV
|
||||||
echo 'EXTRA_CMAKE_OPTS='"$EXTRA_CMAKE_OPTS" >> $GITHUB_ENV
|
echo 'EXTRA_CMAKE_OPTS=-DENABLE_HTTP3=ON' >> $GITHUB_ENV
|
||||||
- name: Setup git submodules
|
- name: Setup git submodules
|
||||||
run: |
|
run: |
|
||||||
git submodule update --init
|
git submodule update --init
|
||||||
@@ -403,18 +145,8 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
autoreconf -i
|
autoreconf -i
|
||||||
./configure
|
./configure
|
||||||
- name: Configure cmake (Linux)
|
- name: Configure cmake
|
||||||
if: matrix.buildtool == 'cmake' && runner.os == 'Linux'
|
if: matrix.buildtool == 'cmake'
|
||||||
run: |
|
|
||||||
make dist
|
|
||||||
VERSION=$(grep PACKAGE_VERSION config.h | cut -d' ' -f3 | tr -d '"')
|
|
||||||
tar xf nghttp2-$VERSION.tar.gz
|
|
||||||
cd nghttp2-$VERSION
|
|
||||||
echo 'NGHTTP2_CMAKE_DIR='"$PWD" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
cmake -DENABLE_WERROR=1 -DWITH_MRUBY=1 -DWITH_NEVERBLEED=1 -DENABLE_APP=1 $EXTRA_CMAKE_OPTS -DCPPFLAGS="$CPPFLAGS" -DLDFLAGS="$LDFLAGS" .
|
|
||||||
- name: Configure cmake (MacOS)
|
|
||||||
if: matrix.buildtool == 'cmake' && runner.os == 'macOS'
|
|
||||||
run: |
|
run: |
|
||||||
make dist
|
make dist
|
||||||
VERSION=$(grep PACKAGE_VERSION config.h | cut -d' ' -f3 | tr -d '"')
|
VERSION=$(grep PACKAGE_VERSION config.h | cut -d' ' -f3 | tr -d '"')
|
||||||
@@ -425,106 +157,22 @@ jobs:
|
|||||||
# This fixes infamous 'stdio.h not found' error.
|
# This fixes infamous 'stdio.h not found' error.
|
||||||
echo 'SDKROOT='"$(xcrun --sdk macosx --show-sdk-path)" >> $GITHUB_ENV
|
echo 'SDKROOT='"$(xcrun --sdk macosx --show-sdk-path)" >> $GITHUB_ENV
|
||||||
|
|
||||||
cmake -DENABLE_WERROR=1 -DWITH_MRUBY=1 -DENABLE_APP=1 $EXTRA_CMAKE_OPTS -DCPPFLAGS="$CPPFLAGS" -DLDFLAGS="$LDFLAGS" .
|
cmake -DENABLE_WERROR=1 -DWITH_MRUBY=1 -DWITH_NEVERBLEED=1 -DENABLE_APP=1 $EXTRA_CMAKE_OPTS -DCPPFLAGS="$CPPFLAGS" -DLDFLAGS="$LDFLAGS" .
|
||||||
- name: Build nghttp2 with autotools (Linux)
|
- name: Build nghttp2 with autotools
|
||||||
if: matrix.buildtool == 'autotools' && runner.os == 'Linux'
|
if: matrix.buildtool == 'autotools'
|
||||||
run: |
|
run: |
|
||||||
make -j"$(nproc)" distcheck \
|
make distcheck \
|
||||||
DISTCHECK_CONFIGURE_FLAGS="--with-mruby --with-neverbleed --with-libev --enable-werror $EXTRA_AUTOTOOLS_OPTS CPPFLAGS=\"$CPPFLAGS\" LDFLAGS=\"$LDFLAGS\""
|
DISTCHECK_CONFIGURE_FLAGS="--with-mruby --with-neverbleed --with-libev --enable-werror $EXTRA_AUTOTOOLS_OPTS CPPFLAGS=\"$CPPFLAGS\" LDFLAGS=\"$LDFLAGS\""
|
||||||
- name: Build nghttp2 with autotools (MacOS)
|
|
||||||
if: matrix.buildtool == 'autotools' && runner.os == 'macOS'
|
|
||||||
run: |
|
|
||||||
make -j"$(sysctl -n hw.ncpu)" distcheck \
|
|
||||||
DISTCHECK_CONFIGURE_FLAGS="--with-mruby --with-libev --enable-werror $EXTRA_AUTOTOOLS_OPTS CPPFLAGS=\"$CPPFLAGS\" LDFLAGS=\"$LDFLAGS\""
|
|
||||||
- name: Build nghttp2 with cmake
|
- name: Build nghttp2 with cmake
|
||||||
if: matrix.buildtool == 'cmake'
|
if: matrix.buildtool == 'cmake'
|
||||||
run: |
|
run: |
|
||||||
cd $NGHTTP2_CMAKE_DIR
|
cd $NGHTTP2_CMAKE_DIR
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)"
|
make
|
||||||
make -j"$(nproc 2> /dev/null || sysctl -n hw.ncpu)" check
|
make check
|
||||||
- uses: actions/setup-go@v5
|
|
||||||
if: matrix.buildtool == 'cmake'
|
|
||||||
with:
|
|
||||||
go-version-file: go.mod
|
|
||||||
- name: Integration test
|
- name: Integration test
|
||||||
# Integration tests for nghttpx; autotools erases build
|
# Integration tests for nghttpx; autotools erases build
|
||||||
# artifacts.
|
# artifacts.
|
||||||
if: matrix.buildtool == 'cmake'
|
if: matrix.buildtool == 'cmake'
|
||||||
run: |
|
run: |
|
||||||
cd $NGHTTP2_CMAKE_DIR/integration-tests
|
cd $NGHTTP2_CMAKE_DIR/integration-tests
|
||||||
make it
|
make itprep it
|
||||||
|
|
||||||
build-cross:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
host: [x86_64-w64-mingw32, i686-w64-mingw32]
|
|
||||||
|
|
||||||
runs-on: ubuntu-22.04
|
|
||||||
|
|
||||||
env:
|
|
||||||
HOST: ${{ matrix.host }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Linux setup
|
|
||||||
run: |
|
|
||||||
sudo dpkg --add-architecture i386
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install \
|
|
||||||
gcc-mingw-w64 \
|
|
||||||
autoconf \
|
|
||||||
automake \
|
|
||||||
autotools-dev \
|
|
||||||
libtool \
|
|
||||||
pkg-config \
|
|
||||||
wine
|
|
||||||
- name: Build CUnit
|
|
||||||
run: |
|
|
||||||
curl -LO https://jaist.dl.sourceforge.net/project/cunit/CUnit/2.1-3/CUnit-2.1-3.tar.bz2
|
|
||||||
tar xf CUnit-2.1-3.tar.bz2
|
|
||||||
cd CUnit-2.1-3
|
|
||||||
./bootstrap
|
|
||||||
./configure --disable-shared --host="$HOST" --prefix="$PWD/build"
|
|
||||||
make -j$(nproc) install
|
|
||||||
- name: Configure autotools
|
|
||||||
run: |
|
|
||||||
autoreconf -i && \
|
|
||||||
./configure --enable-werror --enable-lib-only --with-cunit \
|
|
||||||
--host="$HOST" PKG_CONFIG_PATH="$PWD/CUnit-2.1-3/build/lib/pkgconfig" \
|
|
||||||
CFLAGS="-g -O2 -D_WIN32_WINNT=0x0600"
|
|
||||||
- name: Build nghttp2
|
|
||||||
run: |
|
|
||||||
make -j$(nproc)
|
|
||||||
make -j$(nproc) check TESTS=""
|
|
||||||
- name: Run tests
|
|
||||||
if: matrix.host == 'x86_64-w64-mingw32'
|
|
||||||
run: |
|
|
||||||
cd tests
|
|
||||||
wine main.exe
|
|
||||||
|
|
||||||
build-windows:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
arch: [x86, x64]
|
|
||||||
include:
|
|
||||||
- arch: x86
|
|
||||||
platform: Win32
|
|
||||||
- arch: x64
|
|
||||||
platform: x64
|
|
||||||
|
|
||||||
runs-on: windows-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: microsoft/setup-msbuild@v1
|
|
||||||
- run: |
|
|
||||||
vcpkg --triplet=${{ matrix.arch }}-windows install cunit
|
|
||||||
- name: Configure cmake
|
|
||||||
run: |
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
cmake -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_GENERATOR_PLATFORM=${{ matrix.platform }} -DVCPKG_TARGET_TRIPLET=${{ matrix.arch}}-windows ..
|
|
||||||
- name: Build nghttp2
|
|
||||||
run: |
|
|
||||||
cmake --build build
|
|
||||||
cmake --build build --target check
|
|
||||||
|
|||||||
3
.github/workflows/fuzz.yml
vendored
3
.github/workflows/fuzz.yml
vendored
@@ -1,6 +1,5 @@
|
|||||||
name: CIFuzz
|
name: CIFuzz
|
||||||
on: [pull_request]
|
on: [pull_request]
|
||||||
permissions: read-all
|
|
||||||
jobs:
|
jobs:
|
||||||
Fuzzing:
|
Fuzzing:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -17,7 +16,7 @@ jobs:
|
|||||||
fuzz-seconds: 600
|
fuzz-seconds: 600
|
||||||
dry-run: false
|
dry-run: false
|
||||||
- name: Upload Crash
|
- name: Upload Crash
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v1
|
||||||
if: failure()
|
if: failure()
|
||||||
with:
|
with:
|
||||||
name: artifacts
|
name: artifacts
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -54,3 +54,4 @@ _VC_ROOT/
|
|||||||
.depend.MSVC
|
.depend.MSVC
|
||||||
*.pyd
|
*.pyd
|
||||||
*.egg-info/
|
*.egg-info/
|
||||||
|
python/nghttp2.c
|
||||||
|
|||||||
2
.gitmodules
vendored
2
.gitmodules
vendored
@@ -4,4 +4,4 @@
|
|||||||
[submodule "third-party/neverbleed"]
|
[submodule "third-party/neverbleed"]
|
||||||
path = third-party/neverbleed
|
path = third-party/neverbleed
|
||||||
url = https://github.com/tatsuhiro-t/neverbleed.git
|
url = https://github.com/tatsuhiro-t/neverbleed.git
|
||||||
branch = nghttp2
|
branch = openssl111fix
|
||||||
|
|||||||
89
.travis.yml
Normal file
89
.travis.yml
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
dist: xenial
|
||||||
|
os:
|
||||||
|
- linux
|
||||||
|
compiler:
|
||||||
|
- clang
|
||||||
|
- gcc
|
||||||
|
env:
|
||||||
|
matrix:
|
||||||
|
- CI_BUILD=cmake
|
||||||
|
- CI_BUILD=autotools
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: osx
|
||||||
|
compiler: clang
|
||||||
|
osx_image: xcode10.2
|
||||||
|
env: CI_BUILD=autotools
|
||||||
|
language: cpp
|
||||||
|
sudo: required
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-8
|
||||||
|
- autoconf
|
||||||
|
- automake
|
||||||
|
- autotools-dev
|
||||||
|
- libtool
|
||||||
|
- pkg-config
|
||||||
|
- zlib1g-dev
|
||||||
|
- libcunit1-dev
|
||||||
|
- libssl-dev
|
||||||
|
- libxml2-dev
|
||||||
|
- libev-dev
|
||||||
|
- libevent-dev
|
||||||
|
- libjansson-dev
|
||||||
|
- libjemalloc-dev
|
||||||
|
- libc-ares-dev
|
||||||
|
- cmake
|
||||||
|
- cmake-data
|
||||||
|
homebrew:
|
||||||
|
packages:
|
||||||
|
- libev
|
||||||
|
- libevent
|
||||||
|
- c-ares
|
||||||
|
- cunit
|
||||||
|
- libressl
|
||||||
|
before_install:
|
||||||
|
- $CC --version
|
||||||
|
- if [ "$CXX" = "g++" ]; then export CXX="g++-8" CC="gcc-8"; fi
|
||||||
|
- $CC --version
|
||||||
|
- go version
|
||||||
|
- cmake --version
|
||||||
|
before_script:
|
||||||
|
- |
|
||||||
|
if [ "$TRAVIS_OS_NAME" = "linux" ]; then
|
||||||
|
CPPFLAGS="-fsanitize=address" LDFLAGS="-fsanitize=address -fuse-ld=gold"
|
||||||
|
fi
|
||||||
|
- |
|
||||||
|
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
||||||
|
PKG_CONFIG_PATH="/usr/local/opt/libressl/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig"
|
||||||
|
fi
|
||||||
|
# Now build nghttp2
|
||||||
|
- git submodule update --init
|
||||||
|
- |
|
||||||
|
if [ "$CI_BUILD" = "autotools" ]; then
|
||||||
|
autoreconf -i && ./configure --with-mruby PKG_CONFIG_PATH=$PKG_CONFIG_PATH
|
||||||
|
fi
|
||||||
|
- |
|
||||||
|
if [ "$CI_BUILD" = "cmake" ]; then
|
||||||
|
cmake -DENABLE_WERROR=1 -DWITH_MRUBY=1 -DWITH_NEVERBLEED=1
|
||||||
|
fi
|
||||||
|
script:
|
||||||
|
- |
|
||||||
|
if [ "$CI_BUILD" = "autotools" ]; then
|
||||||
|
make distcheck DISTCHECK_CONFIGURE_FLAGS="--with-mruby --with-neverbleed --enable-werror CPPFLAGS=$CPPFLAGS LDFLAGS=\"$LDFLAGS\" PKG_CONFIG_PATH=$PKG_CONFIG_PATH"
|
||||||
|
fi
|
||||||
|
- |
|
||||||
|
if [ "$CI_BUILD" = "cmake" ]; then
|
||||||
|
make && make check
|
||||||
|
fi
|
||||||
|
- |
|
||||||
|
if [ "$CI_BUILD" = "cmake" ]; then
|
||||||
|
# Integration tests for nghttpx; autotools build erases build
|
||||||
|
# for packaging test.
|
||||||
|
cd integration-tests
|
||||||
|
export GO111MODULE=on
|
||||||
|
make it
|
||||||
|
fi
|
||||||
15
AUTHORS
15
AUTHORS
@@ -17,7 +17,6 @@ github issues [2].
|
|||||||
Adam Gołębiowski
|
Adam Gołębiowski
|
||||||
Alek Storm
|
Alek Storm
|
||||||
Alex Nalivko
|
Alex Nalivko
|
||||||
Alexandr Vlasov
|
|
||||||
Alexandros Konstantinakis-Karmis
|
Alexandros Konstantinakis-Karmis
|
||||||
Alexis La Goutte
|
Alexis La Goutte
|
||||||
Amir Livneh
|
Amir Livneh
|
||||||
@@ -29,12 +28,10 @@ Andy Davies
|
|||||||
Angus Gratton
|
Angus Gratton
|
||||||
Anna Henningsen
|
Anna Henningsen
|
||||||
Ant Bryan
|
Ant Bryan
|
||||||
Anthony Alayo
|
|
||||||
Asra Ali
|
Asra Ali
|
||||||
Benedikt Christoph Wolters
|
Benedikt Christoph Wolters
|
||||||
Benjamin Peterson
|
Benjamin Peterson
|
||||||
Bernard Spil
|
Bernard Spil
|
||||||
Bernhard Walle
|
|
||||||
Brendan Heinonen
|
Brendan Heinonen
|
||||||
Brian Card
|
Brian Card
|
||||||
Brian Suh
|
Brian Suh
|
||||||
@@ -43,9 +40,7 @@ Daniel Evers
|
|||||||
Daniel Stenberg
|
Daniel Stenberg
|
||||||
Dave Reisner
|
Dave Reisner
|
||||||
David Beitey
|
David Beitey
|
||||||
David Korczynski
|
|
||||||
David Weekly
|
David Weekly
|
||||||
Dimitris Apostolou
|
|
||||||
Dmitri Tikhonov
|
Dmitri Tikhonov
|
||||||
Dmitriy Vetutnev
|
Dmitriy Vetutnev
|
||||||
Don
|
Don
|
||||||
@@ -53,7 +48,6 @@ Dylan Plecki
|
|||||||
Etienne Cimon
|
Etienne Cimon
|
||||||
Fabian Möller
|
Fabian Möller
|
||||||
Fabian Wiesel
|
Fabian Wiesel
|
||||||
Fred Sundvik
|
|
||||||
Gabi Davar
|
Gabi Davar
|
||||||
Gaël PORTAY
|
Gaël PORTAY
|
||||||
Geoff Hill
|
Geoff Hill
|
||||||
@@ -86,7 +80,6 @@ Lorenz Nickel
|
|||||||
Lucas Pardue
|
Lucas Pardue
|
||||||
MATSUMOTO Ryosuke
|
MATSUMOTO Ryosuke
|
||||||
Marc Bachmann
|
Marc Bachmann
|
||||||
Marcelo Trylesinski
|
|
||||||
Matt Rudary
|
Matt Rudary
|
||||||
Matt Way
|
Matt Way
|
||||||
Michael Kaufmann
|
Michael Kaufmann
|
||||||
@@ -95,24 +88,18 @@ Mike Frysinger
|
|||||||
Mike Lothian
|
Mike Lothian
|
||||||
Nicholas Hurley
|
Nicholas Hurley
|
||||||
Nora Shoemaker
|
Nora Shoemaker
|
||||||
Paweł Wegner
|
|
||||||
Pedro Santos
|
Pedro Santos
|
||||||
Peeyush Aggarwal
|
Peeyush Aggarwal
|
||||||
Peter Wu
|
Peter Wu
|
||||||
Piotr Sikora
|
Piotr Sikora
|
||||||
PufferOverflow
|
|
||||||
Raul Gutierrez Segales
|
Raul Gutierrez Segales
|
||||||
Remo E
|
Remo E
|
||||||
Renaud
|
|
||||||
Reza Tavakoli
|
Reza Tavakoli
|
||||||
Richard Wolfert
|
Richard Wolfert
|
||||||
Rick Lei
|
Rick Lei
|
||||||
Ross Smith II
|
Ross Smith II
|
||||||
Rudi Heitbaum
|
|
||||||
Ryo Ota
|
|
||||||
Scott Mitchell
|
Scott Mitchell
|
||||||
Sebastiaan Deckers
|
Sebastiaan Deckers
|
||||||
Shelley Vohr
|
|
||||||
Simon Frankenberger
|
Simon Frankenberger
|
||||||
Simone Basso
|
Simone Basso
|
||||||
Soham Sinha
|
Soham Sinha
|
||||||
@@ -145,7 +132,6 @@ dalf
|
|||||||
dawg
|
dawg
|
||||||
es
|
es
|
||||||
fangdingjun
|
fangdingjun
|
||||||
hrxi
|
|
||||||
jwchoi
|
jwchoi
|
||||||
kumagi
|
kumagi
|
||||||
lhuang04
|
lhuang04
|
||||||
@@ -153,6 +139,5 @@ lstefani
|
|||||||
makovich
|
makovich
|
||||||
mod-h2-dev
|
mod-h2-dev
|
||||||
moparisthebest
|
moparisthebest
|
||||||
robaho
|
|
||||||
snnn
|
snnn
|
||||||
yuuki-kodama
|
yuuki-kodama
|
||||||
|
|||||||
191
CMakeLists.txt
191
CMakeLists.txt
@@ -22,15 +22,15 @@
|
|||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.5)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
# XXX using 1.8.90 instead of 1.9.0-DEV
|
# XXX using 1.8.90 instead of 1.9.0-DEV
|
||||||
project(nghttp2 VERSION 1.59.0)
|
project(nghttp2 VERSION 1.45.1)
|
||||||
|
|
||||||
# See versioning rule:
|
# See versioning rule:
|
||||||
# https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
||||||
set(LT_CURRENT 40)
|
set(LT_CURRENT 35)
|
||||||
set(LT_REVISION 0)
|
set(LT_REVISION 0)
|
||||||
set(LT_AGE 26)
|
set(LT_AGE 21)
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
|
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
|
||||||
include(Version)
|
include(Version)
|
||||||
@@ -52,29 +52,19 @@ endif()
|
|||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
# For documentation
|
# For Python bindings and documentation
|
||||||
find_package(Python3 COMPONENTS Interpreter)
|
# (Must be called before PythonLibs for matching versions.)
|
||||||
|
find_package(PythonInterp)
|
||||||
|
|
||||||
# Auto-detection of features that can be toggled
|
# Auto-detection of features that can be toggled
|
||||||
if(NOT ENABLE_LIB_ONLY)
|
find_package(OpenSSL 1.0.1)
|
||||||
find_package(Libev 4.11)
|
find_package(Libev 4.11)
|
||||||
find_package(Libcares 1.7.5)
|
find_package(Libcares 1.7.5)
|
||||||
find_package(ZLIB 1.2.3)
|
find_package(ZLIB 1.2.3)
|
||||||
endif()
|
find_package(Libngtcp2 0.0.0)
|
||||||
|
find_package(Libngtcp2_crypto_openssl 0.0.0)
|
||||||
find_package(OpenSSL 1.1.1)
|
find_package(Libnghttp3 0.0.0)
|
||||||
find_package(Libngtcp2 1.0.0)
|
find_package(Libbpf 0.4.0)
|
||||||
find_package(Libngtcp2_crypto_quictls 1.0.0)
|
|
||||||
if(LIBNGTCP2_CRYPTO_QUICTLS_FOUND)
|
|
||||||
set(HAVE_LIBNGTCP2_CRYPTO_QUICTLS 1)
|
|
||||||
endif()
|
|
||||||
find_package(Libnghttp3 1.1.0)
|
|
||||||
if(WITH_LIBBPF)
|
|
||||||
find_package(Libbpf 0.7.0)
|
|
||||||
if(NOT LIBBPF_FOUND)
|
|
||||||
message(FATAL_ERROR "libbpf was requested (WITH_LIBBPF=1) but not found.")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
if(OPENSSL_FOUND AND LIBEV_FOUND AND ZLIB_FOUND)
|
if(OPENSSL_FOUND AND LIBEV_FOUND AND ZLIB_FOUND)
|
||||||
set(ENABLE_APP_DEFAULT ON)
|
set(ENABLE_APP_DEFAULT ON)
|
||||||
else()
|
else()
|
||||||
@@ -84,8 +74,15 @@ find_package(Systemd 209)
|
|||||||
find_package(Jansson 2.5)
|
find_package(Jansson 2.5)
|
||||||
set(ENABLE_HPACK_TOOLS_DEFAULT ${JANSSON_FOUND})
|
set(ENABLE_HPACK_TOOLS_DEFAULT ${JANSSON_FOUND})
|
||||||
# 2.0.8 is required because we use evconnlistener_set_error_cb()
|
# 2.0.8 is required because we use evconnlistener_set_error_cb()
|
||||||
find_package(Libevent 2.0.8 COMPONENTS core extra openssl)
|
find_package(Libevent 2.0.8 COMPONENTS libevent openssl)
|
||||||
set(ENABLE_EXAMPLES_DEFAULT ${LIBEVENT_OPENSSL_FOUND})
|
set(ENABLE_EXAMPLES_DEFAULT ${LIBEVENT_OPENSSL_FOUND})
|
||||||
|
find_package(Cython)
|
||||||
|
find_package(PythonLibs)
|
||||||
|
if(CYTHON_FOUND AND PYTHONLIBS_FOUND)
|
||||||
|
set(ENABLE_PYTHON_BINDINGS_DEFAULT ON)
|
||||||
|
else()
|
||||||
|
set(ENABLE_PYTHON_BINDINGS_DEFAULT OFF)
|
||||||
|
endif()
|
||||||
|
|
||||||
find_package(LibXml2 2.6.26)
|
find_package(LibXml2 2.6.26)
|
||||||
set(WITH_LIBXML2_DEFAULT ${LIBXML2_FOUND})
|
set(WITH_LIBXML2_DEFAULT ${LIBXML2_FOUND})
|
||||||
@@ -94,7 +91,8 @@ set(WITH_JEMALLOC_DEFAULT ${JEMALLOC_FOUND})
|
|||||||
|
|
||||||
include(CMakeOptions.txt)
|
include(CMakeOptions.txt)
|
||||||
|
|
||||||
if(ENABLE_LIB_ONLY AND (ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_EXAMPLES))
|
if(ENABLE_LIB_ONLY AND (ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_EXAMPLES OR
|
||||||
|
ENABLE_PYTHON_BINDINGS))
|
||||||
# Remember when disabled options are disabled for later diagnostics.
|
# Remember when disabled options are disabled for later diagnostics.
|
||||||
set(ENABLE_LIB_ONLY_DISABLED_OTHERS 1)
|
set(ENABLE_LIB_ONLY_DISABLED_OTHERS 1)
|
||||||
else()
|
else()
|
||||||
@@ -104,6 +102,7 @@ if(ENABLE_LIB_ONLY)
|
|||||||
set(ENABLE_APP OFF)
|
set(ENABLE_APP OFF)
|
||||||
set(ENABLE_HPACK_TOOLS OFF)
|
set(ENABLE_HPACK_TOOLS OFF)
|
||||||
set(ENABLE_EXAMPLES OFF)
|
set(ENABLE_EXAMPLES OFF)
|
||||||
|
set(ENABLE_PYTHON_BINDINGS OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Do not disable assertions based on CMAKE_BUILD_TYPE.
|
# Do not disable assertions based on CMAKE_BUILD_TYPE.
|
||||||
@@ -149,6 +148,20 @@ cmake_pop_check_state()
|
|||||||
# Additional libraries required for programs under src directory.
|
# Additional libraries required for programs under src directory.
|
||||||
set(APP_LIBRARIES)
|
set(APP_LIBRARIES)
|
||||||
|
|
||||||
|
if(ENABLE_PYTHON_BINDINGS)
|
||||||
|
if(NOT (CYTHON_FOUND AND PYTHONLIBS_FOUND))
|
||||||
|
message(FATAL_ERROR "python bindings were requested "
|
||||||
|
"(ENABLE_PYTHON_BINDINGS=1) but dependencies are not met.")
|
||||||
|
endif()
|
||||||
|
if(NOT PYTHON_VERSION_STRING STREQUAL PYTHONLIBS_VERSION_STRING)
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"Python executable and library must have the same version!"
|
||||||
|
" Found Python ${PYTHON_VERSION_STRING} and"
|
||||||
|
" PythonLibs ${PYTHONLIBS_VERSION_STRING}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_THREAD_PREFER_PTHREAD 1)
|
set(CMAKE_THREAD_PREFER_PTHREAD 1)
|
||||||
find_package(Threads)
|
find_package(Threads)
|
||||||
if(CMAKE_USE_PTHREADS_INIT)
|
if(CMAKE_USE_PTHREADS_INIT)
|
||||||
@@ -158,7 +171,7 @@ endif()
|
|||||||
# case "$host" in
|
# case "$host" in
|
||||||
# *android*)
|
# *android*)
|
||||||
# android_build=yes
|
# android_build=yes
|
||||||
# # android does not need -pthread, but needs following 3 libs for C++
|
# # android does not need -pthread, but needs followng 3 libs for C++
|
||||||
# APPLDFLAGS="$APPLDFLAGS -lstdc++ -latomic -lsupc++"
|
# APPLDFLAGS="$APPLDFLAGS -lstdc++ -latomic -lsupc++"
|
||||||
|
|
||||||
# dl: openssl requires libdl when it is statically linked.
|
# dl: openssl requires libdl when it is statically linked.
|
||||||
@@ -180,12 +193,9 @@ if(OPENSSL_FOUND)
|
|||||||
cmake_push_check_state()
|
cmake_push_check_state()
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}")
|
set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}")
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "${OPENSSL_LIBRARIES}")
|
set(CMAKE_REQUIRED_LIBRARIES "${OPENSSL_LIBRARIES}")
|
||||||
if(WIN32)
|
check_symbol_exists(SSL_is_quic "openssl/ssl.h" HAVE_SSL_IS_QUIC)
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}" "ws2_32" "bcrypt")
|
if(NOT HAVE_SSL_IS_QUIC)
|
||||||
endif()
|
message(WARNING "OpenSSL in ${OPENSSL_LIBRARIES} dose not have SSL_is_quic. HTTP/3 support cannot be enabled")
|
||||||
check_symbol_exists(SSL_provide_quic_data "openssl/ssl.h" HAVE_SSL_PROVIDE_QUIC_DATA)
|
|
||||||
if(NOT HAVE_SSL_PROVIDE_QUIC_DATA)
|
|
||||||
message(WARNING "OpenSSL in ${OPENSSL_LIBRARIES} does not have SSL_provide_quic_data. HTTP/3 support cannot be enabled")
|
|
||||||
endif()
|
endif()
|
||||||
cmake_pop_check_state()
|
cmake_pop_check_state()
|
||||||
else()
|
else()
|
||||||
@@ -222,6 +232,10 @@ endif()
|
|||||||
# jemalloc
|
# jemalloc
|
||||||
set(HAVE_JEMALLOC ${JEMALLOC_FOUND})
|
set(HAVE_JEMALLOC ${JEMALLOC_FOUND})
|
||||||
|
|
||||||
|
if(ENABLE_ASIO_LIB)
|
||||||
|
find_package(Boost 1.54.0 REQUIRED system thread)
|
||||||
|
endif()
|
||||||
|
|
||||||
# libbpf (for bpf)
|
# libbpf (for bpf)
|
||||||
set(HAVE_LIBBPF ${LIBBPF_FOUND})
|
set(HAVE_LIBBPF ${LIBBPF_FOUND})
|
||||||
if(LIBBPF_FOUND)
|
if(LIBBPF_FOUND)
|
||||||
@@ -241,9 +255,9 @@ if(ENABLE_APP AND NOT (ZLIB_FOUND AND OPENSSL_FOUND AND LIBEV_FOUND))
|
|||||||
message(FATAL_ERROR "Applications were requested (ENABLE_APP=1) but dependencies are not met.")
|
message(FATAL_ERROR "Applications were requested (ENABLE_APP=1) but dependencies are not met.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# HTTP/3 requires quictls/openssl, libngtcp2, libngtcp2_crypto_quictls
|
# HTTP/3 requires quictls/openssl, libngtcp2, libngtcp2_crypto_openssl
|
||||||
# and libnghttp3.
|
# and libnghttp3.
|
||||||
if(ENABLE_HTTP3 AND NOT (HAVE_SSL_PROVIDE_QUIC_DATA AND LIBNGTCP2_FOUND AND LIBNGTCP2_CRYPTO_QUICTLS_FOUND AND LIBNGHTTP3_FOUND))
|
if(ENABLE_HTTP3 AND NOT (HAVE_SSL_IS_QUIC AND LIBNGTCP2_FOUND AND LIBNGTCP2_CRYPTO_OPENSSL_FOUND AND LIBNGHTTP3_FOUND))
|
||||||
message(FATAL_ERROR "HTTP/3 was requested (ENABLE_HTTP3=1) but dependencies are not met.")
|
message(FATAL_ERROR "HTTP/3 was requested (ENABLE_HTTP3=1) but dependencies are not met.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -252,13 +266,13 @@ if(ENABLE_HPACK_TOOLS AND NOT HAVE_JANSSON)
|
|||||||
message(FATAL_ERROR "HPACK tools were requested (ENABLE_HPACK_TOOLS=1) but dependencies are not met.")
|
message(FATAL_ERROR "HPACK tools were requested (ENABLE_HPACK_TOOLS=1) but dependencies are not met.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# examples
|
# C++ library libnghttp2_asio
|
||||||
if(ENABLE_EXAMPLES AND NOT (OPENSSL_FOUND AND LIBEVENT_OPENSSL_FOUND))
|
if(ENABLE_EXAMPLES AND NOT (OPENSSL_FOUND AND LIBEVENT_OPENSSL_FOUND))
|
||||||
message(FATAL_ERROR "examples were requested (ENABLE_EXAMPLES=1) but dependencies are not met.")
|
message(FATAL_ERROR "examples were requested (ENABLE_EXAMPLES=1) but dependencies are not met.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# third-party http-parser only be built when needed
|
# third-party http-parser only be built when needed
|
||||||
if(ENABLE_EXAMPLES OR ENABLE_APP OR ENABLE_HPACK_TOOLS)
|
if(ENABLE_EXAMPLES OR ENABLE_APP OR ENABLE_HPACK_TOOLS OR ENABLE_ASIO_LIB)
|
||||||
set(ENABLE_THIRD_PARTY 1)
|
set(ENABLE_THIRD_PARTY 1)
|
||||||
# mruby (for src/nghttpx)
|
# mruby (for src/nghttpx)
|
||||||
set(HAVE_MRUBY ${WITH_MRUBY})
|
set(HAVE_MRUBY ${WITH_MRUBY})
|
||||||
@@ -276,13 +290,12 @@ check_include_file("inttypes.h" HAVE_INTTYPES_H)
|
|||||||
check_include_file("limits.h" HAVE_LIMITS_H)
|
check_include_file("limits.h" HAVE_LIMITS_H)
|
||||||
check_include_file("netdb.h" HAVE_NETDB_H)
|
check_include_file("netdb.h" HAVE_NETDB_H)
|
||||||
check_include_file("netinet/in.h" HAVE_NETINET_IN_H)
|
check_include_file("netinet/in.h" HAVE_NETINET_IN_H)
|
||||||
check_include_file("netinet/ip.h" HAVE_NETINET_IP_H)
|
|
||||||
check_include_file("pwd.h" HAVE_PWD_H)
|
check_include_file("pwd.h" HAVE_PWD_H)
|
||||||
check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H)
|
check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H)
|
||||||
check_include_file("sys/time.h" HAVE_SYS_TIME_H)
|
check_include_file("sys/time.h" HAVE_SYS_TIME_H)
|
||||||
check_include_file("syslog.h" HAVE_SYSLOG_H)
|
check_include_file("syslog.h" HAVE_SYSLOG_H)
|
||||||
|
check_include_file("time.h" HAVE_TIME_H)
|
||||||
check_include_file("unistd.h" HAVE_UNISTD_H)
|
check_include_file("unistd.h" HAVE_UNISTD_H)
|
||||||
check_include_file("windows.h" HAVE_WINDOWS_H)
|
|
||||||
|
|
||||||
include(CheckTypeSize)
|
include(CheckTypeSize)
|
||||||
# Checks for typedefs, structures, and compiler characteristics.
|
# Checks for typedefs, structures, and compiler characteristics.
|
||||||
@@ -312,15 +325,16 @@ endif()
|
|||||||
include(CheckStructHasMember)
|
include(CheckStructHasMember)
|
||||||
check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_STRUCT_TM_TM_GMTOFF)
|
check_struct_has_member("struct tm" tm_gmtoff time.h HAVE_STRUCT_TM_TM_GMTOFF)
|
||||||
|
|
||||||
|
# Check size of pointer to decide we need 8 bytes alignment adjustment.
|
||||||
|
check_type_size("int *" SIZEOF_INT_P)
|
||||||
|
check_type_size("time_t" SIZEOF_TIME_T)
|
||||||
|
|
||||||
# Checks for library functions.
|
# Checks for library functions.
|
||||||
include(CheckFunctionExists)
|
include(CheckFunctionExists)
|
||||||
check_function_exists(_Exit HAVE__EXIT)
|
check_function_exists(_Exit HAVE__EXIT)
|
||||||
check_function_exists(accept4 HAVE_ACCEPT4)
|
check_function_exists(accept4 HAVE_ACCEPT4)
|
||||||
check_function_exists(clock_gettime HAVE_CLOCK_GETTIME)
|
|
||||||
check_function_exists(mkostemp HAVE_MKOSTEMP)
|
check_function_exists(mkostemp HAVE_MKOSTEMP)
|
||||||
|
|
||||||
check_symbol_exists(GetTickCount64 sysinfoapi.h HAVE_GETTICKCOUNT64)
|
|
||||||
|
|
||||||
include(CheckSymbolExists)
|
include(CheckSymbolExists)
|
||||||
# XXX does this correctly detect initgroups (un)availability on cygwin?
|
# XXX does this correctly detect initgroups (un)availability on cygwin?
|
||||||
check_symbol_exists(initgroups grp.h HAVE_DECL_INITGROUPS)
|
check_symbol_exists(initgroups grp.h HAVE_DECL_INITGROUPS)
|
||||||
@@ -332,8 +346,6 @@ if(NOT HAVE_DECL_INITGROUPS AND HAVE_UNISTD_H)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
check_symbol_exists(CLOCK_MONOTONIC "time.h" HAVE_DECL_CLOCK_MONOTONIC)
|
|
||||||
|
|
||||||
set(WARNCFLAGS)
|
set(WARNCFLAGS)
|
||||||
set(WARNCXXFLAGS)
|
set(WARNCXXFLAGS)
|
||||||
if(CMAKE_C_COMPILER_ID MATCHES "MSVC")
|
if(CMAKE_C_COMPILER_ID MATCHES "MSVC")
|
||||||
@@ -343,12 +355,65 @@ if(CMAKE_C_COMPILER_ID MATCHES "MSVC")
|
|||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
if(ENABLE_WERROR)
|
if(ENABLE_WERROR)
|
||||||
set(WARNCFLAGS "-Werror")
|
extract_valid_c_flags(WARNCFLAGS -Werror)
|
||||||
set(WARNCXXFLAGS "-Werror")
|
extract_valid_c_flags(WARNCXXFLAGS -Werror)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(PickyWarningsC)
|
# For C compiler
|
||||||
include(PickyWarningsCXX)
|
extract_valid_c_flags(WARNCFLAGS
|
||||||
|
-Wall
|
||||||
|
-Wextra
|
||||||
|
-Wmissing-prototypes
|
||||||
|
-Wstrict-prototypes
|
||||||
|
-Wmissing-declarations
|
||||||
|
-Wpointer-arith
|
||||||
|
-Wdeclaration-after-statement
|
||||||
|
-Wformat-security
|
||||||
|
-Wwrite-strings
|
||||||
|
-Wshadow
|
||||||
|
-Winline
|
||||||
|
-Wnested-externs
|
||||||
|
-Wfloat-equal
|
||||||
|
-Wundef
|
||||||
|
-Wendif-labels
|
||||||
|
-Wempty-body
|
||||||
|
-Wcast-align
|
||||||
|
-Wclobbered
|
||||||
|
-Wvla
|
||||||
|
-Wpragmas
|
||||||
|
-Wunreachable-code
|
||||||
|
-Waddress
|
||||||
|
-Wattributes
|
||||||
|
-Wdiv-by-zero
|
||||||
|
-Wshorten-64-to-32
|
||||||
|
|
||||||
|
-Wconversion
|
||||||
|
-Wextended-offsetof
|
||||||
|
-Wformat-nonliteral
|
||||||
|
-Wlanguage-extension-token
|
||||||
|
-Wmissing-field-initializers
|
||||||
|
-Wmissing-noreturn
|
||||||
|
-Wmissing-variable-declarations
|
||||||
|
# Not used because we cannot change public structs
|
||||||
|
# -Wpadded
|
||||||
|
-Wsign-conversion
|
||||||
|
# Not used because this basically disallows default case
|
||||||
|
# -Wswitch-enum
|
||||||
|
-Wunreachable-code-break
|
||||||
|
-Wunused-macros
|
||||||
|
-Wunused-parameter
|
||||||
|
-Wredundant-decls
|
||||||
|
# Only work with Clang for the moment
|
||||||
|
-Wheader-guard
|
||||||
|
# This is required because we pass format string as "const char*.
|
||||||
|
-Wno-format-nonliteral
|
||||||
|
)
|
||||||
|
|
||||||
|
extract_valid_cxx_flags(WARNCXXFLAGS
|
||||||
|
# For C++ compiler
|
||||||
|
-Wall
|
||||||
|
-Wformat-security
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_STATIC_CRT)
|
if(ENABLE_STATIC_CRT)
|
||||||
@@ -391,6 +456,8 @@ set(sbindir "${CMAKE_INSTALL_FULL_SBINDIR}")
|
|||||||
foreach(name
|
foreach(name
|
||||||
lib/libnghttp2.pc
|
lib/libnghttp2.pc
|
||||||
lib/includes/nghttp2/nghttp2ver.h
|
lib/includes/nghttp2/nghttp2ver.h
|
||||||
|
src/libnghttp2_asio.pc
|
||||||
|
python/setup.py
|
||||||
integration-tests/config.go
|
integration-tests/config.go
|
||||||
integration-tests/setenv
|
integration-tests/setenv
|
||||||
doc/conf.py
|
doc/conf.py
|
||||||
@@ -401,9 +468,14 @@ foreach(name
|
|||||||
doc/tutorial-hpack.rst
|
doc/tutorial-hpack.rst
|
||||||
doc/nghttpx-howto.rst
|
doc/nghttpx-howto.rst
|
||||||
doc/h2load-howto.rst
|
doc/h2load-howto.rst
|
||||||
|
doc/libnghttp2_asio.rst
|
||||||
|
doc/python-apiref.rst
|
||||||
doc/building-android-binary.rst
|
doc/building-android-binary.rst
|
||||||
doc/nghttp2.h.rst
|
doc/nghttp2.h.rst
|
||||||
doc/nghttp2ver.h.rst
|
doc/nghttp2ver.h.rst
|
||||||
|
doc/asio_http2.h.rst
|
||||||
|
doc/asio_http2_server.h.rst
|
||||||
|
doc/asio_http2_client.h.rst
|
||||||
doc/contribute.rst
|
doc/contribute.rst
|
||||||
)
|
)
|
||||||
configure_file("${name}.in" "${name}" @ONLY)
|
configure_file("${name}.in" "${name}" @ONLY)
|
||||||
@@ -426,13 +498,13 @@ add_subdirectory(lib)
|
|||||||
#add_subdirectory(lib/includes)
|
#add_subdirectory(lib/includes)
|
||||||
add_subdirectory(third-party)
|
add_subdirectory(third-party)
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
|
#add_subdirectory(src/includes)
|
||||||
add_subdirectory(examples)
|
add_subdirectory(examples)
|
||||||
|
add_subdirectory(python)
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
#add_subdirectory(tests/testdata)
|
#add_subdirectory(tests/testdata)
|
||||||
add_subdirectory(integration-tests)
|
add_subdirectory(integration-tests)
|
||||||
if(ENABLE_DOC)
|
add_subdirectory(doc)
|
||||||
add_subdirectory(doc)
|
|
||||||
endif()
|
|
||||||
add_subdirectory(contrib)
|
add_subdirectory(contrib)
|
||||||
add_subdirectory(script)
|
add_subdirectory(script)
|
||||||
add_subdirectory(bpf)
|
add_subdirectory(bpf)
|
||||||
@@ -453,10 +525,11 @@ message(STATUS "summary of build options:
|
|||||||
CXXFLAGS: ${CMAKE_CXX_FLAGS_${_build_type}} ${CMAKE_CXX_FLAGS}
|
CXXFLAGS: ${CMAKE_CXX_FLAGS_${_build_type}} ${CMAKE_CXX_FLAGS}
|
||||||
WARNCFLAGS: ${WARNCFLAGS}
|
WARNCFLAGS: ${WARNCFLAGS}
|
||||||
CXX1XCXXFLAGS: ${CXX1XCXXFLAGS}
|
CXX1XCXXFLAGS: ${CXX1XCXXFLAGS}
|
||||||
WARNCXXFLAGS: ${WARNCXXFLAGS}
|
|
||||||
Python:
|
Python:
|
||||||
Python: ${Python3_EXECUTABLE}
|
Python: ${PYTHON_EXECUTABLE}
|
||||||
Python3_VERSION: ${Python3_VERSION}
|
PYTHON_VERSION: ${PYTHON_VERSION_STRING}
|
||||||
|
Library version:${PYTHONLIBS_VERSION_STRING}
|
||||||
|
Cython: ${CYTHON_EXECUTABLE}
|
||||||
Test:
|
Test:
|
||||||
CUnit: ${HAVE_CUNIT} (LIBS='${CUNIT_LIBRARIES}')
|
CUnit: ${HAVE_CUNIT} (LIBS='${CUNIT_LIBRARIES}')
|
||||||
Failmalloc: ${ENABLE_FAILMALLOC}
|
Failmalloc: ${ENABLE_FAILMALLOC}
|
||||||
@@ -466,7 +539,7 @@ message(STATUS "summary of build options:
|
|||||||
Libev: ${HAVE_LIBEV} (LIBS='${LIBEV_LIBRARIES}')
|
Libev: ${HAVE_LIBEV} (LIBS='${LIBEV_LIBRARIES}')
|
||||||
Libc-ares: ${HAVE_LIBCARES} (LIBS='${LIBCARES_LIBRARIES}')
|
Libc-ares: ${HAVE_LIBCARES} (LIBS='${LIBCARES_LIBRARIES}')
|
||||||
Libngtcp2: ${HAVE_LIBNGTCP2} (LIBS='${LIBNGTCP2_LIBRARIES}')
|
Libngtcp2: ${HAVE_LIBNGTCP2} (LIBS='${LIBNGTCP2_LIBRARIES}')
|
||||||
Libngtcp2_crypto_quictls: ${HAVE_LIBNGTCP2_CRYPTO_QUICTLS} (LIBS='${LIBNGTCP2_CRYPTO_QUICTLS_LIBRARIES}')
|
Libngtcp2_crypto_openssl: ${HAVE_LIBNGTCP2_CRYPTO_OPENSSL} (LIBS='${LIBNGTCP2_CRYPTO_OPENSSL_LIBRARIES}')
|
||||||
Libnghttp3: ${HAVE_LIBNGHTTP3} (LIBS='${LIBNGHTTP3_LIBRARIES}')
|
Libnghttp3: ${HAVE_LIBNGHTTP3} (LIBS='${LIBNGHTTP3_LIBRARIES}')
|
||||||
Libbpf: ${HAVE_LIBBPF} (LIBS='${LIBBPF_LIBRARIES}')
|
Libbpf: ${HAVE_LIBBPF} (LIBS='${LIBBPF_LIBRARIES}')
|
||||||
Libevent(SSL): ${HAVE_LIBEVENT_OPENSSL} (LIBS='${LIBEVENT_OPENSSL_LIBRARIES}')
|
Libevent(SSL): ${HAVE_LIBEVENT_OPENSSL} (LIBS='${LIBEVENT_OPENSSL_LIBRARIES}')
|
||||||
@@ -474,6 +547,8 @@ message(STATUS "summary of build options:
|
|||||||
Jemalloc: ${HAVE_JEMALLOC} (LIBS='${JEMALLOC_LIBRARIES}')
|
Jemalloc: ${HAVE_JEMALLOC} (LIBS='${JEMALLOC_LIBRARIES}')
|
||||||
Zlib: ${HAVE_ZLIB} (LIBS='${ZLIB_LIBRARIES}')
|
Zlib: ${HAVE_ZLIB} (LIBS='${ZLIB_LIBRARIES}')
|
||||||
Systemd: ${HAVE_SYSTEMD} (LIBS='${SYSTEMD_LIBRARIES}')
|
Systemd: ${HAVE_SYSTEMD} (LIBS='${SYSTEMD_LIBRARIES}')
|
||||||
|
Boost::System: ${Boost_SYSTEM_LIBRARY}
|
||||||
|
Boost::Thread: ${Boost_THREAD_LIBRARY}
|
||||||
Third-party:
|
Third-party:
|
||||||
http-parser: ${ENABLE_THIRD_PARTY}
|
http-parser: ${ENABLE_THIRD_PARTY}
|
||||||
MRuby: ${HAVE_MRUBY}
|
MRuby: ${HAVE_MRUBY}
|
||||||
@@ -481,7 +556,9 @@ message(STATUS "summary of build options:
|
|||||||
Features:
|
Features:
|
||||||
Applications: ${ENABLE_APP}
|
Applications: ${ENABLE_APP}
|
||||||
HPACK tools: ${ENABLE_HPACK_TOOLS}
|
HPACK tools: ${ENABLE_HPACK_TOOLS}
|
||||||
|
Libnghttp2_asio:${ENABLE_ASIO_LIB}
|
||||||
Examples: ${ENABLE_EXAMPLES}
|
Examples: ${ENABLE_EXAMPLES}
|
||||||
|
Python bindings:${ENABLE_PYTHON_BINDINGS}
|
||||||
Threading: ${ENABLE_THREADS}
|
Threading: ${ENABLE_THREADS}
|
||||||
HTTP/3(EXPERIMENTAL): ${ENABLE_HTTP3}
|
HTTP/3(EXPERIMENTAL): ${ENABLE_HTTP3}
|
||||||
")
|
")
|
||||||
|
|||||||
@@ -7,22 +7,25 @@ option(ENABLE_APP "Build applications (nghttp, nghttpd, nghttpx and h2load
|
|||||||
${ENABLE_APP_DEFAULT})
|
${ENABLE_APP_DEFAULT})
|
||||||
option(ENABLE_HPACK_TOOLS "Build HPACK tools"
|
option(ENABLE_HPACK_TOOLS "Build HPACK tools"
|
||||||
${ENABLE_HPACK_TOOLS_DEFAULT})
|
${ENABLE_HPACK_TOOLS_DEFAULT})
|
||||||
|
option(ENABLE_ASIO_LIB "Build C++ libnghttp2_asio library")
|
||||||
option(ENABLE_EXAMPLES "Build examples"
|
option(ENABLE_EXAMPLES "Build examples"
|
||||||
${ENABLE_EXAMPLES_DEFAULT})
|
${ENABLE_EXAMPLES_DEFAULT})
|
||||||
|
option(ENABLE_PYTHON_BINDINGS "Build Python bindings"
|
||||||
|
${ENABLE_PYTHON_BINDINGS_DEFAULT})
|
||||||
option(ENABLE_FAILMALLOC "Build failmalloc test program" ON)
|
option(ENABLE_FAILMALLOC "Build failmalloc test program" ON)
|
||||||
option(ENABLE_LIB_ONLY "Build libnghttp2 only. This is a short hand for -DENABLE_APP=0 -DENABLE_EXAMPLES=0 -DENABLE_HPACK_TOOLS=0")
|
option(ENABLE_LIB_ONLY "Build libnghttp2 only. This is a short hand for -DENABLE_APP=0 -DENABLE_EXAMPLES=0 -DENABLE_HPACK_TOOLS=0 -DENABLE_PYTHON_BINDINGS=0")
|
||||||
option(ENABLE_STATIC_LIB "Build libnghttp2 in static mode also")
|
option(ENABLE_STATIC_LIB "Build libnghttp2 in static mode also")
|
||||||
option(ENABLE_SHARED_LIB "Build libnghttp2 as a shared library" ON)
|
option(ENABLE_SHARED_LIB "Build libnghttp2 as a shared library" ON)
|
||||||
option(ENABLE_STATIC_CRT "Build libnghttp2 against the MS LIBCMT[d]")
|
option(ENABLE_STATIC_CRT "Build libnghttp2 against the MS LIBCMT[d]")
|
||||||
option(ENABLE_HTTP3 "Enable HTTP/3 support" OFF)
|
option(ENABLE_HTTP3 "Enable HTTP/3 support" OFF)
|
||||||
option(ENABLE_DOC "Build documentation" ON)
|
|
||||||
|
|
||||||
option(WITH_LIBXML2 "Use libxml2"
|
option(WITH_LIBXML2 "Use libxml2"
|
||||||
${WITH_LIBXML2_DEFAULT})
|
${WITH_LIBXML2_DEFAULT})
|
||||||
option(WITH_JEMALLOC "Use jemalloc"
|
option(WITH_JEMALLOC "Use jemalloc"
|
||||||
${WITH_JEMALLOC_DEFAULT})
|
${WITH_JEMALLOC_DEFAULT})
|
||||||
|
option(WITH_SPDYLAY "Use spdylay"
|
||||||
|
${WITH_SPDYLAY_DEFAULT})
|
||||||
option(WITH_MRUBY "Use mruby")
|
option(WITH_MRUBY "Use mruby")
|
||||||
option(WITH_NEVERBLEED "Use neverbleed")
|
option(WITH_NEVERBLEED "Use neverbleed")
|
||||||
option(WITH_LIBBPF "Use libbpf")
|
|
||||||
|
|
||||||
# vim: ft=cmake:
|
# vim: ft=cmake:
|
||||||
|
|||||||
@@ -12,41 +12,59 @@
|
|||||||
|
|
||||||
|
|
||||||
# Only use standalone-toolchain for reduce size
|
# Only use standalone-toolchain for reduce size
|
||||||
FROM ubuntu:22.04
|
FROM ubuntu:xenial
|
||||||
MAINTAINER Tatsuhiro Tsujikawa
|
MAINTAINER Tatsuhiro Tsujikawa
|
||||||
|
ENV ANDROID_HOME /root
|
||||||
|
ENV TOOLCHAIN $ANDROID_HOME/toolchain
|
||||||
|
ENV PATH $TOOLCHAIN/bin:$PATH
|
||||||
|
|
||||||
ENV NDK_VERSION r25b
|
ENV NDK_VERSION r14b
|
||||||
ENV NDK /root/android-ndk-$NDK_VERSION
|
|
||||||
ENV TOOLCHAIN $NDK/toolchains/llvm/prebuilt/linux-x86_64
|
|
||||||
ENV TARGET aarch64-linux-android
|
|
||||||
ENV API 33
|
|
||||||
ENV AR $TOOLCHAIN/bin/llvm-ar
|
|
||||||
ENV CC $TOOLCHAIN/bin/$TARGET$API-clang
|
|
||||||
ENV CXX $TOOLCHAIN/bin/$TARGET$API-clang++
|
|
||||||
ENV LD $TOOLCHAIN/bin/ld
|
|
||||||
ENV RANDLIB $TOOLCHAIN/bin/llvm-ranlib
|
|
||||||
ENV STRIP $TOOLCHAIN/bin/llvm-strip
|
|
||||||
ENV PREFIX /root/usr/local
|
|
||||||
|
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
RUN apt-get update && \
|
RUN apt-get update && \
|
||||||
apt-get install -y unzip make binutils autoconf \
|
apt-get install -y unzip make binutils autoconf \
|
||||||
automake autotools-dev libtool pkg-config git \
|
automake autotools-dev libtool pkg-config git \
|
||||||
curl dpkg-dev libxml2-dev genisoimage libc6-i386 \
|
curl dpkg-dev libxml2-dev genisoimage libc6-i386 \
|
||||||
lib32stdc++6 && \
|
lib32stdc++6 python&& \
|
||||||
rm -rf /var/cache/apt/*
|
rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
# Download NDK
|
# Install toolchain
|
||||||
RUN curl -L -O https://dl.google.com/android/repository/android-ndk-$NDK_VERSION-linux.zip && \
|
RUN curl -L -O https://dl.google.com/android/repository/android-ndk-$NDK_VERSION-linux-x86_64.zip && \
|
||||||
unzip -q android-ndk-$NDK_VERSION-linux.zip && \
|
unzip -q android-ndk-$NDK_VERSION-linux-x86_64.zip && \
|
||||||
rm android-ndk-$NDK_VERSION-linux.zip
|
rm android-ndk-$NDK_VERSION-linux-x86_64.zip && \
|
||||||
|
mkdir -p $ANDROID_HOME/toolchain && \
|
||||||
|
$ANDROID_HOME/android-ndk-$NDK_VERSION/build/tools/make-standalone-toolchain.sh \
|
||||||
|
--install-dir=$ANDROID_HOME/toolchain \
|
||||||
|
--toolchain=arm-linux-androideabi-4.9 \
|
||||||
|
--force && \
|
||||||
|
rm -r android-ndk-$NDK_VERSION
|
||||||
|
|
||||||
|
ENV PREFIX /root/usr/local
|
||||||
|
|
||||||
# Setup version of libraries
|
# Setup version of libraries
|
||||||
ENV OPENSSL_VERSION 1.1.1q
|
ENV OPENSSL_VERSION 1.0.2d
|
||||||
ENV LIBEV_VERSION 4.33
|
ENV SPDYLAY_VERSION v1.4.0
|
||||||
ENV ZLIB_VERSION 1.2.13
|
ENV LIBEV_VERSION 4.19
|
||||||
ENV CARES_VERSION 1.18.1
|
ENV ZLIB_VERSION 1.2.8
|
||||||
ENV NGHTTP2_VERSION master
|
ENV CARES_VERSION 1.13.0
|
||||||
|
ENV NGHTTP2_VERSION v1.24.0
|
||||||
|
|
||||||
|
WORKDIR /root/build
|
||||||
|
RUN git clone https://github.com/tatsuhiro-t/spdylay -b $SPDYLAY_VERSION --depth 1
|
||||||
|
WORKDIR /root/build/spdylay
|
||||||
|
RUN autoreconf -i && \
|
||||||
|
./configure \
|
||||||
|
--disable-shared \
|
||||||
|
--host=arm-linux-androideabi \
|
||||||
|
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
||||||
|
--prefix=$PREFIX \
|
||||||
|
--without-libxml2 \
|
||||||
|
--disable-src \
|
||||||
|
--disable-examples \
|
||||||
|
CPPFLAGS="-I$PREFIX/include" \
|
||||||
|
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
||||||
|
LDFLAGS="-L$PREFIX/lib" && \
|
||||||
|
make install
|
||||||
|
|
||||||
WORKDIR /root/build
|
WORKDIR /root/build
|
||||||
RUN curl -L -O https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz && \
|
RUN curl -L -O https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz && \
|
||||||
@@ -54,18 +72,20 @@ RUN curl -L -O https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz &&
|
|||||||
rm openssl-$OPENSSL_VERSION.tar.gz
|
rm openssl-$OPENSSL_VERSION.tar.gz
|
||||||
|
|
||||||
WORKDIR /root/build/openssl-$OPENSSL_VERSION
|
WORKDIR /root/build/openssl-$OPENSSL_VERSION
|
||||||
RUN export ANDROID_NDK_HOME=$NDK PATH=$TOOLCHAIN/bin:$PATH && \
|
RUN export CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi- && \
|
||||||
./Configure no-shared --prefix=$PREFIX android-arm64 && \
|
./Configure --prefix=$PREFIX android && \
|
||||||
make && make install_sw
|
make && make install_sw
|
||||||
|
|
||||||
WORKDIR /root/build
|
WORKDIR /root/build
|
||||||
RUN curl -L -O http://dist.schmorp.de/libev/Attic/libev-$LIBEV_VERSION.tar.gz && \
|
RUN curl -L -O http://dist.schmorp.de/libev/Attic/libev-$LIBEV_VERSION.tar.gz && \
|
||||||
|
curl -L -O https://gist.github.com/tatsuhiro-t/48c45f08950f587180ed/raw/80a8f003b5d1091eae497c5995bbaa68096e739b/libev-4.19-android.patch && \
|
||||||
tar xf libev-$LIBEV_VERSION.tar.gz && \
|
tar xf libev-$LIBEV_VERSION.tar.gz && \
|
||||||
rm libev-$LIBEV_VERSION.tar.gz
|
rm libev-$LIBEV_VERSION.tar.gz
|
||||||
|
|
||||||
WORKDIR /root/build/libev-$LIBEV_VERSION
|
WORKDIR /root/build/libev-$LIBEV_VERSION
|
||||||
RUN ./configure \
|
RUN patch -p1 < ../libev-4.19-android.patch && \
|
||||||
--host=$TARGET \
|
./configure \
|
||||||
|
--host=arm-linux-androideabi \
|
||||||
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
||||||
--prefix=$PREFIX \
|
--prefix=$PREFIX \
|
||||||
--disable-shared \
|
--disable-shared \
|
||||||
@@ -75,12 +95,17 @@ RUN ./configure \
|
|||||||
make install
|
make install
|
||||||
|
|
||||||
WORKDIR /root/build
|
WORKDIR /root/build
|
||||||
RUN curl -L -O https://zlib.net/zlib-$ZLIB_VERSION.tar.gz && \
|
RUN curl -L -O https://downloads.sourceforge.net/project/libpng/zlib/$ZLIB_VERSION/zlib-$ZLIB_VERSION.tar.gz && \
|
||||||
tar xf zlib-$ZLIB_VERSION.tar.gz && \
|
tar xf zlib-$ZLIB_VERSION.tar.gz && \
|
||||||
rm zlib-$ZLIB_VERSION.tar.gz
|
rm zlib-$ZLIB_VERSION.tar.gz
|
||||||
|
|
||||||
WORKDIR /root/build/zlib-$ZLIB_VERSION
|
WORKDIR /root/build/zlib-$ZLIB_VERSION
|
||||||
RUN HOST=$TARGET \
|
RUN HOST=arm-linux-androideabi \
|
||||||
|
CC=$HOST-gcc \
|
||||||
|
AR=$HOST-ar \
|
||||||
|
LD=$HOST-ld \
|
||||||
|
RANLIB=$HOST-ranlib \
|
||||||
|
STRIP=$HOST-strip \
|
||||||
./configure \
|
./configure \
|
||||||
--prefix=$PREFIX \
|
--prefix=$PREFIX \
|
||||||
--libdir=$PREFIX/lib \
|
--libdir=$PREFIX/lib \
|
||||||
@@ -96,7 +121,7 @@ RUN curl -L -O https://c-ares.haxx.se/download/c-ares-$CARES_VERSION.tar.gz && \
|
|||||||
|
|
||||||
WORKDIR /root/build/c-ares-$CARES_VERSION
|
WORKDIR /root/build/c-ares-$CARES_VERSION
|
||||||
RUN ./configure \
|
RUN ./configure \
|
||||||
--host=$TARGET \
|
--host=arm-linux-androideabi \
|
||||||
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
||||||
--prefix=$PREFIX \
|
--prefix=$PREFIX \
|
||||||
--disable-shared && \
|
--disable-shared && \
|
||||||
@@ -109,13 +134,17 @@ RUN autoreconf -i && \
|
|||||||
./configure \
|
./configure \
|
||||||
--enable-app \
|
--enable-app \
|
||||||
--disable-shared \
|
--disable-shared \
|
||||||
--host=$TARGET \
|
--host=arm-linux-androideabi \
|
||||||
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
||||||
|
--with-xml-prefix="$PREFIX" \
|
||||||
--without-libxml2 \
|
--without-libxml2 \
|
||||||
|
--disable-python-bindings \
|
||||||
--disable-examples \
|
--disable-examples \
|
||||||
--disable-threads \
|
--disable-threads \
|
||||||
|
CC="$TOOLCHAIN"/bin/arm-linux-androideabi-clang \
|
||||||
|
CXX="$TOOLCHAIN"/bin/arm-linux-androideabi-clang++ \
|
||||||
CPPFLAGS="-fPIE -I$PREFIX/include" \
|
CPPFLAGS="-fPIE -I$PREFIX/include" \
|
||||||
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
||||||
LDFLAGS="-fPIE -pie -L$PREFIX/lib" && \
|
LDFLAGS="-fPIE -pie -L$PREFIX/lib" && \
|
||||||
make && \
|
make && \
|
||||||
$STRIP src/nghttpx src/nghttpd src/nghttp
|
arm-linux-androideabi-strip src/nghttpx src/nghttpd src/nghttp
|
||||||
|
|||||||
20
Makefile.am
20
Makefile.am
@@ -20,14 +20,19 @@
|
|||||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
SUBDIRS = lib third-party src bpf examples tests integration-tests \
|
SUBDIRS = lib third-party src bpf examples python tests integration-tests \
|
||||||
doc contrib script
|
doc contrib script
|
||||||
|
|
||||||
|
# Now with python setuptools, make uninstall will leave many files we
|
||||||
|
# cannot easily remove (e.g., easy-install.pth). Disable it for
|
||||||
|
# distcheck rule.
|
||||||
|
AM_DISTCHECK_CONFIGURE_FLAGS = --disable-python-bindings
|
||||||
|
|
||||||
ACLOCAL_AMFLAGS = -I m4
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
dist_doc_DATA = README.rst
|
dist_doc_DATA = README.rst
|
||||||
|
|
||||||
EXTRA_DIST = nghttpx.conf.sample proxy.pac.sample android-config android-env \
|
EXTRA_DIST = nghttpx.conf.sample proxy.pac.sample android-config android-make \
|
||||||
Dockerfile.android \
|
Dockerfile.android \
|
||||||
cmakeconfig.h.in \
|
cmakeconfig.h.in \
|
||||||
CMakeLists.txt \
|
CMakeLists.txt \
|
||||||
@@ -37,6 +42,7 @@ EXTRA_DIST = nghttpx.conf.sample proxy.pac.sample android-config android-env \
|
|||||||
cmake/FindLibev.cmake \
|
cmake/FindLibev.cmake \
|
||||||
cmake/FindCUnit.cmake \
|
cmake/FindCUnit.cmake \
|
||||||
cmake/Version.cmake \
|
cmake/Version.cmake \
|
||||||
|
cmake/FindCython.cmake \
|
||||||
cmake/FindLibevent.cmake \
|
cmake/FindLibevent.cmake \
|
||||||
cmake/FindJansson.cmake \
|
cmake/FindJansson.cmake \
|
||||||
cmake/FindLibcares.cmake \
|
cmake/FindLibcares.cmake \
|
||||||
@@ -44,18 +50,16 @@ EXTRA_DIST = nghttpx.conf.sample proxy.pac.sample android-config android-env \
|
|||||||
cmake/FindLibbpf.cmake \
|
cmake/FindLibbpf.cmake \
|
||||||
cmake/FindLibnghttp3.cmake \
|
cmake/FindLibnghttp3.cmake \
|
||||||
cmake/FindLibngtcp2.cmake \
|
cmake/FindLibngtcp2.cmake \
|
||||||
cmake/FindLibngtcp2_crypto_quictls.cmake \
|
cmake/FindLibngtcp2_crypto_openssl.cmake
|
||||||
cmake/PickyWarningsC.cmake \
|
|
||||||
cmake/PickyWarningsCXX.cmake
|
|
||||||
|
|
||||||
.PHONY: clang-format
|
.PHONY: clang-format
|
||||||
|
|
||||||
# Format source files using clang-format. Don't format source files
|
# Format source files using clang-format. Don't format source files
|
||||||
# under third-party directory since we are not responsible for their
|
# under third-party directory since we are not responsible for thier
|
||||||
# coding style.
|
# coding style.
|
||||||
clang-format:
|
clang-format:
|
||||||
CLANGFORMAT=`git config --get clangformat.binary`; \
|
CLANGFORMAT=`git config --get clangformat.binary`; \
|
||||||
test -z $${CLANGFORMAT} && CLANGFORMAT="clang-format"; \
|
test -z $${CLANGFORMAT} && CLANGFORMAT="clang-format"; \
|
||||||
$${CLANGFORMAT} -i lib/*.{c,h} lib/includes/nghttp2/*.h \
|
$${CLANGFORMAT} -i lib/*.{c,h} lib/includes/nghttp2/*.h \
|
||||||
src/*.{c,cc,h} examples/*.c \
|
src/*.{c,cc,h} src/includes/nghttp2/*.h examples/*.{c,cc} \
|
||||||
tests/*.{c,h} bpf/*.c fuzz/*.cc
|
tests/*.{c,h}
|
||||||
|
|||||||
337
README.rst
337
README.rst
@@ -11,14 +11,17 @@ HTTP/2.
|
|||||||
|
|
||||||
An HPACK encoder and decoder are available as a public API.
|
An HPACK encoder and decoder are available as a public API.
|
||||||
|
|
||||||
|
An experimental high level C++ library is also available.
|
||||||
|
|
||||||
|
We have Python bindings of this library, but we do not have full
|
||||||
|
code coverage yet.
|
||||||
|
|
||||||
Development Status
|
Development Status
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
nghttp2 was originally developed based on `RFC 7540
|
We have implemented `RFC 7540 <https://tools.ietf.org/html/rfc7540>`_
|
||||||
<https://tools.ietf.org/html/rfc7540>`_ HTTP/2 and `RFC 7541
|
HTTP/2 and `RFC 7541 <https://tools.ietf.org/html/rfc7541>`_ HPACK -
|
||||||
<https://tools.ietf.org/html/rfc7541>`_ HPACK - Header Compression for
|
Header Compression for HTTP/2
|
||||||
HTTP/2. Now we are updating our code to implement `RFC 9113
|
|
||||||
<https://datatracker.ietf.org/doc/html/rfc9113>`_.
|
|
||||||
|
|
||||||
The nghttp2 code base was forked from the spdylay
|
The nghttp2 code base was forked from the spdylay
|
||||||
(https://github.com/tatsuhiro-t/spdylay) project.
|
(https://github.com/tatsuhiro-t/spdylay) project.
|
||||||
@@ -29,14 +32,12 @@ Public Test Server
|
|||||||
The following endpoints are available to try out our nghttp2
|
The following endpoints are available to try out our nghttp2
|
||||||
implementation.
|
implementation.
|
||||||
|
|
||||||
* https://nghttp2.org/ (TLS + ALPN and HTTP/3)
|
* https://nghttp2.org/ (TLS + ALPN/NPN)
|
||||||
|
|
||||||
This endpoint supports ``h2``, ``h2-16``, ``h2-14``, and
|
This endpoint supports ``h2``, ``h2-16``, ``h2-14``, and
|
||||||
``http/1.1`` via ALPN and requires TLSv1.2 for HTTP/2
|
``http/1.1`` via ALPN/NPN and requires TLSv1.2 for HTTP/2
|
||||||
connection.
|
connection.
|
||||||
|
|
||||||
It also supports HTTP/3.
|
|
||||||
|
|
||||||
* http://nghttp2.org/ (HTTP Upgrade and HTTP/2 Direct)
|
* http://nghttp2.org/ (HTTP Upgrade and HTTP/2 Direct)
|
||||||
|
|
||||||
``h2c`` and ``http/1.1``.
|
``h2c`` and ``http/1.1``.
|
||||||
@@ -66,12 +67,15 @@ To build and run the application programs (``nghttp``, ``nghttpd``,
|
|||||||
``nghttpx`` and ``h2load``) in the ``src`` directory, the following packages
|
``nghttpx`` and ``h2load``) in the ``src`` directory, the following packages
|
||||||
are required:
|
are required:
|
||||||
|
|
||||||
* OpenSSL >= 1.1.1; or LibreSSL >= 3.8.1; or aws-lc >= 1.19.0; or
|
* OpenSSL >= 1.0.1
|
||||||
BoringSSL
|
|
||||||
* libev >= 4.11
|
* libev >= 4.11
|
||||||
* zlib >= 1.2.3
|
* zlib >= 1.2.3
|
||||||
* libc-ares >= 1.7.5
|
* libc-ares >= 1.7.5
|
||||||
|
|
||||||
|
ALPN support requires OpenSSL >= 1.0.2 (released 22 January 2015).
|
||||||
|
LibreSSL >= 2.2.0 can be used instead of OpenSSL, but OpenSSL has more
|
||||||
|
features than LibreSSL at the time of this writing.
|
||||||
|
|
||||||
To enable ``-a`` option (getting linked assets from the downloaded
|
To enable ``-a`` option (getting linked assets from the downloaded
|
||||||
resource) in ``nghttp``, the following package is required:
|
resource) in ``nghttp``, the following package is required:
|
||||||
|
|
||||||
@@ -100,10 +104,31 @@ To mitigate heap fragmentation in long running server programs
|
|||||||
Alpine Linux currently does not support malloc replacement
|
Alpine Linux currently does not support malloc replacement
|
||||||
due to musl limitations. See details in issue `#762 <https://github.com/nghttp2/nghttp2/issues/762>`_.
|
due to musl limitations. See details in issue `#762 <https://github.com/nghttp2/nghttp2/issues/762>`_.
|
||||||
|
|
||||||
|
libnghttp2_asio C++ library requires the following packages:
|
||||||
|
|
||||||
|
* libboost-dev >= 1.54.0
|
||||||
|
* libboost-thread-dev >= 1.54.0
|
||||||
|
|
||||||
|
The Python bindings require the following packages:
|
||||||
|
|
||||||
|
* cython >= 0.19
|
||||||
|
* python >= 3.8
|
||||||
|
* python-setuptools
|
||||||
|
|
||||||
|
If you are using Ubuntu 16.04 LTS (Xenial Xerus) or Debian 8 (jessie)
|
||||||
|
and above, run the following to install the required packages:
|
||||||
|
|
||||||
|
.. code-block:: text
|
||||||
|
|
||||||
|
sudo apt-get install g++ make binutils autoconf automake autotools-dev libtool pkg-config \
|
||||||
|
zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev libjansson-dev \
|
||||||
|
libc-ares-dev libjemalloc-dev libsystemd-dev \
|
||||||
|
cython python3-dev python-setuptools
|
||||||
|
|
||||||
To enable mruby support for nghttpx, `mruby
|
To enable mruby support for nghttpx, `mruby
|
||||||
<https://github.com/mruby/mruby>`_ is required. We need to build
|
<https://github.com/mruby/mruby>`_ is required. We need to build
|
||||||
mruby with C++ ABI explicitly turned on, and probably need other
|
mruby with C++ ABI explicitly turned on, and probably need other
|
||||||
mrgems, mruby is managed by git submodule under third-party/mruby
|
mrgems, mruby is manged by git submodule under third-party/mruby
|
||||||
directory. Currently, mruby support for nghttpx is disabled by
|
directory. Currently, mruby support for nghttpx is disabled by
|
||||||
default. To enable mruby support, use ``--with-mruby`` configure
|
default. To enable mruby support, use ``--with-mruby`` configure
|
||||||
option. Note that at the time of this writing, libmruby-dev and mruby
|
option. Note that at the time of this writing, libmruby-dev and mruby
|
||||||
@@ -115,21 +140,18 @@ required:
|
|||||||
* bison
|
* bison
|
||||||
|
|
||||||
nghttpx supports `neverbleed <https://github.com/h2o/neverbleed>`_,
|
nghttpx supports `neverbleed <https://github.com/h2o/neverbleed>`_,
|
||||||
privilege separation engine for OpenSSL. In short, it minimizes the
|
privilege separation engine for OpenSSL / LibreSSL. In short, it
|
||||||
risk of private key leakage when serious bug like Heartbleed is
|
minimizes the risk of private key leakage when serious bug like
|
||||||
exploited. The neverbleed is disabled by default. To enable it, use
|
Heartbleed is exploited. The neverbleed is disabled by default. To
|
||||||
``--with-neverbleed`` configure option.
|
enable it, use ``--with-neverbleed`` configure option.
|
||||||
|
|
||||||
To enable the experimental HTTP/3 support for h2load and nghttpx, the
|
To enable the experimental HTTP/3 support for h2load and nghttpx, the
|
||||||
following libraries are required:
|
following libraries are required:
|
||||||
|
|
||||||
* `OpenSSL with QUIC support
|
* `OpenSSL with QUIC support
|
||||||
<https://github.com/quictls/openssl/tree/OpenSSL_1_1_1w+quic>`_; or
|
<https://github.com/quictls/openssl/tree/OpenSSL_1_1_1k+quic>`_
|
||||||
LibreSSL (does not support 0RTT); or aws-lc; or
|
* `ngtcp2 <https://github.com/ngtcp2/ngtcp2>`_
|
||||||
`BoringSSL <https://boringssl.googlesource.com/boringssl/>`_ (commit
|
* `nghttp3 <https://github.com/ngtcp2/nghttp3>`_
|
||||||
f42be90d665b6a376177648ccbb76fbbd6497c13)
|
|
||||||
* `ngtcp2 <https://github.com/ngtcp2/ngtcp2>`_ >= 1.0.0
|
|
||||||
* `nghttp3 <https://github.com/ngtcp2/nghttp3>`_ >= 1.1.0
|
|
||||||
|
|
||||||
Use ``--enable-http3`` configure option to enable HTTP/3 feature for
|
Use ``--enable-http3`` configure option to enable HTTP/3 feature for
|
||||||
h2load and nghttpx.
|
h2load and nghttpx.
|
||||||
@@ -138,13 +160,13 @@ In order to build optional eBPF program to direct an incoming QUIC UDP
|
|||||||
datagram to a correct socket for nghttpx, the following libraries are
|
datagram to a correct socket for nghttpx, the following libraries are
|
||||||
required:
|
required:
|
||||||
|
|
||||||
* libbpf-dev >= 0.7.0
|
* libbpf-dev >= 0.4.0
|
||||||
|
|
||||||
Use ``--with-libbpf`` configure option to build eBPF program.
|
Use ``--with-libbpf`` configure option to build eBPF program.
|
||||||
libelf-dev is needed to build libbpf.
|
libelf-dev is needed to build libbpf.
|
||||||
|
|
||||||
For Ubuntu 20.04, you can build libbpf from `the source code
|
For Ubuntu 20.04, you can build libbpf from `the source code
|
||||||
<https://github.com/libbpf/libbpf/releases/tag/v1.3.0>`_. nghttpx
|
<https://github.com/libbpf/libbpf/releases/tag/v0.4.0>`_. nghttpx
|
||||||
requires eBPF program for reloading its configuration and hot swapping
|
requires eBPF program for reloading its configuration and hot swapping
|
||||||
its executable.
|
its executable.
|
||||||
|
|
||||||
@@ -198,18 +220,6 @@ language features.
|
|||||||
responsible to specify the correct values to these variables. For
|
responsible to specify the correct values to these variables. For
|
||||||
complete list of these variables, run ``./configure -h``.
|
complete list of these variables, run ``./configure -h``.
|
||||||
|
|
||||||
If you are using Ubuntu 22.04 LTS, run the following to install the
|
|
||||||
required packages:
|
|
||||||
|
|
||||||
.. code-block:: text
|
|
||||||
|
|
||||||
sudo apt-get install g++ clang make binutils autoconf automake \
|
|
||||||
autotools-dev libtool pkg-config \
|
|
||||||
zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev \
|
|
||||||
libevent-dev libjansson-dev \
|
|
||||||
libc-ares-dev libjemalloc-dev libsystemd-dev \
|
|
||||||
ruby-dev bison libelf-dev
|
|
||||||
|
|
||||||
Building nghttp2 from release tar archive
|
Building nghttp2 from release tar archive
|
||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
|
|
||||||
@@ -331,9 +341,9 @@ configure script with ``--enable-http3``.
|
|||||||
For nghttpx to reload configurations and swapping its executable while
|
For nghttpx to reload configurations and swapping its executable while
|
||||||
gracefully terminating old worker processes, eBPF is required. Run
|
gracefully terminating old worker processes, eBPF is required. Run
|
||||||
the configure script with ``--enable-http3 --with-libbpf`` to build
|
the configure script with ``--enable-http3 --with-libbpf`` to build
|
||||||
eBPF program. The QUIC keying material must be set with
|
eBPF program. The Connection ID encryption key must be set with
|
||||||
``--frontend-quic-secret-file`` in order to keep the existing
|
``--frontend-quic-connection-id-encryption-key`` and must not change
|
||||||
connections alive during reload.
|
in order to keep the existing connections alive during reload.
|
||||||
|
|
||||||
The detailed steps to build HTTP/3 enabled h2load and nghttpx follow.
|
The detailed steps to build HTTP/3 enabled h2load and nghttpx follow.
|
||||||
|
|
||||||
@@ -341,7 +351,7 @@ Build custom OpenSSL:
|
|||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ git clone --depth 1 -b OpenSSL_1_1_1w+quic https://github.com/quictls/openssl
|
$ git clone --depth 1 -b OpenSSL_1_1_1l+quic https://github.com/quictls/openssl
|
||||||
$ cd openssl
|
$ cd openssl
|
||||||
$ ./config --prefix=$PWD/build --openssldir=/etc/ssl
|
$ ./config --prefix=$PWD/build --openssldir=/etc/ssl
|
||||||
$ make -j$(nproc)
|
$ make -j$(nproc)
|
||||||
@@ -352,7 +362,7 @@ Build nghttp3:
|
|||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ git clone --depth 1 -b v1.1.0 https://github.com/ngtcp2/nghttp3
|
$ git clone --depth 1 https://github.com/ngtcp2/nghttp3
|
||||||
$ cd nghttp3
|
$ cd nghttp3
|
||||||
$ autoreconf -i
|
$ autoreconf -i
|
||||||
$ ./configure --prefix=$PWD/build --enable-lib-only
|
$ ./configure --prefix=$PWD/build --enable-lib-only
|
||||||
@@ -364,7 +374,7 @@ Build ngtcp2:
|
|||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ git clone --depth 1 -b v1.2.0 https://github.com/ngtcp2/ngtcp2
|
$ git clone --depth 1 https://github.com/ngtcp2/ngtcp2
|
||||||
$ cd ngtcp2
|
$ cd ngtcp2
|
||||||
$ autoreconf -i
|
$ autoreconf -i
|
||||||
$ ./configure --prefix=$PWD/build --enable-lib-only \
|
$ ./configure --prefix=$PWD/build --enable-lib-only \
|
||||||
@@ -373,12 +383,12 @@ Build ngtcp2:
|
|||||||
$ make install
|
$ make install
|
||||||
$ cd ..
|
$ cd ..
|
||||||
|
|
||||||
If your Linux distribution does not have libbpf-dev >= 0.7.0, build
|
If your Linux distribution does not have libbpf-dev >= 0.4.0, build
|
||||||
from source:
|
from source:
|
||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ git clone --depth 1 -b v1.3.0 https://github.com/libbpf/libbpf
|
$ git clone --depth 1 -b v0.4.0 https://github.com/libbpf/libbpf
|
||||||
$ cd libbpf
|
$ cd libbpf
|
||||||
$ PREFIX=$PWD/build make -C src install
|
$ PREFIX=$PWD/build make -C src install
|
||||||
$ cd ..
|
$ cd ..
|
||||||
@@ -392,7 +402,8 @@ Build nghttp2:
|
|||||||
$ git submodule update --init
|
$ git submodule update --init
|
||||||
$ autoreconf -i
|
$ autoreconf -i
|
||||||
$ ./configure --with-mruby --with-neverbleed --enable-http3 --with-libbpf \
|
$ ./configure --with-mruby --with-neverbleed --enable-http3 --with-libbpf \
|
||||||
CC=clang-14 CXX=clang++-14 \
|
--disable-python-bindings \
|
||||||
|
CC=clang-12 CXX=clang++-12 \
|
||||||
PKG_CONFIG_PATH="$PWD/../openssl/build/lib/pkgconfig:$PWD/../nghttp3/build/lib/pkgconfig:$PWD/../ngtcp2/build/lib/pkgconfig:$PWD/../libbpf/build/lib64/pkgconfig" \
|
PKG_CONFIG_PATH="$PWD/../openssl/build/lib/pkgconfig:$PWD/../nghttp3/build/lib/pkgconfig:$PWD/../ngtcp2/build/lib/pkgconfig:$PWD/../libbpf/build/lib64/pkgconfig" \
|
||||||
LDFLAGS="$LDFLAGS -Wl,-rpath,$PWD/../openssl/build/lib -Wl,-rpath,$PWD/../libbpf/build/lib64"
|
LDFLAGS="$LDFLAGS -Wl,-rpath,$PWD/../openssl/build/lib -Wl,-rpath,$PWD/../libbpf/build/lib64"
|
||||||
$ make -j$(nproc)
|
$ make -j$(nproc)
|
||||||
@@ -537,7 +548,7 @@ nghttp - client
|
|||||||
+++++++++++++++
|
+++++++++++++++
|
||||||
|
|
||||||
``nghttp`` is a HTTP/2 client. It can connect to the HTTP/2 server
|
``nghttp`` is a HTTP/2 client. It can connect to the HTTP/2 server
|
||||||
with prior knowledge, HTTP Upgrade and ALPN TLS extension.
|
with prior knowledge, HTTP Upgrade and NPN/ALPN TLS extension.
|
||||||
|
|
||||||
It has verbose output mode for framing information. Here is sample
|
It has verbose output mode for framing information. Here is sample
|
||||||
output from ``nghttp`` client:
|
output from ``nghttp`` client:
|
||||||
@@ -763,8 +774,8 @@ nghttpd - server
|
|||||||
By default, it uses SSL/TLS connection. Use ``--no-tls`` option to
|
By default, it uses SSL/TLS connection. Use ``--no-tls`` option to
|
||||||
disable it.
|
disable it.
|
||||||
|
|
||||||
``nghttpd`` only accepts HTTP/2 connections via ALPN or direct HTTP/2
|
``nghttpd`` only accepts HTTP/2 connections via NPN/ALPN or direct
|
||||||
connections. No HTTP Upgrade is supported.
|
HTTP/2 connections. No HTTP Upgrade is supported.
|
||||||
|
|
||||||
The ``-p`` option allows users to configure server push.
|
The ``-p`` option allows users to configure server push.
|
||||||
|
|
||||||
@@ -845,7 +856,7 @@ to know how to migrate from earlier releases.
|
|||||||
``nghttpx`` implements `important performance-oriented features
|
``nghttpx`` implements `important performance-oriented features
|
||||||
<https://istlsfastyet.com/#server-performance>`_ in TLS, such as
|
<https://istlsfastyet.com/#server-performance>`_ in TLS, such as
|
||||||
session IDs, session tickets (with automatic key rotation), OCSP
|
session IDs, session tickets (with automatic key rotation), OCSP
|
||||||
stapling, dynamic record sizing, ALPN, forward secrecy and HTTP/2.
|
stapling, dynamic record sizing, ALPN/NPN, forward secrecy and HTTP/2.
|
||||||
``nghttpx`` also offers the functionality to share session cache and
|
``nghttpx`` also offers the functionality to share session cache and
|
||||||
ticket keys among multiple ``nghttpx`` instances via memcached.
|
ticket keys among multiple ``nghttpx`` instances via memcached.
|
||||||
|
|
||||||
@@ -972,15 +983,12 @@ threads to avoid saturating a single core on client side.
|
|||||||
servers.
|
servers.
|
||||||
|
|
||||||
If the experimental HTTP/3 is enabled, h2load can send requests to
|
If the experimental HTTP/3 is enabled, h2load can send requests to
|
||||||
HTTP/3 server. To do this, specify ``h3`` to ``--alpn-list`` option
|
HTTP/3 server. To do this, specify ``h3`` to ``--npn-list`` option
|
||||||
like so:
|
like so:
|
||||||
|
|
||||||
.. code-block:: text
|
.. code-block:: text
|
||||||
|
|
||||||
$ h2load --alpn-list h3 https://127.0.0.1:4433
|
$ h2load --npn-list h3 https://127.0.0.1:4433
|
||||||
|
|
||||||
For nghttp2 v1.58 or earlier, use ``--npn-list`` instead of
|
|
||||||
``--alpn-list``.
|
|
||||||
|
|
||||||
HPACK tools
|
HPACK tools
|
||||||
-----------
|
-----------
|
||||||
@@ -1419,6 +1427,219 @@ associated value includes the state of the dynamic header table after the
|
|||||||
corresponding header set was processed. The format is the same as
|
corresponding header set was processed. The format is the same as
|
||||||
``deflatehd``.
|
``deflatehd``.
|
||||||
|
|
||||||
|
libnghttp2_asio: High level HTTP/2 C++ library
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
libnghttp2_asio is C++ library built on top of libnghttp2 and provides
|
||||||
|
high level abstraction API to build HTTP/2 applications. It depends
|
||||||
|
on the Boost::ASIO library and OpenSSL. Currently libnghttp2_asio
|
||||||
|
provides both client and server APIs.
|
||||||
|
|
||||||
|
libnghttp2_asio is not built by default. Use the ``--enable-asio-lib``
|
||||||
|
configure flag to build libnghttp2_asio. The required Boost libraries
|
||||||
|
are:
|
||||||
|
|
||||||
|
* Boost::Asio
|
||||||
|
* Boost::System
|
||||||
|
* Boost::Thread
|
||||||
|
|
||||||
|
The server API is designed to build an HTTP/2 server very easily to utilize
|
||||||
|
C++14 anonymous functions and closures. The bare minimum example of
|
||||||
|
an HTTP/2 server looks like this:
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <nghttp2/asio_http2_server.h>
|
||||||
|
|
||||||
|
using namespace nghttp2::asio_http2;
|
||||||
|
using namespace nghttp2::asio_http2::server;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
boost::system::error_code ec;
|
||||||
|
http2 server;
|
||||||
|
|
||||||
|
server.handle("/", [](const request &req, const response &res) {
|
||||||
|
res.write_head(200);
|
||||||
|
res.end("hello, world\n");
|
||||||
|
});
|
||||||
|
|
||||||
|
if (server.listen_and_serve(ec, "localhost", "3000")) {
|
||||||
|
std::cerr << "error: " << ec.message() << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Here is sample code to use the client API:
|
||||||
|
|
||||||
|
.. code-block:: cpp
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <nghttp2/asio_http2_client.h>
|
||||||
|
|
||||||
|
using boost::asio::ip::tcp;
|
||||||
|
|
||||||
|
using namespace nghttp2::asio_http2;
|
||||||
|
using namespace nghttp2::asio_http2::client;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
boost::system::error_code ec;
|
||||||
|
boost::asio::io_service io_service;
|
||||||
|
|
||||||
|
// connect to localhost:3000
|
||||||
|
session sess(io_service, "localhost", "3000");
|
||||||
|
|
||||||
|
sess.on_connect([&sess](tcp::resolver::iterator endpoint_it) {
|
||||||
|
boost::system::error_code ec;
|
||||||
|
|
||||||
|
auto req = sess.submit(ec, "GET", "http://localhost:3000/");
|
||||||
|
|
||||||
|
req->on_response([](const response &res) {
|
||||||
|
// print status code and response header fields.
|
||||||
|
std::cerr << "HTTP/2 " << res.status_code() << std::endl;
|
||||||
|
for (auto &kv : res.header()) {
|
||||||
|
std::cerr << kv.first << ": " << kv.second.value << "\n";
|
||||||
|
}
|
||||||
|
std::cerr << std::endl;
|
||||||
|
|
||||||
|
res.on_data([](const uint8_t *data, std::size_t len) {
|
||||||
|
std::cerr.write(reinterpret_cast<const char *>(data), len);
|
||||||
|
std::cerr << std::endl;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
req->on_close([&sess](uint32_t error_code) {
|
||||||
|
// shutdown session after first request was done.
|
||||||
|
sess.shutdown();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
sess.on_error([](const boost::system::error_code &ec) {
|
||||||
|
std::cerr << "error: " << ec.message() << std::endl;
|
||||||
|
});
|
||||||
|
|
||||||
|
io_service.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
For more details, see the documentation of libnghttp2_asio.
|
||||||
|
|
||||||
|
Python bindings
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The ``python`` directory contains nghttp2 Python bindings. The
|
||||||
|
bindings currently provide HPACK compressor and decompressor classes
|
||||||
|
and an HTTP/2 server.
|
||||||
|
|
||||||
|
The extension module is called ``nghttp2``.
|
||||||
|
|
||||||
|
``make`` will build the bindings and target Python version is
|
||||||
|
determined by the ``configure`` script. If the detected Python version is not
|
||||||
|
what you expect, specify a path to Python executable in a ``PYTHON``
|
||||||
|
variable as an argument to configure script (e.g., ``./configure
|
||||||
|
PYTHON=/usr/bin/python3.8``).
|
||||||
|
|
||||||
|
The following example code illustrates basic usage of the HPACK compressor
|
||||||
|
and decompressor in Python:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
import binascii
|
||||||
|
import nghttp2
|
||||||
|
|
||||||
|
deflater = nghttp2.HDDeflater()
|
||||||
|
inflater = nghttp2.HDInflater()
|
||||||
|
|
||||||
|
data = deflater.deflate([(b'foo', b'bar'),
|
||||||
|
(b'baz', b'buz')])
|
||||||
|
print(binascii.b2a_hex(data))
|
||||||
|
|
||||||
|
hdrs = inflater.inflate(data)
|
||||||
|
print(hdrs)
|
||||||
|
|
||||||
|
The ``nghttp2.HTTP2Server`` class builds on top of the asyncio event
|
||||||
|
loop. On construction, *RequestHandlerClass* must be given, which
|
||||||
|
must be a subclass of ``nghttp2.BaseRequestHandler`` class.
|
||||||
|
|
||||||
|
The ``BaseRequestHandler`` class is used to handle the HTTP/2 stream.
|
||||||
|
By default, it does nothing. It must be subclassed to handle each
|
||||||
|
event callback method.
|
||||||
|
|
||||||
|
The first callback method invoked is ``on_headers()``. It is called
|
||||||
|
when HEADERS frame, which includes the request header fields, has arrived.
|
||||||
|
|
||||||
|
If the request has a request body, ``on_data(data)`` is invoked for each
|
||||||
|
chunk of received data.
|
||||||
|
|
||||||
|
Once the entire request is received, ``on_request_done()`` is invoked.
|
||||||
|
|
||||||
|
When the stream is closed, ``on_close(error_code)`` is called.
|
||||||
|
|
||||||
|
The application can send a response using ``send_response()`` method.
|
||||||
|
It can be used in ``on_headers()``, ``on_data()`` or
|
||||||
|
``on_request_done()``.
|
||||||
|
|
||||||
|
The application can push resources using the ``push()`` method. It must be
|
||||||
|
used before the ``send_response()`` call.
|
||||||
|
|
||||||
|
The following instance variables are available:
|
||||||
|
|
||||||
|
client_address
|
||||||
|
Contains a tuple of the form (host, port) referring to the
|
||||||
|
client's address.
|
||||||
|
|
||||||
|
stream_id
|
||||||
|
Stream ID of this stream.
|
||||||
|
|
||||||
|
scheme
|
||||||
|
Scheme of the request URI. This is a value of :scheme header
|
||||||
|
field.
|
||||||
|
|
||||||
|
method
|
||||||
|
Method of this stream. This is a value of :method header field.
|
||||||
|
|
||||||
|
host
|
||||||
|
This is a value of :authority or host header field.
|
||||||
|
|
||||||
|
path
|
||||||
|
This is a value of :path header field.
|
||||||
|
|
||||||
|
The following example illustrates the HTTP2Server and
|
||||||
|
BaseRequestHandler usage:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import io, ssl
|
||||||
|
import nghttp2
|
||||||
|
|
||||||
|
class Handler(nghttp2.BaseRequestHandler):
|
||||||
|
|
||||||
|
def on_headers(self):
|
||||||
|
self.push(path='/css/bootstrap.css',
|
||||||
|
request_headers = [('content-length', '3')],
|
||||||
|
status=200,
|
||||||
|
body='foo')
|
||||||
|
|
||||||
|
self.push(path='/js/bootstrap.js',
|
||||||
|
method='GET',
|
||||||
|
request_headers = [('content-length', '10')],
|
||||||
|
status=200,
|
||||||
|
body='foobarbuzz')
|
||||||
|
|
||||||
|
self.send_response(status=200,
|
||||||
|
headers = [('content-type', 'text/plain')],
|
||||||
|
body=io.BytesIO(b'nghttp2-python FTW'))
|
||||||
|
|
||||||
|
ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
|
||||||
|
ctx.options = ssl.OP_ALL | ssl.OP_NO_SSLv2
|
||||||
|
ctx.load_cert_chain('server.crt', 'server.key')
|
||||||
|
|
||||||
|
# give None to ssl to make the server non-SSL/TLS
|
||||||
|
server = nghttp2.HTTP2Server(('127.0.0.1', 8443), Handler, ssl=ctx)
|
||||||
|
server.serve_forever()
|
||||||
|
|
||||||
Contribution
|
Contribution
|
||||||
------------
|
------------
|
||||||
|
|
||||||
@@ -1457,10 +1678,12 @@ released, or mitigation is worked out.
|
|||||||
|
|
||||||
In the future, we may setup a dedicated mail address for this purpose.
|
In the future, we may setup a dedicated mail address for this purpose.
|
||||||
|
|
||||||
Versioning
|
Release schedule
|
||||||
----------
|
----------------
|
||||||
|
|
||||||
In general, we follow `Semantic Versioning <http://semver.org/>`_.
|
In general, we follow `Semantic Versioning <http://semver.org/>`_. We
|
||||||
|
release MINOR version update every month, and usually we ship it
|
||||||
|
around 25th day of every month.
|
||||||
|
|
||||||
We may release PATCH releases between the regular releases, mainly for
|
We may release PATCH releases between the regular releases, mainly for
|
||||||
severe security bug fixes.
|
severe security bug fixes.
|
||||||
|
|||||||
@@ -23,15 +23,25 @@
|
|||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
. ./android-env
|
if [ -z "$ANDROID_HOME" ]; then
|
||||||
|
echo 'No $ANDROID_HOME specified.'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
PREFIX="$ANDROID_HOME"/usr/local
|
||||||
|
TOOLCHAIN="$ANDROID_HOME"/toolchain
|
||||||
|
PATH="$TOOLCHAIN"/bin:"$PATH"
|
||||||
|
|
||||||
./configure \
|
./configure \
|
||||||
--disable-shared \
|
--disable-shared \
|
||||||
--host=$TARGET \
|
--host=arm-linux-androideabi \
|
||||||
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
--build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
|
||||||
|
--with-xml-prefix="$PREFIX" \
|
||||||
--without-libxml2 \
|
--without-libxml2 \
|
||||||
|
--disable-python-bindings \
|
||||||
--disable-examples \
|
--disable-examples \
|
||||||
--disable-threads \
|
--disable-threads \
|
||||||
|
CC="$TOOLCHAIN"/bin/arm-linux-androideabi-clang \
|
||||||
|
CXX="$TOOLCHAIN"/bin/arm-linux-androideabi-clang++ \
|
||||||
CPPFLAGS="-fPIE -I$PREFIX/include" \
|
CPPFLAGS="-fPIE -I$PREFIX/include" \
|
||||||
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
|
||||||
LDFLAGS="-fPIE -pie -L$PREFIX/lib"
|
LDFLAGS="-fPIE -pie -L$PREFIX/lib"
|
||||||
|
|||||||
26
src/testdata/Makefile.am → android-make
Normal file → Executable file
26
src/testdata/Makefile.am → android-make
Normal file → Executable file
@@ -1,7 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
# nghttp2 - HTTP/2 C Library
|
# nghttp2 - HTTP/2 C Library
|
||||||
|
#
|
||||||
# Copyright (c) 2023 Tatsuhiro Tsujikawa
|
# Copyright (c) 2013 Tatsuhiro Tsujikawa
|
||||||
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
# "Software"), to deal in the Software without restriction, including
|
# "Software"), to deal in the Software without restriction, including
|
||||||
@@ -9,10 +11,10 @@
|
|||||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
# permit persons to whom the Software is furnished to do so, subject to
|
# permit persons to whom the Software is furnished to do so, subject to
|
||||||
# the following conditions:
|
# the following conditions:
|
||||||
|
#
|
||||||
# The above copyright notice and this permission notice shall be
|
# The above copyright notice and this permission notice shall be
|
||||||
# included in all copies or substantial portions of the Software.
|
# included in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
@@ -20,8 +22,12 @@
|
|||||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
EXTRA_DIST = \
|
|
||||||
ipaddr.crt \
|
if [ -z "$ANDROID_HOME" ]; then
|
||||||
nosan.crt \
|
echo 'No $ANDROID_HOME specified.'
|
||||||
nosan_ip.crt \
|
exit 1
|
||||||
verify_hostname.crt
|
fi
|
||||||
|
TOOLCHAIN=$ANDROID_HOME/toolchain
|
||||||
|
PATH=$TOOLCHAIN/bin:$PATH
|
||||||
|
|
||||||
|
make "$@"
|
||||||
53
appveyor.yml
Normal file
53
appveyor.yml
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# Notes:
|
||||||
|
# - Minimal appveyor.yml file is an empty file. All sections are optional.
|
||||||
|
# - Indent each level of configuration with 2 spaces. Do not use tabs!
|
||||||
|
# - All section names are case-sensitive.
|
||||||
|
# - Section names should be unique on each level.
|
||||||
|
|
||||||
|
#---------------------------------#
|
||||||
|
# general configuration #
|
||||||
|
#---------------------------------#
|
||||||
|
|
||||||
|
# version format
|
||||||
|
#version: 0.10.{build}
|
||||||
|
|
||||||
|
# branches to build
|
||||||
|
branches:
|
||||||
|
# blacklist
|
||||||
|
except:
|
||||||
|
- gh-pages
|
||||||
|
|
||||||
|
# Do not build on tags (GitHub only)
|
||||||
|
skip_tags: true
|
||||||
|
|
||||||
|
#---------------------------------#
|
||||||
|
# environment configuration #
|
||||||
|
#---------------------------------#
|
||||||
|
|
||||||
|
os: Windows Server 2012
|
||||||
|
|
||||||
|
# scripts that run after cloning repository
|
||||||
|
install:
|
||||||
|
# install Win-Flex-Bison
|
||||||
|
#- cmd: cinst winflexbison -y
|
||||||
|
|
||||||
|
#---------------------------------#
|
||||||
|
# build configuration #
|
||||||
|
#---------------------------------#
|
||||||
|
|
||||||
|
# scripts to run before build
|
||||||
|
before_build:
|
||||||
|
- cmd: cmake .
|
||||||
|
|
||||||
|
# scripts to run *after* solution is built and *before* automatic packaging occurs (web apps, NuGet packages, Azure Cloud Services)
|
||||||
|
# before_package:
|
||||||
|
|
||||||
|
# scripts to run after build
|
||||||
|
# after_build:
|
||||||
|
|
||||||
|
# to run your custom scripts instead of automatic MSBuild
|
||||||
|
build_script:
|
||||||
|
- cmd: cmake --build .
|
||||||
|
|
||||||
|
# to disable automatic builds
|
||||||
|
# build: off
|
||||||
@@ -423,26 +423,26 @@ static inline __u32 jhash_2words(__u32 a, __u32 b, __u32 initval) {
|
|||||||
return __jhash_nwords(a, b, 0, initval + JHASH_INITVAL + (2 << 2));
|
return __jhash_nwords(a, b, 0, initval + JHASH_INITVAL + (2 << 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct {
|
struct bpf_map_def SEC("maps") cid_prefix_map = {
|
||||||
__uint(type, BPF_MAP_TYPE_HASH);
|
.type = BPF_MAP_TYPE_HASH,
|
||||||
__uint(max_entries, 255);
|
.max_entries = 255,
|
||||||
__type(key, __u64);
|
.key_size = sizeof(__u64),
|
||||||
__type(value, __u32);
|
.value_size = sizeof(__u32),
|
||||||
} cid_prefix_map SEC(".maps");
|
};
|
||||||
|
|
||||||
struct {
|
struct bpf_map_def SEC("maps") reuseport_array = {
|
||||||
__uint(type, BPF_MAP_TYPE_REUSEPORT_SOCKARRAY);
|
.type = BPF_MAP_TYPE_REUSEPORT_SOCKARRAY,
|
||||||
__uint(max_entries, 255);
|
.max_entries = 255,
|
||||||
__type(key, __u32);
|
.key_size = sizeof(__u32),
|
||||||
__type(value, __u32);
|
.value_size = sizeof(__u32),
|
||||||
} reuseport_array SEC(".maps");
|
};
|
||||||
|
|
||||||
struct {
|
struct bpf_map_def SEC("maps") sk_info = {
|
||||||
__uint(type, BPF_MAP_TYPE_ARRAY);
|
.type = BPF_MAP_TYPE_ARRAY,
|
||||||
__uint(max_entries, 3);
|
.max_entries = 3,
|
||||||
__type(key, __u32);
|
.key_size = sizeof(__u32),
|
||||||
__type(value, __u64);
|
.value_size = sizeof(__u64),
|
||||||
} sk_info SEC(".maps");
|
};
|
||||||
|
|
||||||
typedef struct quic_hd {
|
typedef struct quic_hd {
|
||||||
__u8 *dcid;
|
__u8 *dcid;
|
||||||
@@ -455,7 +455,6 @@ typedef struct quic_hd {
|
|||||||
#define MAX_DCIDLEN 20
|
#define MAX_DCIDLEN 20
|
||||||
#define MIN_DCIDLEN 8
|
#define MIN_DCIDLEN 8
|
||||||
#define CID_PREFIXLEN 8
|
#define CID_PREFIXLEN 8
|
||||||
#define CID_PREFIX_OFFSET 1
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
NGTCP2_PKT_INITIAL = 0x0,
|
NGTCP2_PKT_INITIAL = 0x0,
|
||||||
@@ -580,7 +579,6 @@ int select_reuseport(struct sk_reuseport_md *reuse_md) {
|
|||||||
__u8 qpktbuf[6 + MAX_DCIDLEN];
|
__u8 qpktbuf[6 + MAX_DCIDLEN];
|
||||||
struct AES_ctx aes_ctx;
|
struct AES_ctx aes_ctx;
|
||||||
__u8 key[AES_KEYLEN];
|
__u8 key[AES_KEYLEN];
|
||||||
__u8 *cid_prefix;
|
|
||||||
|
|
||||||
if (bpf_skb_load_bytes(reuse_md, sizeof(struct udphdr), qpktbuf,
|
if (bpf_skb_load_bytes(reuse_md, sizeof(struct udphdr), qpktbuf,
|
||||||
sizeof(qpktbuf)) != 0) {
|
sizeof(qpktbuf)) != 0) {
|
||||||
@@ -617,10 +615,9 @@ int select_reuseport(struct sk_reuseport_md *reuse_md) {
|
|||||||
case NGTCP2_PKT_INITIAL:
|
case NGTCP2_PKT_INITIAL:
|
||||||
case NGTCP2_PKT_0RTT:
|
case NGTCP2_PKT_0RTT:
|
||||||
if (qhd.dcidlen == SV_DCIDLEN) {
|
if (qhd.dcidlen == SV_DCIDLEN) {
|
||||||
cid_prefix = qhd.dcid + CID_PREFIX_OFFSET;
|
AES_ECB_decrypt(&aes_ctx, qhd.dcid);
|
||||||
AES_ECB_decrypt(&aes_ctx, cid_prefix);
|
|
||||||
|
|
||||||
psk_index = bpf_map_lookup_elem(&cid_prefix_map, cid_prefix);
|
psk_index = bpf_map_lookup_elem(&cid_prefix_map, qhd.dcid);
|
||||||
if (psk_index != NULL) {
|
if (psk_index != NULL) {
|
||||||
sk_index = *psk_index;
|
sk_index = *psk_index;
|
||||||
|
|
||||||
@@ -637,10 +634,9 @@ int select_reuseport(struct sk_reuseport_md *reuse_md) {
|
|||||||
return SK_DROP;
|
return SK_DROP;
|
||||||
}
|
}
|
||||||
|
|
||||||
cid_prefix = qhd.dcid + CID_PREFIX_OFFSET;
|
AES_ECB_decrypt(&aes_ctx, qhd.dcid);
|
||||||
AES_ECB_decrypt(&aes_ctx, cid_prefix);
|
|
||||||
|
|
||||||
psk_index = bpf_map_lookup_elem(&cid_prefix_map, cid_prefix);
|
psk_index = bpf_map_lookup_elem(&cid_prefix_map, qhd.dcid);
|
||||||
if (psk_index == NULL) {
|
if (psk_index == NULL) {
|
||||||
sk_index = sk_index_from_dcid(&qhd, reuse_md, *pnum_socks);
|
sk_index = sk_index_from_dcid(&qhd, reuse_md, *pnum_socks);
|
||||||
|
|
||||||
|
|||||||
44
cmake/FindCython.cmake
Normal file
44
cmake/FindCython.cmake
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# Find the Cython compiler.
|
||||||
|
#
|
||||||
|
# This code sets the following variables:
|
||||||
|
#
|
||||||
|
# CYTHON_EXECUTABLE
|
||||||
|
#
|
||||||
|
# See also UseCython.cmake
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Copyright 2011 Kitware, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#=============================================================================
|
||||||
|
|
||||||
|
# Use the Cython executable that lives next to the Python executable
|
||||||
|
# if it is a local installation.
|
||||||
|
find_package( PythonInterp )
|
||||||
|
if( PYTHONINTERP_FOUND )
|
||||||
|
get_filename_component( _python_path ${PYTHON_EXECUTABLE} PATH )
|
||||||
|
find_program( CYTHON_EXECUTABLE
|
||||||
|
NAMES cython cython.bat cython3
|
||||||
|
HINTS ${_python_path}
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
find_program( CYTHON_EXECUTABLE
|
||||||
|
NAMES cython cython.bat cython3
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
include( FindPackageHandleStandardArgs )
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS( Cython REQUIRED_VARS CYTHON_EXECUTABLE )
|
||||||
|
|
||||||
|
mark_as_advanced( CYTHON_EXECUTABLE )
|
||||||
43
cmake/FindLibngtcp2_crypto_openssl.cmake
Normal file
43
cmake/FindLibngtcp2_crypto_openssl.cmake
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# - Try to find libngtcp2_crypto_openssl
|
||||||
|
# Once done this will define
|
||||||
|
# LIBNGTCP2_CRYPTO_OPENSSL_FOUND - System has libngtcp2_crypto_openssl
|
||||||
|
# LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIRS - The libngtcp2_crypto_openssl include directories
|
||||||
|
# LIBNGTCP2_CRYPTO_OPENSSL_LIBRARIES - The libraries needed to use libngtcp2_crypto_openssl
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
pkg_check_modules(PC_LIBNGTCP2_CRYPTO_OPENSSL QUIET libngtcp2_crypto_openssl)
|
||||||
|
|
||||||
|
find_path(LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR
|
||||||
|
NAMES ngtcp2/ngtcp2_crypto_openssl.h
|
||||||
|
HINTS ${PC_LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
find_library(LIBNGTCP2_CRYPTO_OPENSSL_LIBRARY
|
||||||
|
NAMES ngtcp2_crypto_openssl
|
||||||
|
HINTS ${PC_LIBNGTCP2_CRYPTO_OPENSSL_LIBRARY_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR)
|
||||||
|
set(_version_regex "^#define[ \t]+NGTCP2_VERSION[ \t]+\"([^\"]+)\".*")
|
||||||
|
file(STRINGS "${LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR}/ngtcp2/version.h"
|
||||||
|
LIBNGTCP2_CRYPTO_OPENSSL_VERSION REGEX "${_version_regex}")
|
||||||
|
string(REGEX REPLACE "${_version_regex}" "\\1"
|
||||||
|
LIBNGTCP2_CRYPTO_OPENSSL_VERSION "${LIBNGTCP2_CRYPTO_OPENSSL_VERSION}")
|
||||||
|
unset(_version_regex)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set
|
||||||
|
# LIBNGTCP2_CRYPTO_OPENSSL_FOUND to TRUE if all listed variables are
|
||||||
|
# TRUE and the requested version matches.
|
||||||
|
find_package_handle_standard_args(Libngtcp2_crypto_openssl REQUIRED_VARS
|
||||||
|
LIBNGTCP2_CRYPTO_OPENSSL_LIBRARY
|
||||||
|
LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR
|
||||||
|
VERSION_VAR LIBNGTCP2_CRYPTO_OPENSSL_VERSION)
|
||||||
|
|
||||||
|
if(LIBNGTCP2_CRYPTO_OPENSSL_FOUND)
|
||||||
|
set(LIBNGTCP2_CRYPTO_OPENSSL_LIBRARIES ${LIBNGTCP2_CRYPTO_OPENSSL_LIBRARY})
|
||||||
|
set(LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIRS ${LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
mark_as_advanced(LIBNGTCP2_CRYPTO_OPENSSL_INCLUDE_DIR
|
||||||
|
LIBNGTCP2_CRYPTO_OPENSSL_LIBRARY)
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
# - Try to find libngtcp2_crypto_quictls
|
|
||||||
# Once done this will define
|
|
||||||
# LIBNGTCP2_CRYPTO_QUICTLS_FOUND - System has libngtcp2_crypto_quictls
|
|
||||||
# LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIRS - The libngtcp2_crypto_quictls include directories
|
|
||||||
# LIBNGTCP2_CRYPTO_QUICTLS_LIBRARIES - The libraries needed to use libngtcp2_crypto_quictls
|
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
pkg_check_modules(PC_LIBNGTCP2_CRYPTO_QUICTLS QUIET libngtcp2_crypto_quictls)
|
|
||||||
|
|
||||||
find_path(LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR
|
|
||||||
NAMES ngtcp2/ngtcp2_crypto_quictls.h
|
|
||||||
HINTS ${PC_LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
find_library(LIBNGTCP2_CRYPTO_QUICTLS_LIBRARY
|
|
||||||
NAMES ngtcp2_crypto_quictls
|
|
||||||
HINTS ${PC_LIBNGTCP2_CRYPTO_QUICTLS_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
if(LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR)
|
|
||||||
set(_version_regex "^#define[ \t]+NGTCP2_VERSION[ \t]+\"([^\"]+)\".*")
|
|
||||||
file(STRINGS "${LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR}/ngtcp2/version.h"
|
|
||||||
LIBNGTCP2_CRYPTO_QUICTLS_VERSION REGEX "${_version_regex}")
|
|
||||||
string(REGEX REPLACE "${_version_regex}" "\\1"
|
|
||||||
LIBNGTCP2_CRYPTO_QUICTLS_VERSION "${LIBNGTCP2_CRYPTO_QUICTLS_VERSION}")
|
|
||||||
unset(_version_regex)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
# handle the QUIETLY and REQUIRED arguments and set
|
|
||||||
# LIBNGTCP2_CRYPTO_QUICTLS_FOUND to TRUE if all listed variables are
|
|
||||||
# TRUE and the requested version matches.
|
|
||||||
find_package_handle_standard_args(Libngtcp2_crypto_quictls REQUIRED_VARS
|
|
||||||
LIBNGTCP2_CRYPTO_QUICTLS_LIBRARY
|
|
||||||
LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR
|
|
||||||
VERSION_VAR LIBNGTCP2_CRYPTO_QUICTLS_VERSION)
|
|
||||||
|
|
||||||
if(LIBNGTCP2_CRYPTO_QUICTLS_FOUND)
|
|
||||||
set(LIBNGTCP2_CRYPTO_QUICTLS_LIBRARIES ${LIBNGTCP2_CRYPTO_QUICTLS_LIBRARY})
|
|
||||||
set(LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIRS ${LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
mark_as_advanced(LIBNGTCP2_CRYPTO_QUICTLS_INCLUDE_DIR
|
|
||||||
LIBNGTCP2_CRYPTO_QUICTLS_LIBRARY)
|
|
||||||
@@ -1,163 +0,0 @@
|
|||||||
# nghttp2
|
|
||||||
#
|
|
||||||
# Copyright (c) 2023 nghttp2 contributors
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
# a copy of this software and associated documentation files (the
|
|
||||||
# "Software"), to deal in the Software without restriction, including
|
|
||||||
# without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
# permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
# the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be
|
|
||||||
# included in all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
# C
|
|
||||||
|
|
||||||
include(CheckCCompilerFlag)
|
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
||||||
|
|
||||||
# https://clang.llvm.org/docs/DiagnosticsReference.html
|
|
||||||
# https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
|
||||||
|
|
||||||
# WPICKY_ENABLE = Options we want to enable as-is.
|
|
||||||
# WPICKY_DETECT = Options we want to test first and enable if available.
|
|
||||||
|
|
||||||
# Prefer the -Wextra alias with clang.
|
|
||||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
||||||
set(WPICKY_ENABLE "-Wextra")
|
|
||||||
else()
|
|
||||||
set(WPICKY_ENABLE "-W")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
-Wall
|
|
||||||
)
|
|
||||||
|
|
||||||
# ----------------------------------
|
|
||||||
# Add new options here, if in doubt:
|
|
||||||
# ----------------------------------
|
|
||||||
set(WPICKY_DETECT
|
|
||||||
)
|
|
||||||
|
|
||||||
# Assume these options always exist with both clang and gcc.
|
|
||||||
# Require clang 3.0 / gcc 2.95 or later.
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
-Wconversion # clang 3.0 gcc 2.95
|
|
||||||
-Winline # clang 1.0 gcc 1.0
|
|
||||||
-Wmissing-declarations # clang 1.0 gcc 2.7
|
|
||||||
-Wmissing-prototypes # clang 1.0 gcc 1.0
|
|
||||||
-Wnested-externs # clang 1.0 gcc 2.7
|
|
||||||
-Wpointer-arith # clang 1.0 gcc 1.4
|
|
||||||
-Wshadow # clang 1.0 gcc 2.95
|
|
||||||
-Wundef # clang 1.0 gcc 2.95
|
|
||||||
-Wwrite-strings # clang 1.0 gcc 1.4
|
|
||||||
)
|
|
||||||
|
|
||||||
# Always enable with clang, version dependent with gcc
|
|
||||||
set(WPICKY_COMMON_OLD
|
|
||||||
-Waddress # clang 3.0 gcc 4.3
|
|
||||||
-Wattributes # clang 3.0 gcc 4.1
|
|
||||||
-Wcast-align # clang 1.0 gcc 4.2
|
|
||||||
-Wdeclaration-after-statement # clang 1.0 gcc 3.4
|
|
||||||
-Wdiv-by-zero # clang 3.0 gcc 4.1
|
|
||||||
-Wempty-body # clang 3.0 gcc 4.3
|
|
||||||
-Wendif-labels # clang 1.0 gcc 3.3
|
|
||||||
-Wfloat-equal # clang 1.0 gcc 2.96 (3.0)
|
|
||||||
-Wformat-nonliteral # clang 3.0 gcc 4.1
|
|
||||||
-Wformat-security # clang 3.0 gcc 4.1
|
|
||||||
-Wmissing-field-initializers # clang 3.0 gcc 4.1
|
|
||||||
-Wmissing-noreturn # clang 3.0 gcc 4.1
|
|
||||||
-Wno-format-nonliteral # clang 1.0 gcc 2.96 (3.0) # This is required because we pass format string as "const char*"
|
|
||||||
# -Wpadded # clang 3.0 gcc 4.1 # Not used because we cannot change public structs
|
|
||||||
-Wredundant-decls # clang 3.0 gcc 4.1
|
|
||||||
-Wsign-conversion # clang 3.0 gcc 4.3
|
|
||||||
-Wstrict-prototypes # clang 1.0 gcc 3.3
|
|
||||||
# -Wswitch-enum # clang 3.0 gcc 4.1 # Not used because this basically disallows default case
|
|
||||||
-Wunreachable-code # clang 3.0 gcc 4.1
|
|
||||||
-Wunused-macros # clang 3.0 gcc 4.1
|
|
||||||
-Wunused-parameter # clang 3.0 gcc 4.1
|
|
||||||
-Wvla # clang 2.8 gcc 4.3
|
|
||||||
)
|
|
||||||
|
|
||||||
set(WPICKY_COMMON
|
|
||||||
-Wpragmas # clang 3.5 gcc 4.1 appleclang 6.0
|
|
||||||
)
|
|
||||||
|
|
||||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON_OLD}
|
|
||||||
-Wshorten-64-to-32 # clang 1.0
|
|
||||||
-Wlanguage-extension-token # clang 3.0
|
|
||||||
)
|
|
||||||
# Enable based on compiler version
|
|
||||||
if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6) OR
|
|
||||||
(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON}
|
|
||||||
-Wunreachable-code-break # clang 3.5 appleclang 6.0
|
|
||||||
-Wheader-guard # clang 3.4 appleclang 5.1
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.9) OR
|
|
||||||
(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
-Wmissing-variable-declarations # clang 3.2 appleclang 4.6
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) OR
|
|
||||||
(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.4))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0) OR
|
|
||||||
(CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
else() # gcc
|
|
||||||
list(APPEND WPICKY_DETECT
|
|
||||||
${WPICKY_COMMON}
|
|
||||||
)
|
|
||||||
# Enable based on compiler version
|
|
||||||
if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.3)
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON_OLD}
|
|
||||||
-Wclobbered # gcc 4.3
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
unset(_wpicky)
|
|
||||||
|
|
||||||
foreach(_CCOPT IN LISTS WPICKY_ENABLE)
|
|
||||||
set(_wpicky "${_wpicky} ${_CCOPT}")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
foreach(_CCOPT IN LISTS WPICKY_DETECT)
|
|
||||||
# surprisingly, CHECK_C_COMPILER_FLAG needs a new variable to store each new
|
|
||||||
# test result in.
|
|
||||||
string(MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname)
|
|
||||||
# GCC only warns about unknown -Wno- options if there are also other diagnostic messages,
|
|
||||||
# so test for the positive form instead
|
|
||||||
string(REPLACE "-Wno-" "-W" _CCOPT_ON "${_CCOPT}")
|
|
||||||
check_c_compiler_flag(${_CCOPT_ON} ${_optvarname})
|
|
||||||
if(${_optvarname})
|
|
||||||
set(_wpicky "${_wpicky} ${_CCOPT}")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(WARNCFLAGS "${WARNCFLAGS} ${_wpicky}")
|
|
||||||
endif()
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
# nghttp2
|
|
||||||
#
|
|
||||||
# Copyright (c) 2023 nghttp2 contributors
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
# a copy of this software and associated documentation files (the
|
|
||||||
# "Software"), to deal in the Software without restriction, including
|
|
||||||
# without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
# permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
# the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be
|
|
||||||
# included in all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
# C++
|
|
||||||
|
|
||||||
include(CheckCXXCompilerFlag)
|
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
||||||
|
|
||||||
# https://clang.llvm.org/docs/DiagnosticsReference.html
|
|
||||||
# https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
|
||||||
|
|
||||||
# WPICKY_ENABLE = Options we want to enable as-is.
|
|
||||||
# WPICKY_DETECT = Options we want to test first and enable if available.
|
|
||||||
|
|
||||||
set(WPICKY_ENABLE "-Wall")
|
|
||||||
|
|
||||||
# ----------------------------------
|
|
||||||
# Add new options here, if in doubt:
|
|
||||||
# ----------------------------------
|
|
||||||
set(WPICKY_DETECT
|
|
||||||
)
|
|
||||||
|
|
||||||
# Assume these options always exist with both clang and gcc.
|
|
||||||
# Require clang 3.0 / gcc 2.95 or later.
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
|
|
||||||
# Always enable with clang, version dependent with gcc
|
|
||||||
set(WPICKY_COMMON_OLD
|
|
||||||
-Wformat-security # clang 3.0 gcc 4.1
|
|
||||||
)
|
|
||||||
|
|
||||||
set(WPICKY_COMMON
|
|
||||||
)
|
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON_OLD}
|
|
||||||
)
|
|
||||||
# Enable based on compiler version
|
|
||||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.6) OR
|
|
||||||
(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.9) OR
|
|
||||||
(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) OR
|
|
||||||
(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.4))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0) OR
|
|
||||||
(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.3))
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
else() # gcc
|
|
||||||
list(APPEND WPICKY_DETECT
|
|
||||||
${WPICKY_COMMON}
|
|
||||||
)
|
|
||||||
# Enable based on compiler version
|
|
||||||
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.3)
|
|
||||||
list(APPEND WPICKY_ENABLE
|
|
||||||
${WPICKY_COMMON_OLD}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
unset(_wpicky)
|
|
||||||
|
|
||||||
foreach(_CCOPT IN LISTS WPICKY_ENABLE)
|
|
||||||
set(_wpicky "${_wpicky} ${_CCOPT}")
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
foreach(_CCOPT IN LISTS WPICKY_DETECT)
|
|
||||||
# surprisingly, CHECK_CXX_COMPILER_FLAG needs a new variable to store each new
|
|
||||||
# test result in.
|
|
||||||
string(MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname)
|
|
||||||
# GCC only warns about unknown -Wno- options if there are also other diagnostic messages,
|
|
||||||
# so test for the positive form instead
|
|
||||||
string(REPLACE "-Wno-" "-W" _CCOPT_ON "${_CCOPT}")
|
|
||||||
check_cxx_compiler_flag(${_CCOPT_ON} ${_optvarname})
|
|
||||||
if(${_optvarname})
|
|
||||||
set(_wpicky "${_wpicky} ${_CCOPT}")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
set(WARNCXXFLAGS "${WARNCXXFLAGS} ${_wpicky}")
|
|
||||||
endif()
|
|
||||||
@@ -19,27 +19,24 @@
|
|||||||
/* Define to 1 if you have `neverbleed` library. */
|
/* Define to 1 if you have `neverbleed` library. */
|
||||||
#cmakedefine HAVE_NEVERBLEED 1
|
#cmakedefine HAVE_NEVERBLEED 1
|
||||||
|
|
||||||
|
/* sizeof(int *) */
|
||||||
|
#cmakedefine SIZEOF_INT_P @SIZEOF_INT_P@
|
||||||
|
|
||||||
|
/* sizeof(time_t) */
|
||||||
|
#cmakedefine SIZEOF_TIME_T @SIZEOF_TIME_T@
|
||||||
|
|
||||||
/* Define to 1 if you have the `_Exit` function. */
|
/* Define to 1 if you have the `_Exit` function. */
|
||||||
#cmakedefine HAVE__EXIT 1
|
#cmakedefine HAVE__EXIT 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `accept4` function. */
|
/* Define to 1 if you have the `accept4` function. */
|
||||||
#cmakedefine HAVE_ACCEPT4 1
|
#cmakedefine HAVE_ACCEPT4 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `clock_gettime` function. */
|
|
||||||
#cmakedefine HAVE_CLOCK_GETTIME 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `mkostemp` function. */
|
/* Define to 1 if you have the `mkostemp` function. */
|
||||||
#cmakedefine HAVE_MKOSTEMP 1
|
#cmakedefine HAVE_MKOSTEMP 1
|
||||||
|
|
||||||
/* Define to 1 if you have the `GetTickCount64` function. */
|
|
||||||
#cmakedefine HAVE_GETTICKCOUNT64 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `initgroups` function. */
|
/* Define to 1 if you have the `initgroups` function. */
|
||||||
#cmakedefine01 HAVE_DECL_INITGROUPS
|
#cmakedefine01 HAVE_DECL_INITGROUPS
|
||||||
|
|
||||||
/* Define to 1 if you have the `CLOCK_MONOTONIC` defined. */
|
|
||||||
#cmakedefine01 HAVE_DECL_CLOCK_MONOTONIC
|
|
||||||
|
|
||||||
/* Define to 1 to enable debug output. */
|
/* Define to 1 to enable debug output. */
|
||||||
#cmakedefine DEBUGBUILD 1
|
#cmakedefine DEBUGBUILD 1
|
||||||
|
|
||||||
@@ -64,9 +61,6 @@
|
|||||||
/* Define to 1 if you have the <netinet/in.h> header file. */
|
/* Define to 1 if you have the <netinet/in.h> header file. */
|
||||||
#cmakedefine HAVE_NETINET_IN_H 1
|
#cmakedefine HAVE_NETINET_IN_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <netinet/ip.h> header file. */
|
|
||||||
#cmakedefine HAVE_NETINET_IP_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <pwd.h> header file. */
|
/* Define to 1 if you have the <pwd.h> header file. */
|
||||||
#cmakedefine HAVE_PWD_H 1
|
#cmakedefine HAVE_PWD_H 1
|
||||||
|
|
||||||
@@ -79,12 +73,12 @@
|
|||||||
/* Define to 1 if you have the <syslog.h> header file. */
|
/* Define to 1 if you have the <syslog.h> header file. */
|
||||||
#cmakedefine HAVE_SYSLOG_H 1
|
#cmakedefine HAVE_SYSLOG_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <time.h> header file. */
|
||||||
|
#cmakedefine HAVE_TIME_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <unistd.h> header file. */
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
#cmakedefine HAVE_UNISTD_H 1
|
#cmakedefine HAVE_UNISTD_H 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <windows.h> header file. */
|
|
||||||
#cmakedefine HAVE_WINDOWS_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if HTTP/3 is enabled. */
|
/* Define to 1 if HTTP/3 is enabled. */
|
||||||
#cmakedefine ENABLE_HTTP3 1
|
#cmakedefine ENABLE_HTTP3 1
|
||||||
|
|
||||||
@@ -93,9 +87,3 @@
|
|||||||
|
|
||||||
/* Define to 1 if you have enum bpf_stats_type in linux/bpf.h. */
|
/* Define to 1 if you have enum bpf_stats_type in linux/bpf.h. */
|
||||||
#cmakedefine HAVE_BPF_STATS_TYPE 1
|
#cmakedefine HAVE_BPF_STATS_TYPE 1
|
||||||
|
|
||||||
/* Define to 1 if you have `libngtcp2_crypto_quictls` library. */
|
|
||||||
#cmakedefine HAVE_LIBNGTCP2_CRYPTO_QUICTLS
|
|
||||||
|
|
||||||
/* Define to 1 if you have `libev` library. */
|
|
||||||
#cmakedefine HAVE_LIBEV 1
|
|
||||||
|
|||||||
285
configure.ac
285
configure.ac
@@ -22,10 +22,10 @@ dnl OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|||||||
dnl WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
dnl WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
dnl Do not change user variables!
|
dnl Do not change user variables!
|
||||||
dnl https://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html
|
dnl http://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html
|
||||||
|
|
||||||
AC_PREREQ(2.61)
|
AC_PREREQ(2.61)
|
||||||
AC_INIT([nghttp2], [1.59.0], [t-tujikawa@users.sourceforge.net])
|
AC_INIT([nghttp2], [1.45.1], [t-tujikawa@users.sourceforge.net])
|
||||||
AC_CONFIG_AUX_DIR([.])
|
AC_CONFIG_AUX_DIR([.])
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
@@ -44,9 +44,9 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
|||||||
|
|
||||||
dnl See versioning rule:
|
dnl See versioning rule:
|
||||||
dnl https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
dnl https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
|
||||||
AC_SUBST(LT_CURRENT, 40)
|
AC_SUBST(LT_CURRENT, 35)
|
||||||
AC_SUBST(LT_REVISION, 0)
|
AC_SUBST(LT_REVISION, 0)
|
||||||
AC_SUBST(LT_AGE, 26)
|
AC_SUBST(LT_AGE, 21)
|
||||||
|
|
||||||
major=`echo $PACKAGE_VERSION |cut -d. -f1 | sed -e "s/[^0-9]//g"`
|
major=`echo $PACKAGE_VERSION |cut -d. -f1 | sed -e "s/[^0-9]//g"`
|
||||||
minor=`echo $PACKAGE_VERSION |cut -d. -f2 | sed -e "s/[^0-9]//g"`
|
minor=`echo $PACKAGE_VERSION |cut -d. -f2 | sed -e "s/[^0-9]//g"`
|
||||||
@@ -82,11 +82,21 @@ AC_ARG_ENABLE([hpack-tools],
|
|||||||
[Build HPACK tools [default=check]])],
|
[Build HPACK tools [default=check]])],
|
||||||
[request_hpack_tools=$enableval], [request_hpack_tools=check])
|
[request_hpack_tools=$enableval], [request_hpack_tools=check])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([asio-lib],
|
||||||
|
[AS_HELP_STRING([--enable-asio-lib],
|
||||||
|
[Build C++ libnghttp2_asio library [default=no]])],
|
||||||
|
[request_asio_lib=$enableval], [request_asio_lib=no])
|
||||||
|
|
||||||
AC_ARG_ENABLE([examples],
|
AC_ARG_ENABLE([examples],
|
||||||
[AS_HELP_STRING([--enable-examples],
|
[AS_HELP_STRING([--enable-examples],
|
||||||
[Build examples [default=check]])],
|
[Build examples [default=check]])],
|
||||||
[request_examples=$enableval], [request_examples=check])
|
[request_examples=$enableval], [request_examples=check])
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([python-bindings],
|
||||||
|
[AS_HELP_STRING([--enable-python-bindings],
|
||||||
|
[Build Python bindings [default=check]])],
|
||||||
|
[request_python_bindings=$enableval], [request_python_bindings=check])
|
||||||
|
|
||||||
AC_ARG_ENABLE([failmalloc],
|
AC_ARG_ENABLE([failmalloc],
|
||||||
[AS_HELP_STRING([--disable-failmalloc],
|
[AS_HELP_STRING([--disable-failmalloc],
|
||||||
[Do not build failmalloc test program])],
|
[Do not build failmalloc test program])],
|
||||||
@@ -94,7 +104,7 @@ AC_ARG_ENABLE([failmalloc],
|
|||||||
|
|
||||||
AC_ARG_ENABLE([lib-only],
|
AC_ARG_ENABLE([lib-only],
|
||||||
[AS_HELP_STRING([--enable-lib-only],
|
[AS_HELP_STRING([--enable-lib-only],
|
||||||
[Build libnghttp2 only. This is a short hand for --disable-app --disable-examples --disable-hpack-tools])],
|
[Build libnghttp2 only. This is a short hand for --disable-app --disable-examples --disable-hpack-tools --disable-python-bindings])],
|
||||||
[request_lib_only=$enableval], [request_lib_only=no])
|
[request_lib_only=$enableval], [request_lib_only=no])
|
||||||
|
|
||||||
AC_ARG_ENABLE([http3],
|
AC_ARG_ENABLE([http3],
|
||||||
@@ -162,6 +172,11 @@ AC_ARG_WITH([neverbleed],
|
|||||||
[Use neverbleed [default=no]])],
|
[Use neverbleed [default=no]])],
|
||||||
[request_neverbleed=$withval], [request_neverbleed=no])
|
[request_neverbleed=$withval], [request_neverbleed=no])
|
||||||
|
|
||||||
|
AC_ARG_WITH([cython],
|
||||||
|
[AS_HELP_STRING([--with-cython=PATH],
|
||||||
|
[Use cython in given PATH])],
|
||||||
|
[cython_path=$withval], [])
|
||||||
|
|
||||||
AC_ARG_WITH([libngtcp2],
|
AC_ARG_WITH([libngtcp2],
|
||||||
[AS_HELP_STRING([--with-libngtcp2],
|
[AS_HELP_STRING([--with-libngtcp2],
|
||||||
[Use libngtcp2 [default=check]])],
|
[Use libngtcp2 [default=check]])],
|
||||||
@@ -178,6 +193,8 @@ AC_ARG_WITH([libbpf],
|
|||||||
[request_libbpf=$withval], [request_libbpf=no])
|
[request_libbpf=$withval], [request_libbpf=no])
|
||||||
|
|
||||||
dnl Define variables
|
dnl Define variables
|
||||||
|
AC_ARG_VAR([CYTHON], [the Cython executable])
|
||||||
|
|
||||||
AC_ARG_VAR([LIBEV_CFLAGS], [C compiler flags for libev, skipping any checks])
|
AC_ARG_VAR([LIBEV_CFLAGS], [C compiler flags for libev, skipping any checks])
|
||||||
AC_ARG_VAR([LIBEV_LIBS], [linker flags for libev, skipping any checks])
|
AC_ARG_VAR([LIBEV_LIBS], [linker flags for libev, skipping any checks])
|
||||||
|
|
||||||
@@ -207,21 +224,18 @@ if [test "x$request_lib_only" = "xyes"]; then
|
|||||||
request_app=no
|
request_app=no
|
||||||
request_hpack_tools=no
|
request_hpack_tools=no
|
||||||
request_examples=no
|
request_examples=no
|
||||||
request_http3=no
|
request_python_bindings=no
|
||||||
request_libxml2=no
|
fi
|
||||||
request_jansson=no
|
|
||||||
request_zlib=no
|
if [test "x$request_python_bindings" != "xno"]; then
|
||||||
request_libevent_openssl=no
|
AX_PYTHON_DEVEL([>= '3.8'])
|
||||||
request_libcares=no
|
fi
|
||||||
request_openssl=no
|
|
||||||
request_libev=no
|
if test "x${cython_path}" = "x"; then
|
||||||
request_jemalloc=no
|
AC_CHECK_PROGS([CYTHON], [cython.py cython])
|
||||||
request_systemd=no
|
else
|
||||||
request_mruby=no
|
CYTHON=${cython_path}
|
||||||
request_neverbleed=no
|
AC_SUBST([CYTHON])
|
||||||
request_libngtcp2=no
|
|
||||||
request_libnghttp3=no
|
|
||||||
request_libbpf=no
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$GCC" = "xyes" -o "x$CC" = "xclang" ; then
|
if test "x$GCC" = "xyes" -o "x$CC" = "xclang" ; then
|
||||||
@@ -233,7 +247,7 @@ fi
|
|||||||
save_CXXFLAGS="$CXXFLAGS"
|
save_CXXFLAGS="$CXXFLAGS"
|
||||||
CXXFLAGS=
|
CXXFLAGS=
|
||||||
|
|
||||||
AX_CXX_COMPILE_STDCXX([14], [], [optional])
|
AX_CXX_COMPILE_STDCXX([14], [noext], [optional])
|
||||||
|
|
||||||
CXX1XCXXFLAGS="$CXXFLAGS"
|
CXX1XCXXFLAGS="$CXXFLAGS"
|
||||||
CXXFLAGS="$save_CXXFLAGS"
|
CXXFLAGS="$save_CXXFLAGS"
|
||||||
@@ -328,8 +342,8 @@ APPLDFLAGS=
|
|||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
*android*)
|
*android*)
|
||||||
android_build=yes
|
android_build=yes
|
||||||
# android does not need -pthread, but needs following 2 libs for C++
|
# android does not need -pthread, but needs followng 3 libs for C++
|
||||||
APPLDFLAGS="$APPLDFLAGS -lstdc++ -latomic"
|
APPLDFLAGS="$APPLDFLAGS -lstdc++ -latomic -lsupc++"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
PTHREAD_LDFLAGS="-pthread"
|
PTHREAD_LDFLAGS="-pthread"
|
||||||
@@ -433,10 +447,6 @@ if test "x${request_libev}" != "xno"; then
|
|||||||
else
|
else
|
||||||
have_libev=yes
|
have_libev=yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x${have_libev}" = "xyes"; then
|
|
||||||
AC_DEFINE([HAVE_LIBEV], [1], [Define to 1 if you have `libev` library.])
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x${request_libev}" = "xyes" &&
|
if test "x${request_libev}" = "xyes" &&
|
||||||
@@ -447,7 +457,7 @@ fi
|
|||||||
# openssl (for src)
|
# openssl (for src)
|
||||||
have_openssl=no
|
have_openssl=no
|
||||||
if test "x${request_openssl}" != "xno"; then
|
if test "x${request_openssl}" != "xno"; then
|
||||||
PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.1.1],
|
PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.0.1],
|
||||||
[have_openssl=yes], [have_openssl=no])
|
[have_openssl=yes], [have_openssl=no])
|
||||||
if test "x${have_openssl}" = "xno"; then
|
if test "x${have_openssl}" = "xno"; then
|
||||||
AC_MSG_NOTICE($OPENSSL_PKG_ERRORS)
|
AC_MSG_NOTICE($OPENSSL_PKG_ERRORS)
|
||||||
@@ -457,28 +467,16 @@ if test "x${request_openssl}" != "xno"; then
|
|||||||
CFLAGS="$OPENSSL_CFLAGS $CFLAGS"
|
CFLAGS="$OPENSSL_CFLAGS $CFLAGS"
|
||||||
LIBS="$OPENSSL_LIBS $LIBS"
|
LIBS="$OPENSSL_LIBS $LIBS"
|
||||||
|
|
||||||
# quictls/openssl has SSL_provide_quic_data. boringssl also has
|
have_ssl_is_quic=no
|
||||||
# it. We will deal with it later.
|
AC_MSG_CHECKING([for SSL_is_quic])
|
||||||
have_ssl_provide_quic_data=no
|
|
||||||
AC_MSG_CHECKING([for SSL_provide_quic_data])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
||||||
#include <openssl/ssl.h>
|
|
||||||
]], [[
|
|
||||||
SSL_provide_quic_data(NULL, 0, NULL, 0);
|
|
||||||
]])],
|
|
||||||
[AC_MSG_RESULT([yes]); have_ssl_provide_quic_data=yes],
|
|
||||||
[AC_MSG_RESULT([no]); have_ssl_provide_quic_data=no])
|
|
||||||
|
|
||||||
# boringssl has SSL_set_quic_early_data_context.
|
|
||||||
AC_MSG_CHECKING([for SSL_set_quic_early_data_context])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
]], [[
|
]], [[
|
||||||
SSL *ssl = NULL;
|
SSL *ssl = NULL;
|
||||||
SSL_set_quic_early_data_context(ssl, NULL, 0);
|
SSL_is_quic(ssl);
|
||||||
]])],
|
]])],
|
||||||
[AC_MSG_RESULT([yes]); have_boringssl_quic=yes],
|
[AC_MSG_RESULT([yes]); have_ssl_is_quic=yes],
|
||||||
[AC_MSG_RESULT([no]); have_boringssl_quic=no])
|
[AC_MSG_RESULT([no]); have_ssl_is_quic=no])
|
||||||
|
|
||||||
CFLAGS="$save_CFLAGS"
|
CFLAGS="$save_CFLAGS"
|
||||||
LIBS="$save_LIBS"
|
LIBS="$save_LIBS"
|
||||||
@@ -508,7 +506,7 @@ fi
|
|||||||
# ngtcp2 (for src)
|
# ngtcp2 (for src)
|
||||||
have_libngtcp2=no
|
have_libngtcp2=no
|
||||||
if test "x${request_libngtcp2}" != "xno"; then
|
if test "x${request_libngtcp2}" != "xno"; then
|
||||||
PKG_CHECK_MODULES([LIBNGTCP2], [libngtcp2 >= 1.0.0], [have_libngtcp2=yes],
|
PKG_CHECK_MODULES([LIBNGTCP2], [libngtcp2 >= 0.0.0], [have_libngtcp2=yes],
|
||||||
[have_libngtcp2=no])
|
[have_libngtcp2=no])
|
||||||
if test "x${have_libngtcp2}" = "xno"; then
|
if test "x${have_libngtcp2}" = "xno"; then
|
||||||
AC_MSG_NOTICE($LIBNGTCP2_PKG_ERRORS)
|
AC_MSG_NOTICE($LIBNGTCP2_PKG_ERRORS)
|
||||||
@@ -520,56 +518,27 @@ if test "x${request_libngtcp2}" = "xyes" &&
|
|||||||
AC_MSG_ERROR([libngtcp2 was requested (--with-libngtcp2) but not found])
|
AC_MSG_ERROR([libngtcp2 was requested (--with-libngtcp2) but not found])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ngtcp2_crypto_quictls (for src)
|
# ngtcp2_crypto_openssl (for src)
|
||||||
have_libngtcp2_crypto_quictls=no
|
have_libngtcp2_crypto_openssl=no
|
||||||
if test "x${have_ssl_provide_quic_data}" = "xyes" &&
|
if test "x${request_libngtcp2}" != "xno"; then
|
||||||
test "x${have_boringssl_quic}" != "xyes" &&
|
PKG_CHECK_MODULES([LIBNGTCP2_CRYPTO_OPENSSL],
|
||||||
test "x${request_libngtcp2}" != "xno"; then
|
[libngtcp2_crypto_openssl >= 0.0.0],
|
||||||
PKG_CHECK_MODULES([LIBNGTCP2_CRYPTO_QUICTLS],
|
[have_libngtcp2_crypto_openssl=yes],
|
||||||
[libngtcp2_crypto_quictls >= 1.0.0],
|
[have_libngtcp2_crypto_openssl=no])
|
||||||
[have_libngtcp2_crypto_quictls=yes],
|
if test "x${have_libngtcp2_crypto_openssl}" = "xno"; then
|
||||||
[have_libngtcp2_crypto_quictls=no])
|
AC_MSG_NOTICE($LIBNGTCP2_CRYPTO_OPENSSL_PKG_ERRORS)
|
||||||
if test "x${have_libngtcp2_crypto_quictls}" = "xno"; then
|
|
||||||
AC_MSG_NOTICE($LIBNGTCP2_CRYPTO_QUICTLS_PKG_ERRORS)
|
|
||||||
else
|
|
||||||
AC_DEFINE([HAVE_LIBNGTCP2_CRYPTO_QUICTLS], [1],
|
|
||||||
[Define to 1 if you have `libngtcp2_crypto_quictls` library.])
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x${have_ssl_provide_quic_data}" = "xyes" &&
|
if test "x${request_libngtcp2}" = "xyes" &&
|
||||||
test "x${have_boringssl_quic}" != "xyes" &&
|
test "x${have_libngtcp2_crypto_openssl}" != "xyes"; then
|
||||||
test "x${request_libngtcp2}" = "xyes" &&
|
AC_MSG_ERROR([libngtcp2_crypto_openssl was requested (--with-libngtcp2) but not found])
|
||||||
test "x${have_libngtcp2_crypto_quictls}" != "xyes"; then
|
|
||||||
AC_MSG_ERROR([libngtcp2_crypto_quictls was requested (--with-libngtcp2) but not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ngtcp2_crypto_boringssl (for src)
|
|
||||||
have_libngtcp2_crypto_boringssl=no
|
|
||||||
if test "x${have_boringssl_quic}" = "xyes" &&
|
|
||||||
test "x${request_libngtcp2}" != "xno"; then
|
|
||||||
PKG_CHECK_MODULES([LIBNGTCP2_CRYPTO_BORINGSSL],
|
|
||||||
[libngtcp2_crypto_boringssl >= 0.0.0],
|
|
||||||
[have_libngtcp2_crypto_boringssl=yes],
|
|
||||||
[have_libngtcp2_crypto_boringssl=no])
|
|
||||||
if test "x${have_libngtcp2_crypto_boringssl}" = "xno"; then
|
|
||||||
AC_MSG_NOTICE($LIBNGTCP2_CRYPTO_BORINGSSL_PKG_ERRORS)
|
|
||||||
else
|
|
||||||
AC_DEFINE([HAVE_LIBNGTCP2_CRYPTO_BORINGSSL], [1],
|
|
||||||
[Define to 1 if you have `libngtcp2_crypto_boringssl` library.])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${have_boringssl_quic}" = "xyes" &&
|
|
||||||
test "x${request_libngtcp2}" = "xyes" &&
|
|
||||||
test "x${have_libngtcp2_crypto_boringssl}" != "xyes"; then
|
|
||||||
AC_MSG_ERROR([libngtcp2_crypto_boringssl was requested (--with-libngtcp2) but not found])
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# nghttp3 (for src)
|
# nghttp3 (for src)
|
||||||
have_libnghttp3=no
|
have_libnghttp3=no
|
||||||
if test "x${request_libnghttp3}" != "xno"; then
|
if test "x${request_libnghttp3}" != "xno"; then
|
||||||
PKG_CHECK_MODULES([LIBNGHTTP3], [libnghttp3 >= 1.1.0], [have_libnghttp3=yes],
|
PKG_CHECK_MODULES([LIBNGHTTP3], [libnghttp3 >= 0.0.0], [have_libnghttp3=yes],
|
||||||
[have_libnghttp3=no])
|
[have_libnghttp3=no])
|
||||||
if test "x${have_libnghttp3}" = "xno"; then
|
if test "x${have_libnghttp3}" = "xno"; then
|
||||||
AC_MSG_NOTICE($LIBNGHTTP3_PKG_ERRORS)
|
AC_MSG_NOTICE($LIBNGHTTP3_PKG_ERRORS)
|
||||||
@@ -584,7 +553,7 @@ fi
|
|||||||
# libbpf (for src)
|
# libbpf (for src)
|
||||||
have_libbpf=no
|
have_libbpf=no
|
||||||
if test "x${request_libbpf}" != "xno"; then
|
if test "x${request_libbpf}" != "xno"; then
|
||||||
PKG_CHECK_MODULES([LIBBPF], [libbpf >= 0.7.0], [have_libbpf=yes],
|
PKG_CHECK_MODULES([LIBBPF], [libbpf >= 0.4.0], [have_libbpf=yes],
|
||||||
[have_libbpf=no])
|
[have_libbpf=no])
|
||||||
if test "x${have_libbpf}" = "xyes"; then
|
if test "x${have_libbpf}" = "xyes"; then
|
||||||
AC_DEFINE([HAVE_LIBBPF], [1], [Define to 1 if you have `libbpf` library.])
|
AC_DEFINE([HAVE_LIBBPF], [1], [Define to 1 if you have `libbpf` library.])
|
||||||
@@ -733,6 +702,25 @@ if test "x${request_jemalloc}" = "xyes" &&
|
|||||||
AC_MSG_ERROR([jemalloc was requested (--with-jemalloc) but not found])
|
AC_MSG_ERROR([jemalloc was requested (--with-jemalloc) but not found])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check Boost Asio library
|
||||||
|
have_asio_lib=no
|
||||||
|
|
||||||
|
if test "x${request_asio_lib}" = "xyes"; then
|
||||||
|
AX_BOOST_BASE([1.54.0], [have_boost_base=yes], [have_boost_base=no])
|
||||||
|
|
||||||
|
if test "x${have_boost_base}" = "xyes"; then
|
||||||
|
AX_BOOST_ASIO()
|
||||||
|
AX_BOOST_SYSTEM()
|
||||||
|
AX_BOOST_THREAD()
|
||||||
|
|
||||||
|
if test "x${ax_cv_boost_asio}" = "xyes" &&
|
||||||
|
test "x${ax_cv_boost_system}" = "xyes" &&
|
||||||
|
test "x${ax_cv_boost_thread}" = "xyes"; then
|
||||||
|
have_asio_lib=yes
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# The nghttp, nghttpd and nghttpx under src depend on zlib, OpenSSL,
|
# The nghttp, nghttpd and nghttpx under src depend on zlib, OpenSSL,
|
||||||
# libev, and libc-ares.
|
# libev, and libc-ares.
|
||||||
enable_app=no
|
enable_app=no
|
||||||
@@ -754,9 +742,9 @@ AM_CONDITIONAL([ENABLE_APP], [ test "x${enable_app}" = "xyes" ])
|
|||||||
# Check HTTP/3 support
|
# Check HTTP/3 support
|
||||||
enable_http3=no
|
enable_http3=no
|
||||||
if test "x${request_http3}" != "xno" &&
|
if test "x${request_http3}" != "xno" &&
|
||||||
|
test "x${have_ssl_is_quic}" = "xyes" &&
|
||||||
test "x${have_libngtcp2}" = "xyes" &&
|
test "x${have_libngtcp2}" = "xyes" &&
|
||||||
(test "x${have_libngtcp2_crypto_quictls}" = "xyes" ||
|
test "x${have_libngtcp2_crypto_openssl}" = "xyes" &&
|
||||||
test "x${have_libngtcp2_crypto_boringssl}" = "xyes") &&
|
|
||||||
test "x${have_libnghttp3}" = "xyes"; then
|
test "x${have_libnghttp3}" = "xyes"; then
|
||||||
enable_http3=yes
|
enable_http3=yes
|
||||||
AC_DEFINE([ENABLE_HTTP3], [1], [Define to 1 if HTTP/3 is enabled.])
|
AC_DEFINE([ENABLE_HTTP3], [1], [Define to 1 if HTTP/3 is enabled.])
|
||||||
@@ -783,6 +771,16 @@ fi
|
|||||||
|
|
||||||
AM_CONDITIONAL([ENABLE_HPACK_TOOLS], [ test "x${enable_hpack_tools}" = "xyes" ])
|
AM_CONDITIONAL([ENABLE_HPACK_TOOLS], [ test "x${enable_hpack_tools}" = "xyes" ])
|
||||||
|
|
||||||
|
# C++ library libnghttp2_asio
|
||||||
|
|
||||||
|
enable_asio_lib=no
|
||||||
|
if test "x${request_asio_lib}" != "xno" &&
|
||||||
|
test "x${have_asio_lib}" = "xyes"; then
|
||||||
|
enable_asio_lib=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL([ENABLE_ASIO_LIB], [ test "x${enable_asio_lib}" = "xyes" ])
|
||||||
|
|
||||||
# The example programs depend on OpenSSL and libevent_openssl
|
# The example programs depend on OpenSSL and libevent_openssl
|
||||||
enable_examples=no
|
enable_examples=no
|
||||||
if test "x${request_examples}" != "xno" &&
|
if test "x${request_examples}" != "xno" &&
|
||||||
@@ -805,7 +803,8 @@ have_mruby=no
|
|||||||
have_neverbleed=no
|
have_neverbleed=no
|
||||||
if test "x${enable_examples}" = "xyes" ||
|
if test "x${enable_examples}" = "xyes" ||
|
||||||
test "x${enable_app}" = "xyes" ||
|
test "x${enable_app}" = "xyes" ||
|
||||||
test "x${enable_hpack_tools}" = "xyes"; then
|
test "x${enable_hpack_tools}" = "xyes" ||
|
||||||
|
test "x${enable_asio_lib}" = "xyes"; then
|
||||||
enable_third_party=yes
|
enable_third_party=yes
|
||||||
|
|
||||||
# mruby (for src/nghttpx)
|
# mruby (for src/nghttpx)
|
||||||
@@ -830,6 +829,27 @@ AM_CONDITIONAL([ENABLE_THIRD_PARTY], [ test "x${enable_third_party}" = "xyes" ])
|
|||||||
AM_CONDITIONAL([HAVE_MRUBY], [test "x${have_mruby}" = "xyes"])
|
AM_CONDITIONAL([HAVE_MRUBY], [test "x${have_mruby}" = "xyes"])
|
||||||
AM_CONDITIONAL([HAVE_NEVERBLEED], [test "x${have_neverbleed}" = "xyes"])
|
AM_CONDITIONAL([HAVE_NEVERBLEED], [test "x${have_neverbleed}" = "xyes"])
|
||||||
|
|
||||||
|
# Python bindings
|
||||||
|
enable_python_bindings=no
|
||||||
|
if test "x${request_python_bindings}" != "xno" &&
|
||||||
|
test "x${CYTHON}" != "x" &&
|
||||||
|
test "x${PYTHON}" != "x:" &&
|
||||||
|
test "x${PYTHON_VERSION}" != "x"; then
|
||||||
|
enable_python_bindings=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "x${request_python_bindings}" = "xyes" &&
|
||||||
|
test "x${enable_python_bindings}" != "xyes"; then
|
||||||
|
AC_MSG_ERROR([python bindings were requested (--enable-python-bindings) but dependencies are not met.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL([ENABLE_PYTHON_BINDINGS],
|
||||||
|
[test "x${enable_python_bindings}" = "xyes"])
|
||||||
|
|
||||||
|
# Produce cython conditional, so that we can distribute generated C
|
||||||
|
# source
|
||||||
|
AM_CONDITIONAL([HAVE_CYTHON], [test "x${CYTHON}" != "x"])
|
||||||
|
|
||||||
# failmalloc tests
|
# failmalloc tests
|
||||||
enable_failmalloc=no
|
enable_failmalloc=no
|
||||||
if test "x${request_failmalloc}" = "xyes"; then
|
if test "x${request_failmalloc}" = "xyes"; then
|
||||||
@@ -847,7 +867,6 @@ AC_CHECK_HEADERS([ \
|
|||||||
limits.h \
|
limits.h \
|
||||||
netdb.h \
|
netdb.h \
|
||||||
netinet/in.h \
|
netinet/in.h \
|
||||||
netinet/ip.h \
|
|
||||||
pwd.h \
|
pwd.h \
|
||||||
stddef.h \
|
stddef.h \
|
||||||
stdint.h \
|
stdint.h \
|
||||||
@@ -856,8 +875,8 @@ AC_CHECK_HEADERS([ \
|
|||||||
sys/socket.h \
|
sys/socket.h \
|
||||||
sys/time.h \
|
sys/time.h \
|
||||||
syslog.h \
|
syslog.h \
|
||||||
|
time.h \
|
||||||
unistd.h \
|
unistd.h \
|
||||||
windows.h \
|
|
||||||
])
|
])
|
||||||
|
|
||||||
# Checks for typedefs, structures, and compiler characteristics.
|
# Checks for typedefs, structures, and compiler characteristics.
|
||||||
@@ -907,6 +926,12 @@ if test "x$have_struct_tm_tm_gmtoff" = "xyes"; then
|
|||||||
[Define to 1 if you have `struct tm.tm_gmtoff` member.])
|
[Define to 1 if you have `struct tm.tm_gmtoff` member.])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check size of pointer to decide we need 8 bytes alignment
|
||||||
|
# adjustment.
|
||||||
|
AC_CHECK_SIZEOF([int *])
|
||||||
|
|
||||||
|
AC_CHECK_SIZEOF([time_t])
|
||||||
|
|
||||||
# Checks for library functions.
|
# Checks for library functions.
|
||||||
|
|
||||||
# Don't check malloc, since it does not play nicely with C++ stdlib
|
# Don't check malloc, since it does not play nicely with C++ stdlib
|
||||||
@@ -923,7 +948,6 @@ AC_FUNC_STRNLEN
|
|||||||
AC_CHECK_FUNCS([ \
|
AC_CHECK_FUNCS([ \
|
||||||
_Exit \
|
_Exit \
|
||||||
accept4 \
|
accept4 \
|
||||||
clock_gettime \
|
|
||||||
dup2 \
|
dup2 \
|
||||||
getcwd \
|
getcwd \
|
||||||
getpwnam \
|
getpwnam \
|
||||||
@@ -949,25 +973,6 @@ AC_CHECK_FUNCS([ \
|
|||||||
AC_CHECK_FUNC([timerfd_create],
|
AC_CHECK_FUNC([timerfd_create],
|
||||||
[have_timerfd_create=yes], [have_timerfd_create=no])
|
[have_timerfd_create=yes], [have_timerfd_create=no])
|
||||||
|
|
||||||
AC_MSG_CHECKING([checking for GetTickCount64])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM(
|
|
||||||
[[
|
|
||||||
#include <windows.h>
|
|
||||||
]],
|
|
||||||
[[
|
|
||||||
GetTickCount64();
|
|
||||||
]])],
|
|
||||||
[have_gettickcount64=yes],
|
|
||||||
[have_gettickcount64=no])
|
|
||||||
|
|
||||||
if test "x${have_gettickcount64}" = "xyes"; then
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE([HAVE_GETTICKCOUNT64], [1],
|
|
||||||
[Define to 1 if you have `GetTickCount64` function.])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# For cygwin: we can link initgroups, so AC_CHECK_FUNCS succeeds, but
|
# For cygwin: we can link initgroups, so AC_CHECK_FUNCS succeeds, but
|
||||||
# cygwin disables initgroups due to feature test macro magic with our
|
# cygwin disables initgroups due to feature test macro magic with our
|
||||||
# configuration. FreeBSD declares initgroups() in unistd.h.
|
# configuration. FreeBSD declares initgroups() in unistd.h.
|
||||||
@@ -978,10 +983,34 @@ AC_CHECK_DECLS([initgroups], [], [], [[
|
|||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AC_CHECK_DECLS([CLOCK_MONOTONIC], [], [], [[
|
have_netinet_udp_h_udp_segment=no
|
||||||
#include <time.h>
|
AC_CHECK_DECL([UDP_SEGMENT], [have_netinet_udp_h_udp_segment=yes],
|
||||||
|
[have_netinet_udp_h_udp_segment=no], [[
|
||||||
|
#include <netinet/udp.h>
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
if test "x$have_netinet_udp_h_udp_segment" = "xno"; then
|
||||||
|
have_linux_udp_h_udp_segment=no
|
||||||
|
AC_MSG_CHECKING([whether UDP_SEGMENT is defined as 103 in linux/udp.h])
|
||||||
|
AC_RUN_IFELSE([AC_LANG_PROGRAM(
|
||||||
|
[[
|
||||||
|
#include <linux/udp.h>
|
||||||
|
]],
|
||||||
|
[[
|
||||||
|
#if UDP_SEGMENT != 103
|
||||||
|
exit(1)
|
||||||
|
#endif
|
||||||
|
]])],
|
||||||
|
[have_linux_udp_h_udp_segment=yes
|
||||||
|
AC_MSG_RESULT([yes])],
|
||||||
|
[have_linux_udp_h_udp_segment=no
|
||||||
|
AC_MSG_RESULT([no])])
|
||||||
|
|
||||||
|
if test "x$have_linux_udp_h_udp_segment" = "xyes"; then
|
||||||
|
EXTRA_DEFS="$EXTRA_DEFS -DUDP_SEGMENT=103"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
save_CFLAGS=$CFLAGS
|
save_CFLAGS=$CFLAGS
|
||||||
save_CXXFLAGS=$CXXFLAGS
|
save_CXXFLAGS=$CXXFLAGS
|
||||||
|
|
||||||
@@ -1095,9 +1124,12 @@ AC_CONFIG_FILES([
|
|||||||
tests/testdata/Makefile
|
tests/testdata/Makefile
|
||||||
third-party/Makefile
|
third-party/Makefile
|
||||||
src/Makefile
|
src/Makefile
|
||||||
src/testdata/Makefile
|
src/includes/Makefile
|
||||||
|
src/libnghttp2_asio.pc
|
||||||
bpf/Makefile
|
bpf/Makefile
|
||||||
examples/Makefile
|
examples/Makefile
|
||||||
|
python/Makefile
|
||||||
|
python/setup.py
|
||||||
integration-tests/Makefile
|
integration-tests/Makefile
|
||||||
integration-tests/config.go
|
integration-tests/config.go
|
||||||
integration-tests/setenv
|
integration-tests/setenv
|
||||||
@@ -1110,9 +1142,14 @@ AC_CONFIG_FILES([
|
|||||||
doc/tutorial-hpack.rst
|
doc/tutorial-hpack.rst
|
||||||
doc/nghttpx-howto.rst
|
doc/nghttpx-howto.rst
|
||||||
doc/h2load-howto.rst
|
doc/h2load-howto.rst
|
||||||
|
doc/libnghttp2_asio.rst
|
||||||
|
doc/python-apiref.rst
|
||||||
doc/building-android-binary.rst
|
doc/building-android-binary.rst
|
||||||
doc/nghttp2.h.rst
|
doc/nghttp2.h.rst
|
||||||
doc/nghttp2ver.h.rst
|
doc/nghttp2ver.h.rst
|
||||||
|
doc/asio_http2.h.rst
|
||||||
|
doc/asio_http2_server.h.rst
|
||||||
|
doc/asio_http2_client.h.rst
|
||||||
doc/contribute.rst
|
doc/contribute.rst
|
||||||
contrib/Makefile
|
contrib/Makefile
|
||||||
script/Makefile
|
script/Makefile
|
||||||
@@ -1154,6 +1191,10 @@ AC_MSG_NOTICE([summary of build options:
|
|||||||
Python:
|
Python:
|
||||||
Python: ${PYTHON}
|
Python: ${PYTHON}
|
||||||
PYTHON_VERSION: ${PYTHON_VERSION}
|
PYTHON_VERSION: ${PYTHON_VERSION}
|
||||||
|
pyexecdir: ${pyexecdir}
|
||||||
|
PYTHON_CPPFLAGS:${PYTHON_CPPFLAGS}
|
||||||
|
PYTHON_LIBS: ${PYTHON_LIBS}
|
||||||
|
Cython: ${CYTHON}
|
||||||
Test:
|
Test:
|
||||||
CUnit: ${have_cunit} (CFLAGS='${CUNIT_CFLAGS}' LIBS='${CUNIT_LIBS}')
|
CUnit: ${have_cunit} (CFLAGS='${CUNIT_CFLAGS}' LIBS='${CUNIT_LIBS}')
|
||||||
Failmalloc: ${enable_failmalloc}
|
Failmalloc: ${enable_failmalloc}
|
||||||
@@ -1163,8 +1204,7 @@ AC_MSG_NOTICE([summary of build options:
|
|||||||
Libev: ${have_libev} (CFLAGS='${LIBEV_CFLAGS}' LIBS='${LIBEV_LIBS}')
|
Libev: ${have_libev} (CFLAGS='${LIBEV_CFLAGS}' LIBS='${LIBEV_LIBS}')
|
||||||
Libc-ares: ${have_libcares} (CFLAGS='${LIBCARES_CFLAGS}' LIBS='${LIBCARES_LIBS}')
|
Libc-ares: ${have_libcares} (CFLAGS='${LIBCARES_CFLAGS}' LIBS='${LIBCARES_LIBS}')
|
||||||
libngtcp2: ${have_libngtcp2} (CFLAGS='${LIBNGTCP2_CFLAGS}' LIBS='${LIBNGTCP2_LIBS}')
|
libngtcp2: ${have_libngtcp2} (CFLAGS='${LIBNGTCP2_CFLAGS}' LIBS='${LIBNGTCP2_LIBS}')
|
||||||
libngtcp2_crypto_quictls: ${have_libngtcp2_crypto_quictls} (CFLAGS='${LIBNGTCP2_CRYPTO_QUICTLS_CFLAGS}' LIBS='${LIBNGTCP2_CRYPTO_QUICTLS_LIBS}')
|
libngtcp2_crypto_openssl: ${have_libngtcp2_crypto_openssl} (CFLAGS='${LIBNGTCP2_CRYPTO_OPENSSL_CFLAGS}' LIBS='${LIBNGTCP2_CRYPTO_OPENSSL_LIBS}')
|
||||||
libngtcp2_crypto_boringssl: ${have_libngtcp2_crypto_boringssl} (CFLAGS='${LIBNGTCP2_CRYPTO_BORINGSSL_CFLAGS}' LIBS='${LIBNGTCP2_CRYPTO_BORINGSSL_LIBS}')
|
|
||||||
libnghttp3: ${have_libnghttp3} (CFLAGS='${LIBNGHTTP3_CFLAGS}' LIBS='${LIBNGHTTP3_LIBS}')
|
libnghttp3: ${have_libnghttp3} (CFLAGS='${LIBNGHTTP3_CFLAGS}' LIBS='${LIBNGHTTP3_LIBS}')
|
||||||
libbpf: ${have_libbpf} (CFLAGS='${LIBBPF_CFLAGS}' LIBS='${LIBBPF_LIBS}')
|
libbpf: ${have_libbpf} (CFLAGS='${LIBBPF_CFLAGS}' LIBS='${LIBBPF_LIBS}')
|
||||||
Libevent(SSL): ${have_libevent_openssl} (CFLAGS='${LIBEVENT_OPENSSL_CFLAGS}' LIBS='${LIBEVENT_OPENSSL_LIBS}')
|
Libevent(SSL): ${have_libevent_openssl} (CFLAGS='${LIBEVENT_OPENSSL_CFLAGS}' LIBS='${LIBEVENT_OPENSSL_LIBS}')
|
||||||
@@ -1172,6 +1212,11 @@ AC_MSG_NOTICE([summary of build options:
|
|||||||
Jemalloc: ${have_jemalloc} (CFLAGS='${JEMALLOC_CFLAGS}' LIBS='${JEMALLOC_LIBS}')
|
Jemalloc: ${have_jemalloc} (CFLAGS='${JEMALLOC_CFLAGS}' LIBS='${JEMALLOC_LIBS}')
|
||||||
Zlib: ${have_zlib} (CFLAGS='${ZLIB_CFLAGS}' LIBS='${ZLIB_LIBS}')
|
Zlib: ${have_zlib} (CFLAGS='${ZLIB_CFLAGS}' LIBS='${ZLIB_LIBS}')
|
||||||
Systemd: ${have_libsystemd} (CFLAGS='${SYSTEMD_CFLAGS}' LIBS='${SYSTEMD_LIBS}')
|
Systemd: ${have_libsystemd} (CFLAGS='${SYSTEMD_CFLAGS}' LIBS='${SYSTEMD_LIBS}')
|
||||||
|
Boost CPPFLAGS: ${BOOST_CPPFLAGS}
|
||||||
|
Boost LDFLAGS: ${BOOST_LDFLAGS}
|
||||||
|
Boost::ASIO: ${BOOST_ASIO_LIB}
|
||||||
|
Boost::System: ${BOOST_SYSTEM_LIB}
|
||||||
|
Boost::Thread: ${BOOST_THREAD_LIB}
|
||||||
Third-party:
|
Third-party:
|
||||||
http-parser: ${enable_third_party}
|
http-parser: ${enable_third_party}
|
||||||
MRuby: ${have_mruby} (CFLAGS='${LIBMRUBY_CFLAGS}' LIBS='${LIBMRUBY_LIBS}')
|
MRuby: ${have_mruby} (CFLAGS='${LIBMRUBY_CFLAGS}' LIBS='${LIBMRUBY_LIBS}')
|
||||||
@@ -1179,7 +1224,9 @@ AC_MSG_NOTICE([summary of build options:
|
|||||||
Features:
|
Features:
|
||||||
Applications: ${enable_app}
|
Applications: ${enable_app}
|
||||||
HPACK tools: ${enable_hpack_tools}
|
HPACK tools: ${enable_hpack_tools}
|
||||||
|
Libnghttp2_asio:${enable_asio_lib}
|
||||||
Examples: ${enable_examples}
|
Examples: ${enable_examples}
|
||||||
|
Python bindings:${enable_python_bindings}
|
||||||
Threading: ${enable_threads}
|
Threading: ${enable_threads}
|
||||||
HTTP/3 (EXPERIMENTAL): ${enable_http3}
|
HTTP/3 (EXPERIMENTAL): ${enable_http3}
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -30,10 +30,9 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/bradfitz/gomemcache/memcache"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bradfitz/gomemcache/memcache"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func makeKey(len int) []byte {
|
func makeKey(len int) []byte {
|
||||||
@@ -90,7 +89,9 @@ func main() {
|
|||||||
Expiration: int32((*interval) + 300),
|
Expiration: int32((*interval) + 300),
|
||||||
})
|
})
|
||||||
|
|
||||||
<-time.After(time.Duration(*interval) * time.Second)
|
select {
|
||||||
|
case <-time.After(time.Duration(*interval) * time.Second):
|
||||||
|
}
|
||||||
|
|
||||||
// rotate keys. the last key is now encryption key.
|
// rotate keys. the last key is now encryption key.
|
||||||
// generate new key and append it to the last, so that
|
// generate new key and append it to the last, so that
|
||||||
|
|||||||
5
doc/.gitignore
vendored
5
doc/.gitignore
vendored
@@ -1,11 +1,15 @@
|
|||||||
# generated files
|
# generated files
|
||||||
apiref.rst
|
apiref.rst
|
||||||
|
asio_http2.h.rst
|
||||||
|
asio_http2_client.h.rst
|
||||||
|
asio_http2_server.h.rst
|
||||||
building-android-binary.rst
|
building-android-binary.rst
|
||||||
conf.py
|
conf.py
|
||||||
contribute.rst
|
contribute.rst
|
||||||
enums.rst
|
enums.rst
|
||||||
h2load-howto.rst
|
h2load-howto.rst
|
||||||
index.rst
|
index.rst
|
||||||
|
libnghttp2_asio.rst
|
||||||
macros.rst
|
macros.rst
|
||||||
manual/
|
manual/
|
||||||
nghttp2.h.rst
|
nghttp2.h.rst
|
||||||
@@ -13,6 +17,7 @@ nghttp2_*.rst
|
|||||||
nghttp2ver.h.rst
|
nghttp2ver.h.rst
|
||||||
nghttpx-howto.rst
|
nghttpx-howto.rst
|
||||||
package_README.rst
|
package_README.rst
|
||||||
|
python-apiref.rst
|
||||||
tutorial-client.rst
|
tutorial-client.rst
|
||||||
tutorial-hpack.rst
|
tutorial-hpack.rst
|
||||||
tutorial-server.rst
|
tutorial-server.rst
|
||||||
|
|||||||
@@ -180,6 +180,8 @@ set(EXTRA_DIST
|
|||||||
sources/tutorial-hpack.rst
|
sources/tutorial-hpack.rst
|
||||||
sources/nghttpx-howto.rst
|
sources/nghttpx-howto.rst
|
||||||
sources/h2load-howto.rst
|
sources/h2load-howto.rst
|
||||||
|
sources/libnghttp2_asio.rst
|
||||||
|
sources/python-apiref.rst
|
||||||
sources/building-android-binary.rst
|
sources/building-android-binary.rst
|
||||||
sources/contribute.rst
|
sources/contribute.rst
|
||||||
_exts/rubydomain/LICENSE.rubydomain
|
_exts/rubydomain/LICENSE.rubydomain
|
||||||
@@ -267,7 +269,7 @@ add_custom_command(
|
|||||||
apiref.rst
|
apiref.rst
|
||||||
${APIDOCS}
|
${APIDOCS}
|
||||||
COMMAND
|
COMMAND
|
||||||
"${Python3_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkapiref.py"
|
"${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkapiref.py"
|
||||||
apiref.rst macros.rst enums.rst types.rst .
|
apiref.rst macros.rst enums.rst types.rst .
|
||||||
${apiref_SOURCES}
|
${apiref_SOURCES}
|
||||||
DEPENDS
|
DEPENDS
|
||||||
|
|||||||
@@ -30,10 +30,8 @@ APIDOCS= \
|
|||||||
nghttp2_check_authority.rst \
|
nghttp2_check_authority.rst \
|
||||||
nghttp2_check_header_name.rst \
|
nghttp2_check_header_name.rst \
|
||||||
nghttp2_check_header_value.rst \
|
nghttp2_check_header_value.rst \
|
||||||
nghttp2_check_header_value_rfc9113.rst \
|
|
||||||
nghttp2_check_method.rst \
|
nghttp2_check_method.rst \
|
||||||
nghttp2_check_path.rst \
|
nghttp2_check_path.rst \
|
||||||
nghttp2_extpri_parse_priority.rst \
|
|
||||||
nghttp2_hd_deflate_bound.rst \
|
nghttp2_hd_deflate_bound.rst \
|
||||||
nghttp2_hd_deflate_change_table_size.rst \
|
nghttp2_hd_deflate_change_table_size.rst \
|
||||||
nghttp2_hd_deflate_del.rst \
|
nghttp2_hd_deflate_del.rst \
|
||||||
@@ -70,13 +68,10 @@ APIDOCS= \
|
|||||||
nghttp2_option_set_no_closed_streams.rst \
|
nghttp2_option_set_no_closed_streams.rst \
|
||||||
nghttp2_option_set_no_http_messaging.rst \
|
nghttp2_option_set_no_http_messaging.rst \
|
||||||
nghttp2_option_set_no_recv_client_magic.rst \
|
nghttp2_option_set_no_recv_client_magic.rst \
|
||||||
nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation.rst \
|
|
||||||
nghttp2_option_set_peer_max_concurrent_streams.rst \
|
nghttp2_option_set_peer_max_concurrent_streams.rst \
|
||||||
nghttp2_option_set_server_fallback_rfc7540_priorities.rst \
|
|
||||||
nghttp2_option_set_user_recv_extension_type.rst \
|
nghttp2_option_set_user_recv_extension_type.rst \
|
||||||
nghttp2_option_set_max_outbound_ack.rst \
|
nghttp2_option_set_max_outbound_ack.rst \
|
||||||
nghttp2_option_set_max_settings.rst \
|
nghttp2_option_set_max_settings.rst \
|
||||||
nghttp2_option_set_stream_reset_rate_limit.rst \
|
|
||||||
nghttp2_pack_settings_payload.rst \
|
nghttp2_pack_settings_payload.rst \
|
||||||
nghttp2_priority_spec_check_default.rst \
|
nghttp2_priority_spec_check_default.rst \
|
||||||
nghttp2_priority_spec_default_init.rst \
|
nghttp2_priority_spec_default_init.rst \
|
||||||
@@ -86,7 +81,6 @@ APIDOCS= \
|
|||||||
nghttp2_rcbuf_incref.rst \
|
nghttp2_rcbuf_incref.rst \
|
||||||
nghttp2_rcbuf_is_static.rst \
|
nghttp2_rcbuf_is_static.rst \
|
||||||
nghttp2_select_next_protocol.rst \
|
nghttp2_select_next_protocol.rst \
|
||||||
nghttp2_select_alpn.rst \
|
|
||||||
nghttp2_session_callbacks_del.rst \
|
nghttp2_session_callbacks_del.rst \
|
||||||
nghttp2_session_callbacks_new.rst \
|
nghttp2_session_callbacks_new.rst \
|
||||||
nghttp2_session_callbacks_set_before_frame_send_callback.rst \
|
nghttp2_session_callbacks_set_before_frame_send_callback.rst \
|
||||||
@@ -112,7 +106,6 @@ APIDOCS= \
|
|||||||
nghttp2_session_callbacks_set_send_callback.rst \
|
nghttp2_session_callbacks_set_send_callback.rst \
|
||||||
nghttp2_session_callbacks_set_send_data_callback.rst \
|
nghttp2_session_callbacks_set_send_data_callback.rst \
|
||||||
nghttp2_session_callbacks_set_unpack_extension_callback.rst \
|
nghttp2_session_callbacks_set_unpack_extension_callback.rst \
|
||||||
nghttp2_session_change_extpri_stream_priority.rst \
|
|
||||||
nghttp2_session_change_stream_priority.rst \
|
nghttp2_session_change_stream_priority.rst \
|
||||||
nghttp2_session_check_request_allowed.rst \
|
nghttp2_session_check_request_allowed.rst \
|
||||||
nghttp2_session_check_server_session.rst \
|
nghttp2_session_check_server_session.rst \
|
||||||
@@ -127,7 +120,6 @@ APIDOCS= \
|
|||||||
nghttp2_session_find_stream.rst \
|
nghttp2_session_find_stream.rst \
|
||||||
nghttp2_session_get_effective_local_window_size.rst \
|
nghttp2_session_get_effective_local_window_size.rst \
|
||||||
nghttp2_session_get_effective_recv_data_length.rst \
|
nghttp2_session_get_effective_recv_data_length.rst \
|
||||||
nghttp2_session_get_extpri_stream_priority.rst \
|
|
||||||
nghttp2_session_get_hd_deflate_dynamic_table_size.rst \
|
nghttp2_session_get_hd_deflate_dynamic_table_size.rst \
|
||||||
nghttp2_session_get_hd_inflate_dynamic_table_size.rst \
|
nghttp2_session_get_hd_inflate_dynamic_table_size.rst \
|
||||||
nghttp2_session_get_last_proc_stream_id.rst \
|
nghttp2_session_get_last_proc_stream_id.rst \
|
||||||
@@ -180,7 +172,6 @@ APIDOCS= \
|
|||||||
nghttp2_submit_origin.rst \
|
nghttp2_submit_origin.rst \
|
||||||
nghttp2_submit_ping.rst \
|
nghttp2_submit_ping.rst \
|
||||||
nghttp2_submit_priority.rst \
|
nghttp2_submit_priority.rst \
|
||||||
nghttp2_submit_priority_update.rst \
|
|
||||||
nghttp2_submit_push_promise.rst \
|
nghttp2_submit_push_promise.rst \
|
||||||
nghttp2_submit_request.rst \
|
nghttp2_submit_request.rst \
|
||||||
nghttp2_submit_response.rst \
|
nghttp2_submit_response.rst \
|
||||||
@@ -210,12 +201,66 @@ EXTRA_DIST = \
|
|||||||
sources/tutorial-hpack.rst \
|
sources/tutorial-hpack.rst \
|
||||||
sources/nghttpx-howto.rst \
|
sources/nghttpx-howto.rst \
|
||||||
sources/h2load-howto.rst \
|
sources/h2load-howto.rst \
|
||||||
|
sources/libnghttp2_asio.rst \
|
||||||
|
sources/python-apiref.rst \
|
||||||
sources/building-android-binary.rst \
|
sources/building-android-binary.rst \
|
||||||
sources/contribute.rst \
|
sources/contribute.rst \
|
||||||
sources/security.rst \
|
sources/security.rst \
|
||||||
_exts/rubydomain/LICENSE.rubydomain \
|
_exts/rubydomain/LICENSE.rubydomain \
|
||||||
_exts/rubydomain/__init__.py \
|
_exts/rubydomain/__init__.py \
|
||||||
_exts/rubydomain/rubydomain.py \
|
_exts/rubydomain/rubydomain.py \
|
||||||
|
_themes/sphinx_rtd_theme/__init__.py \
|
||||||
|
_themes/sphinx_rtd_theme/breadcrumbs.html \
|
||||||
|
_themes/sphinx_rtd_theme/footer.html \
|
||||||
|
_themes/sphinx_rtd_theme/layout.html \
|
||||||
|
_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/sphinx.pot \
|
||||||
|
_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.mo \
|
||||||
|
_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.po \
|
||||||
|
_themes/sphinx_rtd_theme/search.html \
|
||||||
|
_themes/sphinx_rtd_theme/searchbox.html \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/badge_only.css \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.eot \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.svg \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.ttf \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff2 \
|
||||||
|
_themes/sphinx_rtd_theme/static/css/theme.css \
|
||||||
|
_themes/sphinx_rtd_theme/static/js/badge_only.js \
|
||||||
|
_themes/sphinx_rtd_theme/static/js/theme.js \
|
||||||
|
_themes/sphinx_rtd_theme/theme.conf \
|
||||||
|
_themes/sphinx_rtd_theme/versions.html \
|
||||||
$(man_MANS) \
|
$(man_MANS) \
|
||||||
bash_completion/nghttp \
|
bash_completion/nghttp \
|
||||||
bash_completion/nghttpd \
|
bash_completion/nghttpd \
|
||||||
|
|||||||
@@ -493,7 +493,7 @@ class RubyModuleIndex(Index):
|
|||||||
# list of all modules, sorted by module name
|
# list of all modules, sorted by module name
|
||||||
modules = sorted(_iteritems(self.domain.data['modules']),
|
modules = sorted(_iteritems(self.domain.data['modules']),
|
||||||
key=lambda x: x[0].lower())
|
key=lambda x: x[0].lower())
|
||||||
# sort out collapsible modules
|
# sort out collapsable modules
|
||||||
prev_modname = ''
|
prev_modname = ''
|
||||||
num_toplevels = 0
|
num_toplevels = 0
|
||||||
for modname, (docname, synopsis, platforms, deprecated) in modules:
|
for modname, (docname, synopsis, platforms, deprecated) in modules:
|
||||||
|
|||||||
34
doc/_themes/sphinx_rtd_theme/__init__.py
vendored
Normal file
34
doc/_themes/sphinx_rtd_theme/__init__.py
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
"""
|
||||||
|
Sphinx Read the Docs theme.
|
||||||
|
|
||||||
|
From https://github.com/ryan-roemer/sphinx-bootstrap-theme.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from os import path
|
||||||
|
|
||||||
|
import sphinx
|
||||||
|
|
||||||
|
|
||||||
|
__version__ = '0.5.0'
|
||||||
|
__version_full__ = __version__
|
||||||
|
|
||||||
|
|
||||||
|
def get_html_theme_path():
|
||||||
|
"""Return list of HTML theme paths."""
|
||||||
|
cur_dir = path.abspath(path.dirname(path.dirname(__file__)))
|
||||||
|
return cur_dir
|
||||||
|
|
||||||
|
|
||||||
|
# See http://www.sphinx-doc.org/en/stable/theming.html#distribute-your-theme-as-a-python-package
|
||||||
|
def setup(app):
|
||||||
|
if sphinx.version_info >= (1, 6, 0):
|
||||||
|
# Register the theme that can be referenced without adding a theme path
|
||||||
|
app.add_html_theme('sphinx_rtd_theme', path.abspath(path.dirname(__file__)))
|
||||||
|
|
||||||
|
if sphinx.version_info >= (1, 8, 0):
|
||||||
|
# Add Sphinx message catalog for newer versions of Sphinx
|
||||||
|
# See http://www.sphinx-doc.org/en/master/extdev/appapi.html#sphinx.application.Sphinx.add_message_catalog
|
||||||
|
rtd_locale_path = path.join(path.abspath(path.dirname(__file__)), 'locale')
|
||||||
|
app.add_message_catalog('sphinx', rtd_locale_path)
|
||||||
|
|
||||||
|
return {'parallel_read_safe': True, 'parallel_write_safe': True}
|
||||||
84
doc/_themes/sphinx_rtd_theme/breadcrumbs.html
vendored
Normal file
84
doc/_themes/sphinx_rtd_theme/breadcrumbs.html
vendored
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
{# Support for Sphinx 1.3+ page_source_suffix, but don't break old builds. #}
|
||||||
|
|
||||||
|
{% if page_source_suffix %}
|
||||||
|
{% set suffix = page_source_suffix %}
|
||||||
|
{% else %}
|
||||||
|
{% set suffix = source_suffix %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if meta is defined and meta is not none %}
|
||||||
|
{% set check_meta = True %}
|
||||||
|
{% else %}
|
||||||
|
{% set check_meta = False %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if check_meta and 'github_url' in meta %}
|
||||||
|
{% set display_github = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if check_meta and 'bitbucket_url' in meta %}
|
||||||
|
{% set display_bitbucket = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if check_meta and 'gitlab_url' in meta %}
|
||||||
|
{% set display_gitlab = True %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% set display_vcs_links = display_vcs_links if display_vcs_links is defined else True %}
|
||||||
|
|
||||||
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
||||||
|
|
||||||
|
<ul class="wy-breadcrumbs">
|
||||||
|
{% block breadcrumbs %}
|
||||||
|
<li><a href="{{ pathto(master_doc) }}" class="icon icon-home"></a> »</li>
|
||||||
|
{% for doc in parents %}
|
||||||
|
<li><a href="{{ doc.link|e }}">{{ doc.title }}</a> »</li>
|
||||||
|
{% endfor %}
|
||||||
|
<li>{{ title }}</li>
|
||||||
|
{% endblock %}
|
||||||
|
{% block breadcrumbs_aside %}
|
||||||
|
<li class="wy-breadcrumbs-aside">
|
||||||
|
{% if hasdoc(pagename) and display_vcs_links %}
|
||||||
|
{% if display_github %}
|
||||||
|
{% if check_meta and 'github_url' in meta %}
|
||||||
|
<!-- User defined GitHub URL -->
|
||||||
|
<a href="{{ meta['github_url'] }}" class="fa fa-github"> {{ _('Edit on GitHub') }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="https://{{ github_host|default("github.com") }}/{{ github_user }}/{{ github_repo }}/{{ theme_vcs_pageview_mode|default("blob") }}/{{ github_version }}{{ conf_py_path }}{{ pagename }}{{ suffix }}" class="fa fa-github"> {{ _('Edit on GitHub') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% elif display_bitbucket %}
|
||||||
|
{% if check_meta and 'bitbucket_url' in meta %}
|
||||||
|
<!-- User defined Bitbucket URL -->
|
||||||
|
<a href="{{ meta['bitbucket_url'] }}" class="fa fa-bitbucket"> {{ _('Edit on Bitbucket') }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="https://bitbucket.org/{{ bitbucket_user }}/{{ bitbucket_repo }}/src/{{ bitbucket_version}}{{ conf_py_path }}{{ pagename }}{{ suffix }}?mode={{ theme_vcs_pageview_mode|default("view") }}" class="fa fa-bitbucket"> {{ _('Edit on Bitbucket') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% elif display_gitlab %}
|
||||||
|
{% if check_meta and 'gitlab_url' in meta %}
|
||||||
|
<!-- User defined GitLab URL -->
|
||||||
|
<a href="{{ meta['gitlab_url'] }}" class="fa fa-gitlab"> {{ _('Edit on GitLab') }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="https://{{ gitlab_host|default("gitlab.com") }}/{{ gitlab_user }}/{{ gitlab_repo }}/{{ theme_vcs_pageview_mode|default("blob") }}/{{ gitlab_version }}{{ conf_py_path }}{{ pagename }}{{ suffix }}" class="fa fa-gitlab"> {{ _('Edit on GitLab') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% elif show_source and source_url_prefix %}
|
||||||
|
<a href="{{ source_url_prefix }}{{ pagename }}{{ suffix }}">{{ _('View page source') }}</a>
|
||||||
|
{% elif show_source and has_source and sourcename %}
|
||||||
|
<a href="{{ pathto('_sources/' + sourcename, true)|e }}" rel="nofollow"> {{ _('View page source') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endblock %}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
{% if (theme_prev_next_buttons_location == 'top' or theme_prev_next_buttons_location == 'both') and (next or prev) %}
|
||||||
|
<div class="rst-breadcrumbs-buttons" role="navigation" aria-label="breadcrumb navigation">
|
||||||
|
{% if next %}
|
||||||
|
<a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}" accesskey="n">{{ _('Next') }} <span class="fa fa-arrow-circle-right"></span></a>
|
||||||
|
{% endif %}
|
||||||
|
{% if prev %}
|
||||||
|
<a href="{{ prev.link|e }}" class="btn btn-neutral float-left" title="{{ prev.title|striptags|e }}" accesskey="p"><span class="fa fa-arrow-circle-left"></span> {{ _('Previous') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<hr/>
|
||||||
|
</div>
|
||||||
63
doc/_themes/sphinx_rtd_theme/footer.html
vendored
Normal file
63
doc/_themes/sphinx_rtd_theme/footer.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<footer>
|
||||||
|
{% if (theme_prev_next_buttons_location == 'bottom' or theme_prev_next_buttons_location == 'both') and (next or prev) %}
|
||||||
|
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
||||||
|
{% if next %}
|
||||||
|
<a href="{{ next.link|e }}" class="btn btn-neutral float-right" title="{{ next.title|striptags|e }}" accesskey="n" rel="next">{{ _('Next') }} <span class="fa fa-arrow-circle-right"></span></a>
|
||||||
|
{% endif %}
|
||||||
|
{% if prev %}
|
||||||
|
<a href="{{ prev.link|e }}" class="btn btn-neutral float-left" title="{{ prev.title|striptags|e }}" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> {{ _('Previous') }}</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
|
||||||
|
<div role="contentinfo">
|
||||||
|
<p>
|
||||||
|
{%- if show_copyright %}
|
||||||
|
{%- if hasdoc('copyright') %}
|
||||||
|
{% set path = pathto('copyright') %}
|
||||||
|
{% set copyright = copyright|e %}
|
||||||
|
© <a href="{{ path }}">{% trans %}Copyright{% endtrans %}</a> {{ copyright }}
|
||||||
|
{%- else %}
|
||||||
|
{% set copyright = copyright|e %}
|
||||||
|
© {% trans %}Copyright{% endtrans %} {{ copyright }}
|
||||||
|
{%- endif %}
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{%- if build_id and build_url %}
|
||||||
|
<span class="build">
|
||||||
|
{# Translators: Build is a noun, not a verb #}
|
||||||
|
{% trans %}Build{% endtrans %}
|
||||||
|
<a href="{{ build_url }}">{{ build_id }}</a>.
|
||||||
|
</span>
|
||||||
|
{%- elif commit %}
|
||||||
|
<span class="commit">
|
||||||
|
{# Translators: the phrase "revision" comes from Git, referring to a commit #}
|
||||||
|
{% trans %}Revision{% endtrans %} <code>{{ commit }}</code>.
|
||||||
|
</span>
|
||||||
|
{%- endif %}
|
||||||
|
{%- if last_updated %}
|
||||||
|
<span class="lastupdated">
|
||||||
|
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
|
||||||
|
</span>
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{%- if show_sphinx %}
|
||||||
|
{% set sphinx_web = '<a href="https://www.sphinx-doc.org/">Sphinx</a>' %}
|
||||||
|
{% set readthedocs_web = '<a href="https://readthedocs.org">Read the Docs</a>' %}
|
||||||
|
{# Translators: the variable "sphinx_web" is a link to the Sphinx project documentation with the text "Sphinx" #}
|
||||||
|
{% trans sphinx_web=sphinx_web, readthedocs_web=readthedocs_web %}Built with {{ sphinx_web }} using a{% endtrans %}
|
||||||
|
{# Translators: "theme" refers to a theme for Sphinx, which alters the appearance of the generated documenation #}
|
||||||
|
<a href="https://github.com/readthedocs/sphinx_rtd_theme">{% trans %}theme{% endtrans %}</a>
|
||||||
|
{# Translators: this is always used as "provided by Read the Docs", and should not imply Read the Docs is an author of the generated documentation. #}
|
||||||
|
{% trans %}provided by {{ readthedocs_web }}{% endtrans %}.
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{%- block extrafooter %} {% endblock %}
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
|
||||||
241
doc/_themes/sphinx_rtd_theme/layout.html
vendored
Normal file
241
doc/_themes/sphinx_rtd_theme/layout.html
vendored
Normal file
@@ -0,0 +1,241 @@
|
|||||||
|
{# TEMPLATE VAR SETTINGS #}
|
||||||
|
{%- set url_root = pathto('', 1) %}
|
||||||
|
{%- if url_root == '#' %}{% set url_root = '' %}{% endif %}
|
||||||
|
{%- if not embedded and docstitle %}
|
||||||
|
{%- set titlesuffix = " — "|safe + docstitle|e %}
|
||||||
|
{%- else %}
|
||||||
|
{%- set titlesuffix = "" %}
|
||||||
|
{%- endif %}
|
||||||
|
{%- set lang_attr = 'en' if language == None else (language | replace('_', '-')) %}
|
||||||
|
{%- set sphinx_writer = 'writer-html5' if html5_doctype else 'writer-html4' %}
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="{{ sphinx_writer }}" lang="{{ lang_attr }}" >
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
{{ metatags }}
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
{% block htmltitle %}
|
||||||
|
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{# CSS #}
|
||||||
|
<link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" />
|
||||||
|
{%- for css in css_files %}
|
||||||
|
{%- if css|attr("rel") %}
|
||||||
|
<link rel="{{ css.rel }}" href="{{ pathto(css.filename, 1) }}" type="text/css"{% if css.title is not none %} title="{{ css.title }}"{% endif %} />
|
||||||
|
{%- else %}
|
||||||
|
<link rel="stylesheet" href="{{ pathto(css, 1) }}" type="text/css" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- endfor %}
|
||||||
|
|
||||||
|
{%- for cssfile in extra_css_files %}
|
||||||
|
<link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
|
||||||
|
{%- endfor %}
|
||||||
|
|
||||||
|
{# FAVICON #}
|
||||||
|
{% if favicon %}
|
||||||
|
<link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
|
||||||
|
{% endif %}
|
||||||
|
{# CANONICAL URL #}
|
||||||
|
{% if theme_canonical_url %}
|
||||||
|
<link rel="canonical" href="{{ theme_canonical_url }}{{ pagename }}.html"/>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{# JAVASCRIPTS #}
|
||||||
|
{%- block scripts %}
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="{{ pathto('_static/js/html5shiv.min.js', 1) }}"></script>
|
||||||
|
<![endif]-->
|
||||||
|
{%- if not embedded %}
|
||||||
|
{# XXX Sphinx 1.8.0 made this an external js-file, quick fix until we refactor the template to inherert more blocks directly from sphinx #}
|
||||||
|
{% if sphinx_version >= "1.8.0" %}
|
||||||
|
<script type="text/javascript" id="documentation_options" data-url_root="{{ pathto('', 1) }}" src="{{ pathto('_static/documentation_options.js', 1) }}"></script>
|
||||||
|
{%- for scriptfile in script_files %}
|
||||||
|
{{ js_tag(scriptfile) }}
|
||||||
|
{%- endfor %}
|
||||||
|
{% else %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT:'{{ url_root }}',
|
||||||
|
VERSION:'{{ release|e }}',
|
||||||
|
LANGUAGE:'{{ language }}',
|
||||||
|
COLLAPSE_INDEX:false,
|
||||||
|
FILE_SUFFIX:'{{ '' if no_search_suffix else file_suffix }}',
|
||||||
|
HAS_SOURCE: {{ has_source|lower }},
|
||||||
|
SOURCELINK_SUFFIX: '{{ sourcelink_suffix }}'
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
{%- for scriptfile in script_files %}
|
||||||
|
<script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
|
||||||
|
{%- endfor %}
|
||||||
|
{% endif %}
|
||||||
|
<script type="text/javascript" src="{{ pathto('_static/js/theme.js', 1) }}"></script>
|
||||||
|
|
||||||
|
{# OPENSEARCH #}
|
||||||
|
{%- if use_opensearch %}
|
||||||
|
<link rel="search" type="application/opensearchdescription+xml"
|
||||||
|
title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}"
|
||||||
|
href="{{ pathto('_static/opensearch.xml', 1) }}"/>
|
||||||
|
{%- endif %}
|
||||||
|
{%- endif %}
|
||||||
|
{%- endblock %}
|
||||||
|
|
||||||
|
{%- block linktags %}
|
||||||
|
{%- if hasdoc('about') %}
|
||||||
|
<link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if hasdoc('genindex') %}
|
||||||
|
<link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if hasdoc('search') %}
|
||||||
|
<link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if hasdoc('copyright') %}
|
||||||
|
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if next %}
|
||||||
|
<link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if prev %}
|
||||||
|
<link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- endblock %}
|
||||||
|
{%- block extrahead %} {% endblock %}
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body class="wy-body-for-nav">
|
||||||
|
|
||||||
|
{% block extrabody %} {% endblock %}
|
||||||
|
<div class="wy-grid-for-nav">
|
||||||
|
{# SIDE NAV, TOGGLES ON MOBILE #}
|
||||||
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||||
|
<div class="wy-side-scroll">
|
||||||
|
<div class="wy-side-nav-search" {% if theme_style_nav_header_background %} style="background: {{theme_style_nav_header_background}}" {% endif %}>
|
||||||
|
{% block sidebartitle %}
|
||||||
|
|
||||||
|
{% if logo and theme_logo_only %}
|
||||||
|
<a href="{{ pathto(master_doc) }}">
|
||||||
|
{% else %}
|
||||||
|
<a href="{{ pathto(master_doc) }}" class="icon icon-home"> {{ project }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if logo %}
|
||||||
|
{# Not strictly valid HTML, but it's the only way to display/scale
|
||||||
|
it properly, without weird scripting or heaps of work
|
||||||
|
#}
|
||||||
|
<img src="{{ pathto('_static/' + logo, 1) }}" class="logo" alt="{{ _('Logo') }}"/>
|
||||||
|
{% endif %}
|
||||||
|
</a>
|
||||||
|
|
||||||
|
{% if theme_display_version %}
|
||||||
|
{%- set nav_version = version %}
|
||||||
|
{% if READTHEDOCS and current_version %}
|
||||||
|
{%- set nav_version = current_version %}
|
||||||
|
{% endif %}
|
||||||
|
{% if nav_version %}
|
||||||
|
<div class="version">
|
||||||
|
{{ nav_version }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% include "searchbox.html" %}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% block navigation %}
|
||||||
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||||||
|
{% block menu %}
|
||||||
|
{#
|
||||||
|
The singlehtml builder doesn't handle this toctree call when the
|
||||||
|
toctree is empty. Skip building this for now.
|
||||||
|
#}
|
||||||
|
{% if 'singlehtml' not in builder %}
|
||||||
|
{% set global_toc = toctree(maxdepth=theme_navigation_depth|int,
|
||||||
|
collapse=theme_collapse_navigation|tobool,
|
||||||
|
includehidden=theme_includehidden|tobool,
|
||||||
|
titles_only=theme_titles_only|tobool) %}
|
||||||
|
{% endif %}
|
||||||
|
{% if global_toc %}
|
||||||
|
{{ global_toc }}
|
||||||
|
{% else %}
|
||||||
|
<!-- Local TOC -->
|
||||||
|
<div class="local-toc">{{ toc }}</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||||||
|
|
||||||
|
{# MOBILE NAV, TRIGGLES SIDE NAV ON TOGGLE #}
|
||||||
|
<nav class="wy-nav-top" aria-label="top navigation">
|
||||||
|
{% block mobile_nav %}
|
||||||
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||||
|
<a href="{{ pathto(master_doc) }}">{{ project }}</a>
|
||||||
|
{% endblock %}
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="wy-nav-content">
|
||||||
|
{%- block content %}
|
||||||
|
{% if theme_style_external_links|tobool %}
|
||||||
|
<div class="rst-content style-external-links">
|
||||||
|
{% else %}
|
||||||
|
<div class="rst-content">
|
||||||
|
{% endif %}
|
||||||
|
{% include "breadcrumbs.html" %}
|
||||||
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||||
|
{%- block document %}
|
||||||
|
<div itemprop="articleBody">
|
||||||
|
{% block body %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
{% if self.comments()|trim %}
|
||||||
|
<div class="articleComments">
|
||||||
|
{% block comments %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
{% endif%}
|
||||||
|
</div>
|
||||||
|
{%- endblock %}
|
||||||
|
{% include "footer.html" %}
|
||||||
|
</div>
|
||||||
|
{%- endblock %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{% include "versions.html" %}
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function () {
|
||||||
|
SphinxRtdTheme.Navigation.enable({{ 'true' if theme_sticky_navigation|tobool else 'false' }});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{# Do not conflict with RTD insertion of analytics script #}
|
||||||
|
{% if not READTHEDOCS %}
|
||||||
|
{% if theme_analytics_id %}
|
||||||
|
<!-- Theme Analytics -->
|
||||||
|
<script>
|
||||||
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||||
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||||
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||||
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||||
|
|
||||||
|
ga('create', '{{ theme_analytics_id }}', 'auto');
|
||||||
|
ga('send', 'pageview');
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{%- block footer %} {% endblock %}
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
143
doc/_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.po
vendored
Normal file
143
doc/_themes/sphinx_rtd_theme/locale/de/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Tom Kunze <transifex.com@tomabrafix.de>, 2019
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Tom Kunze <transifex.com@tomabrafix.de>, 2019\n"
|
||||||
|
"Language-Team: German (https://www.transifex.com/readthedocs/teams/101354/de/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Auf GitHub bearbeiten"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Auf Bitbucket bearbeiten"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Auf GitLab bearbeiten"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Quelltext anzeigen"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Weiter"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Zurück"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Copyright"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Build"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Zuletzt aktualisiert am %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Erstellt mit %(sphinx_web)s mit einem"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "bereitgestellt von %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "%(docstitle)s durchsuchen"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Über diese Dokumentation"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Index"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Suche"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "Bitte aktiviere JavaScript, um die Suchfunktion zu nutzen."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Suchergebnisse"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Es wurden keine mit deiner Suchanfrage übereinstimmenden Dokumente gefunden."
|
||||||
|
" Achte darauf, dass alle Wörter richtig geschrieben sind und dass genug "
|
||||||
|
"Kategorien ausgewählt sind."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Dokumentation durchsuchen"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versionen"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "Auf Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Projektübersicht"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Builds"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Dokumentation"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Kostenloses Dokumentationen-Hosting zur Verfügung gestellt von"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
156
doc/_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.po
vendored
Normal file
156
doc/_themes/sphinx_rtd_theme/locale/en/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 15:43-0600\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language: en\n"
|
||||||
|
"Language-Team: en <LL@li.org>\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:121
|
||||||
|
msgid "Documentation Home"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words "
|
||||||
|
"are spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
164
doc/_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.po
vendored
Normal file
164
doc/_themes/sphinx_rtd_theme/locale/es/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Anthony <aj@ohess.org>, 2019
|
||||||
|
# Leonardo J. Caballero G. <leonardocaballero@gmail.com>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Leonardo J. Caballero G. <leonardocaballero@gmail.com>, 2020\n"
|
||||||
|
"Language-Team: Spanish (https://www.transifex.com/readthedocs/teams/101354/es/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: es\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Editar en GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Editar en Bitbucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Editar en GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Ver código fuente de la página"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Siguiente"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Anterior"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Derechos de autor"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Construido"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Revisión"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Actualizado por última vez en %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Construido con %(sphinx_web)s usando un"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "tema"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "proporcionado por %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Buscar en %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Sobre esta documentación"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Índice"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Búsqueda"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:121
|
||||||
|
msgid "Documentation Home"
|
||||||
|
msgstr "Inicio de Documentación"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logotipo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
"Por favor, active JavaScript para habilitar la funcionalidad de búsqueda."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Resultados de la búsqueda"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Su búsqueda no coincide con ningún documento. Por favor, asegúrese de que "
|
||||||
|
"todas las palabras estén correctamente escritas y que usted haya "
|
||||||
|
"seleccionado las suficientes categorías."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Buscar documentos"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versiones"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Descargas"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "En Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Página de Proyecto"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Construcciones"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Documentos"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Alojamiento gratuito de documentos proporcionado por"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
155
doc/_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.po
vendored
Normal file
155
doc/_themes/sphinx_rtd_theme/locale/et/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Anthony <aj@ohess.org>, 2020
|
||||||
|
# Ivar Smolin <okul@linux.ee>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Ivar Smolin <okul@linux.ee>, 2020\n"
|
||||||
|
"Language-Team: Estonian (https://www.transifex.com/readthedocs/teams/101354/et/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: et\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Muuda GitHubis"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Muuda Bitbucketis"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Muuda GitLabis"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Vaata lehe lähtekoodi"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Järgmine"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Eelmine"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Autoriõigus"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Ehitus"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Redaktsioon"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Viimati uuendatud %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Ehitatud %(sphinx_web)s'iga,"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "kujundusteema"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Otsi dokumendist %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Nende dokumentide kirjeldused"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Indeks"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Otsing"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:121
|
||||||
|
msgid "Documentation Home"
|
||||||
|
msgstr "Dokumentatsiooni kodu"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "Otsimisfunktsiooni lubamiseks aktiveeri palun JavaScript"
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Otsingu tulemused"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Sinu otsingule ei vastanud ükski dokument. Palun veendu, et kõik sisestatud "
|
||||||
|
"sõnad on õigesti kirjutatud ja sa oled valikud piisaval hulgal kategooriaid."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Otsi dokumente"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versioonid"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Allalaadimised"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "Saidil Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Projekti kodu"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Ehitused"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Dokumendid"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Dokumentatsiooni majutab tasuta"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
154
doc/_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.po
vendored
Normal file
154
doc/_themes/sphinx_rtd_theme/locale/fr/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Radina Matic <radina.matic@gmail.com>, 2020
|
||||||
|
# Anthony <aj@ohess.org>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Anthony <aj@ohess.org>, 2020\n"
|
||||||
|
"Language-Team: French (https://www.transifex.com/readthedocs/teams/101354/fr/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: fr\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Éditer sur GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Éditer sur Bitbucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Éditer sur GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Afficher la source de la page"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Suivant"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Précédent"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Droits d'auteur"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Compilation"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Révision"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Dernière mise à jour le %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Compilé avec %(sphinx_web)s en utilisant un"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "thème"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "fourni par %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Rechercher dans %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "À propos de cette documentation"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Index"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Rechercher"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "Activez JavaScript pour accéder à la fonction de recherche."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Résultats de la recherche"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Votre recherche ne correspond à aucun document. Assurez-vous que tous les "
|
||||||
|
"mots sont correctement orthographiés et que vous avez sélectionné "
|
||||||
|
"suffisamment de catégories."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Rechercher docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versions"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Téléchargements"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Accueil du projet"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Compilations"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Docs"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Hébergement gratuit de documents fourni par"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
157
doc/_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.po
vendored
Normal file
157
doc/_themes/sphinx_rtd_theme/locale/nl/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Jesse Tan, 2019
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Jesse Tan, 2019\n"
|
||||||
|
"Language-Team: Dutch (https://www.transifex.com/readthedocs/teams/101354/nl/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: nl\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Bewerk op GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Bewerk op BitBucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Bewerk op GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Bekijk paginabron"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Volgende"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Vorige"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Copyright"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Bouwresultaat"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Revisie"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Laatste update op %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Gebouwd met %(sphinx_web)s met een"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "thema"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "geleverd door %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Zoek binnen %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Over deze documenten"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Index"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Zoek"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "Zet JavaScript aan om de zoekfunctie mogelijk te maken."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Zoekresultaten"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Zoekpoging vond geen documenten. Zorg ervoor dat alle woorden correct zijn "
|
||||||
|
"gespeld en dat voldoende categorieën zijn geselecteerd."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Zoek in documentatie"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versies"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Downloads"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "Op Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Project Home"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Bouwresultaten"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Documentatie"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Gratis hosting voor documentatie verzorgd door"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
159
doc/_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.po
vendored
Normal file
159
doc/_themes/sphinx_rtd_theme/locale/pt_BR/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Rafael Fontenelle <rffontenelle@gmail.com>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>, 2020\n"
|
||||||
|
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/readthedocs/teams/101354/pt_BR/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: pt_BR\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Editar no GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Editar no Bitbucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Editar no GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Ver código-fonte da página"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Próximo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Anterior"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Copyright"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Compilação"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Revisão"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Última atualização em %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Compilado com %(sphinx_web)s usando um"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "tema"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "fornecido por %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Pesquisar em %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Sobre esses documentos"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Índice"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Pesquisar"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
"Por favor, ative JavaScript para habilitar a funcionalidade de pesquisa."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Resultados da pesquisa"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"A sua pesquisa não encontrou nenhum documento correspondente. Verifique se "
|
||||||
|
"todas as palavras estão escritas corretamente e se você selecionou "
|
||||||
|
"categorias suficientes."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Pesquisar documentos"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versões"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Downloads"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "No Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Página inicial"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Compilações"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Docs"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Hospedagem de documentos livres fornecida por"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
158
doc/_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.po
vendored
Normal file
158
doc/_themes/sphinx_rtd_theme/locale/ru/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Dmitry Shachnev <mitya57@gmail.com>, 2019
|
||||||
|
# lvv83 <vlozhkin83@gmail.com>, 2019
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: lvv83 <vlozhkin83@gmail.com>, 2019\n"
|
||||||
|
"Language-Team: Russian (https://www.transifex.com/readthedocs/teams/101354/ru/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: ru\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Редактировать на GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Редактировать на BitBucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Редактировать на GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Просмотреть исходный код страницы"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Следующая"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Предыдущая"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Авторские права"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Сборка"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Ревизия"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Последний раз обновлено %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Собрано при помощи %(sphinx_web)s с использованием"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "темы,"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "предоставленной %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Поиск в %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Об этих документах"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Алфавитный указатель"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Поиск"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Логотип"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "Активируйте JavaScript, чтобы использовать функционал поиска."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Результаты поиска"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"По Вашему запросу не найдено результатов. Пожалуйста, проверьте, что все "
|
||||||
|
"слова написаны правильно, и Вы выбрали нужные категории."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Поиск в документации"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Версии"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Загрузки"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "На Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Домашняя страница проекта"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Сборки"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Документация"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Бесплатный хостинг документов, предоставленный"
|
||||||
149
doc/_themes/sphinx_rtd_theme/locale/sphinx.pot
vendored
Normal file
149
doc/_themes/sphinx_rtd_theme/locale/sphinx.pot
vendored
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
# Translations template for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2020 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2020.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:121
|
||||||
|
msgid "Documentation Home"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words "
|
||||||
|
"are spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
158
doc/_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.po
vendored
Normal file
158
doc/_themes/sphinx_rtd_theme/locale/sv/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Daniel Holmberg <daniel.holmberg97@gmail.com>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Daniel Holmberg <daniel.holmberg97@gmail.com>, 2020\n"
|
||||||
|
"Language-Team: Swedish (https://www.transifex.com/readthedocs/teams/101354/sv/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: sv\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "Editera på GitHub"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Editera på Bitbucket"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "Editera på GitLab"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Visa sidkälla"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Nästa"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Tillbaka"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Upphovsrätt"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Bygg"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Ändra"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Senast uppdaterad %(last_updated)s."
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "Gjord med %(sphinx_web)s med hjälp av"
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "tema"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "erhållet av %(readthedocs_web)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "Sök i %(docstitle)s"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Om dessa dokument"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Index"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Sök"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:121
|
||||||
|
msgid "Documentation Home"
|
||||||
|
msgstr "Dokumentation Hem"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
"Var vänlig och aktivera JavaScript för att möjliggöra sökfunktionaliteten."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Sökresultat"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Din sökning gav inga träffar. Var vänlig och se till att alla ord är rätt "
|
||||||
|
"stavade och att du har valt tillräckligt många kategorier."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Sök i dokumentationen"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Versioner"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "Nerladdningar"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "På Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Projekt Hem"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "Dokumentation"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Gratis dokumentations hysning erhållen av"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
147
doc/_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.po
vendored
Normal file
147
doc/_themes/sphinx_rtd_theme/locale/tr/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# BouRock, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: BouRock, 2020\n"
|
||||||
|
"Language-Team: Turkish (https://www.transifex.com/readthedocs/teams/101354/tr/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: tr\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "GitHub'da Düzenle"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "Bitbucket'ta Düzenle"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "GitLab'ta Düzenle"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "Sayfa kaynağını görüntüle"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "Sonraki"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "Önceki"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "Telif hakkı"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "Oluşturma"
|
||||||
|
|
||||||
|
#. the phrase "revision" comes from Git, referring to a commit
|
||||||
|
#: sphinx_rtd_theme/footer.html:37
|
||||||
|
msgid "Revision"
|
||||||
|
msgstr "Gözden geçirme"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "Son olarak %(last_updated)s tarihinde güncellendi."
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "tema"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "kullanılarak %(readthedocs_web)s tarafından sağlanmasıyla oluşturuldu"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "%(docstitle)s içinde ara"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "Bu belgeler hakkında"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "Dizin"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Arama"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr ""
|
||||||
|
"Arama işlevselliğini etkinleştirmek için lütfen JavaScript'i etkinleştirin."
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "Arama Sonuçları"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr ""
|
||||||
|
"Aramanız hiçbir belgeyle eşleşmedi. Lütfen tüm kelimelerin doğru "
|
||||||
|
"yazıldığından ve yeterli kategori seçtiğinizden emin olun."
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "Belgeleri arayın"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "Sürümler"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "İndirmeler"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "Read the Docs Üzerinde"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "Proje Ana Sayfa"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "Oluşturmalar"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "Ücretsiz belge barındırmayı sağlayan"
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.mo
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.mo
vendored
Normal file
Binary file not shown.
151
doc/_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.po
vendored
Normal file
151
doc/_themes/sphinx_rtd_theme/locale/zh_CN/LC_MESSAGES/sphinx.po
vendored
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
# English translations for sphinx_rtd_theme.
|
||||||
|
# Copyright (C) 2019 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the sphinx_rtd_theme
|
||||||
|
# project.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# 王赛 <wangsai@bootcss.com>, 2019
|
||||||
|
# Anthony <aj@ohess.org>, 2020
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: sphinx_rtd_theme 0.4.3.dev0\n"
|
||||||
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
|
"POT-Creation-Date: 2020-05-06 13:38-0600\n"
|
||||||
|
"PO-Revision-Date: 2019-07-16 21:44+0000\n"
|
||||||
|
"Last-Translator: Anthony <aj@ohess.org>, 2020\n"
|
||||||
|
"Language-Team: Chinese (China) (https://www.transifex.com/readthedocs/teams/101354/zh_CN/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 2.8.0\n"
|
||||||
|
"Language: zh_CN\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:43 sphinx_rtd_theme/breadcrumbs.html:45
|
||||||
|
msgid "Edit on GitHub"
|
||||||
|
msgstr "在 GitHub 上修改"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:50 sphinx_rtd_theme/breadcrumbs.html:52
|
||||||
|
msgid "Edit on Bitbucket"
|
||||||
|
msgstr "在 Bitbucket 上修改"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:57 sphinx_rtd_theme/breadcrumbs.html:59
|
||||||
|
msgid "Edit on GitLab"
|
||||||
|
msgstr "在 GitLab 上修改"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:62 sphinx_rtd_theme/breadcrumbs.html:64
|
||||||
|
msgid "View page source"
|
||||||
|
msgstr "查看页面源码"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:74 sphinx_rtd_theme/footer.html:5
|
||||||
|
msgid "Next"
|
||||||
|
msgstr "下一页"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/breadcrumbs.html:77 sphinx_rtd_theme/footer.html:8
|
||||||
|
msgid "Previous"
|
||||||
|
msgstr "上一页"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:21 sphinx_rtd_theme/footer.html:24
|
||||||
|
#: sphinx_rtd_theme/layout.html:96
|
||||||
|
msgid "Copyright"
|
||||||
|
msgstr "版权所有"
|
||||||
|
|
||||||
|
#. Build is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/footer.html:31
|
||||||
|
msgid "Build"
|
||||||
|
msgstr "构建"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/footer.html:41
|
||||||
|
#, python-format
|
||||||
|
msgid "Last updated on %(last_updated)s."
|
||||||
|
msgstr "最后更新时间 %(last_updated)s。"
|
||||||
|
|
||||||
|
#. the variable "sphinx_web" is a link to the Sphinx project documentation
|
||||||
|
#. with
|
||||||
|
#. the text "Sphinx"
|
||||||
|
#: sphinx_rtd_theme/footer.html:52
|
||||||
|
#, python-format
|
||||||
|
msgid "Built with %(sphinx_web)s using a"
|
||||||
|
msgstr "利用 %(sphinx_web)s 构建,使用了 "
|
||||||
|
|
||||||
|
#. "theme" refers to a theme for Sphinx, which alters the appearance of the
|
||||||
|
#. generated documenation
|
||||||
|
#: sphinx_rtd_theme/footer.html:54
|
||||||
|
msgid "theme"
|
||||||
|
msgstr "主题"
|
||||||
|
|
||||||
|
#. this is always used as "provided by Read the Docs", and should not imply
|
||||||
|
#. Read the Docs is an author of the generated documentation.
|
||||||
|
#: sphinx_rtd_theme/footer.html:56
|
||||||
|
#, python-format
|
||||||
|
msgid "provided by %(readthedocs_web)s"
|
||||||
|
msgstr "由 %(readthedocs_web)s开发"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:79
|
||||||
|
#, python-format
|
||||||
|
msgid "Search within %(docstitle)s"
|
||||||
|
msgstr "在 %(docstitle)s中搜索"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:87
|
||||||
|
msgid "About these documents"
|
||||||
|
msgstr "关于此文档"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:90
|
||||||
|
msgid "Index"
|
||||||
|
msgstr "索引"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:93 sphinx_rtd_theme/search.html:11
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "搜索"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/layout.html:128
|
||||||
|
msgid "Logo"
|
||||||
|
msgstr "Logo"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:29
|
||||||
|
msgid "Please activate JavaScript to enable the search functionality."
|
||||||
|
msgstr "请启用 JavaScript 以便使用搜索功能"
|
||||||
|
|
||||||
|
#. Search is a noun, not a verb
|
||||||
|
#: sphinx_rtd_theme/search.html:37
|
||||||
|
msgid "Search Results"
|
||||||
|
msgstr "搜索结果"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/search.html:39
|
||||||
|
msgid ""
|
||||||
|
"Your search did not match any documents. Please make sure that all words are"
|
||||||
|
" spelled correctly and that you've selected enough categories."
|
||||||
|
msgstr "您的搜索没有匹配到任何文档。请确保所有单词拼写正确,并选择了足够多的类别。"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/searchbox.html:4
|
||||||
|
msgid "Search docs"
|
||||||
|
msgstr "在文档中搜索"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:11
|
||||||
|
msgid "Versions"
|
||||||
|
msgstr "版本列表"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:17
|
||||||
|
msgid "Downloads"
|
||||||
|
msgstr "下载链接"
|
||||||
|
|
||||||
|
#. The phrase "Read the Docs" is not translated
|
||||||
|
#: sphinx_rtd_theme/versions.html:24
|
||||||
|
msgid "On Read the Docs"
|
||||||
|
msgstr "托管于 Read the Docs"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:26
|
||||||
|
msgid "Project Home"
|
||||||
|
msgstr "项目首页"
|
||||||
|
|
||||||
|
#: sphinx_rtd_theme/versions.html:29
|
||||||
|
msgid "Builds"
|
||||||
|
msgstr "构建"
|
||||||
|
|
||||||
|
#~ msgid "Docs"
|
||||||
|
#~ msgstr "文档"
|
||||||
|
|
||||||
|
#~ msgid "Free document hosting provided by"
|
||||||
|
#~ msgstr "此文档免费托管于"
|
||||||
55
doc/_themes/sphinx_rtd_theme/search.html
vendored
Normal file
55
doc/_themes/sphinx_rtd_theme/search.html
vendored
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
{#
|
||||||
|
basic/search.html
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Template for the search page.
|
||||||
|
|
||||||
|
:copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
|
||||||
|
:license: BSD, see LICENSE for details.
|
||||||
|
#}
|
||||||
|
{%- extends "layout.html" %}
|
||||||
|
{% set title = _('Search') %}
|
||||||
|
{% set display_vcs_links = False %}
|
||||||
|
{%- block scripts %}
|
||||||
|
{{ super() }}
|
||||||
|
<script type="text/javascript" src="{{ pathto('_static/searchtools.js', 1) }}"></script>
|
||||||
|
{%- endblock %}
|
||||||
|
{% block footer %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
jQuery(function() { Search.loadIndex("{{ pathto('searchindex.js', 1) }}"); });
|
||||||
|
</script>
|
||||||
|
{# this is used when loading the search index using $.ajax fails,
|
||||||
|
such as on Chrome for documents on localhost #}
|
||||||
|
<script type="text/javascript" id="searchindexloader"></script>
|
||||||
|
{{ super() }}
|
||||||
|
{% endblock %}
|
||||||
|
{% block body %}
|
||||||
|
<noscript>
|
||||||
|
<div id="fallback" class="admonition warning">
|
||||||
|
<p class="last">
|
||||||
|
{% trans trimmed %}Please activate JavaScript to enable the search
|
||||||
|
functionality.{% endtrans %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</noscript>
|
||||||
|
|
||||||
|
{% if search_performed %}
|
||||||
|
{# Translators: Search is a noun, not a verb #}
|
||||||
|
<h2>{{ _('Search Results') }}</h2>
|
||||||
|
{% if not search_results %}
|
||||||
|
<p>{{ _('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.') }}</p>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
<div id="search-results">
|
||||||
|
{% if search_results %}
|
||||||
|
<ul>
|
||||||
|
{% for href, caption, context in search_results %}
|
||||||
|
<li>
|
||||||
|
<a href="{{ pathto(item.href) }}">{{ caption }}</a>
|
||||||
|
<p class="context">{{ context|e }}</p>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
9
doc/_themes/sphinx_rtd_theme/searchbox.html
vendored
Normal file
9
doc/_themes/sphinx_rtd_theme/searchbox.html
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{%- if builder != 'singlehtml' %}
|
||||||
|
<div role="search">
|
||||||
|
<form id="rtd-search-form" class="wy-form" action="{{ pathto('search') }}" method="get">
|
||||||
|
<input type="text" name="q" placeholder="{{ _('Search docs') }}" />
|
||||||
|
<input type="hidden" name="check_keywords" value="yes" />
|
||||||
|
<input type="hidden" name="area" value="default" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{%- endif %}
|
||||||
1
doc/_themes/sphinx_rtd_theme/static/css/badge_only.css
vendored
Normal file
1
doc/_themes/sphinx_rtd_theme/static/css/badge_only.css
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
|
||||||
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Bold.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/Roboto-Slab-Regular.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.eot
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.eot
vendored
Normal file
Binary file not shown.
2671
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.svg
vendored
Normal file
2671
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.svg
vendored
Normal file
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 434 KiB |
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.ttf
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.ttf
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/fontawesome-webfont.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold-italic.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-bold.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal-italic.woff2
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff
vendored
Normal file
Binary file not shown.
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff2
vendored
Normal file
BIN
doc/_themes/sphinx_rtd_theme/static/css/fonts/lato-normal.woff2
vendored
Normal file
Binary file not shown.
4
doc/_themes/sphinx_rtd_theme/static/css/theme.css
vendored
Normal file
4
doc/_themes/sphinx_rtd_theme/static/css/theme.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
doc/_themes/sphinx_rtd_theme/static/js/badge_only.js
vendored
Normal file
1
doc/_themes/sphinx_rtd_theme/static/js/badge_only.js
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});
|
||||||
1
doc/_themes/sphinx_rtd_theme/static/js/theme.js
vendored
Normal file
1
doc/_themes/sphinx_rtd_theme/static/js/theme.js
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("<div class='wy-table-responsive'></div>"),n("table.docutils.footnote").wrap("<div class='wy-table-responsive footnote'></div>"),n("table.docutils.citation").wrap("<div class='wy-table-responsive citation'></div>"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n('<span class="toctree-expand"></span>'),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}t.length>0&&($(".wy-menu-vertical .current").removeClass("current"),t.addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l1").parent().addClass("current"),t.closest("li.toctree-l1").addClass("current"),t.closest("li.toctree-l2").addClass("current"),t.closest("li.toctree-l3").addClass("current"),t.closest("li.toctree-l4").addClass("current"),t.closest("li.toctree-l5").addClass("current"),t[0].scrollIntoView())}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current"),e.siblings().find("li.current").removeClass("current"),e.find("> ul li.current").removeClass("current"),e.toggleClass("current")}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e,t){var i=(new Date).getTime(),o=Math.max(0,16-(i-n)),r=window.setTimeout((function(){e(i+o)}),o);return n=i+o,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(n){clearTimeout(n)})}()}).call(window)},function(n,e){n.exports=jQuery},function(n,e,t){}]);
|
||||||
18
doc/_themes/sphinx_rtd_theme/theme.conf
vendored
Normal file
18
doc/_themes/sphinx_rtd_theme/theme.conf
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[theme]
|
||||||
|
inherit = basic
|
||||||
|
stylesheet = css/theme.css
|
||||||
|
pygments_style = default
|
||||||
|
|
||||||
|
[options]
|
||||||
|
canonical_url =
|
||||||
|
analytics_id =
|
||||||
|
collapse_navigation = True
|
||||||
|
sticky_navigation = True
|
||||||
|
navigation_depth = 4
|
||||||
|
includehidden = True
|
||||||
|
titles_only =
|
||||||
|
logo_only =
|
||||||
|
display_version = True
|
||||||
|
prev_next_buttons_location = bottom
|
||||||
|
style_external_links = False
|
||||||
|
style_nav_header_background =
|
||||||
34
doc/_themes/sphinx_rtd_theme/versions.html
vendored
Normal file
34
doc/_themes/sphinx_rtd_theme/versions.html
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{% if READTHEDOCS %}
|
||||||
|
{# Add rst-badge after rst-versions for small badge style. #}
|
||||||
|
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
|
||||||
|
<span class="rst-current-version" data-toggle="rst-current-version">
|
||||||
|
<span class="fa fa-book"> Read the Docs</span>
|
||||||
|
v: {{ current_version }}
|
||||||
|
<span class="fa fa-caret-down"></span>
|
||||||
|
</span>
|
||||||
|
<div class="rst-other-versions">
|
||||||
|
<dl>
|
||||||
|
<dt>{{ _('Versions') }}</dt>
|
||||||
|
{% for slug, url in versions %}
|
||||||
|
<dd><a href="{{ url }}">{{ slug }}</a></dd>
|
||||||
|
{% endfor %}
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
<dt>{{ _('Downloads') }}</dt>
|
||||||
|
{% for type, url in downloads %}
|
||||||
|
<dd><a href="{{ url }}">{{ type }}</a></dd>
|
||||||
|
{% endfor %}
|
||||||
|
</dl>
|
||||||
|
<dl>
|
||||||
|
{# Translators: The phrase "Read the Docs" is not translated #}
|
||||||
|
<dt>{{ _('On Read the Docs') }}</dt>
|
||||||
|
<dd>
|
||||||
|
<a href="//{{ PRODUCTION_DOMAIN }}/projects/{{ slug }}/?fromdocs={{ slug }}">{{ _('Project Home') }}</a>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<a href="//{{ PRODUCTION_DOMAIN }}/builds/{{ slug }}/?fromdocs={{ slug }}">{{ _('Builds') }}</a>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
5
doc/asio_http2.h.rst.in
Normal file
5
doc/asio_http2.h.rst.in
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
asio_http2.h
|
||||||
|
============
|
||||||
|
|
||||||
|
.. literalinclude:: @top_srcdir@/src/includes/nghttp2/asio_http2.h
|
||||||
|
:language: cpp
|
||||||
5
doc/asio_http2_client.h.rst.in
Normal file
5
doc/asio_http2_client.h.rst.in
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
asio_http2_client.h
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. literalinclude:: @top_srcdir@/src/includes/nghttp2/asio_http2_client.h
|
||||||
|
:language: cpp
|
||||||
5
doc/asio_http2_server.h.rst.in
Normal file
5
doc/asio_http2_server.h.rst.in
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
asio_http2_server.h
|
||||||
|
===================
|
||||||
|
|
||||||
|
.. literalinclude:: @top_srcdir@/src/includes/nghttp2/asio_http2_server.h
|
||||||
|
:language: cpp
|
||||||
@@ -8,7 +8,7 @@ _h2load()
|
|||||||
_get_comp_words_by_ref cur prev
|
_get_comp_words_by_ref cur prev
|
||||||
case $cur in
|
case $cur in
|
||||||
-*)
|
-*)
|
||||||
COMPREPLY=( $( compgen -W '--requests --clients --threads --input-file --max-concurrent-streams --max-frame-size --window-bits --connection-window-bits --header --ciphers --tls13-ciphers --no-tls-proto --data --rate --rate-period --duration --warm-up-time --connection-active-timeout --connection-inactivity-timeout --timing-script-file --base-uri --alpn-list --h1 --header-table-size --encoder-header-table-size --log-file --qlog-file-base --connect-to --rps --groups --no-udp-gso --max-udp-payload-size --ktls --verbose --version --help ' -- "$cur" ) )
|
COMPREPLY=( $( compgen -W '--requests --clients --threads --input-file --max-concurrent-streams --window-bits --connection-window-bits --header --ciphers --tls13-ciphers --no-tls-proto --data --rate --rate-period --duration --warm-up-time --connection-active-timeout --connection-inactivity-timeout --timing-script-file --base-uri --npn-list --h1 --header-table-size --encoder-header-table-size --log-file --qlog-file-base --connect-to --rps --groups --no-udp-gso --max-udp-payload-size --verbose --version --help ' -- "$cur" ) )
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
_filedir
|
_filedir
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ _nghttp()
|
|||||||
_get_comp_words_by_ref cur prev
|
_get_comp_words_by_ref cur prev
|
||||||
case $cur in
|
case $cur in
|
||||||
-*)
|
-*)
|
||||||
COMPREPLY=( $( compgen -W '--verbose --null-out --remote-name --timeout --window-bits --connection-window-bits --get-assets --stat --header --trailer --cert --key --data --multiply --upgrade --weight --peer-max-concurrent-streams --header-table-size --encoder-header-table-size --padding --har --color --continuation --no-content-length --no-dep --hexdump --no-push --max-concurrent-streams --expect-continue --no-verify-peer --ktls --no-rfc7540-pri --version --help ' -- "$cur" ) )
|
COMPREPLY=( $( compgen -W '--verbose --null-out --remote-name --timeout --window-bits --connection-window-bits --get-assets --stat --header --trailer --cert --key --data --multiply --upgrade --weight --peer-max-concurrent-streams --header-table-size --encoder-header-table-size --padding --har --color --continuation --no-content-length --no-dep --hexdump --no-push --max-concurrent-streams --expect-continue --no-verify-peer --version --help ' -- "$cur" ) )
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
_filedir
|
_filedir
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ _nghttpd()
|
|||||||
_get_comp_words_by_ref cur prev
|
_get_comp_words_by_ref cur prev
|
||||||
case $cur in
|
case $cur in
|
||||||
-*)
|
-*)
|
||||||
COMPREPLY=( $( compgen -W '--address --daemon --verify-client --htdocs --verbose --no-tls --header-table-size --encoder-header-table-size --color --push --padding --max-concurrent-streams --workers --error-gzip --window-bits --connection-window-bits --dh-param-file --early-response --trailer --hexdump --echo-upload --mime-types-file --no-content-length --ktls --no-rfc7540-pri --version --help ' -- "$cur" ) )
|
COMPREPLY=( $( compgen -W '--address --daemon --verify-client --htdocs --verbose --no-tls --header-table-size --encoder-header-table-size --color --push --padding --max-concurrent-streams --workers --error-gzip --window-bits --connection-window-bits --dh-param-file --early-response --trailer --hexdump --echo-upload --mime-types-file --no-content-length --version --help ' -- "$cur" ) )
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
_filedir
|
_filedir
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ _nghttpx()
|
|||||||
_get_comp_words_by_ref cur prev
|
_get_comp_words_by_ref cur prev
|
||||||
case $cur in
|
case $cur in
|
||||||
-*)
|
-*)
|
||||||
COMPREPLY=( $( compgen -W '--backend --frontend --backlog --backend-address-family --backend-http-proxy-uri --workers --single-thread --read-rate --read-burst --write-rate --write-burst --worker-read-rate --worker-read-burst --worker-write-rate --worker-write-burst --worker-frontend-connections --backend-connections-per-host --backend-connections-per-frontend --rlimit-nofile --rlimit-memlock --backend-request-buffer --backend-response-buffer --fastopen --no-kqueue --frontend-http2-read-timeout --frontend-http3-read-timeout --frontend-read-timeout --frontend-write-timeout --frontend-keep-alive-timeout --stream-read-timeout --stream-write-timeout --backend-read-timeout --backend-write-timeout --backend-connect-timeout --backend-keep-alive-timeout --listener-disable-timeout --frontend-http2-setting-timeout --backend-http2-settings-timeout --backend-max-backoff --ciphers --tls13-ciphers --client-ciphers --tls13-client-ciphers --ecdh-curves --insecure --cacert --private-key-passwd-file --subcert --dh-param-file --alpn-list --verify-client --verify-client-cacert --verify-client-tolerate-expired --client-private-key-file --client-cert-file --tls-min-proto-version --tls-max-proto-version --tls-ticket-key-file --tls-ticket-key-memcached --tls-ticket-key-memcached-address-family --tls-ticket-key-memcached-interval --tls-ticket-key-memcached-max-retry --tls-ticket-key-memcached-max-fail --tls-ticket-key-cipher --tls-ticket-key-memcached-cert-file --tls-ticket-key-memcached-private-key-file --fetch-ocsp-response-file --ocsp-update-interval --ocsp-startup --no-verify-ocsp --no-ocsp --tls-session-cache-memcached --tls-session-cache-memcached-address-family --tls-session-cache-memcached-cert-file --tls-session-cache-memcached-private-key-file --tls-dyn-rec-warmup-threshold --tls-dyn-rec-idle-timeout --no-http2-cipher-block-list --client-no-http2-cipher-block-list --tls-sct-dir --psk-secrets --client-psk-secrets --tls-no-postpone-early-data --tls-max-early-data --tls-ktls --frontend-http2-max-concurrent-streams --backend-http2-max-concurrent-streams --frontend-http2-window-size --frontend-http2-connection-window-size --backend-http2-window-size --backend-http2-connection-window-size --http2-no-cookie-crumbling --padding --no-server-push --frontend-http2-optimize-write-buffer-size --frontend-http2-optimize-window-size --frontend-http2-encoder-dynamic-table-size --frontend-http2-decoder-dynamic-table-size --backend-http2-encoder-dynamic-table-size --backend-http2-decoder-dynamic-table-size --http2-proxy --log-level --accesslog-file --accesslog-syslog --accesslog-format --accesslog-write-early --errorlog-file --errorlog-syslog --syslog-facility --add-x-forwarded-for --strip-incoming-x-forwarded-for --no-add-x-forwarded-proto --no-strip-incoming-x-forwarded-proto --add-forwarded --strip-incoming-forwarded --forwarded-by --forwarded-for --no-via --no-strip-incoming-early-data --no-location-rewrite --host-rewrite --altsvc --http2-altsvc --add-request-header --add-response-header --request-header-field-buffer --max-request-header-fields --response-header-field-buffer --max-response-header-fields --error-page --server-name --no-server-rewrite --redirect-https-port --require-http-scheme --api-max-request-body --dns-cache-timeout --dns-lookup-timeout --dns-max-try --frontend-max-requests --frontend-http2-dump-request-header --frontend-http2-dump-response-header --frontend-frame-debug --daemon --pid-file --user --single-process --max-worker-processes --worker-process-grace-shutdown-period --mruby-file --ignore-per-pattern-mruby-error --frontend-quic-idle-timeout --frontend-quic-debug-log --quic-bpf-program-file --frontend-quic-early-data --frontend-quic-qlog-dir --frontend-quic-require-token --frontend-quic-congestion-controller --frontend-quic-secret-file --quic-server-id --frontend-quic-initial-rtt --no-quic-bpf --frontend-http3-window-size --frontend-http3-connection-window-size --frontend-http3-max-window-size --frontend-http3-max-connection-window-size --frontend-http3-max-concurrent-streams --conf --include --version --help ' -- "$cur" ) )
|
COMPREPLY=( $( compgen -W '--backend --frontend --backlog --backend-address-family --backend-http-proxy-uri --workers --single-thread --read-rate --read-burst --write-rate --write-burst --worker-read-rate --worker-read-burst --worker-write-rate --worker-write-burst --worker-frontend-connections --backend-connections-per-host --backend-connections-per-frontend --rlimit-nofile --backend-request-buffer --backend-response-buffer --fastopen --no-kqueue --frontend-http2-read-timeout --frontend-http3-read-timeout --frontend-read-timeout --frontend-write-timeout --frontend-keep-alive-timeout --stream-read-timeout --stream-write-timeout --backend-read-timeout --backend-write-timeout --backend-connect-timeout --backend-keep-alive-timeout --listener-disable-timeout --frontend-http2-setting-timeout --backend-http2-settings-timeout --backend-max-backoff --ciphers --tls13-ciphers --client-ciphers --tls13-client-ciphers --ecdh-curves --insecure --cacert --private-key-passwd-file --subcert --dh-param-file --npn-list --verify-client --verify-client-cacert --verify-client-tolerate-expired --client-private-key-file --client-cert-file --tls-min-proto-version --tls-max-proto-version --tls-ticket-key-file --tls-ticket-key-memcached --tls-ticket-key-memcached-address-family --tls-ticket-key-memcached-interval --tls-ticket-key-memcached-max-retry --tls-ticket-key-memcached-max-fail --tls-ticket-key-cipher --tls-ticket-key-memcached-cert-file --tls-ticket-key-memcached-private-key-file --fetch-ocsp-response-file --ocsp-update-interval --ocsp-startup --no-verify-ocsp --no-ocsp --tls-session-cache-memcached --tls-session-cache-memcached-address-family --tls-session-cache-memcached-cert-file --tls-session-cache-memcached-private-key-file --tls-dyn-rec-warmup-threshold --tls-dyn-rec-idle-timeout --no-http2-cipher-block-list --client-no-http2-cipher-block-list --tls-sct-dir --psk-secrets --client-psk-secrets --tls-no-postpone-early-data --tls-max-early-data --frontend-http2-max-concurrent-streams --backend-http2-max-concurrent-streams --frontend-http2-window-size --frontend-http2-connection-window-size --backend-http2-window-size --backend-http2-connection-window-size --http2-no-cookie-crumbling --padding --no-server-push --frontend-http2-optimize-write-buffer-size --frontend-http2-optimize-window-size --frontend-http2-encoder-dynamic-table-size --frontend-http2-decoder-dynamic-table-size --backend-http2-encoder-dynamic-table-size --backend-http2-decoder-dynamic-table-size --http2-proxy --log-level --accesslog-file --accesslog-syslog --accesslog-format --accesslog-write-early --errorlog-file --errorlog-syslog --syslog-facility --add-x-forwarded-for --strip-incoming-x-forwarded-for --no-add-x-forwarded-proto --no-strip-incoming-x-forwarded-proto --add-forwarded --strip-incoming-forwarded --forwarded-by --forwarded-for --no-via --no-strip-incoming-early-data --no-location-rewrite --host-rewrite --altsvc --http2-altsvc --add-request-header --add-response-header --request-header-field-buffer --max-request-header-fields --response-header-field-buffer --max-response-header-fields --error-page --server-name --no-server-rewrite --redirect-https-port --api-max-request-body --dns-cache-timeout --dns-lookup-timeout --dns-max-try --frontend-max-requests --frontend-http2-dump-request-header --frontend-http2-dump-response-header --frontend-frame-debug --daemon --pid-file --user --single-process --mruby-file --ignore-per-pattern-mruby-error --frontend-quic-idle-timeout --frontend-quic-debug-log --quic-bpf-program-file --frontend-quic-early-data --frontend-quic-qlog-dir --frontend-quic-require-token --frontend-quic-congestion-controller --frontend-quic-connection-id-encryption-key --no-quic-bpf --frontend-http3-window-size --frontend-http3-connection-window-size --frontend-http3-max-window-size --frontend-http3-max-connection-window-size --frontend-http3-max-concurrent-streams --conf --include --version --help ' -- "$cur" ) )
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
_filedir
|
_filedir
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ html_theme = 'sphinx_rtd_theme'
|
|||||||
#html_theme_options = {}
|
#html_theme_options = {}
|
||||||
|
|
||||||
# Add any paths that contain custom themes here, relative to this directory.
|
# Add any paths that contain custom themes here, relative to this directory.
|
||||||
#html_theme_path = ['@top_srcdir@/doc/_themes']
|
html_theme_path = ['@top_srcdir@/doc/_themes']
|
||||||
|
|
||||||
# The name for this set of Sphinx documents. If None, it defaults to
|
# The name for this set of Sphinx documents. If None, it defaults to
|
||||||
# "<project> v<release> documentation".
|
# "<project> v<release> documentation".
|
||||||
|
|||||||
47
doc/h2load.1
47
doc/h2load.1
@@ -1,5 +1,8 @@
|
|||||||
.\" Man page generated from reStructuredText.
|
.\" Man page generated from reStructuredText.
|
||||||
.
|
.
|
||||||
|
.TH "H2LOAD" "1" "Sep 21, 2021" "1.45.1" "nghttp2"
|
||||||
|
.SH NAME
|
||||||
|
h2load \- HTTP/2 benchmarking tool
|
||||||
.
|
.
|
||||||
.nr rst2man-indent-level 0
|
.nr rst2man-indent-level 0
|
||||||
.
|
.
|
||||||
@@ -27,9 +30,6 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "H2LOAD" "1" "Jan 21, 2024" "1.59.0" "nghttp2"
|
|
||||||
.SH NAME
|
|
||||||
h2load \- HTTP/2 benchmarking tool
|
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.sp
|
.sp
|
||||||
\fBh2load\fP [OPTIONS]... [URI]...
|
\fBh2load\fP [OPTIONS]... [URI]...
|
||||||
@@ -99,14 +99,6 @@ Default: \fB1\fP
|
|||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-f, \-\-max\-frame\-size=<SIZE>
|
|
||||||
Maximum frame size that the local endpoint is willing to
|
|
||||||
receive.
|
|
||||||
.sp
|
|
||||||
Default: \fB16K\fP
|
|
||||||
.UNINDENT
|
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-w, \-\-window\-bits=<N>
|
.B \-w, \-\-window\-bits=<N>
|
||||||
Sets the stream level initial window size to (2**<N>)\-1.
|
Sets the stream level initial window size to (2**<N>)\-1.
|
||||||
For QUIC, <N> is capped to 26 (roughly 64MiB).
|
For QUIC, <N> is capped to 26 (roughly 64MiB).
|
||||||
@@ -129,10 +121,10 @@ Add/Override a header to the requests.
|
|||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-ciphers=<SUITE>
|
.B \-\-ciphers=<SUITE>
|
||||||
Set allowed cipher list for TLSv1.2 or earlier. The
|
Set allowed cipher list for TLSv1.2 or ealier. The
|
||||||
format of the string is described in OpenSSL ciphers(1).
|
format of the string is described in OpenSSL ciphers(1).
|
||||||
.sp
|
.sp
|
||||||
Default: \fBECDHE\-ECDSA\-AES128\-GCM\-SHA256:ECDHE\-RSA\-AES128\-GCM\-SHA256:ECDHE\-ECDSA\-AES256\-GCM\-SHA384:ECDHE\-RSA\-AES256\-GCM\-SHA384:ECDHE\-ECDSA\-CHACHA20\-POLY1305:ECDHE\-RSA\-CHACHA20\-POLY1305:DHE\-RSA\-AES128\-GCM\-SHA256:DHE\-RSA\-AES256\-GCM\-SHA384\fP
|
Default: \fBECDHE\-ECDSA\-AES256\-GCM\-SHA384:ECDHE\-RSA\-AES256\-GCM\-SHA384:ECDHE\-ECDSA\-CHACHA20\-POLY1305:ECDHE\-RSA\-CHACHA20\-POLY1305:ECDHE\-ECDSA\-AES128\-GCM\-SHA256:ECDHE\-RSA\-AES128\-GCM\-SHA256:ECDHE\-ECDSA\-AES256\-SHA384:ECDHE\-RSA\-AES256\-SHA384:ECDHE\-ECDSA\-AES128\-SHA256:ECDHE\-RSA\-AES128\-SHA256\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -246,7 +238,7 @@ mutually exclusive.
|
|||||||
Specify URI from which the scheme, host and port will be
|
Specify URI from which the scheme, host and port will be
|
||||||
used for all requests. The base URI overrides all
|
used for all requests. The base URI overrides all
|
||||||
values defined either at the command line or inside
|
values defined either at the command line or inside
|
||||||
input files. If argument starts with \(dqunix:\(dq, then the
|
input files. If argument starts with "unix:", then the
|
||||||
rest of the argument will be treated as UNIX domain
|
rest of the argument will be treated as UNIX domain
|
||||||
socket path. The connection is made through that path
|
socket path. The connection is made through that path
|
||||||
instead of TCP. In this case, scheme is inferred from
|
instead of TCP. In this case, scheme is inferred from
|
||||||
@@ -255,19 +247,20 @@ input files as usual.
|
|||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-alpn\-list=<LIST>
|
.B \-\-npn\-list=<LIST>
|
||||||
Comma delimited list of ALPN protocol identifier sorted
|
Comma delimited list of ALPN protocol identifier sorted
|
||||||
in the order of preference. That means most desirable
|
in the order of preference. That means most desirable
|
||||||
protocol comes first. The parameter must be delimited
|
protocol comes first. This is used in both ALPN and
|
||||||
by a single comma only and any white spaces are treated
|
NPN. The parameter must be delimited by a single comma
|
||||||
as a part of protocol string.
|
only and any white spaces are treated as a part of
|
||||||
|
protocol string.
|
||||||
.sp
|
.sp
|
||||||
Default: \fBh2,h2\-16,h2\-14,http/1.1\fP
|
Default: \fBh2,h2\-16,h2\-14,http/1.1\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-h1
|
.B \-\-h1
|
||||||
Short hand for \fI\%\-\-alpn\-list\fP=http/1.1
|
Short hand for \fI\%\-\-npn\-list\fP=http/1.1
|
||||||
\fI\%\-\-no\-tls\-proto\fP=http/1.1, which effectively force
|
\fI\%\-\-no\-tls\-proto\fP=http/1.1, which effectively force
|
||||||
http/1.1 for both http and https URI.
|
http/1.1 for both http and https URI.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
@@ -303,10 +296,11 @@ to buffering. Status code is \-1 for failed streams.
|
|||||||
.TP
|
.TP
|
||||||
.B \-\-qlog\-file\-base=<PATH>
|
.B \-\-qlog\-file\-base=<PATH>
|
||||||
Enable qlog output and specify base file name for qlogs.
|
Enable qlog output and specify base file name for qlogs.
|
||||||
Qlog is emitted for each connection. For a given base
|
Qlog is emitted for each connection.
|
||||||
name \(dqbase\(dq, each output file name becomes
|
For a given base name "base", each output file name
|
||||||
\(dqbase.M.N.sqlog\(dq where M is worker ID and N is client ID
|
becomes "base.M.N.qlog" where M is worker ID and N is
|
||||||
(e.g. \(dqbase.0.3.sqlog\(dq). Only effective in QUIC runs.
|
client ID (e.g. "base.0.3.qlog").
|
||||||
|
Only effective in QUIC runs.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -339,11 +333,6 @@ Specify the maximum outgoing UDP datagram payload size.
|
|||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-ktls
|
|
||||||
Enable ktls.
|
|
||||||
.UNINDENT
|
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-v, \-\-verbose
|
.B \-v, \-\-verbose
|
||||||
Output debug information.
|
Output debug information.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
@@ -407,7 +396,7 @@ The number of status code h2load received.
|
|||||||
.INDENT 7.0
|
.INDENT 7.0
|
||||||
.TP
|
.TP
|
||||||
.B total
|
.B total
|
||||||
The number of bytes received from the server \(dqon the wire\(dq. If
|
The number of bytes received from the server "on the wire". If
|
||||||
requests were made via TLS, this value is the number of decrypted
|
requests were made via TLS, this value is the number of decrypted
|
||||||
bytes.
|
bytes.
|
||||||
.TP
|
.TP
|
||||||
|
|||||||
@@ -73,13 +73,6 @@ OPTIONS
|
|||||||
|
|
||||||
Default: ``1``
|
Default: ``1``
|
||||||
|
|
||||||
.. option:: -f, --max-frame-size=<SIZE>
|
|
||||||
|
|
||||||
Maximum frame size that the local endpoint is willing to
|
|
||||||
receive.
|
|
||||||
|
|
||||||
Default: ``16K``
|
|
||||||
|
|
||||||
.. option:: -w, --window-bits=<N>
|
.. option:: -w, --window-bits=<N>
|
||||||
|
|
||||||
Sets the stream level initial window size to (2\*\*<N>)-1.
|
Sets the stream level initial window size to (2\*\*<N>)-1.
|
||||||
@@ -100,10 +93,10 @@ OPTIONS
|
|||||||
|
|
||||||
.. option:: --ciphers=<SUITE>
|
.. option:: --ciphers=<SUITE>
|
||||||
|
|
||||||
Set allowed cipher list for TLSv1.2 or earlier. The
|
Set allowed cipher list for TLSv1.2 or ealier. The
|
||||||
format of the string is described in OpenSSL ciphers(1).
|
format of the string is described in OpenSSL ciphers(1).
|
||||||
|
|
||||||
Default: ``ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384``
|
Default: ``ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256``
|
||||||
|
|
||||||
.. option:: --tls13-ciphers=<SUITE>
|
.. option:: --tls13-ciphers=<SUITE>
|
||||||
|
|
||||||
@@ -213,19 +206,20 @@ OPTIONS
|
|||||||
the first URI appeared in the command line or inside
|
the first URI appeared in the command line or inside
|
||||||
input files as usual.
|
input files as usual.
|
||||||
|
|
||||||
.. option:: --alpn-list=<LIST>
|
.. option:: --npn-list=<LIST>
|
||||||
|
|
||||||
Comma delimited list of ALPN protocol identifier sorted
|
Comma delimited list of ALPN protocol identifier sorted
|
||||||
in the order of preference. That means most desirable
|
in the order of preference. That means most desirable
|
||||||
protocol comes first. The parameter must be delimited
|
protocol comes first. This is used in both ALPN and
|
||||||
by a single comma only and any white spaces are treated
|
NPN. The parameter must be delimited by a single comma
|
||||||
as a part of protocol string.
|
only and any white spaces are treated as a part of
|
||||||
|
protocol string.
|
||||||
|
|
||||||
Default: ``h2,h2-16,h2-14,http/1.1``
|
Default: ``h2,h2-16,h2-14,http/1.1``
|
||||||
|
|
||||||
.. option:: --h1
|
.. option:: --h1
|
||||||
|
|
||||||
Short hand for :option:`--alpn-list`\=http/1.1
|
Short hand for :option:`--npn-list`\=http/1.1
|
||||||
:option:`--no-tls-proto`\=http/1.1, which effectively force
|
:option:`--no-tls-proto`\=http/1.1, which effectively force
|
||||||
http/1.1 for both http and https URI.
|
http/1.1 for both http and https URI.
|
||||||
|
|
||||||
@@ -257,10 +251,11 @@ OPTIONS
|
|||||||
.. option:: --qlog-file-base=<PATH>
|
.. option:: --qlog-file-base=<PATH>
|
||||||
|
|
||||||
Enable qlog output and specify base file name for qlogs.
|
Enable qlog output and specify base file name for qlogs.
|
||||||
Qlog is emitted for each connection. For a given base
|
Qlog is emitted for each connection.
|
||||||
name "base", each output file name becomes
|
For a given base name "base", each output file name
|
||||||
"base.M.N.sqlog" where M is worker ID and N is client ID
|
becomes "base.M.N.qlog" where M is worker ID and N is
|
||||||
(e.g. "base.0.3.sqlog"). Only effective in QUIC runs.
|
client ID (e.g. "base.0.3.qlog").
|
||||||
|
Only effective in QUIC runs.
|
||||||
|
|
||||||
.. option:: --connect-to=<HOST>[:<PORT>]
|
.. option:: --connect-to=<HOST>[:<PORT>]
|
||||||
|
|
||||||
@@ -286,10 +281,6 @@ OPTIONS
|
|||||||
|
|
||||||
Specify the maximum outgoing UDP datagram payload size.
|
Specify the maximum outgoing UDP datagram payload size.
|
||||||
|
|
||||||
.. option:: --ktls
|
|
||||||
|
|
||||||
Enable ktls.
|
|
||||||
|
|
||||||
.. option:: -v, --verbose
|
.. option:: -v, --verbose
|
||||||
|
|
||||||
Output debug information.
|
Output debug information.
|
||||||
|
|||||||
1
doc/libnghttp2_asio.rst.in
Normal file
1
doc/libnghttp2_asio.rst.in
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.. include:: @top_srcdir@/doc/sources/libnghttp2_asio.rst
|
||||||
@@ -307,6 +307,7 @@ def arg_repl(matchobj):
|
|||||||
def transform_content(content):
|
def transform_content(content):
|
||||||
content = re.sub(r'^\s+\* ?', '', content)
|
content = re.sub(r'^\s+\* ?', '', content)
|
||||||
content = re.sub(r'\|([^\s|]+)\|', arg_repl, content)
|
content = re.sub(r'\|([^\s|]+)\|', arg_repl, content)
|
||||||
|
content = re.sub(r':enum:', ':macro:', content)
|
||||||
return content
|
return content
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
22
doc/nghttp.1
22
doc/nghttp.1
@@ -1,5 +1,8 @@
|
|||||||
.\" Man page generated from reStructuredText.
|
.\" Man page generated from reStructuredText.
|
||||||
.
|
.
|
||||||
|
.TH "NGHTTP" "1" "Sep 21, 2021" "1.45.1" "nghttp2"
|
||||||
|
.SH NAME
|
||||||
|
nghttp \- HTTP/2 client
|
||||||
.
|
.
|
||||||
.nr rst2man-indent-level 0
|
.nr rst2man-indent-level 0
|
||||||
.
|
.
|
||||||
@@ -27,9 +30,6 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "NGHTTP" "1" "Jan 21, 2024" "1.59.0" "nghttp2"
|
|
||||||
.SH NAME
|
|
||||||
nghttp \- HTTP/2 client
|
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.sp
|
.sp
|
||||||
\fBnghttp\fP [OPTIONS]... <URI>...
|
\fBnghttp\fP [OPTIONS]... <URI>...
|
||||||
@@ -242,16 +242,6 @@ failure.
|
|||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-ktls
|
|
||||||
Enable ktls.
|
|
||||||
.UNINDENT
|
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-\-no\-rfc7540\-pri
|
|
||||||
Disable RFC7540 priorities.
|
|
||||||
.UNINDENT
|
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-\-version
|
.B \-\-version
|
||||||
Display version information and exit.
|
Display version information and exit.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
@@ -280,7 +270,7 @@ the easy way to test out the dependency priority in server
|
|||||||
implementation.
|
implementation.
|
||||||
.sp
|
.sp
|
||||||
When connection is established, nghttp sends 5 PRIORITY frames to idle
|
When connection is established, nghttp sends 5 PRIORITY frames to idle
|
||||||
streams 3, 5, 7, 9 and 11 to create \(dqanchor\(dq nodes in dependency
|
streams 3, 5, 7, 9 and 11 to create "anchor" nodes in dependency
|
||||||
tree:
|
tree:
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.INDENT 3.5
|
.INDENT 3.5
|
||||||
@@ -320,8 +310,8 @@ URI given in command\-line as html, and extracts resource links from
|
|||||||
it. When requesting those resources, nghttp uses dependency according
|
it. When requesting those resources, nghttp uses dependency according
|
||||||
to its resource type.
|
to its resource type.
|
||||||
.sp
|
.sp
|
||||||
For CSS, and Javascript files inside \(dqhead\(dq element, they depend on
|
For CSS, and Javascript files inside "head" element, they depend on
|
||||||
stream 3 with the weight 2. The Javascript files outside \(dqhead\(dq
|
stream 3 with the weight 2. The Javascript files outside "head"
|
||||||
element depend on stream 5 with the weight 2. The mages depend on
|
element depend on stream 5 with the weight 2. The mages depend on
|
||||||
stream 11 with the weight 12. The other resources (e.g., icon) depend
|
stream 11 with the weight 12. The other resources (e.g., icon) depend
|
||||||
on stream 11 with the weight 2.
|
on stream 11 with the weight 2.
|
||||||
|
|||||||
@@ -191,14 +191,6 @@ OPTIONS
|
|||||||
Suppress warning on server certificate verification
|
Suppress warning on server certificate verification
|
||||||
failure.
|
failure.
|
||||||
|
|
||||||
.. option:: --ktls
|
|
||||||
|
|
||||||
Enable ktls.
|
|
||||||
|
|
||||||
.. option:: --no-rfc7540-pri
|
|
||||||
|
|
||||||
Disable RFC7540 priorities.
|
|
||||||
|
|
||||||
.. option:: --version
|
.. option:: --version
|
||||||
|
|
||||||
Display version information and exit.
|
Display version information and exit.
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
.\" Man page generated from reStructuredText.
|
.\" Man page generated from reStructuredText.
|
||||||
.
|
.
|
||||||
|
.TH "NGHTTPD" "1" "Sep 21, 2021" "1.45.1" "nghttp2"
|
||||||
|
.SH NAME
|
||||||
|
nghttpd \- HTTP/2 server
|
||||||
.
|
.
|
||||||
.nr rst2man-indent-level 0
|
.nr rst2man-indent-level 0
|
||||||
.
|
.
|
||||||
@@ -27,9 +30,6 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "NGHTTPD" "1" "Jan 21, 2024" "1.59.0" "nghttp2"
|
|
||||||
.SH NAME
|
|
||||||
nghttpd \- HTTP/2 server
|
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.sp
|
.sp
|
||||||
\fBnghttpd\fP [OPTION]... <PORT> [<PRIVATE_KEY> <CERT>]
|
\fBnghttpd\fP [OPTION]... <PORT> [<PRIVATE_KEY> <CERT>]
|
||||||
@@ -204,16 +204,6 @@ Don\(aqt send content\-length header field.
|
|||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-ktls
|
|
||||||
Enable ktls.
|
|
||||||
.UNINDENT
|
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-\-no\-rfc7540\-pri
|
|
||||||
Disable RFC7540 priorities.
|
|
||||||
.UNINDENT
|
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-\-version
|
.B \-\-version
|
||||||
Display version information and exit.
|
Display version information and exit.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
|
|||||||
@@ -159,14 +159,6 @@ OPTIONS
|
|||||||
|
|
||||||
Don't send content-length header field.
|
Don't send content-length header field.
|
||||||
|
|
||||||
.. option:: --ktls
|
|
||||||
|
|
||||||
Enable ktls.
|
|
||||||
|
|
||||||
.. option:: --no-rfc7540-pri
|
|
||||||
|
|
||||||
Disable RFC7540 priorities.
|
|
||||||
|
|
||||||
.. option:: --version
|
.. option:: --version
|
||||||
|
|
||||||
Display version information and exit.
|
Display version information and exit.
|
||||||
|
|||||||
479
doc/nghttpx.1
479
doc/nghttpx.1
@@ -1,5 +1,8 @@
|
|||||||
.\" Man page generated from reStructuredText.
|
.\" Man page generated from reStructuredText.
|
||||||
.
|
.
|
||||||
|
.TH "NGHTTPX" "1" "Sep 21, 2021" "1.45.1" "nghttp2"
|
||||||
|
.SH NAME
|
||||||
|
nghttpx \- HTTP/2 proxy
|
||||||
.
|
.
|
||||||
.nr rst2man-indent-level 0
|
.nr rst2man-indent-level 0
|
||||||
.
|
.
|
||||||
@@ -27,9 +30,6 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "NGHTTPX" "1" "Jan 21, 2024" "1.59.0" "nghttp2"
|
|
||||||
.SH NAME
|
|
||||||
nghttpx \- HTTP/2 proxy
|
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.sp
|
.sp
|
||||||
\fBnghttpx\fP [OPTIONS]... [<PRIVATE_KEY> <CERT>]
|
\fBnghttpx\fP [OPTIONS]... [<PRIVATE_KEY> <CERT>]
|
||||||
@@ -40,13 +40,13 @@ A reverse proxy for HTTP/3, HTTP/2, and HTTP/1.
|
|||||||
.TP
|
.TP
|
||||||
.B <PRIVATE_KEY>
|
.B <PRIVATE_KEY>
|
||||||
Set path to server\(aqs private key. Required unless
|
Set path to server\(aqs private key. Required unless
|
||||||
\(dqno\-tls\(dq parameter is used in \fI\%\-\-frontend\fP option.
|
"no\-tls" parameter is used in \fI\%\-\-frontend\fP option.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B <CERT>
|
.B <CERT>
|
||||||
Set path to server\(aqs certificate. Required unless
|
Set path to server\(aqs certificate. Required unless
|
||||||
\(dqno\-tls\(dq parameter is used in \fI\%\-\-frontend\fP option. To
|
"no\-tls" parameter is used in \fI\%\-\-frontend\fP option. To
|
||||||
make OCSP stapling work, this must be an absolute path.
|
make OCSP stapling work, this must be an absolute path.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
@@ -59,56 +59,56 @@ The options are categorized into several groups.
|
|||||||
Set backend host and port. The multiple backend
|
Set backend host and port. The multiple backend
|
||||||
addresses are accepted by repeating this option. UNIX
|
addresses are accepted by repeating this option. UNIX
|
||||||
domain socket can be specified by prefixing path name
|
domain socket can be specified by prefixing path name
|
||||||
with \(dqunix:\(dq (e.g., unix:/var/run/backend.sock).
|
with "unix:" (e.g., unix:/var/run/backend.sock).
|
||||||
.sp
|
.sp
|
||||||
Optionally, if <PATTERN>s are given, the backend address
|
Optionally, if <PATTERN>s are given, the backend address
|
||||||
is only used if request matches the pattern. The
|
is only used if request matches the pattern. The
|
||||||
pattern matching is closely designed to ServeMux in
|
pattern matching is closely designed to ServeMux in
|
||||||
net/http package of Go programming language. <PATTERN>
|
net/http package of Go programming language. <PATTERN>
|
||||||
consists of path, host + path or just host. The path
|
consists of path, host + path or just host. The path
|
||||||
must start with \(dq\fI/\fP\(dq. If it ends with \(dq\fI/\fP\(dq, it matches
|
must start with "\fI/\fP". If it ends with "\fI/\fP", it matches
|
||||||
all request path in its subtree. To deal with the
|
all request path in its subtree. To deal with the
|
||||||
request to the directory without trailing slash, the
|
request to the directory without trailing slash, the
|
||||||
path which ends with \(dq\fI/\fP\(dq also matches the request path
|
path which ends with "\fI/\fP" also matches the request path
|
||||||
which only lacks trailing \(aq\fI/\fP\(aq (e.g., path \(dq\fI/foo/\fP\(dq
|
which only lacks trailing \(aq\fI/\fP\(aq (e.g., path "\fI/foo/\fP"
|
||||||
matches request path \(dq\fI/foo\fP\(dq). If it does not end with
|
matches request path "\fI/foo\fP"). If it does not end with
|
||||||
\(dq\fI/\fP\(dq, it performs exact match against the request path.
|
"\fI/\fP", it performs exact match against the request path.
|
||||||
If host is given, it performs a match against the
|
If host is given, it performs a match against the
|
||||||
request host. For a request received on the frontend
|
request host. For a request received on the frontend
|
||||||
listener with \(dqsni\-fwd\(dq parameter enabled, SNI host is
|
listener with "sni\-fwd" parameter enabled, SNI host is
|
||||||
used instead of a request host. If host alone is given,
|
used instead of a request host. If host alone is given,
|
||||||
\(dq\fI/\fP\(dq is appended to it, so that it matches all request
|
"\fI/\fP" is appended to it, so that it matches all request
|
||||||
paths under the host (e.g., specifying \(dqnghttp2.org\(dq
|
paths under the host (e.g., specifying "nghttp2.org"
|
||||||
equals to \(dqnghttp2.org/\(dq). CONNECT method is treated
|
equals to "nghttp2.org/"). CONNECT method is treated
|
||||||
specially. It does not have path, and we don\(aqt allow
|
specially. It does not have path, and we don\(aqt allow
|
||||||
empty path. To workaround this, we assume that CONNECT
|
empty path. To workaround this, we assume that CONNECT
|
||||||
method has \(dq\fI/\fP\(dq as path.
|
method has "\fI/\fP" as path.
|
||||||
.sp
|
.sp
|
||||||
Patterns with host take precedence over patterns with
|
Patterns with host take precedence over patterns with
|
||||||
just path. Then, longer patterns take precedence over
|
just path. Then, longer patterns take precedence over
|
||||||
shorter ones.
|
shorter ones.
|
||||||
.sp
|
.sp
|
||||||
Host can include \(dq*\(dq in the left most position to
|
Host can include "*" in the left most position to
|
||||||
indicate wildcard match (only suffix match is done).
|
indicate wildcard match (only suffix match is done).
|
||||||
The \(dq*\(dq must match at least one character. For example,
|
The "*" must match at least one character. For example,
|
||||||
host pattern \(dq*.nghttp2.org\(dq matches against
|
host pattern "*.nghttp2.org" matches against
|
||||||
\(dqwww.nghttp2.org\(dq and \(dqgit.ngttp2.org\(dq, but does not
|
"www.nghttp2.org" and "git.ngttp2.org", but does not
|
||||||
match against \(dqnghttp2.org\(dq. The exact hosts match
|
match against "nghttp2.org". The exact hosts match
|
||||||
takes precedence over the wildcard hosts match.
|
takes precedence over the wildcard hosts match.
|
||||||
.sp
|
.sp
|
||||||
If path part ends with \(dq*\(dq, it is treated as wildcard
|
If path part ends with "*", it is treated as wildcard
|
||||||
path. The wildcard path behaves differently from the
|
path. The wildcard path behaves differently from the
|
||||||
normal path. For normal path, match is made around the
|
normal path. For normal path, match is made around the
|
||||||
boundary of path component separator,\(dq\fI/\fP\(dq. On the other
|
boundary of path component separator,"\fI/\fP". On the other
|
||||||
hand, the wildcard path does not take into account the
|
hand, the wildcard path does not take into account the
|
||||||
path component separator. All paths which include the
|
path component separator. All paths which include the
|
||||||
wildcard path without last \(dq*\(dq as prefix, and are
|
wildcard path without last "*" as prefix, and are
|
||||||
strictly longer than wildcard path without last \(dq*\(dq are
|
strictly longer than wildcard path without last "*" are
|
||||||
matched. \(dq*\(dq must match at least one character. For
|
matched. "*" must match at least one character. For
|
||||||
example, the pattern \(dq\fI/foo*\fP\(dq matches \(dq\fI/foo/\fP\(dq and
|
example, the pattern "\fI/foo*\fP" matches "\fI/foo/\fP" and
|
||||||
\(dq\fI/foobar\fP\(dq. But it does not match \(dq\fI/foo\fP\(dq, or \(dq\fI/fo\fP\(dq.
|
"\fI/foobar\fP". But it does not match "\fI/foo\fP", or "\fI/fo\fP".
|
||||||
.sp
|
.sp
|
||||||
If <PATTERN> is omitted or empty string, \(dq\fI/\fP\(dq is used as
|
If <PATTERN> is omitted or empty string, "\fI/\fP" is used as
|
||||||
pattern, which matches all request paths (catch\-all
|
pattern, which matches all request paths (catch\-all
|
||||||
pattern). The catch\-all backend must be given.
|
pattern). The catch\-all backend must be given.
|
||||||
.sp
|
.sp
|
||||||
@@ -116,16 +116,16 @@ When doing a match, nghttpx made some normalization to
|
|||||||
pattern, request host and path. For host part, they are
|
pattern, request host and path. For host part, they are
|
||||||
converted to lower case. For path part, percent\-encoded
|
converted to lower case. For path part, percent\-encoded
|
||||||
unreserved characters defined in RFC 3986 are decoded,
|
unreserved characters defined in RFC 3986 are decoded,
|
||||||
and any dot\-segments (\(dq..\(dq and \(dq.\(dq) are resolved and
|
and any dot\-segments (".." and ".") are resolved and
|
||||||
removed.
|
removed.
|
||||||
.sp
|
.sp
|
||||||
For example, \fI\%\-b\fP\(aq127.0.0.1,8080;nghttp2.org/httpbin/\(aq
|
For example, \fI\%\-b\fP\(aq127.0.0.1,8080;nghttp2.org/httpbin/\(aq
|
||||||
matches the request host \(dqnghttp2.org\(dq and the request
|
matches the request host "nghttp2.org" and the request
|
||||||
path \(dq\fI/httpbin/get\fP\(dq, but does not match the request host
|
path "\fI/httpbin/get\fP", but does not match the request host
|
||||||
\(dqnghttp2.org\(dq and the request path \(dq\fI/index.html\fP\(dq.
|
"nghttp2.org" and the request path "\fI/index.html\fP".
|
||||||
.sp
|
.sp
|
||||||
The multiple <PATTERN>s can be specified, delimiting
|
The multiple <PATTERN>s can be specified, delimiting
|
||||||
them by \(dq:\(dq. Specifying
|
them by ":". Specifying
|
||||||
\fI\%\-b\fP\(aq127.0.0.1,8080;nghttp2.org:www.nghttp2.org\(aq has the
|
\fI\%\-b\fP\(aq127.0.0.1,8080;nghttp2.org:www.nghttp2.org\(aq has the
|
||||||
same effect to specify \fI\%\-b\fP\(aq127.0.0.1,8080;nghttp2.org\(aq
|
same effect to specify \fI\%\-b\fP\(aq127.0.0.1,8080;nghttp2.org\(aq
|
||||||
and \fI\%\-b\fP\(aq127.0.0.1,8080;www.nghttp2.org\(aq.
|
and \fI\%\-b\fP\(aq127.0.0.1,8080;www.nghttp2.org\(aq.
|
||||||
@@ -134,45 +134,45 @@ The backend addresses sharing same <PATTERN> are grouped
|
|||||||
together forming load balancing group.
|
together forming load balancing group.
|
||||||
.sp
|
.sp
|
||||||
Several parameters <PARAM> are accepted after <PATTERN>.
|
Several parameters <PARAM> are accepted after <PATTERN>.
|
||||||
The parameters are delimited by \(dq;\(dq. The available
|
The parameters are delimited by ";". The available
|
||||||
parameters are: \(dqproto=<PROTO>\(dq, \(dqtls\(dq,
|
parameters are: "proto=<PROTO>", "tls",
|
||||||
\(dqsni=<SNI_HOST>\(dq, \(dqfall=<N>\(dq, \(dqrise=<N>\(dq,
|
"sni=<SNI_HOST>", "fall=<N>", "rise=<N>",
|
||||||
\(dqaffinity=<METHOD>\(dq, \(dqdns\(dq, \(dqredirect\-if\-not\-tls\(dq,
|
"affinity=<METHOD>", "dns", "redirect\-if\-not\-tls",
|
||||||
\(dqupgrade\-scheme\(dq, \(dqmruby=<PATH>\(dq,
|
"upgrade\-scheme", "mruby=<PATH>",
|
||||||
\(dqread\-timeout=<DURATION>\(dq, \(dqwrite\-timeout=<DURATION>\(dq,
|
"read\-timeout=<DURATION>", "write\-timeout=<DURATION>",
|
||||||
\(dqgroup=<GROUP>\(dq, \(dqgroup\-weight=<N>\(dq, \(dqweight=<N>\(dq, and
|
"group=<GROUP>", "group\-weight=<N>", "weight=<N>", and
|
||||||
\(dqdnf\(dq. The parameter consists of keyword, and
|
"dnf". The parameter consists of keyword, and
|
||||||
optionally followed by \(dq=\(dq and value. For example, the
|
optionally followed by "=" and value. For example, the
|
||||||
parameter \(dqproto=h2\(dq consists of the keyword \(dqproto\(dq and
|
parameter "proto=h2" consists of the keyword "proto" and
|
||||||
value \(dqh2\(dq. The parameter \(dqtls\(dq consists of the keyword
|
value "h2". The parameter "tls" consists of the keyword
|
||||||
\(dqtls\(dq without value. Each parameter is described as
|
"tls" without value. Each parameter is described as
|
||||||
follows.
|
follows.
|
||||||
.sp
|
.sp
|
||||||
The backend application protocol can be specified using
|
The backend application protocol can be specified using
|
||||||
optional \(dqproto\(dq parameter, and in the form of
|
optional "proto" parameter, and in the form of
|
||||||
\(dqproto=<PROTO>\(dq. <PROTO> should be one of the following
|
"proto=<PROTO>". <PROTO> should be one of the following
|
||||||
list without quotes: \(dqh2\(dq, \(dqhttp/1.1\(dq. The default
|
list without quotes: "h2", "http/1.1". The default
|
||||||
value of <PROTO> is \(dqhttp/1.1\(dq. Note that usually \(dqh2\(dq
|
value of <PROTO> is "http/1.1". Note that usually "h2"
|
||||||
refers to HTTP/2 over TLS. But in this option, it may
|
refers to HTTP/2 over TLS. But in this option, it may
|
||||||
mean HTTP/2 over cleartext TCP unless \(dqtls\(dq keyword is
|
mean HTTP/2 over cleartext TCP unless "tls" keyword is
|
||||||
used (see below).
|
used (see below).
|
||||||
.sp
|
.sp
|
||||||
TLS can be enabled by specifying optional \(dqtls\(dq
|
TLS can be enabled by specifying optional "tls"
|
||||||
parameter. TLS is not enabled by default.
|
parameter. TLS is not enabled by default.
|
||||||
.sp
|
.sp
|
||||||
With \(dqsni=<SNI_HOST>\(dq parameter, it can override the TLS
|
With "sni=<SNI_HOST>" parameter, it can override the TLS
|
||||||
SNI field value with given <SNI_HOST>. This will
|
SNI field value with given <SNI_HOST>. This will
|
||||||
default to the backend <HOST> name
|
default to the backend <HOST> name
|
||||||
.sp
|
.sp
|
||||||
The feature to detect whether backend is online or
|
The feature to detect whether backend is online or
|
||||||
offline can be enabled using optional \(dqfall\(dq and \(dqrise\(dq
|
offline can be enabled using optional "fall" and "rise"
|
||||||
parameters. Using \(dqfall=<N>\(dq parameter, if nghttpx
|
parameters. Using "fall=<N>" parameter, if nghttpx
|
||||||
cannot connect to a this backend <N> times in a row,
|
cannot connect to a this backend <N> times in a row,
|
||||||
this backend is assumed to be offline, and it is
|
this backend is assumed to be offline, and it is
|
||||||
excluded from load balancing. If <N> is 0, this backend
|
excluded from load balancing. If <N> is 0, this backend
|
||||||
never be excluded from load balancing whatever times
|
never be excluded from load balancing whatever times
|
||||||
nghttpx cannot connect to it, and this is the default.
|
nghttpx cannot connect to it, and this is the default.
|
||||||
There is also \(dqrise=<N>\(dq parameter. After backend was
|
There is also "rise=<N>" parameter. After backend was
|
||||||
excluded from load balancing group, nghttpx periodically
|
excluded from load balancing group, nghttpx periodically
|
||||||
attempts to make a connection to the failed backend, and
|
attempts to make a connection to the failed backend, and
|
||||||
if the connection is made successfully <N> times in a
|
if the connection is made successfully <N> times in a
|
||||||
@@ -182,80 +182,69 @@ backend is permanently offline, once it goes in that
|
|||||||
state, and this is the default behaviour.
|
state, and this is the default behaviour.
|
||||||
.sp
|
.sp
|
||||||
The session affinity is enabled using
|
The session affinity is enabled using
|
||||||
\(dqaffinity=<METHOD>\(dq parameter. If \(dqip\(dq is given in
|
"affinity=<METHOD>" parameter. If "ip" is given in
|
||||||
<METHOD>, client IP based session affinity is enabled.
|
<METHOD>, client IP based session affinity is enabled.
|
||||||
If \(dqcookie\(dq is given in <METHOD>, cookie based session
|
If "cookie" is given in <METHOD>, cookie based session
|
||||||
affinity is enabled. If \(dqnone\(dq is given in <METHOD>,
|
affinity is enabled. If "none" is given in <METHOD>,
|
||||||
session affinity is disabled, and this is the default.
|
session affinity is disabled, and this is the default.
|
||||||
The session affinity is enabled per <PATTERN>. If at
|
The session affinity is enabled per <PATTERN>. If at
|
||||||
least one backend has \(dqaffinity\(dq parameter, and its
|
least one backend has "affinity" parameter, and its
|
||||||
<METHOD> is not \(dqnone\(dq, session affinity is enabled for
|
<METHOD> is not "none", session affinity is enabled for
|
||||||
all backend servers sharing the same <PATTERN>. It is
|
all backend servers sharing the same <PATTERN>. It is
|
||||||
advised to set \(dqaffinity\(dq parameter to all backend
|
advised to set "affinity" parameter to all backend
|
||||||
explicitly if session affinity is desired. The session
|
explicitly if session affinity is desired. The session
|
||||||
affinity may break if one of the backend gets
|
affinity may break if one of the backend gets
|
||||||
unreachable, or backend settings are reloaded or
|
unreachable, or backend settings are reloaded or
|
||||||
replaced by API.
|
replaced by API.
|
||||||
.sp
|
.sp
|
||||||
If \(dqaffinity=cookie\(dq is used, the additional
|
If "affinity=cookie" is used, the additional
|
||||||
configuration is required.
|
configuration is required.
|
||||||
\(dqaffinity\-cookie\-name=<NAME>\(dq must be used to specify a
|
"affinity\-cookie\-name=<NAME>" must be used to specify a
|
||||||
name of cookie to use. Optionally,
|
name of cookie to use. Optionally,
|
||||||
\(dqaffinity\-cookie\-path=<PATH>\(dq can be used to specify a
|
"affinity\-cookie\-path=<PATH>" can be used to specify a
|
||||||
path which cookie is applied. The optional
|
path which cookie is applied. The optional
|
||||||
\(dqaffinity\-cookie\-secure=<SECURE>\(dq controls the Secure
|
"affinity\-cookie\-secure=<SECURE>" controls the Secure
|
||||||
attribute of a cookie. The default value is \(dqauto\(dq, and
|
attribute of a cookie. The default value is "auto", and
|
||||||
the Secure attribute is determined by a request scheme.
|
the Secure attribute is determined by a request scheme.
|
||||||
If a request scheme is \(dqhttps\(dq, then Secure attribute is
|
If a request scheme is "https", then Secure attribute is
|
||||||
set. Otherwise, it is not set. If <SECURE> is \(dqyes\(dq,
|
set. Otherwise, it is not set. If <SECURE> is "yes",
|
||||||
the Secure attribute is always set. If <SECURE> is
|
the Secure attribute is always set. If <SECURE> is
|
||||||
\(dqno\(dq, the Secure attribute is always omitted.
|
"no", the Secure attribute is always omitted.
|
||||||
\(dqaffinity\-cookie\-stickiness=<STICKINESS>\(dq controls
|
|
||||||
stickiness of this affinity. If <STICKINESS> is
|
|
||||||
\(dqloose\(dq, removing or adding a backend server might break
|
|
||||||
the affinity and the request might be forwarded to a
|
|
||||||
different backend server. If <STICKINESS> is \(dqstrict\(dq,
|
|
||||||
removing the designated backend server breaks affinity,
|
|
||||||
but adding new backend server does not cause breakage.
|
|
||||||
If the designated backend server becomes unavailable,
|
|
||||||
new backend server is chosen as if the request does not
|
|
||||||
have an affinity cookie. <STICKINESS> defaults to
|
|
||||||
\(dqloose\(dq.
|
|
||||||
.sp
|
.sp
|
||||||
By default, name resolution of backend host name is done
|
By default, name resolution of backend host name is done
|
||||||
at start up, or reloading configuration. If \(dqdns\(dq
|
at start up, or reloading configuration. If "dns"
|
||||||
parameter is given, name resolution takes place
|
parameter is given, name resolution takes place
|
||||||
dynamically. This is useful if backend address changes
|
dynamically. This is useful if backend address changes
|
||||||
frequently. If \(dqdns\(dq is given, name resolution of
|
frequently. If "dns" is given, name resolution of
|
||||||
backend host name at start up, or reloading
|
backend host name at start up, or reloading
|
||||||
configuration is skipped.
|
configuration is skipped.
|
||||||
.sp
|
.sp
|
||||||
If \(dqredirect\-if\-not\-tls\(dq parameter is used, the matched
|
If "redirect\-if\-not\-tls" parameter is used, the matched
|
||||||
backend requires that frontend connection is TLS
|
backend requires that frontend connection is TLS
|
||||||
encrypted. If it isn\(aqt, nghttpx responds to the request
|
encrypted. If it isn\(aqt, nghttpx responds to the request
|
||||||
with 308 status code, and https URI the client should
|
with 308 status code, and https URI the client should
|
||||||
use instead is included in Location header field. The
|
use instead is included in Location header field. The
|
||||||
port number in redirect URI is 443 by default, and can
|
port number in redirect URI is 443 by default, and can
|
||||||
be changed using \fI\%\-\-redirect\-https\-port\fP option. If at
|
be changed using \fI\%\-\-redirect\-https\-port\fP option. If at
|
||||||
least one backend has \(dqredirect\-if\-not\-tls\(dq parameter,
|
least one backend has "redirect\-if\-not\-tls" parameter,
|
||||||
this feature is enabled for all backend servers sharing
|
this feature is enabled for all backend servers sharing
|
||||||
the same <PATTERN>. It is advised to set
|
the same <PATTERN>. It is advised to set
|
||||||
\(dqredirect\-if\-no\-tls\(dq parameter to all backends
|
"redirect\-if\-no\-tls" parameter to all backends
|
||||||
explicitly if this feature is desired.
|
explicitly if this feature is desired.
|
||||||
.sp
|
.sp
|
||||||
If \(dqupgrade\-scheme\(dq parameter is used along with \(dqtls\(dq
|
If "upgrade\-scheme" parameter is used along with "tls"
|
||||||
parameter, HTTP/2 :scheme pseudo header field is changed
|
parameter, HTTP/2 :scheme pseudo header field is changed
|
||||||
to \(dqhttps\(dq from \(dqhttp\(dq when forwarding a request to this
|
to "https" from "http" when forwarding a request to this
|
||||||
particular backend. This is a workaround for a backend
|
particular backend. This is a workaround for a backend
|
||||||
server which requires \(dqhttps\(dq :scheme pseudo header
|
server which requires "https" :scheme pseudo header
|
||||||
field on TLS encrypted connection.
|
field on TLS encrypted connection.
|
||||||
.sp
|
.sp
|
||||||
\(dqmruby=<PATH>\(dq parameter specifies a path to mruby
|
"mruby=<PATH>" parameter specifies a path to mruby
|
||||||
script file which is invoked when this pattern is
|
script file which is invoked when this pattern is
|
||||||
matched. All backends which share the same pattern must
|
matched. All backends which share the same pattern must
|
||||||
have the same mruby path.
|
have the same mruby path.
|
||||||
.sp
|
.sp
|
||||||
\(dqread\-timeout=<DURATION>\(dq and \(dqwrite\-timeout=<DURATION>\(dq
|
"read\-timeout=<DURATION>" and "write\-timeout=<DURATION>"
|
||||||
parameters specify the read and write timeout of the
|
parameters specify the read and write timeout of the
|
||||||
backend connection when this pattern is matched. All
|
backend connection when this pattern is matched. All
|
||||||
backends which share the same pattern must have the same
|
backends which share the same pattern must have the same
|
||||||
@@ -263,42 +252,42 @@ timeouts. If these timeouts are entirely omitted for a
|
|||||||
pattern, \fI\%\-\-backend\-read\-timeout\fP and
|
pattern, \fI\%\-\-backend\-read\-timeout\fP and
|
||||||
\fI\%\-\-backend\-write\-timeout\fP are used.
|
\fI\%\-\-backend\-write\-timeout\fP are used.
|
||||||
.sp
|
.sp
|
||||||
\(dqgroup=<GROUP>\(dq parameter specifies the name of group
|
"group=<GROUP>" parameter specifies the name of group
|
||||||
this backend address belongs to. By default, it belongs
|
this backend address belongs to. By default, it belongs
|
||||||
to the unnamed default group. The name of group is
|
to the unnamed default group. The name of group is
|
||||||
unique per pattern. \(dqgroup\-weight=<N>\(dq parameter
|
unique per pattern. "group\-weight=<N>" parameter
|
||||||
specifies the weight of the group. The higher weight
|
specifies the weight of the group. The higher weight
|
||||||
gets more frequently selected by the load balancing
|
gets more frequently selected by the load balancing
|
||||||
algorithm. <N> must be [1, 256] inclusive. The weight
|
algorithm. <N> must be [1, 256] inclusive. The weight
|
||||||
8 has 4 times more weight than 2. <N> must be the same
|
8 has 4 times more weight than 2. <N> must be the same
|
||||||
for all addresses which share the same <GROUP>. If
|
for all addresses which share the same <GROUP>. If
|
||||||
\(dqgroup\-weight\(dq is omitted in an address, but the other
|
"group\-weight" is omitted in an address, but the other
|
||||||
address which belongs to the same group specifies
|
address which belongs to the same group specifies
|
||||||
\(dqgroup\-weight\(dq, its weight is used. If no
|
"group\-weight", its weight is used. If no
|
||||||
\(dqgroup\-weight\(dq is specified for all addresses, the
|
"group\-weight" is specified for all addresses, the
|
||||||
weight of a group becomes 1. \(dqgroup\(dq and \(dqgroup\-weight\(dq
|
weight of a group becomes 1. "group" and "group\-weight"
|
||||||
are ignored if session affinity is enabled.
|
are ignored if session affinity is enabled.
|
||||||
.sp
|
.sp
|
||||||
\(dqweight=<N>\(dq parameter specifies the weight of the
|
"weight=<N>" parameter specifies the weight of the
|
||||||
backend address inside a group which this address
|
backend address inside a group which this address
|
||||||
belongs to. The higher weight gets more frequently
|
belongs to. The higher weight gets more frequently
|
||||||
selected by the load balancing algorithm. <N> must be
|
selected by the load balancing algorithm. <N> must be
|
||||||
[1, 256] inclusive. The weight 8 has 4 times more
|
[1, 256] inclusive. The weight 8 has 4 times more
|
||||||
weight than weight 2. If this parameter is omitted,
|
weight than weight 2. If this parameter is omitted,
|
||||||
weight becomes 1. \(dqweight\(dq is ignored if session
|
weight becomes 1. "weight" is ignored if session
|
||||||
affinity is enabled.
|
affinity is enabled.
|
||||||
.sp
|
.sp
|
||||||
If \(dqdnf\(dq parameter is specified, an incoming request is
|
If "dnf" parameter is specified, an incoming request is
|
||||||
not forwarded to a backend and just consumed along with
|
not forwarded to a backend and just consumed along with
|
||||||
the request body (actually a backend server never be
|
the request body (actually a backend server never be
|
||||||
contacted). It is expected that the HTTP response is
|
contacted). It is expected that the HTTP response is
|
||||||
generated by mruby script (see \(dqmruby=<PATH>\(dq parameter
|
generated by mruby script (see "mruby=<PATH>" parameter
|
||||||
above). \(dqdnf\(dq is an abbreviation of \(dqdo not forward\(dq.
|
above). "dnf" is an abbreviation of "do not forward".
|
||||||
.sp
|
.sp
|
||||||
Since \(dq;\(dq and \(dq:\(dq are used as delimiter, <PATTERN> must
|
Since ";" and ":" are used as delimiter, <PATTERN> must
|
||||||
not contain these characters. In order to include \(dq:\(dq
|
not contain these characters. In order to include ":"
|
||||||
in <PATTERN>, one has to specify \(dq%3A\(dq (which is
|
in <PATTERN>, one has to specify "%3A" (which is
|
||||||
percent\-encoded from of \(dq:\(dq) instead. Since \(dq;\(dq has
|
percent\-encoded from of ":") instead. Since ";" has
|
||||||
special meaning in shell, the option value must be
|
special meaning in shell, the option value must be
|
||||||
quoted.
|
quoted.
|
||||||
.sp
|
.sp
|
||||||
@@ -310,23 +299,23 @@ Default: \fB127.0.0.1,80\fP
|
|||||||
Set frontend host and port. If <HOST> is \(aq*\(aq, it
|
Set frontend host and port. If <HOST> is \(aq*\(aq, it
|
||||||
assumes all addresses including both IPv4 and IPv6.
|
assumes all addresses including both IPv4 and IPv6.
|
||||||
UNIX domain socket can be specified by prefixing path
|
UNIX domain socket can be specified by prefixing path
|
||||||
name with \(dqunix:\(dq (e.g., unix:/var/run/nghttpx.sock).
|
name with "unix:" (e.g., unix:/var/run/nghttpx.sock).
|
||||||
This option can be used multiple times to listen to
|
This option can be used multiple times to listen to
|
||||||
multiple addresses.
|
multiple addresses.
|
||||||
.sp
|
.sp
|
||||||
This option can take 0 or more parameters, which are
|
This option can take 0 or more parameters, which are
|
||||||
described below. Note that \(dqapi\(dq and \(dqhealthmon\(dq
|
described below. Note that "api" and "healthmon"
|
||||||
parameters are mutually exclusive.
|
parameters are mutually exclusive.
|
||||||
.sp
|
.sp
|
||||||
Optionally, TLS can be disabled by specifying \(dqno\-tls\(dq
|
Optionally, TLS can be disabled by specifying "no\-tls"
|
||||||
parameter. TLS is enabled by default.
|
parameter. TLS is enabled by default.
|
||||||
.sp
|
.sp
|
||||||
If \(dqsni\-fwd\(dq parameter is used, when performing a match
|
If "sni\-fwd" parameter is used, when performing a match
|
||||||
to select a backend server, SNI host name received from
|
to select a backend server, SNI host name received from
|
||||||
the client is used instead of the request host. See
|
the client is used instead of the request host. See
|
||||||
\fI\%\-\-backend\fP option about the pattern match.
|
\fI\%\-\-backend\fP option about the pattern match.
|
||||||
.sp
|
.sp
|
||||||
To make this frontend as API endpoint, specify \(dqapi\(dq
|
To make this frontend as API endpoint, specify "api"
|
||||||
parameter. This is disabled by default. It is
|
parameter. This is disabled by default. It is
|
||||||
important to limit the access to the API frontend.
|
important to limit the access to the API frontend.
|
||||||
Otherwise, someone may change the backend server, and
|
Otherwise, someone may change the backend server, and
|
||||||
@@ -334,18 +323,18 @@ break your services, or expose confidential information
|
|||||||
to the outside the world.
|
to the outside the world.
|
||||||
.sp
|
.sp
|
||||||
To make this frontend as health monitor endpoint,
|
To make this frontend as health monitor endpoint,
|
||||||
specify \(dqhealthmon\(dq parameter. This is disabled by
|
specify "healthmon" parameter. This is disabled by
|
||||||
default. Any requests which come through this address
|
default. Any requests which come through this address
|
||||||
are replied with 200 HTTP status, without no body.
|
are replied with 200 HTTP status, without no body.
|
||||||
.sp
|
.sp
|
||||||
To accept PROXY protocol version 1 and 2 on frontend
|
To accept PROXY protocol version 1 and 2 on frontend
|
||||||
connection, specify \(dqproxyproto\(dq parameter. This is
|
connection, specify "proxyproto" parameter. This is
|
||||||
disabled by default.
|
disabled by default.
|
||||||
.sp
|
.sp
|
||||||
To receive HTTP/3 (QUIC) traffic, specify \(dqquic\(dq
|
To receive HTTP/3 (QUIC) traffic, specify "quic"
|
||||||
parameter. It makes nghttpx listen on UDP port rather
|
parameter. It makes nghttpx listen on UDP port rather
|
||||||
than TCP port. UNIX domain socket, \(dqapi\(dq, and
|
than TCP port. UNIX domain socket, "api", and
|
||||||
\(dqhealthmon\(dq parameters cannot be used with \(dqquic\(dq
|
"healthmon" parameters cannot be used with "quic"
|
||||||
parameter.
|
parameter.
|
||||||
.sp
|
.sp
|
||||||
Default: \fB*,3000\fP
|
Default: \fB*,3000\fP
|
||||||
@@ -361,9 +350,9 @@ Default: \fB65536\fP
|
|||||||
.TP
|
.TP
|
||||||
.B \-\-backend\-address\-family=(auto|IPv4|IPv6)
|
.B \-\-backend\-address\-family=(auto|IPv4|IPv6)
|
||||||
Specify address family of backend connections. If
|
Specify address family of backend connections. If
|
||||||
\(dqauto\(dq is given, both IPv4 and IPv6 are considered. If
|
"auto" is given, both IPv4 and IPv6 are considered. If
|
||||||
\(dqIPv4\(dq is given, only IPv4 address is considered. If
|
"IPv4" is given, only IPv4 address is considered. If
|
||||||
\(dqIPv6\(dq is given, only IPv6 address is considered.
|
"IPv6" is given, only IPv6 address is considered.
|
||||||
.sp
|
.sp
|
||||||
Default: \fBauto\fP
|
Default: \fBauto\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
@@ -514,15 +503,6 @@ Default: \fB0\fP
|
|||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-rlimit\-memlock=<N>
|
|
||||||
Set maximum number of bytes of memory that may be locked
|
|
||||||
into RAM. If 0 is given, nghttpx does not set the
|
|
||||||
limit.
|
|
||||||
.sp
|
|
||||||
Default: \fB0\fP
|
|
||||||
.UNINDENT
|
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-\-backend\-request\-buffer=<SIZE>
|
.B \-\-backend\-request\-buffer=<SIZE>
|
||||||
Set buffer size used to store backend request.
|
Set buffer size used to store backend request.
|
||||||
.sp
|
.sp
|
||||||
@@ -538,7 +518,7 @@ Default: \fB128K\fP
|
|||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-fastopen=<N>
|
.B \-\-fastopen=<N>
|
||||||
Enables \(dqTCP Fast Open\(dq for the listening socket and
|
Enables "TCP Fast Open" for the listening socket and
|
||||||
limits the maximum length for the queue of connections
|
limits the maximum length for the queue of connections
|
||||||
that have not yet completed the three\-way handshake. If
|
that have not yet completed the three\-way handshake. If
|
||||||
value is 0 then fast open is disabled.
|
value is 0 then fast open is disabled.
|
||||||
@@ -664,7 +644,7 @@ Default: \fB10s\fP
|
|||||||
.TP
|
.TP
|
||||||
.B \-\-backend\-max\-backoff=<DURATION>
|
.B \-\-backend\-max\-backoff=<DURATION>
|
||||||
Specify maximum backoff interval. This is used when
|
Specify maximum backoff interval. This is used when
|
||||||
doing health check against offline backend (see \(dqfail\(dq
|
doing health check against offline backend (see "fail"
|
||||||
parameter in \fI\%\-\-backend\fP option). It is also used to
|
parameter in \fI\%\-\-backend\fP option). It is also used to
|
||||||
limit the maximum interval to temporarily disable
|
limit the maximum interval to temporarily disable
|
||||||
backend when nghttpx failed to connect to it. These
|
backend when nghttpx failed to connect to it. These
|
||||||
@@ -683,7 +663,7 @@ format of the string is described in OpenSSL ciphers(1).
|
|||||||
This option sets cipher suites for TLSv1.2 or earlier.
|
This option sets cipher suites for TLSv1.2 or earlier.
|
||||||
Use \fI\%\-\-tls13\-ciphers\fP for TLSv1.3.
|
Use \fI\%\-\-tls13\-ciphers\fP for TLSv1.3.
|
||||||
.sp
|
.sp
|
||||||
Default: \fBECDHE\-ECDSA\-AES128\-GCM\-SHA256:ECDHE\-RSA\-AES128\-GCM\-SHA256:ECDHE\-ECDSA\-AES256\-GCM\-SHA384:ECDHE\-RSA\-AES256\-GCM\-SHA384:ECDHE\-ECDSA\-CHACHA20\-POLY1305:ECDHE\-RSA\-CHACHA20\-POLY1305:DHE\-RSA\-AES128\-GCM\-SHA256:DHE\-RSA\-AES256\-GCM\-SHA384\fP
|
Default: \fBECDHE\-ECDSA\-AES256\-GCM\-SHA384:ECDHE\-RSA\-AES256\-GCM\-SHA384:ECDHE\-ECDSA\-CHACHA20\-POLY1305:ECDHE\-RSA\-CHACHA20\-POLY1305:ECDHE\-ECDSA\-AES128\-GCM\-SHA256:ECDHE\-RSA\-AES128\-GCM\-SHA256:ECDHE\-ECDSA\-AES256\-SHA384:ECDHE\-RSA\-AES256\-SHA384:ECDHE\-ECDSA\-AES128\-SHA256:ECDHE\-RSA\-AES128\-SHA256\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -693,7 +673,7 @@ format of the string is described in OpenSSL ciphers(1).
|
|||||||
This option sets cipher suites for TLSv1.3. Use
|
This option sets cipher suites for TLSv1.3. Use
|
||||||
\fI\%\-\-ciphers\fP for TLSv1.2 or earlier.
|
\fI\%\-\-ciphers\fP for TLSv1.2 or earlier.
|
||||||
.sp
|
.sp
|
||||||
Default: \fBTLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256\fP
|
Default: \fBTLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -703,7 +683,7 @@ format of the string is described in OpenSSL ciphers(1).
|
|||||||
This option sets cipher suites for TLSv1.2 or earlier.
|
This option sets cipher suites for TLSv1.2 or earlier.
|
||||||
Use \fI\%\-\-tls13\-client\-ciphers\fP for TLSv1.3.
|
Use \fI\%\-\-tls13\-client\-ciphers\fP for TLSv1.3.
|
||||||
.sp
|
.sp
|
||||||
Default: \fBECDHE\-ECDSA\-AES128\-GCM\-SHA256:ECDHE\-RSA\-AES128\-GCM\-SHA256:ECDHE\-ECDSA\-AES256\-GCM\-SHA384:ECDHE\-RSA\-AES256\-GCM\-SHA384:ECDHE\-ECDSA\-CHACHA20\-POLY1305:ECDHE\-RSA\-CHACHA20\-POLY1305:DHE\-RSA\-AES128\-GCM\-SHA256:DHE\-RSA\-AES256\-GCM\-SHA384\fP
|
Default: \fBECDHE\-ECDSA\-AES256\-GCM\-SHA384:ECDHE\-RSA\-AES256\-GCM\-SHA384:ECDHE\-ECDSA\-CHACHA20\-POLY1305:ECDHE\-RSA\-CHACHA20\-POLY1305:ECDHE\-ECDSA\-AES128\-GCM\-SHA256:ECDHE\-RSA\-AES128\-GCM\-SHA256:ECDHE\-ECDSA\-AES256\-SHA384:ECDHE\-RSA\-AES256\-SHA384:ECDHE\-ECDSA\-AES128\-SHA256:ECDHE\-RSA\-AES128\-SHA256\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -713,7 +693,7 @@ format of the string is described in OpenSSL ciphers(1).
|
|||||||
This option sets cipher suites for TLSv1.3. Use
|
This option sets cipher suites for TLSv1.3. Use
|
||||||
\fI\%\-\-tls13\-client\-ciphers\fP for TLSv1.2 or earlier.
|
\fI\%\-\-tls13\-client\-ciphers\fP for TLSv1.2 or earlier.
|
||||||
.sp
|
.sp
|
||||||
Default: \fBTLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256\fP
|
Default: \fBTLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -766,9 +746,9 @@ used multiple times. To make OCSP stapling work,
|
|||||||
<CERTPATH> must be absolute path.
|
<CERTPATH> must be absolute path.
|
||||||
.sp
|
.sp
|
||||||
Additional parameter can be specified in <PARAM>. The
|
Additional parameter can be specified in <PARAM>. The
|
||||||
available <PARAM> is \(dqsct\-dir=<DIR>\(dq.
|
available <PARAM> is "sct\-dir=<DIR>".
|
||||||
.sp
|
.sp
|
||||||
\(dqsct\-dir=<DIR>\(dq specifies the path to directory which
|
"sct\-dir=<DIR>" specifies the path to directory which
|
||||||
contains *.sct files for TLS
|
contains *.sct files for TLS
|
||||||
signed_certificate_timestamp extension (RFC 6962). This
|
signed_certificate_timestamp extension (RFC 6962). This
|
||||||
feature requires OpenSSL >= 1.0.2. See also
|
feature requires OpenSSL >= 1.0.2. See also
|
||||||
@@ -783,12 +763,13 @@ available.
|
|||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-alpn\-list=<LIST>
|
.B \-\-npn\-list=<LIST>
|
||||||
Comma delimited list of ALPN protocol identifier sorted
|
Comma delimited list of ALPN protocol identifier sorted
|
||||||
in the order of preference. That means most desirable
|
in the order of preference. That means most desirable
|
||||||
protocol comes first. The parameter must be delimited
|
protocol comes first. This is used in both ALPN and
|
||||||
by a single comma only and any white spaces are treated
|
NPN. The parameter must be delimited by a single comma
|
||||||
as a part of protocol string.
|
only and any white spaces are treated as a part of
|
||||||
|
protocol string.
|
||||||
.sp
|
.sp
|
||||||
Default: \fBh2,h2\-16,h2\-14,http/1.1\fP
|
Default: \fBh2,h2\-16,h2\-14,http/1.1\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
@@ -832,7 +813,7 @@ done in case\-insensitive manner. The versions between
|
|||||||
\fI\%\-\-tls\-min\-proto\-version\fP and \fI\%\-\-tls\-max\-proto\-version\fP are
|
\fI\%\-\-tls\-min\-proto\-version\fP and \fI\%\-\-tls\-max\-proto\-version\fP are
|
||||||
enabled. If the protocol list advertised by client does
|
enabled. If the protocol list advertised by client does
|
||||||
not overlap this range, you will receive the error
|
not overlap this range, you will receive the error
|
||||||
message \(dqunknown protocol\(dq. If a protocol version lower
|
message "unknown protocol". If a protocol version lower
|
||||||
than TLSv1.2 is specified, make sure that the compatible
|
than TLSv1.2 is specified, make sure that the compatible
|
||||||
ciphers are included in \fI\%\-\-ciphers\fP option. The default
|
ciphers are included in \fI\%\-\-ciphers\fP option. The default
|
||||||
cipher list only includes ciphers compatible with
|
cipher list only includes ciphers compatible with
|
||||||
@@ -849,7 +830,7 @@ done in case\-insensitive manner. The versions between
|
|||||||
\fI\%\-\-tls\-min\-proto\-version\fP and \fI\%\-\-tls\-max\-proto\-version\fP are
|
\fI\%\-\-tls\-min\-proto\-version\fP and \fI\%\-\-tls\-max\-proto\-version\fP are
|
||||||
enabled. If the protocol list advertised by client does
|
enabled. If the protocol list advertised by client does
|
||||||
not overlap this range, you will receive the error
|
not overlap this range, you will receive the error
|
||||||
message \(dqunknown protocol\(dq. The available versions are:
|
message "unknown protocol". The available versions are:
|
||||||
TLSv1.3, TLSv1.2, TLSv1.1, and TLSv1.0
|
TLSv1.3, TLSv1.2, TLSv1.1, and TLSv1.0
|
||||||
.sp
|
.sp
|
||||||
Default: \fBTLSv1.3\fP
|
Default: \fBTLSv1.3\fP
|
||||||
@@ -890,18 +871,18 @@ ticket key generator is required. nghttpx just gets TLS
|
|||||||
ticket keys from memcached, and use them, possibly
|
ticket keys from memcached, and use them, possibly
|
||||||
replacing current set of keys. It is up to extern TLS
|
replacing current set of keys. It is up to extern TLS
|
||||||
ticket key generator to rotate keys frequently. See
|
ticket key generator to rotate keys frequently. See
|
||||||
\(dqTLS SESSION TICKET RESUMPTION\(dq section in manual page
|
"TLS SESSION TICKET RESUMPTION" section in manual page
|
||||||
to know the data format in memcached entry. Optionally,
|
to know the data format in memcached entry. Optionally,
|
||||||
memcached connection can be encrypted with TLS by
|
memcached connection can be encrypted with TLS by
|
||||||
specifying \(dqtls\(dq parameter.
|
specifying "tls" parameter.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-tls\-ticket\-key\-memcached\-address\-family=(auto|IPv4|IPv6)
|
.B \-\-tls\-ticket\-key\-memcached\-address\-family=(auto|IPv4|IPv6)
|
||||||
Specify address family of memcached connections to get
|
Specify address family of memcached connections to get
|
||||||
TLS ticket keys. If \(dqauto\(dq is given, both IPv4 and IPv6
|
TLS ticket keys. If "auto" is given, both IPv4 and IPv6
|
||||||
are considered. If \(dqIPv4\(dq is given, only IPv4 address
|
are considered. If "IPv4" is given, only IPv4 address
|
||||||
is considered. If \(dqIPv6\(dq is given, only IPv6 address is
|
is considered. If "IPv6" is given, only IPv6 address is
|
||||||
considered.
|
considered.
|
||||||
.sp
|
.sp
|
||||||
Default: \fBauto\fP
|
Default: \fBauto\fP
|
||||||
@@ -919,7 +900,7 @@ Default: \fB10m\fP
|
|||||||
Set maximum number of consecutive retries before
|
Set maximum number of consecutive retries before
|
||||||
abandoning TLS ticket key retrieval. If this number is
|
abandoning TLS ticket key retrieval. If this number is
|
||||||
reached, the attempt is considered as failure, and
|
reached, the attempt is considered as failure, and
|
||||||
\(dqfailure\(dq count is incremented by 1, which contributed
|
"failure" count is incremented by 1, which contributed
|
||||||
to the value controlled
|
to the value controlled
|
||||||
\fI\%\-\-tls\-ticket\-key\-memcached\-max\-fail\fP option.
|
\fI\%\-\-tls\-ticket\-key\-memcached\-max\-fail\fP option.
|
||||||
.sp
|
.sp
|
||||||
@@ -992,16 +973,16 @@ Disable OCSP stapling.
|
|||||||
Specify address of memcached server to store session
|
Specify address of memcached server to store session
|
||||||
cache. This enables shared session cache between
|
cache. This enables shared session cache between
|
||||||
multiple nghttpx instances. Optionally, memcached
|
multiple nghttpx instances. Optionally, memcached
|
||||||
connection can be encrypted with TLS by specifying \(dqtls\(dq
|
connection can be encrypted with TLS by specifying "tls"
|
||||||
parameter.
|
parameter.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-tls\-session\-cache\-memcached\-address\-family=(auto|IPv4|IPv6)
|
.B \-\-tls\-session\-cache\-memcached\-address\-family=(auto|IPv4|IPv6)
|
||||||
Specify address family of memcached connections to store
|
Specify address family of memcached connections to store
|
||||||
session cache. If \(dqauto\(dq is given, both IPv4 and IPv6
|
session cache. If "auto" is given, both IPv4 and IPv6
|
||||||
are considered. If \(dqIPv4\(dq is given, only IPv4 address
|
are considered. If "IPv4" is given, only IPv4 address
|
||||||
is considered. If \(dqIPv6\(dq is given, only IPv6 address is
|
is considered. If "IPv6" is given, only IPv6 address is
|
||||||
considered.
|
considered.
|
||||||
.sp
|
.sp
|
||||||
Default: \fBauto\fP
|
Default: \fBauto\fP
|
||||||
@@ -1112,7 +1093,7 @@ By default, except for QUIC connections, nghttpx
|
|||||||
postpones forwarding HTTP requests sent in early data,
|
postpones forwarding HTTP requests sent in early data,
|
||||||
including those sent in partially in it, until TLS
|
including those sent in partially in it, until TLS
|
||||||
handshake finishes. If all backend server recognizes
|
handshake finishes. If all backend server recognizes
|
||||||
\(dqEarly\-Data\(dq header field, using this option makes
|
"Early\-Data" header field, using this option makes
|
||||||
nghttpx not postpone forwarding request and get full
|
nghttpx not postpone forwarding request and get full
|
||||||
potential of 0\-RTT data.
|
potential of 0\-RTT data.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
@@ -1124,12 +1105,6 @@ accepts.
|
|||||||
.sp
|
.sp
|
||||||
Default: \fB16K\fP
|
Default: \fB16K\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-\-tls\-ktls
|
|
||||||
Enable ktls. For server, ktls is enable if
|
|
||||||
\fI\%\-\-tls\-session\-cache\-memcached\fP is not configured.
|
|
||||||
.UNINDENT
|
|
||||||
.SS HTTP/2
|
.SS HTTP/2
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -1273,7 +1248,7 @@ Default: \fB4K\fP
|
|||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B (default mode)
|
.B (default mode)
|
||||||
Accept HTTP/2, and HTTP/1.1 over SSL/TLS. \(dqno\-tls\(dq
|
Accept HTTP/2, and HTTP/1.1 over SSL/TLS. "no\-tls"
|
||||||
parameter is used in \fI\%\-\-frontend\fP option, accept HTTP/2
|
parameter is used in \fI\%\-\-frontend\fP option, accept HTTP/2
|
||||||
and HTTP/1.1 over cleartext TCP. The incoming HTTP/1.1
|
and HTTP/1.1 over cleartext TCP. The incoming HTTP/1.1
|
||||||
connection can be upgraded to HTTP/2 through HTTP
|
connection can be upgraded to HTTP/2 through HTTP
|
||||||
@@ -1364,16 +1339,16 @@ $tls_protocol: protocol for SSL/TLS connection.
|
|||||||
.IP \(bu 2
|
.IP \(bu 2
|
||||||
$tls_session_id: session ID for SSL/TLS connection.
|
$tls_session_id: session ID for SSL/TLS connection.
|
||||||
.IP \(bu 2
|
.IP \(bu 2
|
||||||
$tls_session_reused: \(dqr\(dq if SSL/TLS session was
|
$tls_session_reused: "r" if SSL/TLS session was
|
||||||
reused. Otherwise, \(dq.\(dq
|
reused. Otherwise, "."
|
||||||
.IP \(bu 2
|
.IP \(bu 2
|
||||||
$tls_sni: SNI server name for SSL/TLS connection.
|
$tls_sni: SNI server name for SSL/TLS connection.
|
||||||
.IP \(bu 2
|
.IP \(bu 2
|
||||||
$backend_host: backend host used to fulfill the
|
$backend_host: backend host used to fulfill the
|
||||||
request. \(dq\-\(dq if backend host is not available.
|
request. "\-" if backend host is not available.
|
||||||
.IP \(bu 2
|
.IP \(bu 2
|
||||||
$backend_port: backend port used to fulfill the
|
$backend_port: backend port used to fulfill the
|
||||||
request. \(dq\-\(dq if backend host is not available.
|
request. "\-" if backend host is not available.
|
||||||
.IP \(bu 2
|
.IP \(bu 2
|
||||||
$method: HTTP method
|
$method: HTTP method
|
||||||
.IP \(bu 2
|
.IP \(bu 2
|
||||||
@@ -1388,10 +1363,10 @@ $protocol_version: HTTP version (e.g., HTTP/1.1,
|
|||||||
HTTP/2)
|
HTTP/2)
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.sp
|
.sp
|
||||||
The variable can be enclosed by \(dq{\(dq and \(dq}\(dq for
|
The variable can be enclosed by "{" and "}" for
|
||||||
disambiguation (e.g., ${remote_addr}).
|
disambiguation (e.g., ${remote_addr}).
|
||||||
.sp
|
.sp
|
||||||
Default: \fB$remote_addr \- \- [$time_local] \(dq$request\(dq $status $body_bytes_sent \(dq$http_referer\(dq \(dq$http_user_agent\(dq\fP
|
Default: \fB$remote_addr \- \- [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -1455,8 +1430,8 @@ client requests.
|
|||||||
.B \-\-add\-forwarded=<LIST>
|
.B \-\-add\-forwarded=<LIST>
|
||||||
Append RFC 7239 Forwarded header field with parameters
|
Append RFC 7239 Forwarded header field with parameters
|
||||||
specified in comma delimited list <LIST>. The supported
|
specified in comma delimited list <LIST>. The supported
|
||||||
parameters are \(dqby\(dq, \(dqfor\(dq, \(dqhost\(dq, and \(dqproto\(dq. By
|
parameters are "by", "for", "host", and "proto". By
|
||||||
default, the value of \(dqby\(dq and \(dqfor\(dq parameters are
|
default, the value of "by" and "for" parameters are
|
||||||
obfuscated string. See \fI\%\-\-forwarded\-by\fP and
|
obfuscated string. See \fI\%\-\-forwarded\-by\fP and
|
||||||
\fI\%\-\-forwarded\-for\fP options respectively. Note that nghttpx
|
\fI\%\-\-forwarded\-for\fP options respectively. Note that nghttpx
|
||||||
does not translate non\-standard X\-Forwarded\-* header
|
does not translate non\-standard X\-Forwarded\-* header
|
||||||
@@ -1471,15 +1446,15 @@ requests.
|
|||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-forwarded\-by=(obfuscated|ip|<VALUE>)
|
.B \-\-forwarded\-by=(obfuscated|ip|<VALUE>)
|
||||||
Specify the parameter value sent out with \(dqby\(dq parameter
|
Specify the parameter value sent out with "by" parameter
|
||||||
of Forwarded header field. If \(dqobfuscated\(dq is given,
|
of Forwarded header field. If "obfuscated" is given,
|
||||||
the string is randomly generated at startup. If \(dqip\(dq is
|
the string is randomly generated at startup. If "ip" is
|
||||||
given, the interface address of the connection,
|
given, the interface address of the connection,
|
||||||
including port number, is sent with \(dqby\(dq parameter. In
|
including port number, is sent with "by" parameter. In
|
||||||
case of UNIX domain socket, \(dqlocalhost\(dq is used instead
|
case of UNIX domain socket, "localhost" is used instead
|
||||||
of address and port. User can also specify the static
|
of address and port. User can also specify the static
|
||||||
obfuscated string. The limitation is that it must start
|
obfuscated string. The limitation is that it must start
|
||||||
with \(dq_\(dq, and only consists of character set
|
with "_", and only consists of character set
|
||||||
[A\-Za\-z0\-9._\-], as described in RFC 7239.
|
[A\-Za\-z0\-9._\-], as described in RFC 7239.
|
||||||
.sp
|
.sp
|
||||||
Default: \fBobfuscated\fP
|
Default: \fBobfuscated\fP
|
||||||
@@ -1487,13 +1462,13 @@ Default: \fBobfuscated\fP
|
|||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-forwarded\-for=(obfuscated|ip)
|
.B \-\-forwarded\-for=(obfuscated|ip)
|
||||||
Specify the parameter value sent out with \(dqfor\(dq
|
Specify the parameter value sent out with "for"
|
||||||
parameter of Forwarded header field. If \(dqobfuscated\(dq is
|
parameter of Forwarded header field. If "obfuscated" is
|
||||||
given, the string is randomly generated for each client
|
given, the string is randomly generated for each client
|
||||||
connection. If \(dqip\(dq is given, the remote client address
|
connection. If "ip" is given, the remote client address
|
||||||
of the connection, without port number, is sent with
|
of the connection, without port number, is sent with
|
||||||
\(dqfor\(dq parameter. In case of UNIX domain socket,
|
"for" parameter. In case of UNIX domain socket,
|
||||||
\(dqlocalhost\(dq is used instead of address.
|
"localhost" is used instead of address.
|
||||||
.sp
|
.sp
|
||||||
Default: \fBobfuscated\fP
|
Default: \fBobfuscated\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
@@ -1533,7 +1508,7 @@ they are treated as nothing is specified. They are
|
|||||||
advertised in alt\-svc header field only in HTTP/1.1
|
advertised in alt\-svc header field only in HTTP/1.1
|
||||||
frontend. This option can be used multiple times to
|
frontend. This option can be used multiple times to
|
||||||
specify multiple alternative services.
|
specify multiple alternative services.
|
||||||
Example: \fI\%\-\-altsvc\fP=\(dqh2,443,,,ma=3600; persist=1\(dq
|
Example: \fI\%\-\-altsvc\fP="h2,443,,,ma=3600; persist=1\(aq
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -1545,21 +1520,19 @@ in HTTP/2 frontend.
|
|||||||
.TP
|
.TP
|
||||||
.B \-\-add\-request\-header=<HEADER>
|
.B \-\-add\-request\-header=<HEADER>
|
||||||
Specify additional header field to add to request header
|
Specify additional header field to add to request header
|
||||||
set. The field name must be lowercase. This option
|
set. This option just appends header field and won\(aqt
|
||||||
just appends header field and won\(aqt replace anything
|
replace anything already set. This option can be used
|
||||||
already set. This option can be used several times to
|
several times to specify multiple header fields.
|
||||||
specify multiple header fields.
|
Example: \fI\%\-\-add\-request\-header\fP="foo: bar"
|
||||||
Example: \fI\%\-\-add\-request\-header\fP=\(dqfoo: bar\(dq
|
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-add\-response\-header=<HEADER>
|
.B \-\-add\-response\-header=<HEADER>
|
||||||
Specify additional header field to add to response
|
Specify additional header field to add to response
|
||||||
header set. The field name must be lowercase. This
|
header set. This option just appends header field and
|
||||||
option just appends header field and won\(aqt replace
|
won\(aqt replace anything already set. This option can be
|
||||||
anything already set. This option can be used several
|
used several times to specify multiple header fields.
|
||||||
times to specify multiple header fields.
|
Example: \fI\%\-\-add\-response\-header\fP="foo: bar"
|
||||||
Example: \fI\%\-\-add\-response\-header\fP=\(dqfoo: bar\(dq
|
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -1605,7 +1578,7 @@ Default: \fB500\fP
|
|||||||
Set file path to custom error page served when nghttpx
|
Set file path to custom error page served when nghttpx
|
||||||
originally generates HTTP error status code <CODE>.
|
originally generates HTTP error status code <CODE>.
|
||||||
<CODE> must be greater than or equal to 400, and at most
|
<CODE> must be greater than or equal to 400, and at most
|
||||||
599. If \(dq*\(dq is used instead of <CODE>, it matches all
|
599. If "*" is used instead of <CODE>, it matches all
|
||||||
HTTP status code. If error status code comes from
|
HTTP status code. If error status code comes from
|
||||||
backend server, the custom error pages are not used.
|
backend server, the custom error pages are not used.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
@@ -1628,20 +1601,10 @@ regardless of this option.
|
|||||||
.B \-\-redirect\-https\-port=<PORT>
|
.B \-\-redirect\-https\-port=<PORT>
|
||||||
Specify the port number which appears in Location header
|
Specify the port number which appears in Location header
|
||||||
field when redirect to HTTPS URI is made due to
|
field when redirect to HTTPS URI is made due to
|
||||||
\(dqredirect\-if\-not\-tls\(dq parameter in \fI\%\-\-backend\fP option.
|
"redirect\-if\-not\-tls" parameter in \fI\%\-\-backend\fP option.
|
||||||
.sp
|
.sp
|
||||||
Default: \fB443\fP
|
Default: \fB443\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-\-require\-http\-scheme
|
|
||||||
Always require http or https scheme in HTTP request. It
|
|
||||||
also requires that https scheme must be used for an
|
|
||||||
encrypted connection. Otherwise, http scheme must be
|
|
||||||
used. This option is recommended for a server
|
|
||||||
deployment which directly faces clients and the services
|
|
||||||
it provides only require http or https scheme.
|
|
||||||
.UNINDENT
|
|
||||||
.SS API
|
.SS API
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -1742,33 +1705,6 @@ process. nghttpx still spawns additional process if
|
|||||||
neverbleed is used. In the single process mode, the
|
neverbleed is used. In the single process mode, the
|
||||||
signal handling feature is disabled.
|
signal handling feature is disabled.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-\-max\-worker\-processes=<N>
|
|
||||||
The maximum number of worker processes. nghttpx spawns
|
|
||||||
new worker process when it reloads its configuration.
|
|
||||||
The previous worker process enters graceful termination
|
|
||||||
period and will terminate when it finishes handling the
|
|
||||||
existing connections. However, if reloading
|
|
||||||
configurations happen very frequently, the worker
|
|
||||||
processes might be piled up if they take a bit long time
|
|
||||||
to finish the existing connections. With this option,
|
|
||||||
if the number of worker processes exceeds the given
|
|
||||||
value, the oldest worker process is terminated
|
|
||||||
immediately. Specifying 0 means no limit and it is the
|
|
||||||
default behaviour.
|
|
||||||
.UNINDENT
|
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-\-worker\-process\-grace\-shutdown\-period=<DURATION>
|
|
||||||
Maximum period for a worker process to terminate
|
|
||||||
gracefully. When a worker process enters in graceful
|
|
||||||
shutdown period (e.g., when nghttpx reloads its
|
|
||||||
configuration) and it does not finish handling the
|
|
||||||
existing connections in the given period of time, it is
|
|
||||||
immediately terminated. Specifying 0 means no limit and
|
|
||||||
it is the default behaviour.
|
|
||||||
.UNINDENT
|
|
||||||
.SS Scripting
|
.SS Scripting
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -1808,7 +1744,7 @@ Default: \fB/usr/local/lib/nghttp2/reuseport_kern.o\fP
|
|||||||
.TP
|
.TP
|
||||||
.B \-\-frontend\-quic\-early\-data
|
.B \-\-frontend\-quic\-early\-data
|
||||||
Enable early data on frontend QUIC connections. nghttpx
|
Enable early data on frontend QUIC connections. nghttpx
|
||||||
sends \(dqEarly\-Data\(dq header field to a backend server if a
|
sends "Early\-Data" header field to a backend server if a
|
||||||
request is received in early data and handshake has not
|
request is received in early data and handshake has not
|
||||||
finished. All backend servers should deal with possibly
|
finished. All backend servers should deal with possibly
|
||||||
replayed requests.
|
replayed requests.
|
||||||
@@ -1819,8 +1755,8 @@ replayed requests.
|
|||||||
Specify a directory where a qlog file is written for
|
Specify a directory where a qlog file is written for
|
||||||
frontend QUIC connections. A qlog file is created per
|
frontend QUIC connections. A qlog file is created per
|
||||||
each QUIC connection. The file name is ISO8601 basic
|
each QUIC connection. The file name is ISO8601 basic
|
||||||
format, followed by \(dq\-\(dq, server Source Connection ID and
|
format, followed by "\-", server Source Connection ID and
|
||||||
\(dq.sqlog\(dq.
|
".qlog".
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -1833,56 +1769,21 @@ NEW_TOKEN frame in the previous connection.
|
|||||||
.TP
|
.TP
|
||||||
.B \-\-frontend\-quic\-congestion\-controller=<CC>
|
.B \-\-frontend\-quic\-congestion\-controller=<CC>
|
||||||
Specify a congestion controller algorithm for a frontend
|
Specify a congestion controller algorithm for a frontend
|
||||||
QUIC connection. <CC> should be either \(dqcubic\(dq or
|
QUIC connection. <CC> should be either "cubic" or
|
||||||
\(dqbbr\(dq.
|
"bbr".
|
||||||
.sp
|
.sp
|
||||||
Default: \fBcubic\fP
|
Default: \fBcubic\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B \-\-frontend\-quic\-secret\-file=<PATH>
|
.B \-\-frontend\-quic\-connection\-id\-encryption\-key=<HEXSTRING>
|
||||||
Path to file that contains secure random data to be used
|
Specify Connection ID encryption key. The encryption
|
||||||
as QUIC keying materials. It is used to derive keys for
|
key must be 16 bytes, and it must be encoded in hex
|
||||||
encrypting tokens and Connection IDs. It is not used to
|
string (which is 32 bytes long). If this option is
|
||||||
encrypt QUIC packets. Each line of this file must
|
omitted, new key is generated. In order to survive QUIC
|
||||||
contain exactly 136 bytes hex\-encoded string (when
|
connection in a configuration reload event, old and new
|
||||||
decoded the byte string is 68 bytes long). The first 2
|
configuration must have this option and share the same
|
||||||
bits of decoded byte string are used to identify the
|
key.
|
||||||
keying material. An empty line or a line which starts
|
|
||||||
\(aq#\(aq is ignored. The file can contain more than one
|
|
||||||
keying materials. Because the identifier is 2 bits, at
|
|
||||||
most 4 keying materials are read and the remaining data
|
|
||||||
is discarded. The first keying material in the file is
|
|
||||||
primarily used for encryption and decryption for new
|
|
||||||
connection. The other ones are used to decrypt data for
|
|
||||||
the existing connections. Specifying multiple keying
|
|
||||||
materials enables key rotation. Please note that key
|
|
||||||
rotation does not occur automatically. User should
|
|
||||||
update files or change options values and restart
|
|
||||||
nghttpx gracefully. If opening or reading given file
|
|
||||||
fails, all loaded keying materials are discarded and it
|
|
||||||
is treated as if none of this option is given. If this
|
|
||||||
option is not given or an error occurred while opening
|
|
||||||
or reading a file, a keying material is generated
|
|
||||||
internally on startup and reload.
|
|
||||||
.UNINDENT
|
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-\-quic\-server\-id=<HEXSTRING>
|
|
||||||
Specify server ID encoded in Connection ID to identify
|
|
||||||
this particular server instance. Connection ID is
|
|
||||||
encrypted and this part is not visible in public. It
|
|
||||||
must be 4 bytes long and must be encoded in hex string
|
|
||||||
(which is 8 bytes long). If this option is omitted, a
|
|
||||||
random server ID is generated on startup and
|
|
||||||
configuration reload.
|
|
||||||
.UNINDENT
|
|
||||||
.INDENT 0.0
|
|
||||||
.TP
|
|
||||||
.B \-\-frontend\-quic\-initial\-rtt=<DURATION>
|
|
||||||
Specify the initial RTT of the frontend QUIC connection.
|
|
||||||
.sp
|
|
||||||
Default: \fB333ms\fP
|
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
@@ -2009,7 +1910,7 @@ instead of:
|
|||||||
.sp
|
.sp
|
||||||
.nf
|
.nf
|
||||||
.ft C
|
.ft C
|
||||||
add\-request\-header=\(dqfoo: bar\(dq
|
add\-request\-header="foo: bar"
|
||||||
.ft P
|
.ft P
|
||||||
.fi
|
.fi
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
@@ -2128,7 +2029,7 @@ Link: </css/theme.css>; rel=preload
|
|||||||
Currently, the following restriction is applied for server push:
|
Currently, the following restriction is applied for server push:
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.IP 1. 3
|
.IP 1. 3
|
||||||
The associated stream must have method \(dqGET\(dq or \(dqPOST\(dq. The
|
The associated stream must have method "GET" or "POST". The
|
||||||
associated stream\(aqs status code must be 200.
|
associated stream\(aqs status code must be 200.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.sp
|
.sp
|
||||||
@@ -2296,7 +2197,7 @@ response without forwarding request to backend servers.
|
|||||||
There are 2 levels of mruby script invocations: global and
|
There are 2 levels of mruby script invocations: global and
|
||||||
per\-pattern. The global mruby script is set by \fI\%\-\-mruby\-file\fP
|
per\-pattern. The global mruby script is set by \fI\%\-\-mruby\-file\fP
|
||||||
option and is called for all requests. The per\-pattern mruby script
|
option and is called for all requests. The per\-pattern mruby script
|
||||||
is set by \(dqmruby\(dq parameter in \fI\%\-b\fP option. It is invoked for
|
is set by "mruby" parameter in \fI\%\-b\fP option. It is invoked for
|
||||||
a request which matches the particular pattern. The order of hook
|
a request which matches the particular pattern. The order of hook
|
||||||
invocation is: global request phase hook, per\-pattern request phase
|
invocation is: global request phase hook, per\-pattern request phase
|
||||||
hook, per\-pattern response phase hook, and finally global response
|
hook, per\-pattern response phase hook, and finally global response
|
||||||
@@ -2363,7 +2264,7 @@ Return the current phase.
|
|||||||
.TP
|
.TP
|
||||||
.B attribute [R] remote_addr
|
.B attribute [R] remote_addr
|
||||||
Return IP address of a remote client. If connection is made
|
Return IP address of a remote client. If connection is made
|
||||||
via UNIX domain socket, this returns the string \(dqlocalhost\(dq.
|
via UNIX domain socket, this returns the string "localhost".
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 7.0
|
.INDENT 7.0
|
||||||
.TP
|
.TP
|
||||||
@@ -2505,7 +2406,7 @@ not include authority component of URI. This may include
|
|||||||
query component. nghttpx makes certain normalization for
|
query component. nghttpx makes certain normalization for
|
||||||
path. It decodes percent\-encoding for unreserved characters
|
path. It decodes percent\-encoding for unreserved characters
|
||||||
(see \fI\%https://tools.ietf.org/html/rfc3986#section\-2.3\fP), and
|
(see \fI\%https://tools.ietf.org/html/rfc3986#section\-2.3\fP), and
|
||||||
resolves \(dq..\(dq and \(dq.\(dq. But it may leave characters which
|
resolves ".." and ".". But it may leave characters which
|
||||||
should be percent\-encoded as is. So be careful when comparing
|
should be percent\-encoded as is. So be careful when comparing
|
||||||
path against desired string.
|
path against desired string.
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
@@ -2647,7 +2548,7 @@ Modify request path:
|
|||||||
.ft C
|
.ft C
|
||||||
class App
|
class App
|
||||||
def on_req(env)
|
def on_req(env)
|
||||||
env.req.path = \(dq/apps#{env.req.path}\(dq
|
env.req.path = "/apps#{env.req.path}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -2668,12 +2569,12 @@ addresses:
|
|||||||
.ft C
|
.ft C
|
||||||
class App
|
class App
|
||||||
def on_req(env)
|
def on_req(env)
|
||||||
allowed_clients = [\(dq127.0.0.1\(dq, \(dq::1\(dq]
|
allowed_clients = ["127.0.0.1", "::1"]
|
||||||
|
|
||||||
if env.req.path.start_with?(\(dq/log/\(dq) &&
|
if env.req.path.start_with?("/log/") &&
|
||||||
!allowed_clients.include?(env.remote_addr) then
|
!allowed_clients.include?(env.remote_addr) then
|
||||||
env.resp.status = 404
|
env.resp.status = 404
|
||||||
env.resp.return \(dqpermission denied\(dq
|
env.resp.return "permission denied"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -2687,7 +2588,7 @@ App.new
|
|||||||
.sp
|
.sp
|
||||||
nghttpx exposes API endpoints to manipulate it via HTTP based API. By
|
nghttpx exposes API endpoints to manipulate it via HTTP based API. By
|
||||||
default, API endpoint is disabled. To enable it, add a dedicated
|
default, API endpoint is disabled. To enable it, add a dedicated
|
||||||
frontend for API using \fI\%\-\-frontend\fP option with \(dqapi\(dq
|
frontend for API using \fI\%\-\-frontend\fP option with "api"
|
||||||
parameter. All requests which come from this frontend address, will
|
parameter. All requests which come from this frontend address, will
|
||||||
be treated as API request.
|
be treated as API request.
|
||||||
.sp
|
.sp
|
||||||
@@ -2714,7 +2615,7 @@ HTTP status code
|
|||||||
Additionally, depending on the API endpoint, \fBdata\fP key may be
|
Additionally, depending on the API endpoint, \fBdata\fP key may be
|
||||||
present, and its value contains the API endpoint specific data.
|
present, and its value contains the API endpoint specific data.
|
||||||
.sp
|
.sp
|
||||||
We wrote \(dqnormally\(dq, since nghttpx may return ordinal HTML response in
|
We wrote "normally", since nghttpx may return ordinal HTML response in
|
||||||
some cases where the error has occurred before reaching API endpoint
|
some cases where the error has occurred before reaching API endpoint
|
||||||
(e.g., header field is too large).
|
(e.g., header field is too large).
|
||||||
.sp
|
.sp
|
||||||
@@ -2738,7 +2639,7 @@ connections or requests. It also avoids any process creation as is
|
|||||||
the case with hot swapping with signals.
|
the case with hot swapping with signals.
|
||||||
.sp
|
.sp
|
||||||
The one limitation is that only numeric IP address is allowed in
|
The one limitation is that only numeric IP address is allowed in
|
||||||
\fI\%backend\fP in request body unless \(dqdns\(dq parameter
|
\fI\%backend\fP in request body unless "dns" parameter
|
||||||
is used while non numeric hostname is allowed in command\-line or
|
is used while non numeric hostname is allowed in command\-line or
|
||||||
configuration file is read using \fI\%\-\-conf\fP\&.
|
configuration file is read using \fI\%\-\-conf\fP\&.
|
||||||
.SS GET /api/v1beta1/configrevision
|
.SS GET /api/v1beta1/configrevision
|
||||||
|
|||||||
@@ -193,18 +193,7 @@ Connections
|
|||||||
If a request scheme is "https", then Secure attribute is
|
If a request scheme is "https", then Secure attribute is
|
||||||
set. Otherwise, it is not set. If <SECURE> is "yes",
|
set. Otherwise, it is not set. If <SECURE> is "yes",
|
||||||
the Secure attribute is always set. If <SECURE> is
|
the Secure attribute is always set. If <SECURE> is
|
||||||
"no", the Secure attribute is always omitted.
|
"no", the Secure attribute is always omitted.
|
||||||
"affinity-cookie-stickiness=<STICKINESS>" controls
|
|
||||||
stickiness of this affinity. If <STICKINESS> is
|
|
||||||
"loose", removing or adding a backend server might break
|
|
||||||
the affinity and the request might be forwarded to a
|
|
||||||
different backend server. If <STICKINESS> is "strict",
|
|
||||||
removing the designated backend server breaks affinity,
|
|
||||||
but adding new backend server does not cause breakage.
|
|
||||||
If the designated backend server becomes unavailable,
|
|
||||||
new backend server is chosen as if the request does not
|
|
||||||
have an affinity cookie. <STICKINESS> defaults to
|
|
||||||
"loose".
|
|
||||||
|
|
||||||
By default, name resolution of backend host name is done
|
By default, name resolution of backend host name is done
|
||||||
at start up, or reloading configuration. If "dns"
|
at start up, or reloading configuration. If "dns"
|
||||||
@@ -483,14 +472,6 @@ Performance
|
|||||||
|
|
||||||
Default: ``0``
|
Default: ``0``
|
||||||
|
|
||||||
.. option:: --rlimit-memlock=<N>
|
|
||||||
|
|
||||||
Set maximum number of bytes of memory that may be locked
|
|
||||||
into RAM. If 0 is given, nghttpx does not set the
|
|
||||||
limit.
|
|
||||||
|
|
||||||
Default: ``0``
|
|
||||||
|
|
||||||
.. option:: --backend-request-buffer=<SIZE>
|
.. option:: --backend-request-buffer=<SIZE>
|
||||||
|
|
||||||
Set buffer size used to store backend request.
|
Set buffer size used to store backend request.
|
||||||
@@ -639,7 +620,7 @@ SSL/TLS
|
|||||||
This option sets cipher suites for TLSv1.2 or earlier.
|
This option sets cipher suites for TLSv1.2 or earlier.
|
||||||
Use :option:`--tls13-ciphers` for TLSv1.3.
|
Use :option:`--tls13-ciphers` for TLSv1.3.
|
||||||
|
|
||||||
Default: ``ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384``
|
Default: ``ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256``
|
||||||
|
|
||||||
.. option:: --tls13-ciphers=<SUITE>
|
.. option:: --tls13-ciphers=<SUITE>
|
||||||
|
|
||||||
@@ -648,7 +629,7 @@ SSL/TLS
|
|||||||
This option sets cipher suites for TLSv1.3. Use
|
This option sets cipher suites for TLSv1.3. Use
|
||||||
:option:`--ciphers` for TLSv1.2 or earlier.
|
:option:`--ciphers` for TLSv1.2 or earlier.
|
||||||
|
|
||||||
Default: ``TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256``
|
Default: ``TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256``
|
||||||
|
|
||||||
.. option:: --client-ciphers=<SUITE>
|
.. option:: --client-ciphers=<SUITE>
|
||||||
|
|
||||||
@@ -657,7 +638,7 @@ SSL/TLS
|
|||||||
This option sets cipher suites for TLSv1.2 or earlier.
|
This option sets cipher suites for TLSv1.2 or earlier.
|
||||||
Use :option:`--tls13-client-ciphers` for TLSv1.3.
|
Use :option:`--tls13-client-ciphers` for TLSv1.3.
|
||||||
|
|
||||||
Default: ``ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384``
|
Default: ``ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256``
|
||||||
|
|
||||||
.. option:: --tls13-client-ciphers=<SUITE>
|
.. option:: --tls13-client-ciphers=<SUITE>
|
||||||
|
|
||||||
@@ -666,7 +647,7 @@ SSL/TLS
|
|||||||
This option sets cipher suites for TLSv1.3. Use
|
This option sets cipher suites for TLSv1.3. Use
|
||||||
:option:`--tls13-client-ciphers` for TLSv1.2 or earlier.
|
:option:`--tls13-client-ciphers` for TLSv1.2 or earlier.
|
||||||
|
|
||||||
Default: ``TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256``
|
Default: ``TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256``
|
||||||
|
|
||||||
.. option:: --ecdh-curves=<LIST>
|
.. option:: --ecdh-curves=<LIST>
|
||||||
|
|
||||||
@@ -728,13 +709,14 @@ SSL/TLS
|
|||||||
Without this option, DHE cipher suites are not
|
Without this option, DHE cipher suites are not
|
||||||
available.
|
available.
|
||||||
|
|
||||||
.. option:: --alpn-list=<LIST>
|
.. option:: --npn-list=<LIST>
|
||||||
|
|
||||||
Comma delimited list of ALPN protocol identifier sorted
|
Comma delimited list of ALPN protocol identifier sorted
|
||||||
in the order of preference. That means most desirable
|
in the order of preference. That means most desirable
|
||||||
protocol comes first. The parameter must be delimited
|
protocol comes first. This is used in both ALPN and
|
||||||
by a single comma only and any white spaces are treated
|
NPN. The parameter must be delimited by a single comma
|
||||||
as a part of protocol string.
|
only and any white spaces are treated as a part of
|
||||||
|
protocol string.
|
||||||
|
|
||||||
Default: ``h2,h2-16,h2-14,http/1.1``
|
Default: ``h2,h2-16,h2-14,http/1.1``
|
||||||
|
|
||||||
@@ -1036,11 +1018,6 @@ SSL/TLS
|
|||||||
|
|
||||||
Default: ``16K``
|
Default: ``16K``
|
||||||
|
|
||||||
.. option:: --tls-ktls
|
|
||||||
|
|
||||||
Enable ktls. For server, ktls is enable if
|
|
||||||
:option:`--tls-session-cache-memcached` is not configured.
|
|
||||||
|
|
||||||
|
|
||||||
HTTP/2
|
HTTP/2
|
||||||
~~~~~~
|
~~~~~~
|
||||||
@@ -1391,7 +1368,7 @@ HTTP
|
|||||||
advertised in alt-svc header field only in HTTP/1.1
|
advertised in alt-svc header field only in HTTP/1.1
|
||||||
frontend. This option can be used multiple times to
|
frontend. This option can be used multiple times to
|
||||||
specify multiple alternative services.
|
specify multiple alternative services.
|
||||||
Example: :option:`--altsvc`\="h2,443,,,ma=3600; persist=1"
|
Example: :option:`--altsvc`\="h2,443,,,ma=3600; persist=1'
|
||||||
|
|
||||||
.. option:: --http2-altsvc=<PROTOID,PORT[,HOST,[ORIGIN[,PARAMS]]]>
|
.. option:: --http2-altsvc=<PROTOID,PORT[,HOST,[ORIGIN[,PARAMS]]]>
|
||||||
|
|
||||||
@@ -1401,19 +1378,17 @@ HTTP
|
|||||||
.. option:: --add-request-header=<HEADER>
|
.. option:: --add-request-header=<HEADER>
|
||||||
|
|
||||||
Specify additional header field to add to request header
|
Specify additional header field to add to request header
|
||||||
set. The field name must be lowercase. This option
|
set. This option just appends header field and won't
|
||||||
just appends header field and won't replace anything
|
replace anything already set. This option can be used
|
||||||
already set. This option can be used several times to
|
several times to specify multiple header fields.
|
||||||
specify multiple header fields.
|
|
||||||
Example: :option:`--add-request-header`\="foo: bar"
|
Example: :option:`--add-request-header`\="foo: bar"
|
||||||
|
|
||||||
.. option:: --add-response-header=<HEADER>
|
.. option:: --add-response-header=<HEADER>
|
||||||
|
|
||||||
Specify additional header field to add to response
|
Specify additional header field to add to response
|
||||||
header set. The field name must be lowercase. This
|
header set. This option just appends header field and
|
||||||
option just appends header field and won't replace
|
won't replace anything already set. This option can be
|
||||||
anything already set. This option can be used several
|
used several times to specify multiple header fields.
|
||||||
times to specify multiple header fields.
|
|
||||||
Example: :option:`--add-response-header`\="foo: bar"
|
Example: :option:`--add-response-header`\="foo: bar"
|
||||||
|
|
||||||
.. option:: --request-header-field-buffer=<SIZE>
|
.. option:: --request-header-field-buffer=<SIZE>
|
||||||
@@ -1479,15 +1454,6 @@ HTTP
|
|||||||
|
|
||||||
Default: ``443``
|
Default: ``443``
|
||||||
|
|
||||||
.. option:: --require-http-scheme
|
|
||||||
|
|
||||||
Always require http or https scheme in HTTP request. It
|
|
||||||
also requires that https scheme must be used for an
|
|
||||||
encrypted connection. Otherwise, http scheme must be
|
|
||||||
used. This option is recommended for a server
|
|
||||||
deployment which directly faces clients and the services
|
|
||||||
it provides only require http or https scheme.
|
|
||||||
|
|
||||||
|
|
||||||
API
|
API
|
||||||
~~~
|
~~~
|
||||||
@@ -1588,31 +1554,6 @@ Process
|
|||||||
neverbleed is used. In the single process mode, the
|
neverbleed is used. In the single process mode, the
|
||||||
signal handling feature is disabled.
|
signal handling feature is disabled.
|
||||||
|
|
||||||
.. option:: --max-worker-processes=<N>
|
|
||||||
|
|
||||||
The maximum number of worker processes. nghttpx spawns
|
|
||||||
new worker process when it reloads its configuration.
|
|
||||||
The previous worker process enters graceful termination
|
|
||||||
period and will terminate when it finishes handling the
|
|
||||||
existing connections. However, if reloading
|
|
||||||
configurations happen very frequently, the worker
|
|
||||||
processes might be piled up if they take a bit long time
|
|
||||||
to finish the existing connections. With this option,
|
|
||||||
if the number of worker processes exceeds the given
|
|
||||||
value, the oldest worker process is terminated
|
|
||||||
immediately. Specifying 0 means no limit and it is the
|
|
||||||
default behaviour.
|
|
||||||
|
|
||||||
.. option:: --worker-process-grace-shutdown-period=<DURATION>
|
|
||||||
|
|
||||||
Maximum period for a worker process to terminate
|
|
||||||
gracefully. When a worker process enters in graceful
|
|
||||||
shutdown period (e.g., when nghttpx reloads its
|
|
||||||
configuration) and it does not finish handling the
|
|
||||||
existing connections in the given period of time, it is
|
|
||||||
immediately terminated. Specifying 0 means no limit and
|
|
||||||
it is the default behaviour.
|
|
||||||
|
|
||||||
|
|
||||||
Scripting
|
Scripting
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
@@ -1663,7 +1604,7 @@ HTTP/3 and QUIC
|
|||||||
frontend QUIC connections. A qlog file is created per
|
frontend QUIC connections. A qlog file is created per
|
||||||
each QUIC connection. The file name is ISO8601 basic
|
each QUIC connection. The file name is ISO8601 basic
|
||||||
format, followed by "-", server Source Connection ID and
|
format, followed by "-", server Source Connection ID and
|
||||||
".sqlog".
|
".qlog".
|
||||||
|
|
||||||
.. option:: --frontend-quic-require-token
|
.. option:: --frontend-quic-require-token
|
||||||
|
|
||||||
@@ -1679,48 +1620,15 @@ HTTP/3 and QUIC
|
|||||||
|
|
||||||
Default: ``cubic``
|
Default: ``cubic``
|
||||||
|
|
||||||
.. option:: --frontend-quic-secret-file=<PATH>
|
.. option:: --frontend-quic-connection-id-encryption-key=<HEXSTRING>
|
||||||
|
|
||||||
Path to file that contains secure random data to be used
|
Specify Connection ID encryption key. The encryption
|
||||||
as QUIC keying materials. It is used to derive keys for
|
key must be 16 bytes, and it must be encoded in hex
|
||||||
encrypting tokens and Connection IDs. It is not used to
|
string (which is 32 bytes long). If this option is
|
||||||
encrypt QUIC packets. Each line of this file must
|
omitted, new key is generated. In order to survive QUIC
|
||||||
contain exactly 136 bytes hex-encoded string (when
|
connection in a configuration reload event, old and new
|
||||||
decoded the byte string is 68 bytes long). The first 2
|
configuration must have this option and share the same
|
||||||
bits of decoded byte string are used to identify the
|
key.
|
||||||
keying material. An empty line or a line which starts
|
|
||||||
'#' is ignored. The file can contain more than one
|
|
||||||
keying materials. Because the identifier is 2 bits, at
|
|
||||||
most 4 keying materials are read and the remaining data
|
|
||||||
is discarded. The first keying material in the file is
|
|
||||||
primarily used for encryption and decryption for new
|
|
||||||
connection. The other ones are used to decrypt data for
|
|
||||||
the existing connections. Specifying multiple keying
|
|
||||||
materials enables key rotation. Please note that key
|
|
||||||
rotation does not occur automatically. User should
|
|
||||||
update files or change options values and restart
|
|
||||||
nghttpx gracefully. If opening or reading given file
|
|
||||||
fails, all loaded keying materials are discarded and it
|
|
||||||
is treated as if none of this option is given. If this
|
|
||||||
option is not given or an error occurred while opening
|
|
||||||
or reading a file, a keying material is generated
|
|
||||||
internally on startup and reload.
|
|
||||||
|
|
||||||
.. option:: --quic-server-id=<HEXSTRING>
|
|
||||||
|
|
||||||
Specify server ID encoded in Connection ID to identify
|
|
||||||
this particular server instance. Connection ID is
|
|
||||||
encrypted and this part is not visible in public. It
|
|
||||||
must be 4 bytes long and must be encoded in hex string
|
|
||||||
(which is 8 bytes long). If this option is omitted, a
|
|
||||||
random server ID is generated on startup and
|
|
||||||
configuration reload.
|
|
||||||
|
|
||||||
.. option:: --frontend-quic-initial-rtt=<DURATION>
|
|
||||||
|
|
||||||
Specify the initial RTT of the frontend QUIC connection.
|
|
||||||
|
|
||||||
Default: ``333ms``
|
|
||||||
|
|
||||||
.. option:: --no-quic-bpf
|
.. option:: --no-quic-bpf
|
||||||
|
|
||||||
|
|||||||
@@ -479,48 +479,3 @@ its creation, like so:
|
|||||||
When ALTSVC is received, :type:`nghttp2_on_frame_recv_callback` will
|
When ALTSVC is received, :type:`nghttp2_on_frame_recv_callback` will
|
||||||
be called as usual.
|
be called as usual.
|
||||||
|
|
||||||
Stream priorities
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
By default, the stream prioritization scheme described in :rfc:`7540`
|
|
||||||
is used. This scheme has been formally deprecated by :rfc:`9113`. In
|
|
||||||
order to disable it, send
|
|
||||||
:enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES` of
|
|
||||||
value of 1 via `nghttp2_submit_settings()`. This settings ID is
|
|
||||||
defined by :rfc:`9218`. The sender of this settings value disables
|
|
||||||
RFC 7540 priorities, and instead it enables RFC 9218 Extensible
|
|
||||||
Prioritization Scheme. This new prioritization scheme has 2 methods
|
|
||||||
to convey the stream priorities to a remote endpoint: Priority header
|
|
||||||
field and PRIORITY_UPDATE frame. nghttp2 supports both methods. In
|
|
||||||
order to receive and process PRIORITY_UPDATE frame, server has to call
|
|
||||||
``nghttp2_option_set_builtin_recv_extension_type(option,
|
|
||||||
NGHTTP2_PRIORITY_UPDATE)`` (see the above section), and pass the
|
|
||||||
option to `nghttp2_session_server_new2()` or
|
|
||||||
`nghttp2_session_server_new3()` to create a server session. Client
|
|
||||||
can send Priority header field via `nghttp2_submit_request()`. It can
|
|
||||||
also send PRIORITY_UPDATE frame via
|
|
||||||
`nghttp2_submit_priority_update()`. Server processes Priority header
|
|
||||||
field in a request header field and updates the stream priority unless
|
|
||||||
HTTP messaging rule enforcement is disabled (see
|
|
||||||
`nghttp2_option_set_no_http_messaging()`).
|
|
||||||
|
|
||||||
For the purpose of smooth migration from RFC 7540 priorities, client
|
|
||||||
is advised to send
|
|
||||||
:enum:`nghttp2_settings_id.NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES` of
|
|
||||||
value of 1. Until it receives the first server SETTINGS frame, it can
|
|
||||||
send both RFC 7540 and RFC 9128 priority signals. If client receives
|
|
||||||
SETTINGS_NO_RFC7540_PRIORITIES of value of 0, or it is omitted ,
|
|
||||||
client stops sending PRIORITY_UPDATE frame. Priority header field
|
|
||||||
will be sent in anyway since it is an end-to-end signal. If
|
|
||||||
SETTINGS_NO_RFC7540_PRIORITIES of value of 1 is received, client stops
|
|
||||||
sending RFC 7540 priority signals. This is the advice described in
|
|
||||||
:rfc:`9218#section-2.1.1`.
|
|
||||||
|
|
||||||
Server has an optional mechanism to fallback to RFC 7540 priorities.
|
|
||||||
By default, if server sends SETTINGS_NO_RFC7540_PRIORITIES of value of
|
|
||||||
1, it completely disables RFC 7540 priorities and no fallback. By
|
|
||||||
setting nonzero value to
|
|
||||||
`nghttp2_option_set_server_fallback_rfc7540_priorities()`, server
|
|
||||||
falls back to RFC 7540 priorities if it sends
|
|
||||||
SETTINGS_NO_RFC7540_PRIORITIES value of value of 1, and client omits
|
|
||||||
SETTINGS_NO_RFC7540_PRIORITIES in its SETTINGS frame.
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user