mirror of
https://github.com/musix-org/musix-oss
synced 2025-06-17 01:16:00 +00:00
Modules
This commit is contained in:
201
node_modules/grpc/LICENSE
generated
vendored
Normal file
201
node_modules/grpc/LICENSE
generated
vendored
Normal file
@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright {yyyy} {name of copyright owner}
|
||||
|
||||
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.
|
80
node_modules/grpc/README.md
generated
vendored
Normal file
80
node_modules/grpc/README.md
generated
vendored
Normal file
@ -0,0 +1,80 @@
|
||||
[](https://www.npmjs.com/package/grpc)
|
||||
# Node.js gRPC Library
|
||||
|
||||
## PREREQUISITES
|
||||
- `node`: This requires `node` to be installed, version `4.0` or above. If you instead have the `nodejs` executable on Debian, you should install the [`nodejs-legacy`](https://packages.debian.org/sid/nodejs-legacy) package.
|
||||
|
||||
- **Note:** If you installed `node` via a package manager and the version is still less than `4.0`, try directly installing it from [nodejs.org](https://nodejs.org).
|
||||
|
||||
## INSTALLATION
|
||||
|
||||
Install the gRPC NPM package
|
||||
|
||||
```sh
|
||||
npm install grpc
|
||||
```
|
||||
|
||||
## BUILD FROM SOURCE
|
||||
|
||||
The following command can be used to build from source when installing the package from npm:
|
||||
|
||||
```
|
||||
npm install grpc --build-from-source
|
||||
```
|
||||
|
||||
The `--build-from-source` option will work even when installing another package that depends on `grpc`. To build only `grpc` from source, you can use the argument `--build-from-source=grpc`.
|
||||
|
||||
## ABOUT ELECTRON
|
||||
|
||||
The official electron documentation recommends to [build all of your native packages from source](https://electronjs.org/docs/tutorial/using-native-node-modules#modules-that-rely-on-node-pre-gyp). While the reasons behind this are technically good - many native extensions won't be packaged to work properly with electron - the gRPC source code is fairly difficult to build from source due to its complex nature, and we're also providing working electron pre-built binaries. Therefore, we recommend that you do not follow this model for using gRPC with electron. Also, for the same reason, `electron-rebuild` will always build from source. We advise you to not use this tool if you are depending on gRPC. Please note that there's not just one way to get native extensions running in electron, and that there's never any silver bullet for anything. The following instructions try to cater about some of the most generic ways, but different edge cases might require different methodologies.
|
||||
|
||||
The best way to get gRPC to work with electron is to do this, possibly in the `postinstall` script of your `package.json` file:
|
||||
|
||||
```
|
||||
npm rebuild --target=2.0.0 --runtime=electron --dist-url=https://atom.io/download/electron
|
||||
```
|
||||
|
||||
Note that the `2.0.0` above is the electron runtime version number. You will need to update this every time you go on a different version of the runtime.
|
||||
|
||||
If you have more native dependencies than gRPC, and they work better when built from source, you can explicitely specify which extension to build the following way:
|
||||
|
||||
```
|
||||
npm rebuild --build-from-source=sqlite3 --target=2.0.0 --runtime=electron --dist-url=https://atom.io/download/electron
|
||||
```
|
||||
|
||||
This way, if you depend on both `grpc` and `sqlite3`, only the `sqlite3` package will be rebuilt from source, leaving the `grpc` package to use its precompiled binaries.
|
||||
|
||||
## BUILD IN GIT REPOSITORY
|
||||
|
||||
1. Clone [the grpc-node Git Repository](https://github.com/grpc/grpc-node).
|
||||
2. Run `git submodule update --init --recursive` from the repository root.
|
||||
3. Run `cd packages/grpc-native-core`.
|
||||
4. Run `npm install --build-from-source`.
|
||||
|
||||
- **Note:** On Windows, this might fail due to [nodejs issue #4932](https://github.com/nodejs/node/issues/4932) in which case, you will see something like the following in `npm install`'s output (towards the very beginning):
|
||||
|
||||
```
|
||||
..
|
||||
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
|
||||
WINDOWS_BUILD_WARNING
|
||||
"..\IMPORTANT: Due to https:\github.com\nodejs\node\issues\4932, to build this library on Windows, you must first remove C:\Users\jenkins\.node-gyp\4.4.0\include\node\openssl"
|
||||
...
|
||||
..
|
||||
```
|
||||
|
||||
To fix this, you will have to delete the folder `C:\Users\<username>\.node-gyp\<node_version>\include\node\openssl` and retry `npm install`
|
||||
|
||||
## CONFIGURE BINARIES' LOCATION
|
||||
|
||||
You can configure the location from which the pre-compiled binaries are downloaded during installation.
|
||||
|
||||
`npm install --grpc_node_binary_host_mirror=https://your-url.com`
|
||||
|
||||
Or defining `grpc_node_binary_host_mirror` in your `.npmrc`.
|
||||
|
||||
## API DOCUMENTATION
|
||||
|
||||
See the [API Documentation](https://grpc.io/grpc/node/).
|
||||
|
||||
## TESTING
|
||||
To run the test suite, simply run `npm test` in the install location.
|
1166
node_modules/grpc/binding.gyp
generated
vendored
Normal file
1166
node_modules/grpc/binding.gyp
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
202
node_modules/grpc/deps/grpc/LICENSE
generated
vendored
Normal file
202
node_modules/grpc/deps/grpc/LICENSE
generated
vendored
Normal file
@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
13
node_modules/grpc/deps/grpc/NOTICE.txt
generated
vendored
Normal file
13
node_modules/grpc/deps/grpc/NOTICE.txt
generated
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
Copyright 2014 gRPC authors.
|
||||
|
||||
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.
|
85
node_modules/grpc/deps/grpc/README.md
generated
vendored
Normal file
85
node_modules/grpc/deps/grpc/README.md
generated
vendored
Normal file
@ -0,0 +1,85 @@
|
||||
gRPC - An RPC library and framework
|
||||
===================================
|
||||
|
||||
gRPC is a modern, open source, high-performance remote procedure call (RPC) framework that can run anywhere. gRPC enables client and server applications to communicate transparently, and simplifies the building of connected systems.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><b>Homepage:</b></td>
|
||||
<td><a href="https://grpc.io/">grpc.io</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Mailing List:</b></td>
|
||||
<td><a href="https://groups.google.com/forum/#!forum/grpc-io">grpc-io@googlegroups.com</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
[](https://gitter.im/grpc/grpc?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
# To start using gRPC
|
||||
|
||||
To maximize usability, gRPC supports the standard method for adding dependencies to a user's chosen language (if there is one).
|
||||
In most languages, the gRPC runtime comes as a package available in a user's language package manager.
|
||||
|
||||
For instructions on how to use the language-specific gRPC runtime for a project, please refer to these documents
|
||||
|
||||
* [C++](src/cpp): follow the instructions under the `src/cpp` directory
|
||||
* [C#](src/csharp): NuGet package `Grpc`
|
||||
* [Dart](https://github.com/grpc/grpc-dart): pub package `grpc`
|
||||
* [Go](https://github.com/grpc/grpc-go): `go get google.golang.org/grpc`
|
||||
* [Java](https://github.com/grpc/grpc-java): Use JARs from Maven Central Repository
|
||||
* [Node](https://github.com/grpc/grpc-node): `npm install grpc`
|
||||
* [Objective-C](src/objective-c): Add `gRPC-ProtoRPC` dependency to podspec
|
||||
* [PHP](src/php): `pecl install grpc`
|
||||
* [Python](src/python/grpcio): `pip install grpcio`
|
||||
* [Ruby](src/ruby): `gem install grpc`
|
||||
* [WebJS](https://github.com/grpc/grpc-web): follow the grpc-web instructions
|
||||
|
||||
Per-language quickstart guides and tutorials can be found in the [documentation section on the grpc.io website](https://grpc.io/docs/). Code examples are available in the [examples](examples) directory.
|
||||
|
||||
Precompiled bleeding-edge package builds of gRPC `master` branch's `HEAD` are uploaded daily to [packages.grpc.io](https://packages.grpc.io).
|
||||
|
||||
# To start developing gRPC
|
||||
|
||||
Contributions are welcome!
|
||||
|
||||
Please read [How to contribute](CONTRIBUTING.md) which will guide you through the entire workflow of how to build the source code, how to run the tests, and how to contribute changes to
|
||||
the gRPC codebase.
|
||||
The "How to contribute" document also contains info on how the contribution process works and contains best practices for creating contributions.
|
||||
|
||||
# Troubleshooting
|
||||
|
||||
Sometimes things go wrong. Please check out the [Troubleshooting guide](TROUBLESHOOTING.md) if you are experiencing issues with gRPC.
|
||||
|
||||
# Performance
|
||||
|
||||
See the [Performance dashboard](http://performance-dot-grpc-testing.appspot.com/explore?dashboard=5636470266134528) for performance numbers of the latest released version.
|
||||
|
||||
# Concepts
|
||||
|
||||
See [gRPC Concepts](CONCEPTS.md)
|
||||
|
||||
# About This Repository
|
||||
|
||||
This repository contains source code for gRPC libraries implemented in multiple languages written on top of a shared C core library [src/core](src/core).
|
||||
|
||||
Libraries in different languages may be in various states of development. We are seeking contributions for all of these libraries:
|
||||
|
||||
| Language | Source |
|
||||
|-------------------------|-------------------------------------|
|
||||
| Shared C [core library] | [src/core](src/core) |
|
||||
| C++ | [src/cpp](src/cpp) |
|
||||
| Ruby | [src/ruby](src/ruby) |
|
||||
| Python | [src/python](src/python) |
|
||||
| PHP | [src/php](src/php) |
|
||||
| C# | [src/csharp](src/csharp) |
|
||||
| Objective-C | [src/objective-c](src/objective-c) |
|
||||
|
||||
| Language | Source repo |
|
||||
|-------------------------|------------------------------------------------------|
|
||||
| Java | [grpc-java](http://github.com/grpc/grpc-java) |
|
||||
| Go | [grpc-go](http://github.com/grpc/grpc-go) |
|
||||
| NodeJS | [grpc-node](https://github.com/grpc/grpc-node) |
|
||||
| WebJS | [grpc-web](https://github.com/grpc/grpc-web) |
|
||||
| Dart | [grpc-dart](https://github.com/grpc/grpc-dart) |
|
||||
|
4
node_modules/grpc/deps/grpc/etc/README.md
generated
vendored
Normal file
4
node_modules/grpc/deps/grpc/etc/README.md
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
The roots.pem file is periodically generated from:
|
||||
https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt
|
||||
using
|
||||
https://github.com/agl/extract-nss-root-certs
|
4700
node_modules/grpc/deps/grpc/etc/roots.pem
generated
vendored
Normal file
4700
node_modules/grpc/deps/grpc/etc/roots.pem
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
27
node_modules/grpc/deps/grpc/include/grpc/byte_buffer.h
generated
vendored
Normal file
27
node_modules/grpc/deps/grpc/include/grpc/byte_buffer.h
generated
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_BYTE_BUFFER_H
|
||||
#define GRPC_BYTE_BUFFER_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/byte_buffer.h>
|
||||
#include <grpc/slice_buffer.h>
|
||||
|
||||
#endif /* GRPC_BYTE_BUFFER_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/byte_buffer_reader.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/byte_buffer_reader.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_BYTE_BUFFER_READER_H
|
||||
#define GRPC_BYTE_BUFFER_READER_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/byte_buffer_reader.h>
|
||||
|
||||
#endif /* GRPC_BYTE_BUFFER_READER_H */
|
40
node_modules/grpc/deps/grpc/include/grpc/census.h
generated
vendored
Normal file
40
node_modules/grpc/deps/grpc/include/grpc/census.h
generated
vendored
Normal file
@ -0,0 +1,40 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015-2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CENSUS_H
|
||||
#define GRPC_CENSUS_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/grpc.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
A Census Context is a handle used by Census to represent the current tracing
|
||||
and stats collection information. Contexts should be propagated across RPC's
|
||||
(this is the responsibility of the local RPC system). */
|
||||
typedef struct census_context census_context;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_CENSUS_H */
|
75
node_modules/grpc/deps/grpc/include/grpc/compression.h
generated
vendored
Normal file
75
node_modules/grpc/deps/grpc/include/grpc/compression.h
generated
vendored
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_COMPRESSION_H
|
||||
#define GRPC_COMPRESSION_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <grpc/impl/codegen/compression_types.h>
|
||||
#include <grpc/slice.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Return if an algorithm is message compression algorithm. */
|
||||
GRPCAPI int grpc_compression_algorithm_is_message(
|
||||
grpc_compression_algorithm algorithm);
|
||||
|
||||
/** Return if an algorithm is stream compression algorithm. */
|
||||
GRPCAPI int grpc_compression_algorithm_is_stream(
|
||||
grpc_compression_algorithm algorithm);
|
||||
|
||||
/** Parses the \a slice as a grpc_compression_algorithm instance and updating \a
|
||||
* algorithm. Returns 1 upon success, 0 otherwise. */
|
||||
GRPCAPI int grpc_compression_algorithm_parse(
|
||||
grpc_slice value, grpc_compression_algorithm* algorithm);
|
||||
|
||||
/** Updates \a name with the encoding name corresponding to a valid \a
|
||||
* algorithm. Note that \a name is statically allocated and must *not* be freed.
|
||||
* Returns 1 upon success, 0 otherwise. */
|
||||
GRPCAPI int grpc_compression_algorithm_name(
|
||||
grpc_compression_algorithm algorithm, const char** name);
|
||||
|
||||
/** Returns the compression algorithm corresponding to \a level for the
|
||||
* compression algorithms encoded in the \a accepted_encodings bitset.*/
|
||||
GRPCAPI grpc_compression_algorithm grpc_compression_algorithm_for_level(
|
||||
grpc_compression_level level, uint32_t accepted_encodings);
|
||||
|
||||
GRPCAPI void grpc_compression_options_init(grpc_compression_options* opts);
|
||||
|
||||
/** Mark \a algorithm as enabled in \a opts. */
|
||||
GRPCAPI void grpc_compression_options_enable_algorithm(
|
||||
grpc_compression_options* opts, grpc_compression_algorithm algorithm);
|
||||
|
||||
/** Mark \a algorithm as disabled in \a opts. */
|
||||
GRPCAPI void grpc_compression_options_disable_algorithm(
|
||||
grpc_compression_options* opts, grpc_compression_algorithm algorithm);
|
||||
|
||||
/** Returns true if \a algorithm is marked as enabled in \a opts. */
|
||||
GRPCAPI int grpc_compression_options_is_algorithm_enabled(
|
||||
const grpc_compression_options* opts, grpc_compression_algorithm algorithm);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_COMPRESSION_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/fork.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/fork.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_FORK_H
|
||||
#define GRPC_FORK_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/fork.h>
|
||||
|
||||
#endif /* GRPC_FORK_H */
|
540
node_modules/grpc/deps/grpc/include/grpc/grpc.h
generated
vendored
Normal file
540
node_modules/grpc/deps/grpc/include/grpc/grpc.h
generated
vendored
Normal file
@ -0,0 +1,540 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015-2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_GRPC_H
|
||||
#define GRPC_GRPC_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/status.h>
|
||||
|
||||
#include <grpc/byte_buffer.h>
|
||||
#include <grpc/impl/codegen/connectivity_state.h>
|
||||
#include <grpc/impl/codegen/grpc_types.h>
|
||||
#include <grpc/impl/codegen/propagation_bits.h>
|
||||
#include <grpc/slice.h>
|
||||
#include <grpc/support/time.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*! \mainpage GRPC Core
|
||||
*
|
||||
* The GRPC Core library is a low-level library designed to be wrapped by higher
|
||||
* level libraries. The top-level API is provided in grpc.h. Security related
|
||||
* functionality lives in grpc_security.h.
|
||||
*/
|
||||
|
||||
GRPCAPI void grpc_metadata_array_init(grpc_metadata_array* array);
|
||||
GRPCAPI void grpc_metadata_array_destroy(grpc_metadata_array* array);
|
||||
|
||||
GRPCAPI void grpc_call_details_init(grpc_call_details* details);
|
||||
GRPCAPI void grpc_call_details_destroy(grpc_call_details* details);
|
||||
|
||||
/** Registers a plugin to be initialized and destroyed with the library.
|
||||
|
||||
The \a init and \a destroy functions will be invoked as part of
|
||||
\a grpc_init() and \a grpc_shutdown(), respectively.
|
||||
Note that these functions can be invoked an arbitrary number of times
|
||||
(and hence so will \a init and \a destroy).
|
||||
It is safe to pass NULL to either argument. Plugins are destroyed in
|
||||
the reverse order they were initialized. */
|
||||
GRPCAPI void grpc_register_plugin(void (*init)(void), void (*destroy)(void));
|
||||
|
||||
/** Initialize the grpc library.
|
||||
|
||||
After it's called, a matching invocation to grpc_shutdown() is expected.
|
||||
|
||||
It is not safe to call any other grpc functions before calling this.
|
||||
(To avoid overhead, little checking is done, and some things may work. We
|
||||
do not warrant that they will continue to do so in future revisions of this
|
||||
library). */
|
||||
GRPCAPI void grpc_init(void);
|
||||
|
||||
/** Shut down the grpc library.
|
||||
|
||||
Before it's called, there should haven been a matching invocation to
|
||||
grpc_init().
|
||||
|
||||
The last call to grpc_shutdown will initiate cleaning up of grpc library
|
||||
internals, which can happen in another thread. Once the clean-up is done,
|
||||
no memory is used by grpc, nor are any instructions executing within the
|
||||
grpc library. Prior to calling, all application owned grpc objects must
|
||||
have been destroyed. */
|
||||
GRPCAPI void grpc_shutdown(void);
|
||||
|
||||
/** EXPERIMENTAL. Returns 1 if the grpc library has been initialized.
|
||||
TODO(ericgribkoff) Decide if this should be promoted to non-experimental as
|
||||
part of stabilizing the fork support API, as tracked in
|
||||
https://github.com/grpc/grpc/issues/15334 */
|
||||
GRPCAPI int grpc_is_initialized(void);
|
||||
|
||||
/** EXPERIMENTAL. Blocking shut down grpc library.
|
||||
This is only for wrapped language to use now. */
|
||||
GRPCAPI void grpc_shutdown_blocking(void);
|
||||
|
||||
/** Return a string representing the current version of grpc */
|
||||
GRPCAPI const char* grpc_version_string(void);
|
||||
|
||||
/** Return a string specifying what the 'g' in gRPC stands for */
|
||||
GRPCAPI const char* grpc_g_stands_for(void);
|
||||
|
||||
/** Returns the completion queue factory based on the attributes. MAY return a
|
||||
NULL if no factory can be found */
|
||||
GRPCAPI const grpc_completion_queue_factory*
|
||||
grpc_completion_queue_factory_lookup(
|
||||
const grpc_completion_queue_attributes* attributes);
|
||||
|
||||
/** Helper function to create a completion queue with grpc_cq_completion_type
|
||||
of GRPC_CQ_NEXT and grpc_cq_polling_type of GRPC_CQ_DEFAULT_POLLING */
|
||||
GRPCAPI grpc_completion_queue* grpc_completion_queue_create_for_next(
|
||||
void* reserved);
|
||||
|
||||
/** Helper function to create a completion queue with grpc_cq_completion_type
|
||||
of GRPC_CQ_PLUCK and grpc_cq_polling_type of GRPC_CQ_DEFAULT_POLLING */
|
||||
GRPCAPI grpc_completion_queue* grpc_completion_queue_create_for_pluck(
|
||||
void* reserved);
|
||||
|
||||
/** Helper function to create a completion queue with grpc_cq_completion_type
|
||||
of GRPC_CQ_CALLBACK and grpc_cq_polling_type of GRPC_CQ_DEFAULT_POLLING.
|
||||
This function is experimental. */
|
||||
GRPCAPI grpc_completion_queue* grpc_completion_queue_create_for_callback(
|
||||
grpc_experimental_completion_queue_functor* shutdown_callback,
|
||||
void* reserved);
|
||||
|
||||
/** Create a completion queue */
|
||||
GRPCAPI grpc_completion_queue* grpc_completion_queue_create(
|
||||
const grpc_completion_queue_factory* factory,
|
||||
const grpc_completion_queue_attributes* attributes, void* reserved);
|
||||
|
||||
/** Blocks until an event is available, the completion queue is being shut down,
|
||||
or deadline is reached.
|
||||
|
||||
Returns a grpc_event with type GRPC_QUEUE_TIMEOUT on timeout,
|
||||
otherwise a grpc_event describing the event that occurred.
|
||||
|
||||
Callers must not call grpc_completion_queue_next and
|
||||
grpc_completion_queue_pluck simultaneously on the same completion queue. */
|
||||
GRPCAPI grpc_event grpc_completion_queue_next(grpc_completion_queue* cq,
|
||||
gpr_timespec deadline,
|
||||
void* reserved);
|
||||
|
||||
/** Blocks until an event with tag 'tag' is available, the completion queue is
|
||||
being shutdown or deadline is reached.
|
||||
|
||||
Returns a grpc_event with type GRPC_QUEUE_TIMEOUT on timeout,
|
||||
otherwise a grpc_event describing the event that occurred.
|
||||
|
||||
Callers must not call grpc_completion_queue_next and
|
||||
grpc_completion_queue_pluck simultaneously on the same completion queue.
|
||||
|
||||
Completion queues support a maximum of GRPC_MAX_COMPLETION_QUEUE_PLUCKERS
|
||||
concurrently executing plucks at any time. */
|
||||
GRPCAPI grpc_event grpc_completion_queue_pluck(grpc_completion_queue* cq,
|
||||
void* tag, gpr_timespec deadline,
|
||||
void* reserved);
|
||||
|
||||
/** Maximum number of outstanding grpc_completion_queue_pluck executions per
|
||||
completion queue */
|
||||
#define GRPC_MAX_COMPLETION_QUEUE_PLUCKERS 6
|
||||
|
||||
/** Begin destruction of a completion queue. Once all possible events are
|
||||
drained then grpc_completion_queue_next will start to produce
|
||||
GRPC_QUEUE_SHUTDOWN events only. At that point it's safe to call
|
||||
grpc_completion_queue_destroy.
|
||||
|
||||
After calling this function applications should ensure that no
|
||||
NEW work is added to be published on this completion queue. */
|
||||
GRPCAPI void grpc_completion_queue_shutdown(grpc_completion_queue* cq);
|
||||
|
||||
/** Destroy a completion queue. The caller must ensure that the queue is
|
||||
drained and no threads are executing grpc_completion_queue_next */
|
||||
GRPCAPI void grpc_completion_queue_destroy(grpc_completion_queue* cq);
|
||||
|
||||
/*********** EXPERIMENTAL API ************/
|
||||
/** Initializes a thread local cache for \a cq.
|
||||
* grpc_flush_cq_tls_cache() MUST be called on the same thread,
|
||||
* with the same cq.
|
||||
*/
|
||||
GRPCAPI void grpc_completion_queue_thread_local_cache_init(
|
||||
grpc_completion_queue* cq);
|
||||
|
||||
/*********** EXPERIMENTAL API ************/
|
||||
/** Flushes the thread local cache for \a cq.
|
||||
* Returns 1 if there was contents in the cache. If there was an event
|
||||
* in \a cq tls cache, its tag is placed in tag, and ok is set to the
|
||||
* event success.
|
||||
*/
|
||||
GRPCAPI int grpc_completion_queue_thread_local_cache_flush(
|
||||
grpc_completion_queue* cq, void** tag, int* ok);
|
||||
|
||||
/** Check the connectivity state of a channel. */
|
||||
GRPCAPI grpc_connectivity_state grpc_channel_check_connectivity_state(
|
||||
grpc_channel* channel, int try_to_connect);
|
||||
|
||||
/** Number of active "external connectivity state watchers" attached to a
|
||||
* channel.
|
||||
* Useful for testing. **/
|
||||
GRPCAPI int grpc_channel_num_external_connectivity_watchers(
|
||||
grpc_channel* channel);
|
||||
|
||||
/** Watch for a change in connectivity state.
|
||||
Once the channel connectivity state is different from last_observed_state,
|
||||
tag will be enqueued on cq with success=1.
|
||||
If deadline expires BEFORE the state is changed, tag will be enqueued on cq
|
||||
with success=0. */
|
||||
GRPCAPI void grpc_channel_watch_connectivity_state(
|
||||
grpc_channel* channel, grpc_connectivity_state last_observed_state,
|
||||
gpr_timespec deadline, grpc_completion_queue* cq, void* tag);
|
||||
|
||||
/** Check whether a grpc channel supports connectivity watcher */
|
||||
GRPCAPI int grpc_channel_support_connectivity_watcher(grpc_channel* channel);
|
||||
|
||||
/** Create a call given a grpc_channel, in order to call 'method'. All
|
||||
completions are sent to 'completion_queue'. 'method' and 'host' need only
|
||||
live through the invocation of this function.
|
||||
If parent_call is non-NULL, it must be a server-side call. It will be used
|
||||
to propagate properties from the server call to this new client call,
|
||||
depending on the value of \a propagation_mask (see propagation_bits.h for
|
||||
possible values). */
|
||||
GRPCAPI grpc_call* grpc_channel_create_call(
|
||||
grpc_channel* channel, grpc_call* parent_call, uint32_t propagation_mask,
|
||||
grpc_completion_queue* completion_queue, grpc_slice method,
|
||||
const grpc_slice* host, gpr_timespec deadline, void* reserved);
|
||||
|
||||
/** Ping the channels peer (load balanced channels will select one sub-channel
|
||||
to ping); if the channel is not connected, posts a failed. */
|
||||
GRPCAPI void grpc_channel_ping(grpc_channel* channel, grpc_completion_queue* cq,
|
||||
void* tag, void* reserved);
|
||||
|
||||
/** Pre-register a method/host pair on a channel.
|
||||
method and host are not owned and must remain alive while the server is
|
||||
running. */
|
||||
GRPCAPI void* grpc_channel_register_call(grpc_channel* channel,
|
||||
const char* method, const char* host,
|
||||
void* reserved);
|
||||
|
||||
/** Create a call given a handle returned from grpc_channel_register_call.
|
||||
\sa grpc_channel_create_call. */
|
||||
GRPCAPI grpc_call* grpc_channel_create_registered_call(
|
||||
grpc_channel* channel, grpc_call* parent_call, uint32_t propagation_mask,
|
||||
grpc_completion_queue* completion_queue, void* registered_call_handle,
|
||||
gpr_timespec deadline, void* reserved);
|
||||
|
||||
/** Allocate memory in the grpc_call arena: this memory is automatically
|
||||
discarded at call completion */
|
||||
GRPCAPI void* grpc_call_arena_alloc(grpc_call* call, size_t size);
|
||||
|
||||
/** Start a batch of operations defined in the array ops; when complete, post a
|
||||
completion of type 'tag' to the completion queue bound to the call.
|
||||
The order of ops specified in the batch has no significance.
|
||||
Only one operation of each type can be active at once in any given
|
||||
batch.
|
||||
If a call to grpc_call_start_batch returns GRPC_CALL_OK you must call
|
||||
grpc_completion_queue_next or grpc_completion_queue_pluck on the completion
|
||||
queue associated with 'call' for work to be performed. If a call to
|
||||
grpc_call_start_batch returns any value other than GRPC_CALL_OK it is
|
||||
guaranteed that no state associated with 'call' is changed and it is not
|
||||
appropriate to call grpc_completion_queue_next or
|
||||
grpc_completion_queue_pluck consequent to the failed grpc_call_start_batch
|
||||
call.
|
||||
If a call to grpc_call_start_batch with an empty batch returns
|
||||
GRPC_CALL_OK, the tag is put in the completion queue immediately.
|
||||
THREAD SAFETY: access to grpc_call_start_batch in multi-threaded environment
|
||||
needs to be synchronized. As an optimization, you may synchronize batches
|
||||
containing just send operations independently from batches containing just
|
||||
receive operations. Access to grpc_call_start_batch with an empty batch is
|
||||
thread-compatible. */
|
||||
GRPCAPI grpc_call_error grpc_call_start_batch(grpc_call* call,
|
||||
const grpc_op* ops, size_t nops,
|
||||
void* tag, void* reserved);
|
||||
|
||||
/** Returns a newly allocated string representing the endpoint to which this
|
||||
call is communicating with. The string is in the uri format accepted by
|
||||
grpc_channel_create.
|
||||
The returned string should be disposed of with gpr_free().
|
||||
|
||||
WARNING: this value is never authenticated or subject to any security
|
||||
related code. It must not be used for any authentication related
|
||||
functionality. Instead, use grpc_auth_context. */
|
||||
GRPCAPI char* grpc_call_get_peer(grpc_call* call);
|
||||
|
||||
struct census_context;
|
||||
|
||||
/** Set census context for a call; Must be called before first call to
|
||||
grpc_call_start_batch(). */
|
||||
GRPCAPI void grpc_census_call_set_context(grpc_call* call,
|
||||
struct census_context* context);
|
||||
|
||||
/** Retrieve the calls current census context. */
|
||||
GRPCAPI struct census_context* grpc_census_call_get_context(grpc_call* call);
|
||||
|
||||
/** Return a newly allocated string representing the target a channel was
|
||||
created for. */
|
||||
GRPCAPI char* grpc_channel_get_target(grpc_channel* channel);
|
||||
|
||||
/** Request info about the channel.
|
||||
\a channel_info indicates what information is being requested and
|
||||
how that information will be returned.
|
||||
\a channel_info is owned by the caller. */
|
||||
GRPCAPI void grpc_channel_get_info(grpc_channel* channel,
|
||||
const grpc_channel_info* channel_info);
|
||||
|
||||
/** EXPERIMENTAL. Resets the channel's connect backoff.
|
||||
TODO(roth): When we see whether this proves useful, either promote
|
||||
to non-experimental or remove it. */
|
||||
GRPCAPI void grpc_channel_reset_connect_backoff(grpc_channel* channel);
|
||||
|
||||
/** Create a client channel to 'target'. Additional channel level configuration
|
||||
MAY be provided by grpc_channel_args, though the expectation is that most
|
||||
clients will want to simply pass NULL. The user data in 'args' need only
|
||||
live through the invocation of this function. However, if any args of the
|
||||
'pointer' type are passed, then the referenced vtable must be maintained
|
||||
by the caller until grpc_channel_destroy terminates. See grpc_channel_args
|
||||
definition for more on this. */
|
||||
GRPCAPI grpc_channel* grpc_insecure_channel_create(
|
||||
const char* target, const grpc_channel_args* args, void* reserved);
|
||||
|
||||
/** Create a lame client: this client fails every operation attempted on it. */
|
||||
GRPCAPI grpc_channel* grpc_lame_client_channel_create(
|
||||
const char* target, grpc_status_code error_code, const char* error_message);
|
||||
|
||||
/** Close and destroy a grpc channel */
|
||||
GRPCAPI void grpc_channel_destroy(grpc_channel* channel);
|
||||
|
||||
/** Error handling for grpc_call
|
||||
Most grpc_call functions return a grpc_error. If the error is not GRPC_OK
|
||||
then the operation failed due to some unsatisfied precondition.
|
||||
If a grpc_call fails, it's guaranteed that no change to the call state
|
||||
has been made. */
|
||||
|
||||
/** Cancel an RPC.
|
||||
Can be called multiple times, from any thread.
|
||||
THREAD-SAFETY grpc_call_cancel and grpc_call_cancel_with_status
|
||||
are thread-safe, and can be called at any point before grpc_call_unref
|
||||
is called.*/
|
||||
GRPCAPI grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved);
|
||||
|
||||
/** Cancel an RPC.
|
||||
Can be called multiple times, from any thread.
|
||||
If a status has not been received for the call, set it to the status code
|
||||
and description passed in.
|
||||
Importantly, this function does not send status nor description to the
|
||||
remote endpoint.
|
||||
Note that \a description doesn't need be a static string.
|
||||
It doesn't need to be alive after the call to
|
||||
grpc_call_cancel_with_status completes.
|
||||
*/
|
||||
GRPCAPI grpc_call_error grpc_call_cancel_with_status(grpc_call* call,
|
||||
grpc_status_code status,
|
||||
const char* description,
|
||||
void* reserved);
|
||||
|
||||
/** Ref a call.
|
||||
THREAD SAFETY: grpc_call_ref is thread-compatible */
|
||||
GRPCAPI void grpc_call_ref(grpc_call* call);
|
||||
|
||||
/** Unref a call.
|
||||
THREAD SAFETY: grpc_call_unref is thread-compatible */
|
||||
GRPCAPI void grpc_call_unref(grpc_call* call);
|
||||
|
||||
/** Request notification of a new call.
|
||||
Once a call is received, a notification tagged with \a tag_new is added to
|
||||
\a cq_for_notification. \a call, \a details and \a request_metadata are
|
||||
updated with the appropriate call information. \a cq_bound_to_call is bound
|
||||
to \a call, and batch operation notifications for that call will be posted
|
||||
to \a cq_bound_to_call.
|
||||
Note that \a cq_for_notification must have been registered to the server via
|
||||
\a grpc_server_register_completion_queue. */
|
||||
GRPCAPI grpc_call_error grpc_server_request_call(
|
||||
grpc_server* server, grpc_call** call, grpc_call_details* details,
|
||||
grpc_metadata_array* request_metadata,
|
||||
grpc_completion_queue* cq_bound_to_call,
|
||||
grpc_completion_queue* cq_for_notification, void* tag_new);
|
||||
|
||||
/** How to handle payloads for a registered method */
|
||||
typedef enum {
|
||||
/** Don't try to read the payload */
|
||||
GRPC_SRM_PAYLOAD_NONE,
|
||||
/** Read the initial payload as a byte buffer */
|
||||
GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER
|
||||
} grpc_server_register_method_payload_handling;
|
||||
|
||||
/** Registers a method in the server.
|
||||
Methods to this (host, method) pair will not be reported by
|
||||
grpc_server_request_call, but instead be reported by
|
||||
grpc_server_request_registered_call when passed the appropriate
|
||||
registered_method (as returned by this function).
|
||||
Must be called before grpc_server_start.
|
||||
Returns NULL on failure. */
|
||||
GRPCAPI void* grpc_server_register_method(
|
||||
grpc_server* server, const char* method, const char* host,
|
||||
grpc_server_register_method_payload_handling payload_handling,
|
||||
uint32_t flags);
|
||||
|
||||
/** Request notification of a new pre-registered call. 'cq_for_notification'
|
||||
must have been registered to the server via
|
||||
grpc_server_register_completion_queue. */
|
||||
GRPCAPI grpc_call_error grpc_server_request_registered_call(
|
||||
grpc_server* server, void* registered_method, grpc_call** call,
|
||||
gpr_timespec* deadline, grpc_metadata_array* request_metadata,
|
||||
grpc_byte_buffer** optional_payload,
|
||||
grpc_completion_queue* cq_bound_to_call,
|
||||
grpc_completion_queue* cq_for_notification, void* tag_new);
|
||||
|
||||
/** Create a server. Additional configuration for each incoming channel can
|
||||
be specified with args. If no additional configuration is needed, args can
|
||||
be NULL. The user data in 'args' need only live through the invocation of
|
||||
this function. However, if any args of the 'pointer' type are passed, then
|
||||
the referenced vtable must be maintained by the caller until
|
||||
grpc_server_destroy terminates. See grpc_channel_args definition for more
|
||||
on this. */
|
||||
GRPCAPI grpc_server* grpc_server_create(const grpc_channel_args* args,
|
||||
void* reserved);
|
||||
|
||||
/** Register a completion queue with the server. Must be done for any
|
||||
notification completion queue that is passed to grpc_server_request_*_call
|
||||
and to grpc_server_shutdown_and_notify. Must be performed prior to
|
||||
grpc_server_start. */
|
||||
GRPCAPI void grpc_server_register_completion_queue(grpc_server* server,
|
||||
grpc_completion_queue* cq,
|
||||
void* reserved);
|
||||
|
||||
/** Add a HTTP2 over plaintext over tcp listener.
|
||||
Returns bound port number on success, 0 on failure.
|
||||
REQUIRES: server not started */
|
||||
GRPCAPI int grpc_server_add_insecure_http2_port(grpc_server* server,
|
||||
const char* addr);
|
||||
|
||||
/** Start a server - tells all listeners to start listening */
|
||||
GRPCAPI void grpc_server_start(grpc_server* server);
|
||||
|
||||
/** Begin shutting down a server.
|
||||
After completion, no new calls or connections will be admitted.
|
||||
Existing calls will be allowed to complete.
|
||||
Send a GRPC_OP_COMPLETE event when there are no more calls being serviced.
|
||||
Shutdown is idempotent, and all tags will be notified at once if multiple
|
||||
grpc_server_shutdown_and_notify calls are made. 'cq' must have been
|
||||
registered to this server via grpc_server_register_completion_queue. */
|
||||
GRPCAPI void grpc_server_shutdown_and_notify(grpc_server* server,
|
||||
grpc_completion_queue* cq,
|
||||
void* tag);
|
||||
|
||||
/** Cancel all in-progress calls.
|
||||
Only usable after shutdown. */
|
||||
GRPCAPI void grpc_server_cancel_all_calls(grpc_server* server);
|
||||
|
||||
/** Destroy a server.
|
||||
Shutdown must have completed beforehand (i.e. all tags generated by
|
||||
grpc_server_shutdown_and_notify must have been received, and at least
|
||||
one call to grpc_server_shutdown_and_notify must have been made). */
|
||||
GRPCAPI void grpc_server_destroy(grpc_server* server);
|
||||
|
||||
/** Enable or disable a tracer.
|
||||
|
||||
Tracers (usually controlled by the environment variable GRPC_TRACE)
|
||||
allow printf-style debugging on GRPC internals, and are useful for
|
||||
tracking down problems in the field.
|
||||
|
||||
Use of this function is not strictly thread-safe, but the
|
||||
thread-safety issues raised by it should not be of concern. */
|
||||
GRPCAPI int grpc_tracer_set_enabled(const char* name, int enabled);
|
||||
|
||||
/** Check whether a metadata key is legal (will be accepted by core) */
|
||||
GRPCAPI int grpc_header_key_is_legal(grpc_slice slice);
|
||||
|
||||
/** Check whether a non-binary metadata value is legal (will be accepted by
|
||||
core) */
|
||||
GRPCAPI int grpc_header_nonbin_value_is_legal(grpc_slice slice);
|
||||
|
||||
/** Check whether a metadata key corresponds to a binary value */
|
||||
GRPCAPI int grpc_is_binary_header(grpc_slice slice);
|
||||
|
||||
/** Convert grpc_call_error values to a string */
|
||||
GRPCAPI const char* grpc_call_error_to_string(grpc_call_error error);
|
||||
|
||||
/** Create a buffer pool */
|
||||
GRPCAPI grpc_resource_quota* grpc_resource_quota_create(const char* trace_name);
|
||||
|
||||
/** Add a reference to a buffer pool */
|
||||
GRPCAPI void grpc_resource_quota_ref(grpc_resource_quota* resource_quota);
|
||||
|
||||
/** Drop a reference to a buffer pool */
|
||||
GRPCAPI void grpc_resource_quota_unref(grpc_resource_quota* resource_quota);
|
||||
|
||||
/** Update the size of a buffer pool */
|
||||
GRPCAPI void grpc_resource_quota_resize(grpc_resource_quota* resource_quota,
|
||||
size_t new_size);
|
||||
|
||||
/** Update the size of the maximum number of threads allowed */
|
||||
GRPCAPI void grpc_resource_quota_set_max_threads(
|
||||
grpc_resource_quota* resource_quota, int new_max_threads);
|
||||
|
||||
/** Fetch a vtable for a grpc_channel_arg that points to a grpc_resource_quota
|
||||
*/
|
||||
GRPCAPI const grpc_arg_pointer_vtable* grpc_resource_quota_arg_vtable(void);
|
||||
|
||||
/************* CHANNELZ API *************/
|
||||
/** Channelz is under active development. The following APIs will see some
|
||||
churn as the feature is implemented. This comment will be removed once
|
||||
channelz is officially supported, and these APIs become stable. For now
|
||||
you may track the progress by following this github issue:
|
||||
https://github.com/grpc/grpc/issues/15340
|
||||
|
||||
the following APIs return allocated JSON strings that match the response
|
||||
objects from the channelz proto, found here:
|
||||
https://github.com/grpc/grpc/blob/master/src/proto/grpc/channelz/channelz.proto.
|
||||
|
||||
For easy conversion to protobuf, The JSON is formatted according to:
|
||||
https://developers.google.com/protocol-buffers/docs/proto3#json. */
|
||||
|
||||
/* Gets all root channels (i.e. channels the application has directly
|
||||
created). This does not include subchannels nor non-top level channels.
|
||||
The returned string is allocated and must be freed by the application. */
|
||||
GRPCAPI char* grpc_channelz_get_top_channels(intptr_t start_channel_id);
|
||||
|
||||
/* Gets all servers that exist in the process. */
|
||||
GRPCAPI char* grpc_channelz_get_servers(intptr_t start_server_id);
|
||||
|
||||
/* Returns a single Server, or else a NOT_FOUND code. */
|
||||
GRPCAPI char* grpc_channelz_get_server(intptr_t server_id);
|
||||
|
||||
/* Gets all server sockets that exist in the server. */
|
||||
GRPCAPI char* grpc_channelz_get_server_sockets(intptr_t server_id,
|
||||
intptr_t start_socket_id,
|
||||
intptr_t max_results);
|
||||
|
||||
/* Returns a single Channel, or else a NOT_FOUND code. The returned string
|
||||
is allocated and must be freed by the application. */
|
||||
GRPCAPI char* grpc_channelz_get_channel(intptr_t channel_id);
|
||||
|
||||
/* Returns a single Subchannel, or else a NOT_FOUND code. The returned string
|
||||
is allocated and must be freed by the application. */
|
||||
GRPCAPI char* grpc_channelz_get_subchannel(intptr_t subchannel_id);
|
||||
|
||||
/* Returns a single Socket, or else a NOT_FOUND code. The returned string
|
||||
is allocated and must be freed by the application. */
|
||||
GRPCAPI char* grpc_channelz_get_socket(intptr_t socket_id);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_GRPC_H */
|
38
node_modules/grpc/deps/grpc/include/grpc/grpc_cronet.h
generated
vendored
Normal file
38
node_modules/grpc/deps/grpc/include/grpc/grpc_cronet.h
generated
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_GRPC_CRONET_H
|
||||
#define GRPC_GRPC_CRONET_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/grpc.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
GRPCAPI grpc_channel* grpc_cronet_secure_channel_create(
|
||||
void* engine, const char* target, const grpc_channel_args* args,
|
||||
void* reserved);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_GRPC_CRONET_H */
|
59
node_modules/grpc/deps/grpc/include/grpc/grpc_posix.h
generated
vendored
Normal file
59
node_modules/grpc/deps/grpc/include/grpc/grpc_posix.h
generated
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_GRPC_POSIX_H
|
||||
#define GRPC_GRPC_POSIX_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/grpc_types.h>
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*! \mainpage GRPC Core POSIX
|
||||
*
|
||||
* The GRPC Core POSIX library provides some POSIX-specific low-level
|
||||
* functionality on top of GRPC Core.
|
||||
*/
|
||||
|
||||
/** Create a client channel to 'target' using file descriptor 'fd'. The 'target'
|
||||
argument will be used to indicate the name for this channel. See the comment
|
||||
for grpc_insecure_channel_create for description of 'args' argument. */
|
||||
GRPCAPI grpc_channel* grpc_insecure_channel_create_from_fd(
|
||||
const char* target, int fd, const grpc_channel_args* args);
|
||||
|
||||
/** Add the connected communication channel based on file descriptor 'fd' to the
|
||||
'server'. The 'fd' must be an open file descriptor corresponding to a
|
||||
connected socket. Events from the file descriptor may come on any of the
|
||||
server completion queues (i.e completion queues registered via the
|
||||
grpc_server_register_completion_queue API).
|
||||
|
||||
The 'reserved' pointer MUST be NULL.
|
||||
*/
|
||||
GRPCAPI void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
|
||||
void* reserved, int fd);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_GRPC_POSIX_H */
|
950
node_modules/grpc/deps/grpc/include/grpc/grpc_security.h
generated
vendored
Normal file
950
node_modules/grpc/deps/grpc/include/grpc/grpc_security.h
generated
vendored
Normal file
@ -0,0 +1,950 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_GRPC_SECURITY_H
|
||||
#define GRPC_GRPC_SECURITY_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/grpc.h>
|
||||
#include <grpc/grpc_security_constants.h>
|
||||
#include <grpc/status.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** --- Authentication Context. --- */
|
||||
|
||||
typedef struct grpc_auth_context grpc_auth_context;
|
||||
|
||||
typedef struct grpc_auth_property_iterator {
|
||||
const grpc_auth_context* ctx;
|
||||
size_t index;
|
||||
const char* name;
|
||||
} grpc_auth_property_iterator;
|
||||
|
||||
/** value, if not NULL, is guaranteed to be NULL terminated. */
|
||||
typedef struct grpc_auth_property {
|
||||
char* name;
|
||||
char* value;
|
||||
size_t value_length;
|
||||
} grpc_auth_property;
|
||||
|
||||
/** Returns NULL when the iterator is at the end. */
|
||||
GRPCAPI const grpc_auth_property* grpc_auth_property_iterator_next(
|
||||
grpc_auth_property_iterator* it);
|
||||
|
||||
/** Iterates over the auth context. */
|
||||
GRPCAPI grpc_auth_property_iterator
|
||||
grpc_auth_context_property_iterator(const grpc_auth_context* ctx);
|
||||
|
||||
/** Gets the peer identity. Returns an empty iterator (first _next will return
|
||||
NULL) if the peer is not authenticated. */
|
||||
GRPCAPI grpc_auth_property_iterator
|
||||
grpc_auth_context_peer_identity(const grpc_auth_context* ctx);
|
||||
|
||||
/** Finds a property in the context. May return an empty iterator (first _next
|
||||
will return NULL) if no property with this name was found in the context. */
|
||||
GRPCAPI grpc_auth_property_iterator grpc_auth_context_find_properties_by_name(
|
||||
const grpc_auth_context* ctx, const char* name);
|
||||
|
||||
/** Gets the name of the property that indicates the peer identity. Will return
|
||||
NULL if the peer is not authenticated. */
|
||||
GRPCAPI const char* grpc_auth_context_peer_identity_property_name(
|
||||
const grpc_auth_context* ctx);
|
||||
|
||||
/** Returns 1 if the peer is authenticated, 0 otherwise. */
|
||||
GRPCAPI int grpc_auth_context_peer_is_authenticated(
|
||||
const grpc_auth_context* ctx);
|
||||
|
||||
/** Gets the auth context from the call. Caller needs to call
|
||||
grpc_auth_context_release on the returned context. */
|
||||
GRPCAPI grpc_auth_context* grpc_call_auth_context(grpc_call* call);
|
||||
|
||||
/** Releases the auth context returned from grpc_call_auth_context. */
|
||||
GRPCAPI void grpc_auth_context_release(grpc_auth_context* context);
|
||||
|
||||
/** --
|
||||
The following auth context methods should only be called by a server metadata
|
||||
processor to set properties extracted from auth metadata.
|
||||
-- */
|
||||
|
||||
/** Add a property. */
|
||||
GRPCAPI void grpc_auth_context_add_property(grpc_auth_context* ctx,
|
||||
const char* name, const char* value,
|
||||
size_t value_length);
|
||||
|
||||
/** Add a C string property. */
|
||||
GRPCAPI void grpc_auth_context_add_cstring_property(grpc_auth_context* ctx,
|
||||
const char* name,
|
||||
const char* value);
|
||||
|
||||
/** Sets the property name. Returns 1 if successful or 0 in case of failure
|
||||
(which means that no property with this name exists). */
|
||||
GRPCAPI int grpc_auth_context_set_peer_identity_property_name(
|
||||
grpc_auth_context* ctx, const char* name);
|
||||
|
||||
/** --- SSL Session Cache. ---
|
||||
|
||||
A SSL session cache object represents a way to cache client sessions
|
||||
between connections. Only ticket-based resumption is supported. */
|
||||
|
||||
typedef struct grpc_ssl_session_cache grpc_ssl_session_cache;
|
||||
|
||||
/** Create LRU cache for client-side SSL sessions with the given capacity.
|
||||
If capacity is < 1, a default capacity is used instead. */
|
||||
GRPCAPI grpc_ssl_session_cache* grpc_ssl_session_cache_create_lru(
|
||||
size_t capacity);
|
||||
|
||||
/** Destroy SSL session cache. */
|
||||
GRPCAPI void grpc_ssl_session_cache_destroy(grpc_ssl_session_cache* cache);
|
||||
|
||||
/** Create a channel arg with the given cache object. */
|
||||
GRPCAPI grpc_arg
|
||||
grpc_ssl_session_cache_create_channel_arg(grpc_ssl_session_cache* cache);
|
||||
|
||||
/** --- grpc_channel_credentials object. ---
|
||||
|
||||
A channel credentials object represents a way to authenticate a client on a
|
||||
channel. */
|
||||
|
||||
typedef struct grpc_channel_credentials grpc_channel_credentials;
|
||||
|
||||
/** Releases a channel credentials object.
|
||||
The creator of the credentials object is responsible for its release. */
|
||||
GRPCAPI void grpc_channel_credentials_release(grpc_channel_credentials* creds);
|
||||
|
||||
/** Creates default credentials to connect to a google gRPC service.
|
||||
WARNING: Do NOT use this credentials to connect to a non-google service as
|
||||
this could result in an oauth2 token leak. */
|
||||
GRPCAPI grpc_channel_credentials* grpc_google_default_credentials_create(void);
|
||||
|
||||
/** Callback for getting the SSL roots override from the application.
|
||||
In case of success, *pem_roots_certs must be set to a NULL terminated string
|
||||
containing the list of PEM encoded root certificates. The ownership is passed
|
||||
to the core and freed (laster by the core) with gpr_free.
|
||||
If this function fails and GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment is
|
||||
set to a valid path, it will override the roots specified this func */
|
||||
typedef grpc_ssl_roots_override_result (*grpc_ssl_roots_override_callback)(
|
||||
char** pem_root_certs);
|
||||
|
||||
/** Setup a callback to override the default TLS/SSL roots.
|
||||
This function is not thread-safe and must be called at initialization time
|
||||
before any ssl credentials are created to have the desired side effect.
|
||||
If GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment is set to a valid path, the
|
||||
callback will not be called. */
|
||||
GRPCAPI void grpc_set_ssl_roots_override_callback(
|
||||
grpc_ssl_roots_override_callback cb);
|
||||
|
||||
/** Object that holds a private key / certificate chain pair in PEM format. */
|
||||
typedef struct {
|
||||
/** private_key is the NULL-terminated string containing the PEM encoding of
|
||||
the client's private key. */
|
||||
const char* private_key;
|
||||
|
||||
/** cert_chain is the NULL-terminated string containing the PEM encoding of
|
||||
the client's certificate chain. */
|
||||
const char* cert_chain;
|
||||
} grpc_ssl_pem_key_cert_pair;
|
||||
|
||||
/** Deprecated in favor of grpc_ssl_verify_peer_options. It will be removed
|
||||
after all of its call sites are migrated to grpc_ssl_verify_peer_options.
|
||||
Object that holds additional peer-verification options on a secure
|
||||
channel. */
|
||||
typedef struct {
|
||||
/** If non-NULL this callback will be invoked with the expected
|
||||
target_name, the peer's certificate (in PEM format), and whatever
|
||||
userdata pointer is set below. If a non-zero value is returned by this
|
||||
callback then it is treated as a verification failure. Invocation of
|
||||
the callback is blocking, so any implementation should be light-weight.
|
||||
*/
|
||||
int (*verify_peer_callback)(const char* target_name, const char* peer_pem,
|
||||
void* userdata);
|
||||
/** Arbitrary userdata that will be passed as the last argument to
|
||||
verify_peer_callback. */
|
||||
void* verify_peer_callback_userdata;
|
||||
/** A destruct callback that will be invoked when the channel is being
|
||||
cleaned up. The userdata argument will be passed to it. The intent is
|
||||
to perform any cleanup associated with that userdata. */
|
||||
void (*verify_peer_destruct)(void* userdata);
|
||||
} verify_peer_options;
|
||||
|
||||
/** Object that holds additional peer-verification options on a secure
|
||||
channel. */
|
||||
typedef struct {
|
||||
/** If non-NULL this callback will be invoked with the expected
|
||||
target_name, the peer's certificate (in PEM format), and whatever
|
||||
userdata pointer is set below. If a non-zero value is returned by this
|
||||
callback then it is treated as a verification failure. Invocation of
|
||||
the callback is blocking, so any implementation should be light-weight.
|
||||
*/
|
||||
int (*verify_peer_callback)(const char* target_name, const char* peer_pem,
|
||||
void* userdata);
|
||||
/** Arbitrary userdata that will be passed as the last argument to
|
||||
verify_peer_callback. */
|
||||
void* verify_peer_callback_userdata;
|
||||
/** A destruct callback that will be invoked when the channel is being
|
||||
cleaned up. The userdata argument will be passed to it. The intent is
|
||||
to perform any cleanup associated with that userdata. */
|
||||
void (*verify_peer_destruct)(void* userdata);
|
||||
} grpc_ssl_verify_peer_options;
|
||||
|
||||
/** Deprecated in favor of grpc_ssl_server_credentials_create_ex. It will be
|
||||
removed after all of its call sites are migrated to
|
||||
grpc_ssl_server_credentials_create_ex. Creates an SSL credentials object.
|
||||
- pem_root_certs is the NULL-terminated string containing the PEM encoding
|
||||
of the server root certificates. If this parameter is NULL, the
|
||||
implementation will first try to dereference the file pointed by the
|
||||
GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment variable, and if that fails,
|
||||
try to get the roots set by grpc_override_ssl_default_roots. Eventually,
|
||||
if all these fail, it will try to get the roots from a well-known place on
|
||||
disk (in the grpc install directory).
|
||||
|
||||
gRPC has implemented root cache if the underlying OpenSSL library supports
|
||||
it. The gRPC root certificates cache is only applicable on the default
|
||||
root certificates, which is used when this parameter is nullptr. If user
|
||||
provides their own pem_root_certs, when creating an SSL credential object,
|
||||
gRPC would not be able to cache it, and each subchannel will generate a
|
||||
copy of the root store. So it is recommended to avoid providing large room
|
||||
pem with pem_root_certs parameter to avoid excessive memory consumption,
|
||||
particularly on mobile platforms such as iOS.
|
||||
- pem_key_cert_pair is a pointer on the object containing client's private
|
||||
key and certificate chain. This parameter can be NULL if the client does
|
||||
not have such a key/cert pair.
|
||||
- verify_options is an optional verify_peer_options object which holds
|
||||
additional options controlling how peer certificates are verified. For
|
||||
example, you can supply a callback which receives the peer's certificate
|
||||
with which you can do additional verification. Can be NULL, in which
|
||||
case verification will retain default behavior. Any settings in
|
||||
verify_options are copied during this call, so the verify_options
|
||||
object can be released afterwards. */
|
||||
GRPCAPI grpc_channel_credentials* grpc_ssl_credentials_create(
|
||||
const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair,
|
||||
const verify_peer_options* verify_options, void* reserved);
|
||||
|
||||
/* Creates an SSL credentials object.
|
||||
- pem_root_certs is the NULL-terminated string containing the PEM encoding
|
||||
of the server root certificates. If this parameter is NULL, the
|
||||
implementation will first try to dereference the file pointed by the
|
||||
GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment variable, and if that fails,
|
||||
try to get the roots set by grpc_override_ssl_default_roots. Eventually,
|
||||
if all these fail, it will try to get the roots from a well-known place on
|
||||
disk (in the grpc install directory).
|
||||
|
||||
gRPC has implemented root cache if the underlying OpenSSL library supports
|
||||
it. The gRPC root certificates cache is only applicable on the default
|
||||
root certificates, which is used when this parameter is nullptr. If user
|
||||
provides their own pem_root_certs, when creating an SSL credential object,
|
||||
gRPC would not be able to cache it, and each subchannel will generate a
|
||||
copy of the root store. So it is recommended to avoid providing large room
|
||||
pem with pem_root_certs parameter to avoid excessive memory consumption,
|
||||
particularly on mobile platforms such as iOS.
|
||||
- pem_key_cert_pair is a pointer on the object containing client's private
|
||||
key and certificate chain. This parameter can be NULL if the client does
|
||||
not have such a key/cert pair.
|
||||
- verify_options is an optional verify_peer_options object which holds
|
||||
additional options controlling how peer certificates are verified. For
|
||||
example, you can supply a callback which receives the peer's certificate
|
||||
with which you can do additional verification. Can be NULL, in which
|
||||
case verification will retain default behavior. Any settings in
|
||||
verify_options are copied during this call, so the verify_options
|
||||
object can be released afterwards. */
|
||||
GRPCAPI grpc_channel_credentials* grpc_ssl_credentials_create_ex(
|
||||
const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pair,
|
||||
const grpc_ssl_verify_peer_options* verify_options, void* reserved);
|
||||
|
||||
/** --- grpc_call_credentials object.
|
||||
|
||||
A call credentials object represents a way to authenticate on a particular
|
||||
call. These credentials can be composed with a channel credentials object
|
||||
so that they are sent with every call on this channel. */
|
||||
|
||||
typedef struct grpc_call_credentials grpc_call_credentials;
|
||||
|
||||
/** Releases a call credentials object.
|
||||
The creator of the credentials object is responsible for its release. */
|
||||
GRPCAPI void grpc_call_credentials_release(grpc_call_credentials* creds);
|
||||
|
||||
/** Creates a composite channel credentials object. */
|
||||
GRPCAPI grpc_channel_credentials* grpc_composite_channel_credentials_create(
|
||||
grpc_channel_credentials* channel_creds, grpc_call_credentials* call_creds,
|
||||
void* reserved);
|
||||
|
||||
/** Creates a composite call credentials object. */
|
||||
GRPCAPI grpc_call_credentials* grpc_composite_call_credentials_create(
|
||||
grpc_call_credentials* creds1, grpc_call_credentials* creds2,
|
||||
void* reserved);
|
||||
|
||||
/** Creates a compute engine credentials object for connecting to Google.
|
||||
WARNING: Do NOT use this credentials to connect to a non-google service as
|
||||
this could result in an oauth2 token leak. */
|
||||
GRPCAPI grpc_call_credentials* grpc_google_compute_engine_credentials_create(
|
||||
void* reserved);
|
||||
|
||||
GRPCAPI gpr_timespec grpc_max_auth_token_lifetime(void);
|
||||
|
||||
/** Creates a JWT credentials object. May return NULL if the input is invalid.
|
||||
- json_key is the JSON key string containing the client's private key.
|
||||
- token_lifetime is the lifetime of each Json Web Token (JWT) created with
|
||||
this credentials. It should not exceed grpc_max_auth_token_lifetime or
|
||||
will be cropped to this value. */
|
||||
GRPCAPI grpc_call_credentials*
|
||||
grpc_service_account_jwt_access_credentials_create(const char* json_key,
|
||||
gpr_timespec token_lifetime,
|
||||
void* reserved);
|
||||
|
||||
/** Creates an Oauth2 Refresh Token credentials object for connecting to Google.
|
||||
May return NULL if the input is invalid.
|
||||
WARNING: Do NOT use this credentials to connect to a non-google service as
|
||||
this could result in an oauth2 token leak.
|
||||
- json_refresh_token is the JSON string containing the refresh token itself
|
||||
along with a client_id and client_secret. */
|
||||
GRPCAPI grpc_call_credentials* grpc_google_refresh_token_credentials_create(
|
||||
const char* json_refresh_token, void* reserved);
|
||||
|
||||
/** Creates an Oauth2 Access Token credentials with an access token that was
|
||||
acquired by an out of band mechanism. */
|
||||
GRPCAPI grpc_call_credentials* grpc_access_token_credentials_create(
|
||||
const char* access_token, void* reserved);
|
||||
|
||||
/** Creates an IAM credentials object for connecting to Google. */
|
||||
GRPCAPI grpc_call_credentials* grpc_google_iam_credentials_create(
|
||||
const char* authorization_token, const char* authority_selector,
|
||||
void* reserved);
|
||||
|
||||
/** Options for creating STS Oauth Token Exchange credentials following the IETF
|
||||
draft https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-16.
|
||||
Optional fields may be set to NULL or empty string. It is the responsibility
|
||||
of the caller to ensure that the subject and actor tokens are refreshed on
|
||||
disk at the specified paths. This API is used for experimental purposes for
|
||||
now and may change in the future. */
|
||||
typedef struct {
|
||||
const char* token_exchange_service_uri; /* Required. */
|
||||
const char* resource; /* Optional. */
|
||||
const char* audience; /* Optional. */
|
||||
const char* scope; /* Optional. */
|
||||
const char* requested_token_type; /* Optional. */
|
||||
const char* subject_token_path; /* Required. */
|
||||
const char* subject_token_type; /* Required. */
|
||||
const char* actor_token_path; /* Optional. */
|
||||
const char* actor_token_type; /* Optional. */
|
||||
} grpc_sts_credentials_options;
|
||||
|
||||
/** Creates an STS credentials following the STS Token Exchanged specifed in the
|
||||
IETF draft https://tools.ietf.org/html/draft-ietf-oauth-token-exchange-16.
|
||||
This API is used for experimental purposes for now and may change in the
|
||||
future. */
|
||||
GRPCAPI grpc_call_credentials* grpc_sts_credentials_create(
|
||||
const grpc_sts_credentials_options* options, void* reserved);
|
||||
|
||||
/** Callback function to be called by the metadata credentials plugin
|
||||
implementation when the metadata is ready.
|
||||
- user_data is the opaque pointer that was passed in the get_metadata method
|
||||
of the grpc_metadata_credentials_plugin (see below).
|
||||
- creds_md is an array of credentials metadata produced by the plugin. It
|
||||
may be set to NULL in case of an error.
|
||||
- num_creds_md is the number of items in the creds_md array.
|
||||
- status must be GRPC_STATUS_OK in case of success or another specific error
|
||||
code otherwise.
|
||||
- error_details contains details about the error if any. In case of success
|
||||
it should be NULL and will be otherwise ignored. */
|
||||
typedef void (*grpc_credentials_plugin_metadata_cb)(
|
||||
void* user_data, const grpc_metadata* creds_md, size_t num_creds_md,
|
||||
grpc_status_code status, const char* error_details);
|
||||
|
||||
/** Context that can be used by metadata credentials plugin in order to create
|
||||
auth related metadata. */
|
||||
typedef struct {
|
||||
/** The fully qualifed service url. */
|
||||
const char* service_url;
|
||||
|
||||
/** The method name of the RPC being called (not fully qualified).
|
||||
The fully qualified method name can be built from the service_url:
|
||||
full_qualified_method_name = ctx->service_url + '/' + ctx->method_name. */
|
||||
const char* method_name;
|
||||
|
||||
/** The auth_context of the channel which gives the server's identity. */
|
||||
const grpc_auth_context* channel_auth_context;
|
||||
|
||||
/** Reserved for future use. */
|
||||
void* reserved;
|
||||
} grpc_auth_metadata_context;
|
||||
|
||||
/** Maximum number of metadata entries returnable by a credentials plugin via
|
||||
a synchronous return. */
|
||||
#define GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX 4
|
||||
|
||||
/** grpc_metadata_credentials plugin is an API user provided structure used to
|
||||
create grpc_credentials objects that can be set on a channel (composed) or
|
||||
a call. See grpc_credentials_metadata_create_from_plugin below.
|
||||
The grpc client stack will call the get_metadata method of the plugin for
|
||||
every call in scope for the credentials created from it. */
|
||||
typedef struct {
|
||||
/** The implementation of this method has to be non-blocking, but can
|
||||
be performed synchronously or asynchronously.
|
||||
|
||||
If processing occurs synchronously, returns non-zero and populates
|
||||
creds_md, num_creds_md, status, and error_details. In this case,
|
||||
the caller takes ownership of the entries in creds_md and of
|
||||
error_details. Note that if the plugin needs to return more than
|
||||
GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX entries in creds_md, it must
|
||||
return asynchronously.
|
||||
|
||||
If processing occurs asynchronously, returns zero and invokes \a cb
|
||||
when processing is completed. \a user_data will be passed as the
|
||||
first parameter of the callback. NOTE: \a cb MUST be invoked in a
|
||||
different thread, not from the thread in which \a get_metadata() is
|
||||
invoked.
|
||||
|
||||
\a context is the information that can be used by the plugin to create
|
||||
auth metadata. */
|
||||
int (*get_metadata)(
|
||||
void* state, grpc_auth_metadata_context context,
|
||||
grpc_credentials_plugin_metadata_cb cb, void* user_data,
|
||||
grpc_metadata creds_md[GRPC_METADATA_CREDENTIALS_PLUGIN_SYNC_MAX],
|
||||
size_t* num_creds_md, grpc_status_code* status,
|
||||
const char** error_details);
|
||||
|
||||
/** Destroys the plugin state. */
|
||||
void (*destroy)(void* state);
|
||||
|
||||
/** State that will be set as the first parameter of the methods above. */
|
||||
void* state;
|
||||
|
||||
/** Type of credentials that this plugin is implementing. */
|
||||
const char* type;
|
||||
} grpc_metadata_credentials_plugin;
|
||||
|
||||
/** Creates a credentials object from a plugin. */
|
||||
GRPCAPI grpc_call_credentials* grpc_metadata_credentials_create_from_plugin(
|
||||
grpc_metadata_credentials_plugin plugin, void* reserved);
|
||||
|
||||
/** --- Secure channel creation. --- */
|
||||
|
||||
/** Creates a secure channel using the passed-in credentials. Additional
|
||||
channel level configuration MAY be provided by grpc_channel_args, though
|
||||
the expectation is that most clients will want to simply pass NULL. The
|
||||
user data in 'args' need only live through the invocation of this function.
|
||||
However, if any args of the 'pointer' type are passed, then the referenced
|
||||
vtable must be maintained by the caller until grpc_channel_destroy
|
||||
terminates. See grpc_channel_args definition for more on this. */
|
||||
GRPCAPI grpc_channel* grpc_secure_channel_create(
|
||||
grpc_channel_credentials* creds, const char* target,
|
||||
const grpc_channel_args* args, void* reserved);
|
||||
|
||||
/** --- grpc_server_credentials object. ---
|
||||
|
||||
A server credentials object represents a way to authenticate a server. */
|
||||
|
||||
typedef struct grpc_server_credentials grpc_server_credentials;
|
||||
|
||||
/** Releases a server_credentials object.
|
||||
The creator of the server_credentials object is responsible for its release.
|
||||
*/
|
||||
GRPCAPI void grpc_server_credentials_release(grpc_server_credentials* creds);
|
||||
|
||||
/** Server certificate config object holds the server's public certificates and
|
||||
associated private keys, as well as any CA certificates needed for client
|
||||
certificate validation (if applicable). Create using
|
||||
grpc_ssl_server_certificate_config_create(). */
|
||||
typedef struct grpc_ssl_server_certificate_config
|
||||
grpc_ssl_server_certificate_config;
|
||||
|
||||
/** Creates a grpc_ssl_server_certificate_config object.
|
||||
- pem_roots_cert is the NULL-terminated string containing the PEM encoding of
|
||||
the client root certificates. This parameter may be NULL if the server does
|
||||
not want the client to be authenticated with SSL.
|
||||
- pem_key_cert_pairs is an array private key / certificate chains of the
|
||||
server. This parameter cannot be NULL.
|
||||
- num_key_cert_pairs indicates the number of items in the private_key_files
|
||||
and cert_chain_files parameters. It must be at least 1.
|
||||
- It is the caller's responsibility to free this object via
|
||||
grpc_ssl_server_certificate_config_destroy(). */
|
||||
GRPCAPI grpc_ssl_server_certificate_config*
|
||||
grpc_ssl_server_certificate_config_create(
|
||||
const char* pem_root_certs,
|
||||
const grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs,
|
||||
size_t num_key_cert_pairs);
|
||||
|
||||
/** Destroys a grpc_ssl_server_certificate_config object. */
|
||||
GRPCAPI void grpc_ssl_server_certificate_config_destroy(
|
||||
grpc_ssl_server_certificate_config* config);
|
||||
|
||||
/** Callback to retrieve updated SSL server certificates, private keys, and
|
||||
trusted CAs (for client authentication).
|
||||
- user_data parameter, if not NULL, contains opaque data to be used by the
|
||||
callback.
|
||||
- Use grpc_ssl_server_certificate_config_create to create the config.
|
||||
- The caller assumes ownership of the config. */
|
||||
typedef grpc_ssl_certificate_config_reload_status (
|
||||
*grpc_ssl_server_certificate_config_callback)(
|
||||
void* user_data, grpc_ssl_server_certificate_config** config);
|
||||
|
||||
/** Deprecated in favor of grpc_ssl_server_credentials_create_ex.
|
||||
Creates an SSL server_credentials object.
|
||||
- pem_roots_cert is the NULL-terminated string containing the PEM encoding of
|
||||
the client root certificates. This parameter may be NULL if the server does
|
||||
not want the client to be authenticated with SSL.
|
||||
- pem_key_cert_pairs is an array private key / certificate chains of the
|
||||
server. This parameter cannot be NULL.
|
||||
- num_key_cert_pairs indicates the number of items in the private_key_files
|
||||
and cert_chain_files parameters. It should be at least 1.
|
||||
- force_client_auth, if set to non-zero will force the client to authenticate
|
||||
with an SSL cert. Note that this option is ignored if pem_root_certs is
|
||||
NULL. */
|
||||
GRPCAPI grpc_server_credentials* grpc_ssl_server_credentials_create(
|
||||
const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs,
|
||||
size_t num_key_cert_pairs, int force_client_auth, void* reserved);
|
||||
|
||||
/** Deprecated in favor of grpc_ssl_server_credentials_create_with_options.
|
||||
Same as grpc_ssl_server_credentials_create method except uses
|
||||
grpc_ssl_client_certificate_request_type enum to support more ways to
|
||||
authenticate client certificates.*/
|
||||
GRPCAPI grpc_server_credentials* grpc_ssl_server_credentials_create_ex(
|
||||
const char* pem_root_certs, grpc_ssl_pem_key_cert_pair* pem_key_cert_pairs,
|
||||
size_t num_key_cert_pairs,
|
||||
grpc_ssl_client_certificate_request_type client_certificate_request,
|
||||
void* reserved);
|
||||
|
||||
typedef struct grpc_ssl_server_credentials_options
|
||||
grpc_ssl_server_credentials_options;
|
||||
|
||||
/** Creates an options object using a certificate config. Use this method when
|
||||
the certificates and keys of the SSL server will not change during the
|
||||
server's lifetime.
|
||||
- Takes ownership of the certificate_config parameter. */
|
||||
GRPCAPI grpc_ssl_server_credentials_options*
|
||||
grpc_ssl_server_credentials_create_options_using_config(
|
||||
grpc_ssl_client_certificate_request_type client_certificate_request,
|
||||
grpc_ssl_server_certificate_config* certificate_config);
|
||||
|
||||
/** Creates an options object using a certificate config fetcher. Use this
|
||||
method to reload the certificates and keys of the SSL server without
|
||||
interrupting the operation of the server. Initial certificate config will be
|
||||
fetched during server initialization.
|
||||
- user_data parameter, if not NULL, contains opaque data which will be passed
|
||||
to the fetcher (see definition of
|
||||
grpc_ssl_server_certificate_config_callback). */
|
||||
GRPCAPI grpc_ssl_server_credentials_options*
|
||||
grpc_ssl_server_credentials_create_options_using_config_fetcher(
|
||||
grpc_ssl_client_certificate_request_type client_certificate_request,
|
||||
grpc_ssl_server_certificate_config_callback cb, void* user_data);
|
||||
|
||||
/** Destroys a grpc_ssl_server_credentials_options object. */
|
||||
GRPCAPI void grpc_ssl_server_credentials_options_destroy(
|
||||
grpc_ssl_server_credentials_options* options);
|
||||
|
||||
/** Creates an SSL server_credentials object using the provided options struct.
|
||||
- Takes ownership of the options parameter. */
|
||||
GRPCAPI grpc_server_credentials*
|
||||
grpc_ssl_server_credentials_create_with_options(
|
||||
grpc_ssl_server_credentials_options* options);
|
||||
|
||||
/** --- Server-side secure ports. --- */
|
||||
|
||||
/** Add a HTTP2 over an encrypted link over tcp listener.
|
||||
Returns bound port number on success, 0 on failure.
|
||||
REQUIRES: server not started */
|
||||
GRPCAPI int grpc_server_add_secure_http2_port(grpc_server* server,
|
||||
const char* addr,
|
||||
grpc_server_credentials* creds);
|
||||
|
||||
/** --- Call specific credentials. --- */
|
||||
|
||||
/** Sets a credentials to a call. Can only be called on the client side before
|
||||
grpc_call_start_batch. */
|
||||
GRPCAPI grpc_call_error grpc_call_set_credentials(grpc_call* call,
|
||||
grpc_call_credentials* creds);
|
||||
|
||||
/** --- Auth Metadata Processing --- */
|
||||
|
||||
/** Callback function that is called when the metadata processing is done.
|
||||
- Consumed metadata will be removed from the set of metadata available on the
|
||||
call. consumed_md may be NULL if no metadata has been consumed.
|
||||
- Response metadata will be set on the response. response_md may be NULL.
|
||||
- status is GRPC_STATUS_OK for success or a specific status for an error.
|
||||
Common error status for auth metadata processing is either
|
||||
GRPC_STATUS_UNAUTHENTICATED in case of an authentication failure or
|
||||
GRPC_STATUS PERMISSION_DENIED in case of an authorization failure.
|
||||
- error_details gives details about the error. May be NULL. */
|
||||
typedef void (*grpc_process_auth_metadata_done_cb)(
|
||||
void* user_data, const grpc_metadata* consumed_md, size_t num_consumed_md,
|
||||
const grpc_metadata* response_md, size_t num_response_md,
|
||||
grpc_status_code status, const char* error_details);
|
||||
|
||||
/** Pluggable server-side metadata processor object. */
|
||||
typedef struct {
|
||||
/** The context object is read/write: it contains the properties of the
|
||||
channel peer and it is the job of the process function to augment it with
|
||||
properties derived from the passed-in metadata.
|
||||
The lifetime of these objects is guaranteed until cb is invoked. */
|
||||
void (*process)(void* state, grpc_auth_context* context,
|
||||
const grpc_metadata* md, size_t num_md,
|
||||
grpc_process_auth_metadata_done_cb cb, void* user_data);
|
||||
void (*destroy)(void* state);
|
||||
void* state;
|
||||
} grpc_auth_metadata_processor;
|
||||
|
||||
GRPCAPI void grpc_server_credentials_set_auth_metadata_processor(
|
||||
grpc_server_credentials* creds, grpc_auth_metadata_processor processor);
|
||||
|
||||
/** --- ALTS channel/server credentials --- **/
|
||||
|
||||
/**
|
||||
* Main interface for ALTS credentials options. The options will contain
|
||||
* information that will be passed from grpc to TSI layer such as RPC protocol
|
||||
* versions. ALTS client (channel) and server credentials will have their own
|
||||
* implementation of this interface. The APIs listed in this header are
|
||||
* thread-compatible. It is used for experimental purpose for now and subject
|
||||
* to change.
|
||||
*/
|
||||
typedef struct grpc_alts_credentials_options grpc_alts_credentials_options;
|
||||
|
||||
/**
|
||||
* This method creates a grpc ALTS credentials client options instance.
|
||||
* It is used for experimental purpose for now and subject to change.
|
||||
*/
|
||||
GRPCAPI grpc_alts_credentials_options*
|
||||
grpc_alts_credentials_client_options_create(void);
|
||||
|
||||
/**
|
||||
* This method creates a grpc ALTS credentials server options instance.
|
||||
* It is used for experimental purpose for now and subject to change.
|
||||
*/
|
||||
GRPCAPI grpc_alts_credentials_options*
|
||||
grpc_alts_credentials_server_options_create(void);
|
||||
|
||||
/**
|
||||
* This method adds a target service account to grpc client's ALTS credentials
|
||||
* options instance. It is used for experimental purpose for now and subject
|
||||
* to change.
|
||||
*
|
||||
* - options: grpc ALTS credentials options instance.
|
||||
* - service_account: service account of target endpoint.
|
||||
*/
|
||||
GRPCAPI void grpc_alts_credentials_client_options_add_target_service_account(
|
||||
grpc_alts_credentials_options* options, const char* service_account);
|
||||
|
||||
/**
|
||||
* This method destroys a grpc_alts_credentials_options instance by
|
||||
* de-allocating all of its occupied memory. It is used for experimental purpose
|
||||
* for now and subject to change.
|
||||
*
|
||||
* - options: a grpc_alts_credentials_options instance that needs to be
|
||||
* destroyed.
|
||||
*/
|
||||
GRPCAPI void grpc_alts_credentials_options_destroy(
|
||||
grpc_alts_credentials_options* options);
|
||||
|
||||
/**
|
||||
* This method creates an ALTS channel credential object. It is used for
|
||||
* experimental purpose for now and subject to change.
|
||||
*
|
||||
* - options: grpc ALTS credentials options instance for client.
|
||||
*
|
||||
* It returns the created ALTS channel credential object.
|
||||
*/
|
||||
GRPCAPI grpc_channel_credentials* grpc_alts_credentials_create(
|
||||
const grpc_alts_credentials_options* options);
|
||||
|
||||
/**
|
||||
* This method creates an ALTS server credential object. It is used for
|
||||
* experimental purpose for now and subject to change.
|
||||
*
|
||||
* - options: grpc ALTS credentials options instance for server.
|
||||
*
|
||||
* It returns the created ALTS server credential object.
|
||||
*/
|
||||
GRPCAPI grpc_server_credentials* grpc_alts_server_credentials_create(
|
||||
const grpc_alts_credentials_options* options);
|
||||
|
||||
/** --- Local channel/server credentials --- **/
|
||||
|
||||
/**
|
||||
* This method creates a local channel credential object. It is used for
|
||||
* experimental purpose for now and subject to change.
|
||||
*
|
||||
* - type: local connection type
|
||||
*
|
||||
* It returns the created local channel credential object.
|
||||
*/
|
||||
GRPCAPI grpc_channel_credentials* grpc_local_credentials_create(
|
||||
grpc_local_connect_type type);
|
||||
|
||||
/**
|
||||
* This method creates a local server credential object. It is used for
|
||||
* experimental purpose for now and subject to change.
|
||||
*
|
||||
* - type: local connection type
|
||||
*
|
||||
* It returns the created local server credential object.
|
||||
*/
|
||||
GRPCAPI grpc_server_credentials* grpc_local_server_credentials_create(
|
||||
grpc_local_connect_type type);
|
||||
|
||||
/** --- SPIFFE and HTTPS-based TLS channel/server credentials ---
|
||||
* It is used for experimental purpose for now and subject to change. */
|
||||
|
||||
/** Config for TLS key materials. It is used for
|
||||
* experimental purpose for now and subject to change. */
|
||||
typedef struct grpc_tls_key_materials_config grpc_tls_key_materials_config;
|
||||
|
||||
/** Config for TLS credential reload. It is used for
|
||||
* experimental purpose for now and subject to change. */
|
||||
typedef struct grpc_tls_credential_reload_config
|
||||
grpc_tls_credential_reload_config;
|
||||
|
||||
/** Config for TLS server authorization check. It is used for
|
||||
* experimental purpose for now and subject to change. */
|
||||
typedef struct grpc_tls_server_authorization_check_config
|
||||
grpc_tls_server_authorization_check_config;
|
||||
|
||||
/** TLS credentials options. It is used for
|
||||
* experimental purpose for now and subject to change. */
|
||||
typedef struct grpc_tls_credentials_options grpc_tls_credentials_options;
|
||||
|
||||
/** Create an empty TLS credentials options. It is used for
|
||||
* experimental purpose for now and subject to change. */
|
||||
GRPCAPI grpc_tls_credentials_options* grpc_tls_credentials_options_create(void);
|
||||
|
||||
/** Set grpc_ssl_client_certificate_request_type field in credentials options
|
||||
with the provided type. options should not be NULL.
|
||||
It returns 1 on success and 0 on failure. It is used for
|
||||
experimental purpose for now and subject to change. */
|
||||
GRPCAPI int grpc_tls_credentials_options_set_cert_request_type(
|
||||
grpc_tls_credentials_options* options,
|
||||
grpc_ssl_client_certificate_request_type type);
|
||||
|
||||
/** Set grpc_tls_key_materials_config field in credentials options
|
||||
with the provided config struct whose ownership is transferred.
|
||||
Both parameters should not be NULL.
|
||||
It returns 1 on success and 0 on failure. It is used for
|
||||
experimental purpose for now and subject to change. */
|
||||
GRPCAPI int grpc_tls_credentials_options_set_key_materials_config(
|
||||
grpc_tls_credentials_options* options,
|
||||
grpc_tls_key_materials_config* config);
|
||||
|
||||
/** Set grpc_tls_credential_reload_config field in credentials options
|
||||
with the provided config struct whose ownership is transferred.
|
||||
Both parameters should not be NULL.
|
||||
It returns 1 on success and 0 on failure. It is used for
|
||||
experimental purpose for now and subject to change. */
|
||||
GRPCAPI int grpc_tls_credentials_options_set_credential_reload_config(
|
||||
grpc_tls_credentials_options* options,
|
||||
grpc_tls_credential_reload_config* config);
|
||||
|
||||
/** Set grpc_tls_server_authorization_check_config field in credentials options
|
||||
with the provided config struct whose ownership is transferred.
|
||||
Both parameters should not be NULL.
|
||||
It returns 1 on success and 0 on failure. It is used for
|
||||
experimental purpose for now and subject to change. */
|
||||
GRPCAPI int grpc_tls_credentials_options_set_server_authorization_check_config(
|
||||
grpc_tls_credentials_options* options,
|
||||
grpc_tls_server_authorization_check_config* config);
|
||||
|
||||
/** --- TLS key materials config. ---
|
||||
It is used for experimental purpose for now and subject to change. */
|
||||
|
||||
/** Create an empty grpc_tls_key_materials_config instance.
|
||||
* It is used for experimental purpose for now and subject to change. */
|
||||
GRPCAPI grpc_tls_key_materials_config* grpc_tls_key_materials_config_create(
|
||||
void);
|
||||
|
||||
/** Set grpc_tls_key_materials_config instance with provided a TLS certificate.
|
||||
config will take the ownership of pem_root_certs and pem_key_cert_pairs.
|
||||
It's valid for the caller to provide nullptr pem_root_certs, in which case
|
||||
the gRPC-provided root cert will be used. pem_key_cert_pairs should not be
|
||||
NULL. It returns 1 on success and 0 on failure. It is used for
|
||||
experimental purpose for now and subject to change.
|
||||
*/
|
||||
GRPCAPI int grpc_tls_key_materials_config_set_key_materials(
|
||||
grpc_tls_key_materials_config* config, const char* pem_root_certs,
|
||||
const grpc_ssl_pem_key_cert_pair** pem_key_cert_pairs,
|
||||
size_t num_key_cert_pairs);
|
||||
|
||||
/** Set grpc_tls_key_materials_config instance with a provided version number,
|
||||
which is used to keep track of the version of key materials.
|
||||
It returns 1 on success and 0 on failure. It is used for
|
||||
experimental purpose for now and subject to change.
|
||||
*/
|
||||
GRPCAPI int grpc_tls_key_materials_config_set_version(
|
||||
grpc_tls_key_materials_config* config, int version);
|
||||
|
||||
/** Get the version number of a grpc_tls_key_materials_config instance.
|
||||
It returns the version number on success and -1 on failure.
|
||||
It is used for experimental purpose for now and subject to change.
|
||||
*/
|
||||
GRPCAPI int grpc_tls_key_materials_config_get_version(
|
||||
grpc_tls_key_materials_config* config);
|
||||
|
||||
/** --- TLS credential reload config. ---
|
||||
It is used for experimental purpose for now and subject to change.*/
|
||||
|
||||
typedef struct grpc_tls_credential_reload_arg grpc_tls_credential_reload_arg;
|
||||
|
||||
/** A callback function provided by gRPC to handle the result of credential
|
||||
reload. It is used when schedule API is implemented asynchronously and
|
||||
serves to bring the control back to grpc C core. It is used for
|
||||
experimental purpose for now and subject to change. */
|
||||
typedef void (*grpc_tls_on_credential_reload_done_cb)(
|
||||
grpc_tls_credential_reload_arg* arg);
|
||||
|
||||
/** A struct containing all information necessary to schedule/cancel
|
||||
a credential reload request. cb and cb_user_data represent a gRPC-provided
|
||||
callback and an argument passed to it. key_materials is an in/output
|
||||
parameter containing currently used/newly reloaded credentials. If
|
||||
credential reload does not result in a new credential, key_materials should
|
||||
not be modified. status and error_details are used to hold information about
|
||||
errors occurred when a credential reload request is scheduled/cancelled. It
|
||||
is used for experimental purpose for now and subject to change. */
|
||||
struct grpc_tls_credential_reload_arg {
|
||||
grpc_tls_on_credential_reload_done_cb cb;
|
||||
void* cb_user_data;
|
||||
grpc_tls_key_materials_config* key_materials_config;
|
||||
grpc_ssl_certificate_config_reload_status status;
|
||||
const char* error_details;
|
||||
};
|
||||
|
||||
/** Create a grpc_tls_credential_reload_config instance.
|
||||
- config_user_data is config-specific, read-only user data
|
||||
that works for all channels created with a credential using the config.
|
||||
- schedule is a pointer to an application-provided callback used to invoke
|
||||
credential reload API. The implementation of this method has to be
|
||||
non-blocking, but can be performed synchronously or asynchronously.
|
||||
1) If processing occurs synchronously, it populates arg->key_materials,
|
||||
arg->status, and arg->error_details and returns zero.
|
||||
2) If processing occurs asynchronously, it returns a non-zero value.
|
||||
The application then invokes arg->cb when processing is completed. Note
|
||||
that arg->cb cannot be invoked before schedule API returns.
|
||||
- cancel is a pointer to an application-provided callback used to cancel
|
||||
a credential reload request scheduled via an asynchronous schedule API.
|
||||
arg is used to pinpoint an exact reloading request to be cancelled.
|
||||
The operation may not have any effect if the request has already been
|
||||
processed.
|
||||
- destruct is a pointer to an application-provided callback used to clean up
|
||||
any data associated with the config.
|
||||
It is used for experimental purpose for now and subject to change.
|
||||
*/
|
||||
GRPCAPI grpc_tls_credential_reload_config*
|
||||
grpc_tls_credential_reload_config_create(
|
||||
const void* config_user_data,
|
||||
int (*schedule)(void* config_user_data,
|
||||
grpc_tls_credential_reload_arg* arg),
|
||||
void (*cancel)(void* config_user_data, grpc_tls_credential_reload_arg* arg),
|
||||
void (*destruct)(void* config_user_data));
|
||||
|
||||
/** --- TLS server authorization check config. ---
|
||||
* It is used for experimental purpose for now and subject to change. */
|
||||
|
||||
typedef struct grpc_tls_server_authorization_check_arg
|
||||
grpc_tls_server_authorization_check_arg;
|
||||
|
||||
/** callback function provided by gRPC used to handle the result of server
|
||||
authorization check. It is used when schedule API is implemented
|
||||
asynchronously, and serves to bring the control back to gRPC C core. It is
|
||||
used for experimental purpose for now and subject to change. */
|
||||
typedef void (*grpc_tls_on_server_authorization_check_done_cb)(
|
||||
grpc_tls_server_authorization_check_arg* arg);
|
||||
|
||||
/** A struct containing all information necessary to schedule/cancel a server
|
||||
authorization check request. cb and cb_user_data represent a gRPC-provided
|
||||
callback and an argument passed to it. success will store the result of
|
||||
server authorization check. That is, if success returns a non-zero value, it
|
||||
means the authorization check passes and if returning zero, it means the
|
||||
check fails. target_name is the name of an endpoint the channel is connecting
|
||||
to and certificate represents a complete certificate chain including both
|
||||
signing and leaf certificates. status and error_details contain information
|
||||
about errors occurred when a server authorization check request is
|
||||
scheduled/cancelled. It is used for experimental purpose for now and subject
|
||||
to change.*/
|
||||
struct grpc_tls_server_authorization_check_arg {
|
||||
grpc_tls_on_server_authorization_check_done_cb cb;
|
||||
void* cb_user_data;
|
||||
int success;
|
||||
const char* target_name;
|
||||
const char* peer_cert;
|
||||
grpc_status_code status;
|
||||
const char* error_details;
|
||||
};
|
||||
|
||||
/** Create a grpc_tls_server_authorization_check_config instance.
|
||||
- config_user_data is config-specific, read-only user data
|
||||
that works for all channels created with a credential using the config.
|
||||
- schedule is a pointer to an application-provided callback used to invoke
|
||||
server authorization check API. The implementation of this method has to
|
||||
be non-blocking, but can be performed synchronously or asynchronously.
|
||||
1)If processing occurs synchronously, it populates arg->result,
|
||||
arg->status, and arg->error_details and returns zero.
|
||||
2) If processing occurs asynchronously, it returns a non-zero value. The
|
||||
application then invokes arg->cb when processing is completed. Note that
|
||||
arg->cb cannot be invoked before schedule API returns.
|
||||
- cancel is a pointer to an application-provided callback used to cancel a
|
||||
server authorization check request scheduled via an asynchronous schedule
|
||||
API. arg is used to pinpoint an exact check request to be cancelled. The
|
||||
operation may not have any effect if the request has already been
|
||||
processed.
|
||||
- destruct is a pointer to an application-provided callback used to clean up
|
||||
any data associated with the config.
|
||||
It is used for experimental purpose for now and subject to change.
|
||||
*/
|
||||
GRPCAPI grpc_tls_server_authorization_check_config*
|
||||
grpc_tls_server_authorization_check_config_create(
|
||||
const void* config_user_data,
|
||||
int (*schedule)(void* config_user_data,
|
||||
grpc_tls_server_authorization_check_arg* arg),
|
||||
void (*cancel)(void* config_user_data,
|
||||
grpc_tls_server_authorization_check_arg* arg),
|
||||
void (*destruct)(void* config_user_data));
|
||||
|
||||
/** --- SPIFFE channel/server credentials --- **/
|
||||
|
||||
/**
|
||||
* This method creates a TLS SPIFFE channel credential object.
|
||||
* It takes ownership of the options parameter.
|
||||
*
|
||||
* - options: grpc TLS credentials options instance.
|
||||
*
|
||||
* It returns the created credential object.
|
||||
*
|
||||
* It is used for experimental purpose for now and subject
|
||||
* to change.
|
||||
*/
|
||||
|
||||
grpc_channel_credentials* grpc_tls_spiffe_credentials_create(
|
||||
grpc_tls_credentials_options* options);
|
||||
|
||||
/**
|
||||
* This method creates a TLS server credential object.
|
||||
* It takes ownership of the options parameter.
|
||||
*
|
||||
* - options: grpc TLS credentials options instance.
|
||||
*
|
||||
* It returns the created credential object.
|
||||
*
|
||||
* It is used for experimental purpose for now and subject
|
||||
* to change.
|
||||
*/
|
||||
grpc_server_credentials* grpc_tls_spiffe_server_credentials_create(
|
||||
grpc_tls_credentials_options* options);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_GRPC_SECURITY_H */
|
118
node_modules/grpc/deps/grpc/include/grpc/grpc_security_constants.h
generated
vendored
Normal file
118
node_modules/grpc/deps/grpc/include/grpc/grpc_security_constants.h
generated
vendored
Normal file
@ -0,0 +1,118 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_GRPC_SECURITY_CONSTANTS_H
|
||||
#define GRPC_GRPC_SECURITY_CONSTANTS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME "transport_security_type"
|
||||
#define GRPC_SSL_TRANSPORT_SECURITY_TYPE "ssl"
|
||||
|
||||
#define GRPC_X509_CN_PROPERTY_NAME "x509_common_name"
|
||||
#define GRPC_X509_SAN_PROPERTY_NAME "x509_subject_alternative_name"
|
||||
#define GRPC_X509_PEM_CERT_PROPERTY_NAME "x509_pem_cert"
|
||||
#define GRPC_SSL_SESSION_REUSED_PROPERTY "ssl_session_reused"
|
||||
|
||||
/** Environment variable that points to the default SSL roots file. This file
|
||||
must be a PEM encoded file with all the roots such as the one that can be
|
||||
downloaded from https://pki.google.com/roots.pem. */
|
||||
#define GRPC_DEFAULT_SSL_ROOTS_FILE_PATH_ENV_VAR \
|
||||
"GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"
|
||||
|
||||
/** Environment variable that points to the google default application
|
||||
credentials json key or refresh token. Used in the
|
||||
grpc_google_default_credentials_create function. */
|
||||
#define GRPC_GOOGLE_CREDENTIALS_ENV_VAR "GOOGLE_APPLICATION_CREDENTIALS"
|
||||
|
||||
/** Results for the SSL roots override callback. */
|
||||
typedef enum {
|
||||
GRPC_SSL_ROOTS_OVERRIDE_OK,
|
||||
GRPC_SSL_ROOTS_OVERRIDE_FAIL_PERMANENTLY, /** Do not try fallback options. */
|
||||
GRPC_SSL_ROOTS_OVERRIDE_FAIL
|
||||
} grpc_ssl_roots_override_result;
|
||||
|
||||
/** Callback results for dynamically loading a SSL certificate config. */
|
||||
typedef enum {
|
||||
GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED,
|
||||
GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW,
|
||||
GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL
|
||||
} grpc_ssl_certificate_config_reload_status;
|
||||
|
||||
typedef enum {
|
||||
/** Server does not request client certificate.
|
||||
The certificate presented by the client is not checked by the server at
|
||||
all. (A client may present a self signed or signed certificate or not
|
||||
present a certificate at all and any of those option would be accepted) */
|
||||
GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE,
|
||||
/** Server requests client certificate but does not enforce that the client
|
||||
presents a certificate.
|
||||
|
||||
If the client presents a certificate, the client authentication is left to
|
||||
the application (the necessary metadata will be available to the
|
||||
application via authentication context properties, see grpc_auth_context).
|
||||
|
||||
The client's key certificate pair must be valid for the SSL connection to
|
||||
be established. */
|
||||
GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY,
|
||||
/** Server requests client certificate but does not enforce that the client
|
||||
presents a certificate.
|
||||
|
||||
If the client presents a certificate, the client authentication is done by
|
||||
the gRPC framework. (For a successful connection the client needs to either
|
||||
present a certificate that can be verified against the root certificate
|
||||
configured by the server or not present a certificate at all)
|
||||
|
||||
The client's key certificate pair must be valid for the SSL connection to
|
||||
be established. */
|
||||
GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY,
|
||||
/** Server requests client certificate and enforces that the client presents a
|
||||
certificate.
|
||||
|
||||
If the client presents a certificate, the client authentication is left to
|
||||
the application (the necessary metadata will be available to the
|
||||
application via authentication context properties, see grpc_auth_context).
|
||||
|
||||
The client's key certificate pair must be valid for the SSL connection to
|
||||
be established. */
|
||||
GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY,
|
||||
/** Server requests client certificate and enforces that the client presents a
|
||||
certificate.
|
||||
|
||||
The certificate presented by the client is verified by the gRPC framework.
|
||||
(For a successful connection the client needs to present a certificate that
|
||||
can be verified against the root certificate configured by the server)
|
||||
|
||||
The client's key certificate pair must be valid for the SSL connection to
|
||||
be established. */
|
||||
GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
|
||||
} grpc_ssl_client_certificate_request_type;
|
||||
|
||||
/**
|
||||
* Type of local connections for which local channel/server credentials will be
|
||||
* applied. It supports UDS and local TCP connections.
|
||||
*/
|
||||
typedef enum { UDS = 0, LOCAL_TCP } grpc_local_connect_type;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_GRPC_SECURITY_CONSTANTS_H */
|
95
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/atm.h
generated
vendored
Normal file
95
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/atm.h
generated
vendored
Normal file
@ -0,0 +1,95 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_ATM_H
|
||||
#define GRPC_IMPL_CODEGEN_ATM_H
|
||||
|
||||
/** This interface provides atomic operations and barriers.
|
||||
It is internal to gpr support code and should not be used outside it.
|
||||
|
||||
If an operation with acquire semantics precedes another memory access by the
|
||||
same thread, the operation will precede that other access as seen by other
|
||||
threads.
|
||||
|
||||
If an operation with release semantics follows another memory access by the
|
||||
same thread, the operation will follow that other access as seen by other
|
||||
threads.
|
||||
|
||||
Routines with "acq" or "full" in the name have acquire semantics. Routines
|
||||
with "rel" or "full" in the name have release semantics. Routines with
|
||||
"no_barrier" in the name have neither acquire not release semantics.
|
||||
|
||||
The routines may be implemented as macros.
|
||||
|
||||
// Atomic operations act on an intergral_type gpr_atm that is guaranteed to
|
||||
// be the same size as a pointer.
|
||||
typedef intptr_t gpr_atm;
|
||||
|
||||
// A memory barrier, providing both acquire and release semantics, but not
|
||||
// otherwise acting on memory.
|
||||
void gpr_atm_full_barrier(void);
|
||||
|
||||
// Atomically return *p, with acquire semantics.
|
||||
gpr_atm gpr_atm_acq_load(gpr_atm *p);
|
||||
gpr_atm gpr_atm_no_barrier_load(gpr_atm *p);
|
||||
|
||||
// Atomically set *p = value, with release semantics.
|
||||
void gpr_atm_rel_store(gpr_atm *p, gpr_atm value);
|
||||
|
||||
// Atomically add delta to *p, and return the old value of *p, with
|
||||
// the barriers specified.
|
||||
gpr_atm gpr_atm_no_barrier_fetch_add(gpr_atm *p, gpr_atm delta);
|
||||
gpr_atm gpr_atm_full_fetch_add(gpr_atm *p, gpr_atm delta);
|
||||
|
||||
// Atomically, if *p==o, set *p=n and return non-zero otherwise return 0,
|
||||
// with the barriers specified if the operation succeeds.
|
||||
int gpr_atm_no_barrier_cas(gpr_atm *p, gpr_atm o, gpr_atm n);
|
||||
int gpr_atm_acq_cas(gpr_atm *p, gpr_atm o, gpr_atm n);
|
||||
int gpr_atm_rel_cas(gpr_atm *p, gpr_atm o, gpr_atm n);
|
||||
int gpr_atm_full_cas(gpr_atm *p, gpr_atm o, gpr_atm n);
|
||||
|
||||
// Atomically, set *p=n and return the old value of *p
|
||||
gpr_atm gpr_atm_full_xchg(gpr_atm *p, gpr_atm n);
|
||||
*/
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#if defined(GPR_GCC_ATOMIC)
|
||||
#include <grpc/impl/codegen/atm_gcc_atomic.h>
|
||||
#elif defined(GPR_GCC_SYNC)
|
||||
#include <grpc/impl/codegen/atm_gcc_sync.h>
|
||||
#elif defined(GPR_WINDOWS_ATOMIC)
|
||||
#include <grpc/impl/codegen/atm_windows.h>
|
||||
#else
|
||||
#error could not determine platform for atm
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Adds \a delta to \a *value, clamping the result to the range specified
|
||||
by \a min and \a max. Returns the new value. */
|
||||
gpr_atm gpr_atm_no_barrier_clamped_add(gpr_atm* value, gpr_atm delta,
|
||||
gpr_atm min, gpr_atm max);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_ATM_H */
|
91
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/atm_gcc_atomic.h
generated
vendored
Normal file
91
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/atm_gcc_atomic.h
generated
vendored
Normal file
@ -0,0 +1,91 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_ATM_GCC_ATOMIC_H
|
||||
#define GRPC_IMPL_CODEGEN_ATM_GCC_ATOMIC_H
|
||||
|
||||
/* atm_platform.h for gcc and gcc-like compilers with the
|
||||
__atomic_* interface. */
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef intptr_t gpr_atm;
|
||||
#define GPR_ATM_MAX INTPTR_MAX
|
||||
#define GPR_ATM_MIN INTPTR_MIN
|
||||
|
||||
#ifdef GPR_LOW_LEVEL_COUNTERS
|
||||
extern gpr_atm gpr_counter_atm_cas;
|
||||
extern gpr_atm gpr_counter_atm_add;
|
||||
#define GPR_ATM_INC_COUNTER(counter) \
|
||||
__atomic_fetch_add(&counter, 1, __ATOMIC_RELAXED)
|
||||
#define GPR_ATM_INC_CAS_THEN(blah) \
|
||||
(GPR_ATM_INC_COUNTER(gpr_counter_atm_cas), blah)
|
||||
#define GPR_ATM_INC_ADD_THEN(blah) \
|
||||
(GPR_ATM_INC_COUNTER(gpr_counter_atm_add), blah)
|
||||
#else
|
||||
#define GPR_ATM_INC_CAS_THEN(blah) blah
|
||||
#define GPR_ATM_INC_ADD_THEN(blah) blah
|
||||
#endif
|
||||
|
||||
#define gpr_atm_full_barrier() (__atomic_thread_fence(__ATOMIC_SEQ_CST))
|
||||
|
||||
#define gpr_atm_acq_load(p) (__atomic_load_n((p), __ATOMIC_ACQUIRE))
|
||||
#define gpr_atm_no_barrier_load(p) (__atomic_load_n((p), __ATOMIC_RELAXED))
|
||||
#define gpr_atm_rel_store(p, value) \
|
||||
(__atomic_store_n((p), (intptr_t)(value), __ATOMIC_RELEASE))
|
||||
#define gpr_atm_no_barrier_store(p, value) \
|
||||
(__atomic_store_n((p), (intptr_t)(value), __ATOMIC_RELAXED))
|
||||
|
||||
#define gpr_atm_no_barrier_fetch_add(p, delta) \
|
||||
GPR_ATM_INC_ADD_THEN( \
|
||||
__atomic_fetch_add((p), (intptr_t)(delta), __ATOMIC_RELAXED))
|
||||
#define gpr_atm_full_fetch_add(p, delta) \
|
||||
GPR_ATM_INC_ADD_THEN( \
|
||||
__atomic_fetch_add((p), (intptr_t)(delta), __ATOMIC_ACQ_REL))
|
||||
|
||||
static __inline int gpr_atm_no_barrier_cas(gpr_atm* p, gpr_atm o, gpr_atm n) {
|
||||
return GPR_ATM_INC_CAS_THEN(__atomic_compare_exchange_n(
|
||||
p, &o, n, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED));
|
||||
}
|
||||
|
||||
static __inline int gpr_atm_acq_cas(gpr_atm* p, gpr_atm o, gpr_atm n) {
|
||||
return GPR_ATM_INC_CAS_THEN(__atomic_compare_exchange_n(
|
||||
p, &o, n, 0, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED));
|
||||
}
|
||||
|
||||
static __inline int gpr_atm_rel_cas(gpr_atm* p, gpr_atm o, gpr_atm n) {
|
||||
return GPR_ATM_INC_CAS_THEN(__atomic_compare_exchange_n(
|
||||
p, &o, n, 0, __ATOMIC_RELEASE, __ATOMIC_RELAXED));
|
||||
}
|
||||
|
||||
static __inline int gpr_atm_full_cas(gpr_atm* p, gpr_atm o, gpr_atm n) {
|
||||
return GPR_ATM_INC_CAS_THEN(__atomic_compare_exchange_n(
|
||||
p, &o, n, 0, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED));
|
||||
}
|
||||
|
||||
#define gpr_atm_full_xchg(p, n) \
|
||||
GPR_ATM_INC_CAS_THEN(__atomic_exchange_n((p), (n), __ATOMIC_ACQ_REL))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_ATM_GCC_ATOMIC_H */
|
85
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/atm_gcc_sync.h
generated
vendored
Normal file
85
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/atm_gcc_sync.h
generated
vendored
Normal file
@ -0,0 +1,85 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_ATM_GCC_SYNC_H
|
||||
#define GRPC_IMPL_CODEGEN_ATM_GCC_SYNC_H
|
||||
|
||||
/* variant of atm_platform.h for gcc and gcc-like compiers with __sync_*
|
||||
interface */
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
typedef intptr_t gpr_atm;
|
||||
#define GPR_ATM_MAX INTPTR_MAX
|
||||
#define GPR_ATM_MIN INTPTR_MIN
|
||||
#define GPR_ATM_INC_CAS_THEN(blah) blah
|
||||
#define GPR_ATM_INC_ADD_THEN(blah) blah
|
||||
|
||||
#define GPR_ATM_COMPILE_BARRIER_() __asm__ __volatile__("" : : : "memory")
|
||||
|
||||
#if defined(__i386) || defined(__x86_64__)
|
||||
/* All loads are acquire loads and all stores are release stores. */
|
||||
#define GPR_ATM_LS_BARRIER_() GPR_ATM_COMPILE_BARRIER_()
|
||||
#else
|
||||
#define GPR_ATM_LS_BARRIER_() gpr_atm_full_barrier()
|
||||
#endif
|
||||
|
||||
#define gpr_atm_full_barrier() (__sync_synchronize())
|
||||
|
||||
static __inline gpr_atm gpr_atm_acq_load(const gpr_atm* p) {
|
||||
gpr_atm value = *p;
|
||||
GPR_ATM_LS_BARRIER_();
|
||||
return value;
|
||||
}
|
||||
|
||||
static __inline gpr_atm gpr_atm_no_barrier_load(const gpr_atm* p) {
|
||||
gpr_atm value = *p;
|
||||
GPR_ATM_COMPILE_BARRIER_();
|
||||
return value;
|
||||
}
|
||||
|
||||
static __inline void gpr_atm_rel_store(gpr_atm* p, gpr_atm value) {
|
||||
GPR_ATM_LS_BARRIER_();
|
||||
*p = value;
|
||||
}
|
||||
|
||||
static __inline void gpr_atm_no_barrier_store(gpr_atm* p, gpr_atm value) {
|
||||
GPR_ATM_COMPILE_BARRIER_();
|
||||
*p = value;
|
||||
}
|
||||
|
||||
#undef GPR_ATM_LS_BARRIER_
|
||||
#undef GPR_ATM_COMPILE_BARRIER_
|
||||
|
||||
#define gpr_atm_no_barrier_fetch_add(p, delta) \
|
||||
gpr_atm_full_fetch_add((p), (delta))
|
||||
#define gpr_atm_full_fetch_add(p, delta) (__sync_fetch_and_add((p), (delta)))
|
||||
|
||||
#define gpr_atm_no_barrier_cas(p, o, n) gpr_atm_acq_cas((p), (o), (n))
|
||||
#define gpr_atm_acq_cas(p, o, n) (__sync_bool_compare_and_swap((p), (o), (n)))
|
||||
#define gpr_atm_rel_cas(p, o, n) gpr_atm_acq_cas((p), (o), (n))
|
||||
#define gpr_atm_full_cas(p, o, n) gpr_atm_acq_cas((p), (o), (n))
|
||||
|
||||
static __inline gpr_atm gpr_atm_full_xchg(gpr_atm* p, gpr_atm n) {
|
||||
gpr_atm cur;
|
||||
do {
|
||||
cur = gpr_atm_acq_load(p);
|
||||
} while (!gpr_atm_rel_cas(p, cur, n));
|
||||
return cur;
|
||||
}
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_ATM_GCC_SYNC_H */
|
128
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/atm_windows.h
generated
vendored
Normal file
128
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/atm_windows.h
generated
vendored
Normal file
@ -0,0 +1,128 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_ATM_WINDOWS_H
|
||||
#define GRPC_IMPL_CODEGEN_ATM_WINDOWS_H
|
||||
|
||||
/** Win32 variant of atm_platform.h */
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
typedef intptr_t gpr_atm;
|
||||
#define GPR_ATM_MAX INTPTR_MAX
|
||||
#define GPR_ATM_MIN INTPTR_MIN
|
||||
#define GPR_ATM_INC_CAS_THEN(blah) blah
|
||||
#define GPR_ATM_INC_ADD_THEN(blah) blah
|
||||
|
||||
#define gpr_atm_full_barrier MemoryBarrier
|
||||
|
||||
static __inline gpr_atm gpr_atm_acq_load(const gpr_atm* p) {
|
||||
gpr_atm result = *p;
|
||||
gpr_atm_full_barrier();
|
||||
return result;
|
||||
}
|
||||
|
||||
static __inline gpr_atm gpr_atm_no_barrier_load(const gpr_atm* p) {
|
||||
/* TODO(dklempner): Can we implement something better here? */
|
||||
return gpr_atm_acq_load(p);
|
||||
}
|
||||
|
||||
static __inline void gpr_atm_rel_store(gpr_atm* p, gpr_atm value) {
|
||||
gpr_atm_full_barrier();
|
||||
*p = value;
|
||||
}
|
||||
|
||||
static __inline void gpr_atm_no_barrier_store(gpr_atm* p, gpr_atm value) {
|
||||
/* TODO(ctiller): Can we implement something better here? */
|
||||
gpr_atm_rel_store(p, value);
|
||||
}
|
||||
|
||||
static __inline int gpr_atm_no_barrier_cas(gpr_atm* p, gpr_atm o, gpr_atm n) {
|
||||
/** InterlockedCompareExchangePointerNoFence() not available on vista or
|
||||
windows7 */
|
||||
#ifdef GPR_ARCH_64
|
||||
return o == (gpr_atm)InterlockedCompareExchangeAcquire64(
|
||||
(volatile LONGLONG*)p, (LONGLONG)n, (LONGLONG)o);
|
||||
#else
|
||||
return o == (gpr_atm)InterlockedCompareExchangeAcquire((volatile LONG*)p,
|
||||
(LONG)n, (LONG)o);
|
||||
#endif
|
||||
}
|
||||
|
||||
static __inline int gpr_atm_acq_cas(gpr_atm* p, gpr_atm o, gpr_atm n) {
|
||||
#ifdef GPR_ARCH_64
|
||||
return o == (gpr_atm)InterlockedCompareExchangeAcquire64(
|
||||
(volatile LONGLONG*)p, (LONGLONG)n, (LONGLONG)o);
|
||||
#else
|
||||
return o == (gpr_atm)InterlockedCompareExchangeAcquire((volatile LONG*)p,
|
||||
(LONG)n, (LONG)o);
|
||||
#endif
|
||||
}
|
||||
|
||||
static __inline int gpr_atm_rel_cas(gpr_atm* p, gpr_atm o, gpr_atm n) {
|
||||
#ifdef GPR_ARCH_64
|
||||
return o == (gpr_atm)InterlockedCompareExchangeRelease64(
|
||||
(volatile LONGLONG*)p, (LONGLONG)n, (LONGLONG)o);
|
||||
#else
|
||||
return o == (gpr_atm)InterlockedCompareExchangeRelease((volatile LONG*)p,
|
||||
(LONG)n, (LONG)o);
|
||||
#endif
|
||||
}
|
||||
|
||||
static __inline int gpr_atm_full_cas(gpr_atm* p, gpr_atm o, gpr_atm n) {
|
||||
#ifdef GPR_ARCH_64
|
||||
return o == (gpr_atm)InterlockedCompareExchange64((volatile LONGLONG*)p,
|
||||
(LONGLONG)n, (LONGLONG)o);
|
||||
#else
|
||||
return o == (gpr_atm)InterlockedCompareExchange((volatile LONG*)p, (LONG)n,
|
||||
(LONG)o);
|
||||
#endif
|
||||
}
|
||||
|
||||
static __inline gpr_atm gpr_atm_no_barrier_fetch_add(gpr_atm* p,
|
||||
gpr_atm delta) {
|
||||
/** Use the CAS operation to get pointer-sized fetch and add */
|
||||
gpr_atm old;
|
||||
do {
|
||||
old = *p;
|
||||
} while (!gpr_atm_no_barrier_cas(p, old, old + delta));
|
||||
return old;
|
||||
}
|
||||
|
||||
static __inline gpr_atm gpr_atm_full_fetch_add(gpr_atm* p, gpr_atm delta) {
|
||||
/** Use a CAS operation to get pointer-sized fetch and add */
|
||||
gpr_atm old;
|
||||
#ifdef GPR_ARCH_64
|
||||
do {
|
||||
old = *p;
|
||||
} while (old != (gpr_atm)InterlockedCompareExchange64((volatile LONGLONG*)p,
|
||||
(LONGLONG)old + delta,
|
||||
(LONGLONG)old));
|
||||
#else
|
||||
do {
|
||||
old = *p;
|
||||
} while (old != (gpr_atm)InterlockedCompareExchange(
|
||||
(volatile LONG*)p, (LONG)old + delta, (LONG)old));
|
||||
#endif
|
||||
return old;
|
||||
}
|
||||
|
||||
static __inline gpr_atm gpr_atm_full_xchg(gpr_atm* p, gpr_atm n) {
|
||||
return (gpr_atm)InterlockedExchangePointer((PVOID*)p, (PVOID)n);
|
||||
}
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_ATM_WINDOWS_H */
|
101
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/byte_buffer.h
generated
vendored
Normal file
101
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/byte_buffer.h
generated
vendored
Normal file
@ -0,0 +1,101 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_BYTE_BUFFER_H
|
||||
#define GRPC_IMPL_CODEGEN_BYTE_BUFFER_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/grpc_types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Returns a RAW byte buffer instance over the given slices (up to \a nslices).
|
||||
*
|
||||
* Increases the reference count for all \a slices processed. The user is
|
||||
* responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/
|
||||
GRPCAPI grpc_byte_buffer* grpc_raw_byte_buffer_create(grpc_slice* slices,
|
||||
size_t nslices);
|
||||
|
||||
/** Returns a *compressed* RAW byte buffer instance over the given slices (up to
|
||||
* \a nslices). The \a compression argument defines the compression algorithm
|
||||
* used to generate the data in \a slices.
|
||||
*
|
||||
* Increases the reference count for all \a slices processed. The user is
|
||||
* responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/
|
||||
GRPCAPI grpc_byte_buffer* grpc_raw_compressed_byte_buffer_create(
|
||||
grpc_slice* slices, size_t nslices, grpc_compression_algorithm compression);
|
||||
|
||||
/** Copies input byte buffer \a bb.
|
||||
*
|
||||
* Increases the reference count of all the source slices. The user is
|
||||
* responsible for calling grpc_byte_buffer_destroy over the returned copy. */
|
||||
GRPCAPI grpc_byte_buffer* grpc_byte_buffer_copy(grpc_byte_buffer* bb);
|
||||
|
||||
/** Returns the size of the given byte buffer, in bytes. */
|
||||
GRPCAPI size_t grpc_byte_buffer_length(grpc_byte_buffer* bb);
|
||||
|
||||
/** Destroys \a byte_buffer deallocating all its memory. */
|
||||
GRPCAPI void grpc_byte_buffer_destroy(grpc_byte_buffer* byte_buffer);
|
||||
|
||||
/** Reader for byte buffers. Iterates over slices in the byte buffer */
|
||||
struct grpc_byte_buffer_reader;
|
||||
typedef struct grpc_byte_buffer_reader grpc_byte_buffer_reader;
|
||||
|
||||
/** Initialize \a reader to read over \a buffer.
|
||||
* Returns 1 upon success, 0 otherwise. */
|
||||
GRPCAPI int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader,
|
||||
grpc_byte_buffer* buffer);
|
||||
|
||||
/** Cleanup and destroy \a reader */
|
||||
GRPCAPI void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader* reader);
|
||||
|
||||
/** Updates \a slice with the next piece of data from from \a reader and returns
|
||||
* 1. Returns 0 at the end of the stream. Caller is responsible for calling
|
||||
* grpc_slice_unref on the result. */
|
||||
GRPCAPI int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader* reader,
|
||||
grpc_slice* slice);
|
||||
|
||||
/** EXPERIMENTAL API - This function may be removed and changed, in the future.
|
||||
*
|
||||
* Updates \a slice with the next piece of data from from \a reader and returns
|
||||
* 1. Returns 0 at the end of the stream. Caller is responsible for making sure
|
||||
* the slice pointer remains valid when accessed.
|
||||
*
|
||||
* NOTE: Do not use this function unless the caller can guarantee that the
|
||||
* underlying grpc_byte_buffer outlasts the use of the slice. This is only
|
||||
* safe when the underlying grpc_byte_buffer remains immutable while slice
|
||||
* is being accessed. */
|
||||
GRPCAPI int grpc_byte_buffer_reader_peek(grpc_byte_buffer_reader* reader,
|
||||
grpc_slice** slice);
|
||||
|
||||
/** Merge all data from \a reader into single slice */
|
||||
GRPCAPI grpc_slice
|
||||
grpc_byte_buffer_reader_readall(grpc_byte_buffer_reader* reader);
|
||||
|
||||
/** Returns a RAW byte buffer instance from the output of \a reader. */
|
||||
GRPCAPI grpc_byte_buffer* grpc_raw_byte_buffer_from_reader(
|
||||
grpc_byte_buffer_reader* reader);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_BYTE_BUFFER_H */
|
42
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/byte_buffer_reader.h
generated
vendored
Normal file
42
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/byte_buffer_reader.h
generated
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_BYTE_BUFFER_READER_H
|
||||
#define GRPC_IMPL_CODEGEN_BYTE_BUFFER_READER_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct grpc_byte_buffer;
|
||||
|
||||
struct grpc_byte_buffer_reader {
|
||||
struct grpc_byte_buffer* buffer_in;
|
||||
struct grpc_byte_buffer* buffer_out;
|
||||
/** Different current objects correspond to different types of byte buffers */
|
||||
union grpc_byte_buffer_reader_current {
|
||||
/** Index into a slice buffer's array of slices */
|
||||
unsigned index;
|
||||
} current;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_BYTE_BUFFER_READER_H */
|
108
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/compression_types.h
generated
vendored
Normal file
108
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/compression_types.h
generated
vendored
Normal file
@ -0,0 +1,108 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_COMPRESSION_TYPES_H
|
||||
#define GRPC_IMPL_CODEGEN_COMPRESSION_TYPES_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** To be used as initial metadata key for the request of a concrete compression
|
||||
* algorithm */
|
||||
#define GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY \
|
||||
"grpc-internal-encoding-request"
|
||||
|
||||
/** To be used in channel arguments.
|
||||
*
|
||||
* \addtogroup grpc_arg_keys
|
||||
* \{ */
|
||||
/** Default compression algorithm for the channel.
|
||||
* Its value is an int from the \a grpc_compression_algorithm enum. */
|
||||
#define GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM \
|
||||
"grpc.default_compression_algorithm"
|
||||
/** Default compression level for the channel.
|
||||
* Its value is an int from the \a grpc_compression_level enum. */
|
||||
#define GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL "grpc.default_compression_level"
|
||||
/** Compression algorithms supported by the channel.
|
||||
* Its value is a bitset (an int). Bits correspond to algorithms in \a
|
||||
* grpc_compression_algorithm. For example, its LSB corresponds to
|
||||
* GRPC_COMPRESS_NONE, the next bit to GRPC_COMPRESS_DEFLATE, etc.
|
||||
* Unset bits disable support for the algorithm. By default all algorithms are
|
||||
* supported. It's not possible to disable GRPC_COMPRESS_NONE (the attempt will
|
||||
* be ignored). */
|
||||
#define GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET \
|
||||
"grpc.compression_enabled_algorithms_bitset"
|
||||
/** \} */
|
||||
|
||||
/** The various compression algorithms supported by gRPC (not sorted by
|
||||
* compression level) */
|
||||
typedef enum {
|
||||
GRPC_COMPRESS_NONE = 0,
|
||||
GRPC_COMPRESS_DEFLATE,
|
||||
GRPC_COMPRESS_GZIP,
|
||||
/* EXPERIMENTAL: Stream compression is currently experimental. */
|
||||
GRPC_COMPRESS_STREAM_GZIP,
|
||||
/* TODO(ctiller): snappy */
|
||||
GRPC_COMPRESS_ALGORITHMS_COUNT
|
||||
} grpc_compression_algorithm;
|
||||
|
||||
/** Compression levels allow a party with knowledge of its peer's accepted
|
||||
* encodings to request compression in an abstract way. The level-algorithm
|
||||
* mapping is performed internally and depends on the peer's supported
|
||||
* compression algorithms. */
|
||||
typedef enum {
|
||||
GRPC_COMPRESS_LEVEL_NONE = 0,
|
||||
GRPC_COMPRESS_LEVEL_LOW,
|
||||
GRPC_COMPRESS_LEVEL_MED,
|
||||
GRPC_COMPRESS_LEVEL_HIGH,
|
||||
GRPC_COMPRESS_LEVEL_COUNT
|
||||
} grpc_compression_level;
|
||||
|
||||
typedef struct grpc_compression_options {
|
||||
/** All algs are enabled by default. This option corresponds to the channel
|
||||
* argument key behind \a GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET
|
||||
*/
|
||||
uint32_t enabled_algorithms_bitset;
|
||||
|
||||
/** The default compression level. It'll be used in the absence of call
|
||||
* specific settings. This option corresponds to the channel
|
||||
* argument key behind \a GRPC_COMPRESSION_CHANNEL_DEFAULT_LEVEL. If present,
|
||||
* takes precedence over \a default_algorithm.
|
||||
* TODO(dgq): currently only available for server channels. */
|
||||
struct grpc_compression_options_default_level {
|
||||
int is_set;
|
||||
grpc_compression_level level;
|
||||
} default_level;
|
||||
|
||||
/** The default message compression algorithm. It'll be used in the absence of
|
||||
* call specific settings. This option corresponds to the channel argument key
|
||||
* behind \a GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM. */
|
||||
struct grpc_compression_options_default_algorithm {
|
||||
int is_set;
|
||||
grpc_compression_algorithm algorithm;
|
||||
} default_algorithm;
|
||||
} grpc_compression_options;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_COMPRESSION_TYPES_H */
|
44
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/connectivity_state.h
generated
vendored
Normal file
44
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/connectivity_state.h
generated
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_CONNECTIVITY_STATE_H
|
||||
#define GRPC_IMPL_CODEGEN_CONNECTIVITY_STATE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Connectivity state of a channel. */
|
||||
typedef enum {
|
||||
/** channel is idle */
|
||||
GRPC_CHANNEL_IDLE,
|
||||
/** channel is connecting */
|
||||
GRPC_CHANNEL_CONNECTING,
|
||||
/** channel is ready for work */
|
||||
GRPC_CHANNEL_READY,
|
||||
/** channel has seen a failure but expects to recover */
|
||||
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
||||
/** channel has seen a failure that it cannot recover from */
|
||||
GRPC_CHANNEL_SHUTDOWN
|
||||
} grpc_connectivity_state;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_CONNECTIVITY_STATE_H */
|
48
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/fork.h
generated
vendored
Normal file
48
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/fork.h
generated
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_FORK_H
|
||||
#define GRPC_IMPL_CODEGEN_FORK_H
|
||||
|
||||
/**
|
||||
* gRPC applications should call this before calling fork(). There should be no
|
||||
* active gRPC function calls between calling grpc_prefork() and
|
||||
* grpc_postfork_parent()/grpc_postfork_child().
|
||||
*
|
||||
*
|
||||
* Typical use:
|
||||
* grpc_prefork();
|
||||
* int pid = fork();
|
||||
* if (pid) {
|
||||
* grpc_postfork_parent();
|
||||
* // Parent process..
|
||||
* } else {
|
||||
* grpc_postfork_child();
|
||||
* // Child process...
|
||||
* }
|
||||
*/
|
||||
|
||||
void grpc_prefork(void);
|
||||
|
||||
void grpc_postfork_parent(void);
|
||||
|
||||
void grpc_postfork_child(void);
|
||||
|
||||
void grpc_fork_handlers_auto_register(void);
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_FORK_H */
|
69
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/gpr_slice.h
generated
vendored
Normal file
69
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/gpr_slice.h
generated
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
#ifndef GRPC_IMPL_CODEGEN_GPR_SLICE_H
|
||||
#define GRPC_IMPL_CODEGEN_GPR_SLICE_H
|
||||
|
||||
/** WARNING: Please do not use this header. This was added as a temporary
|
||||
* measure to not break some of the external projects that depend on
|
||||
* gpr_slice_* functions. We are actively working on moving all the
|
||||
* gpr_slice_* references to grpc_slice_* and this file will be removed
|
||||
*/
|
||||
|
||||
/* TODO (sreek) - Allowed by default but will be very soon turned off */
|
||||
#define GRPC_ALLOW_GPR_SLICE_FUNCTIONS 1
|
||||
|
||||
#ifdef GRPC_ALLOW_GPR_SLICE_FUNCTIONS
|
||||
|
||||
#define gpr_slice_refcount grpc_slice_refcount
|
||||
#define gpr_slice grpc_slice
|
||||
#define gpr_slice_buffer grpc_slice_buffer
|
||||
|
||||
#define gpr_slice_ref grpc_slice_ref
|
||||
#define gpr_slice_unref grpc_slice_unref
|
||||
#define gpr_slice_new grpc_slice_new
|
||||
#define gpr_slice_new_with_user_data grpc_slice_new_with_user_data
|
||||
#define gpr_slice_new_with_len grpc_slice_new_with_len
|
||||
#define gpr_slice_malloc grpc_slice_malloc
|
||||
#define gpr_slice_from_copied_string grpc_slice_from_copied_string
|
||||
#define gpr_slice_from_copied_buffer grpc_slice_from_copied_buffer
|
||||
#define gpr_slice_from_static_string grpc_slice_from_static_string
|
||||
#define gpr_slice_sub grpc_slice_sub
|
||||
#define gpr_slice_sub_no_ref grpc_slice_sub_no_ref
|
||||
#define gpr_slice_split_tail grpc_slice_split_tail
|
||||
#define gpr_slice_split_head grpc_slice_split_head
|
||||
#define gpr_slice_cmp grpc_slice_cmp
|
||||
#define gpr_slice_str_cmp grpc_slice_str_cmp
|
||||
|
||||
#define gpr_slice_buffer grpc_slice_buffer
|
||||
#define gpr_slice_buffer_init grpc_slice_buffer_init
|
||||
#define gpr_slice_buffer_destroy grpc_slice_buffer_destroy
|
||||
#define gpr_slice_buffer_add grpc_slice_buffer_add
|
||||
#define gpr_slice_buffer_add_indexed grpc_slice_buffer_add_indexed
|
||||
#define gpr_slice_buffer_addn grpc_slice_buffer_addn
|
||||
#define gpr_slice_buffer_tiny_add grpc_slice_buffer_tiny_add
|
||||
#define gpr_slice_buffer_pop grpc_slice_buffer_pop
|
||||
#define gpr_slice_buffer_reset_and_unref grpc_slice_buffer_reset_and_unref
|
||||
#define gpr_slice_buffer_swap grpc_slice_buffer_swap
|
||||
#define gpr_slice_buffer_move_into grpc_slice_buffer_move_into
|
||||
#define gpr_slice_buffer_trim_end grpc_slice_buffer_trim_end
|
||||
#define gpr_slice_buffer_move_first grpc_slice_buffer_move_first
|
||||
#define gpr_slice_buffer_take_first grpc_slice_buffer_take_first
|
||||
|
||||
#endif /* GRPC_ALLOW_GPR_SLICE_FUNCTIONS */
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_GPR_SLICE_H */
|
59
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/gpr_types.h
generated
vendored
Normal file
59
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/gpr_types.h
generated
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_GPR_TYPES_H
|
||||
#define GRPC_IMPL_CODEGEN_GPR_TYPES_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** The clocks we support. */
|
||||
typedef enum {
|
||||
/** Monotonic clock. Epoch undefined. Always moves forwards. */
|
||||
GPR_CLOCK_MONOTONIC = 0,
|
||||
/** Realtime clock. May jump forwards or backwards. Settable by
|
||||
the system administrator. Has its epoch at 0:00:00 UTC 1 Jan 1970. */
|
||||
GPR_CLOCK_REALTIME,
|
||||
/** CPU cycle time obtained by rdtsc instruction on x86 platforms. Epoch
|
||||
undefined. Degrades to GPR_CLOCK_REALTIME on other platforms. */
|
||||
GPR_CLOCK_PRECISE,
|
||||
/** Unmeasurable clock type: no base, created by taking the difference
|
||||
between two times */
|
||||
GPR_TIMESPAN
|
||||
} gpr_clock_type;
|
||||
|
||||
/** Analogous to struct timespec. On some machines, absolute times may be in
|
||||
* local time. */
|
||||
typedef struct gpr_timespec {
|
||||
int64_t tv_sec;
|
||||
int32_t tv_nsec;
|
||||
/** Against which clock was this time measured? (or GPR_TIMESPAN if
|
||||
this is a relative time measure) */
|
||||
gpr_clock_type clock_type;
|
||||
} gpr_timespec;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_GPR_TYPES_H */
|
749
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/grpc_types.h
generated
vendored
Normal file
749
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/grpc_types.h
generated
vendored
Normal file
@ -0,0 +1,749 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_GRPC_TYPES_H
|
||||
#define GRPC_IMPL_CODEGEN_GRPC_TYPES_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/compression_types.h>
|
||||
#include <grpc/impl/codegen/gpr_types.h>
|
||||
#include <grpc/impl/codegen/slice.h>
|
||||
#include <grpc/impl/codegen/status.h>
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
GRPC_BB_RAW
|
||||
/** Future types may include GRPC_BB_PROTOBUF, etc. */
|
||||
} grpc_byte_buffer_type;
|
||||
|
||||
typedef struct grpc_byte_buffer {
|
||||
void* reserved;
|
||||
grpc_byte_buffer_type type;
|
||||
union grpc_byte_buffer_data {
|
||||
struct /* internal */ {
|
||||
void* reserved[8];
|
||||
} reserved;
|
||||
struct grpc_compressed_buffer {
|
||||
grpc_compression_algorithm compression;
|
||||
grpc_slice_buffer slice_buffer;
|
||||
} raw;
|
||||
} data;
|
||||
} grpc_byte_buffer;
|
||||
|
||||
/** Completion Queues enable notification of the completion of
|
||||
* asynchronous actions. */
|
||||
typedef struct grpc_completion_queue grpc_completion_queue;
|
||||
|
||||
/** An alarm associated with a completion queue. */
|
||||
typedef struct grpc_alarm grpc_alarm;
|
||||
|
||||
/** The Channel interface allows creation of Call objects. */
|
||||
typedef struct grpc_channel grpc_channel;
|
||||
|
||||
/** A server listens to some port and responds to request calls */
|
||||
typedef struct grpc_server grpc_server;
|
||||
|
||||
/** A Call represents an RPC. When created, it is in a configuration state
|
||||
allowing properties to be set until it is invoked. After invoke, the Call
|
||||
can have messages written to it and read from it. */
|
||||
typedef struct grpc_call grpc_call;
|
||||
|
||||
/** The Socket Mutator interface allows changes on socket options */
|
||||
typedef struct grpc_socket_mutator grpc_socket_mutator;
|
||||
|
||||
/** The Socket Factory interface creates and binds sockets */
|
||||
typedef struct grpc_socket_factory grpc_socket_factory;
|
||||
|
||||
/** Type specifier for grpc_arg */
|
||||
typedef enum {
|
||||
GRPC_ARG_STRING,
|
||||
GRPC_ARG_INTEGER,
|
||||
GRPC_ARG_POINTER
|
||||
} grpc_arg_type;
|
||||
|
||||
typedef struct grpc_arg_pointer_vtable {
|
||||
void* (*copy)(void* p);
|
||||
void (*destroy)(void* p);
|
||||
int (*cmp)(void* p, void* q);
|
||||
} grpc_arg_pointer_vtable;
|
||||
|
||||
/** A single argument... each argument has a key and a value
|
||||
|
||||
A note on naming keys:
|
||||
Keys are namespaced into groups, usually grouped by library, and are
|
||||
keys for module XYZ are named XYZ.key1, XYZ.key2, etc. Module names must
|
||||
be restricted to the regex [A-Za-z][_A-Za-z0-9]{,15}.
|
||||
Key names must be restricted to the regex [A-Za-z][_A-Za-z0-9]{,47}.
|
||||
|
||||
GRPC core library keys are prefixed by grpc.
|
||||
|
||||
Library authors are strongly encouraged to \#define symbolic constants for
|
||||
their keys so that it's possible to change them in the future. */
|
||||
typedef struct {
|
||||
grpc_arg_type type;
|
||||
char* key;
|
||||
union grpc_arg_value {
|
||||
char* string;
|
||||
int integer;
|
||||
struct grpc_arg_pointer {
|
||||
void* p;
|
||||
const grpc_arg_pointer_vtable* vtable;
|
||||
} pointer;
|
||||
} value;
|
||||
} grpc_arg;
|
||||
|
||||
/** An array of arguments that can be passed around.
|
||||
|
||||
Used to set optional channel-level configuration.
|
||||
These configuration options are modelled as key-value pairs as defined
|
||||
by grpc_arg; keys are strings to allow easy backwards-compatible extension
|
||||
by arbitrary parties. All evaluation is performed at channel creation
|
||||
time (i.e. the keys and values in this structure need only live through the
|
||||
creation invocation).
|
||||
|
||||
However, if one of the args has grpc_arg_type==GRPC_ARG_POINTER, then the
|
||||
grpc_arg_pointer_vtable must live until the channel args are done being
|
||||
used by core (i.e. when the object for use with which they were passed
|
||||
is destroyed).
|
||||
|
||||
See the description of the \ref grpc_arg_keys "available args" for more
|
||||
details. */
|
||||
typedef struct {
|
||||
size_t num_args;
|
||||
grpc_arg* args;
|
||||
} grpc_channel_args;
|
||||
|
||||
/** \defgroup grpc_arg_keys
|
||||
* Channel argument keys.
|
||||
* \{
|
||||
*/
|
||||
/** If non-zero, enable census for tracing and stats collection. */
|
||||
#define GRPC_ARG_ENABLE_CENSUS "grpc.census"
|
||||
/** If non-zero, enable load reporting. */
|
||||
#define GRPC_ARG_ENABLE_LOAD_REPORTING "grpc.loadreporting"
|
||||
/** Request that optional features default to off (regardless of what they
|
||||
usually default to) - to enable tight control over what gets enabled */
|
||||
#define GRPC_ARG_MINIMAL_STACK "grpc.minimal_stack"
|
||||
/** Maximum number of concurrent incoming streams to allow on a http2
|
||||
connection. Int valued. */
|
||||
#define GRPC_ARG_MAX_CONCURRENT_STREAMS "grpc.max_concurrent_streams"
|
||||
/** Maximum message length that the channel can receive. Int valued, bytes.
|
||||
-1 means unlimited. */
|
||||
#define GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH "grpc.max_receive_message_length"
|
||||
/** \deprecated For backward compatibility.
|
||||
* Use GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH instead. */
|
||||
#define GRPC_ARG_MAX_MESSAGE_LENGTH GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH
|
||||
/** Maximum message length that the channel can send. Int valued, bytes.
|
||||
-1 means unlimited. */
|
||||
#define GRPC_ARG_MAX_SEND_MESSAGE_LENGTH "grpc.max_send_message_length"
|
||||
/** Maximum time that a channel may have no outstanding rpcs, after which the
|
||||
* server will close the connection. Int valued, milliseconds. INT_MAX means
|
||||
* unlimited. */
|
||||
#define GRPC_ARG_MAX_CONNECTION_IDLE_MS "grpc.max_connection_idle_ms"
|
||||
/** Maximum time that a channel may exist. Int valued, milliseconds.
|
||||
* INT_MAX means unlimited. */
|
||||
#define GRPC_ARG_MAX_CONNECTION_AGE_MS "grpc.max_connection_age_ms"
|
||||
/** Grace period after the channel reaches its max age. Int valued,
|
||||
milliseconds. INT_MAX means unlimited. */
|
||||
#define GRPC_ARG_MAX_CONNECTION_AGE_GRACE_MS "grpc.max_connection_age_grace_ms"
|
||||
/** Timeout after the last RPC finishes on the client channel at which the
|
||||
* channel goes back into IDLE state. Int valued, milliseconds. INT_MAX means
|
||||
* unlimited. The default value is 30 minutes and the min value is 1 second. */
|
||||
#define GRPC_ARG_CLIENT_IDLE_TIMEOUT_MS "grpc.client_idle_timeout_ms"
|
||||
/** Enable/disable support for per-message compression. Defaults to 1, unless
|
||||
GRPC_ARG_MINIMAL_STACK is enabled, in which case it defaults to 0. */
|
||||
#define GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION "grpc.per_message_compression"
|
||||
/** Enable/disable support for deadline checking. Defaults to 1, unless
|
||||
GRPC_ARG_MINIMAL_STACK is enabled, in which case it defaults to 0 */
|
||||
#define GRPC_ARG_ENABLE_DEADLINE_CHECKS "grpc.enable_deadline_checking"
|
||||
/** Initial stream ID for http2 transports. Int valued. */
|
||||
#define GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER \
|
||||
"grpc.http2.initial_sequence_number"
|
||||
/** Amount to read ahead on individual streams. Defaults to 64kb, larger
|
||||
values can help throughput on high-latency connections.
|
||||
NOTE: at some point we'd like to auto-tune this, and this parameter
|
||||
will become a no-op. Int valued, bytes. */
|
||||
#define GRPC_ARG_HTTP2_STREAM_LOOKAHEAD_BYTES "grpc.http2.lookahead_bytes"
|
||||
/** How much memory to use for hpack decoding. Int valued, bytes. */
|
||||
#define GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_DECODER \
|
||||
"grpc.http2.hpack_table_size.decoder"
|
||||
/** How much memory to use for hpack encoding. Int valued, bytes. */
|
||||
#define GRPC_ARG_HTTP2_HPACK_TABLE_SIZE_ENCODER \
|
||||
"grpc.http2.hpack_table_size.encoder"
|
||||
/** How big a frame are we willing to receive via HTTP2.
|
||||
Min 16384, max 16777215. Larger values give lower CPU usage for large
|
||||
messages, but more head of line blocking for small messages. */
|
||||
#define GRPC_ARG_HTTP2_MAX_FRAME_SIZE "grpc.http2.max_frame_size"
|
||||
/** Should BDP probing be performed? */
|
||||
#define GRPC_ARG_HTTP2_BDP_PROBE "grpc.http2.bdp_probe"
|
||||
/** Minimum time between sending successive ping frames without receiving any
|
||||
data frame, Int valued, milliseconds. */
|
||||
#define GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS \
|
||||
"grpc.http2.min_time_between_pings_ms"
|
||||
/** Minimum allowed time between a server receiving successive ping frames
|
||||
without sending any data frame. Int valued, milliseconds */
|
||||
#define GRPC_ARG_HTTP2_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS \
|
||||
"grpc.http2.min_ping_interval_without_data_ms"
|
||||
/** Channel arg to override the http2 :scheme header */
|
||||
#define GRPC_ARG_HTTP2_SCHEME "grpc.http2_scheme"
|
||||
/** How many pings can we send before needing to send a data frame or header
|
||||
frame? (0 indicates that an infinite number of pings can be sent without
|
||||
sending a data frame or header frame) */
|
||||
#define GRPC_ARG_HTTP2_MAX_PINGS_WITHOUT_DATA \
|
||||
"grpc.http2.max_pings_without_data"
|
||||
/** How many misbehaving pings the server can bear before sending goaway and
|
||||
closing the transport? (0 indicates that the server can bear an infinite
|
||||
number of misbehaving pings) */
|
||||
#define GRPC_ARG_HTTP2_MAX_PING_STRIKES "grpc.http2.max_ping_strikes"
|
||||
/** How much data are we willing to queue up per stream if
|
||||
GRPC_WRITE_BUFFER_HINT is set? This is an upper bound */
|
||||
#define GRPC_ARG_HTTP2_WRITE_BUFFER_SIZE "grpc.http2.write_buffer_size"
|
||||
/** Should we allow receipt of true-binary data on http2 connections?
|
||||
Defaults to on (1) */
|
||||
#define GRPC_ARG_HTTP2_ENABLE_TRUE_BINARY "grpc.http2.true_binary"
|
||||
/** After a duration of this time the client/server pings its peer to see if the
|
||||
transport is still alive. Int valued, milliseconds. */
|
||||
#define GRPC_ARG_KEEPALIVE_TIME_MS "grpc.keepalive_time_ms"
|
||||
/** After waiting for a duration of this time, if the keepalive ping sender does
|
||||
not receive the ping ack, it will close the transport. Int valued,
|
||||
milliseconds. */
|
||||
#define GRPC_ARG_KEEPALIVE_TIMEOUT_MS "grpc.keepalive_timeout_ms"
|
||||
/** Is it permissible to send keepalive pings without any outstanding streams.
|
||||
Int valued, 0(false)/1(true). */
|
||||
#define GRPC_ARG_KEEPALIVE_PERMIT_WITHOUT_CALLS \
|
||||
"grpc.keepalive_permit_without_calls"
|
||||
/** Default authority to pass if none specified on call construction. A string.
|
||||
* */
|
||||
#define GRPC_ARG_DEFAULT_AUTHORITY "grpc.default_authority"
|
||||
/** Primary user agent: goes at the start of the user-agent metadata
|
||||
sent on each request. A string. */
|
||||
#define GRPC_ARG_PRIMARY_USER_AGENT_STRING "grpc.primary_user_agent"
|
||||
/** Secondary user agent: goes at the end of the user-agent metadata
|
||||
sent on each request. A string. */
|
||||
#define GRPC_ARG_SECONDARY_USER_AGENT_STRING "grpc.secondary_user_agent"
|
||||
/** The minimum time between subsequent connection attempts, in ms */
|
||||
#define GRPC_ARG_MIN_RECONNECT_BACKOFF_MS "grpc.min_reconnect_backoff_ms"
|
||||
/** The maximum time between subsequent connection attempts, in ms */
|
||||
#define GRPC_ARG_MAX_RECONNECT_BACKOFF_MS "grpc.max_reconnect_backoff_ms"
|
||||
/** The time between the first and second connection attempts, in ms */
|
||||
#define GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS \
|
||||
"grpc.initial_reconnect_backoff_ms"
|
||||
/** Minimum amount of time between DNS resolutions, in ms */
|
||||
#define GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS \
|
||||
"grpc.dns_min_time_between_resolutions_ms"
|
||||
/** The timeout used on servers for finishing handshaking on an incoming
|
||||
connection. Defaults to 120 seconds. */
|
||||
#define GRPC_ARG_SERVER_HANDSHAKE_TIMEOUT_MS "grpc.server_handshake_timeout_ms"
|
||||
/** This *should* be used for testing only.
|
||||
The caller of the secure_channel_create functions may override the target
|
||||
name used for SSL host name checking using this channel argument which is of
|
||||
type \a GRPC_ARG_STRING. If this argument is not specified, the name used
|
||||
for SSL host name checking will be the target parameter (assuming that the
|
||||
secure channel is an SSL channel). If this parameter is specified and the
|
||||
underlying is not an SSL channel, it will just be ignored. */
|
||||
#define GRPC_SSL_TARGET_NAME_OVERRIDE_ARG "grpc.ssl_target_name_override"
|
||||
/** If non-zero, a pointer to a session cache (a pointer of type
|
||||
grpc_ssl_session_cache*). (use grpc_ssl_session_cache_arg_vtable() to fetch
|
||||
an appropriate pointer arg vtable) */
|
||||
#define GRPC_SSL_SESSION_CACHE_ARG "grpc.ssl_session_cache"
|
||||
/** Maximum metadata size, in bytes. Note this limit applies to the max sum of
|
||||
all metadata key-value entries in a batch of headers. */
|
||||
#define GRPC_ARG_MAX_METADATA_SIZE "grpc.max_metadata_size"
|
||||
/** If non-zero, allow the use of SO_REUSEPORT if it's available (default 1) */
|
||||
#define GRPC_ARG_ALLOW_REUSEPORT "grpc.so_reuseport"
|
||||
/** If non-zero, a pointer to a buffer pool (a pointer of type
|
||||
* grpc_resource_quota*). (use grpc_resource_quota_arg_vtable() to fetch an
|
||||
* appropriate pointer arg vtable) */
|
||||
#define GRPC_ARG_RESOURCE_QUOTA "grpc.resource_quota"
|
||||
/** If non-zero, expand wildcard addresses to a list of local addresses. */
|
||||
#define GRPC_ARG_EXPAND_WILDCARD_ADDRS "grpc.expand_wildcard_addrs"
|
||||
/** Service config data in JSON form.
|
||||
This value will be ignored if the name resolver returns a service config. */
|
||||
#define GRPC_ARG_SERVICE_CONFIG "grpc.service_config"
|
||||
/** Disable looking up the service config via the name resolver. */
|
||||
#define GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION \
|
||||
"grpc.service_config_disable_resolution"
|
||||
/** LB policy name. */
|
||||
#define GRPC_ARG_LB_POLICY_NAME "grpc.lb_policy_name"
|
||||
/** The grpc_socket_mutator instance that set the socket options. A pointer. */
|
||||
#define GRPC_ARG_SOCKET_MUTATOR "grpc.socket_mutator"
|
||||
/** The grpc_socket_factory instance to create and bind sockets. A pointer. */
|
||||
#define GRPC_ARG_SOCKET_FACTORY "grpc.socket_factory"
|
||||
/** The maximum amount of memory used by trace events per channel trace node.
|
||||
* Once the maximum is reached, subsequent events will evict the oldest events
|
||||
* from the buffer. The unit for this knob is bytes. Setting it to zero causes
|
||||
* channel tracing to be disabled. */
|
||||
#define GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE \
|
||||
"grpc.max_channel_trace_event_memory_per_node"
|
||||
/** If non-zero, gRPC library will track stats and information at at per channel
|
||||
* level. Disabling channelz naturally disables channel tracing. The default
|
||||
* is for channelz to be enabled. */
|
||||
#define GRPC_ARG_ENABLE_CHANNELZ "grpc.enable_channelz"
|
||||
/** If non-zero, Cronet transport will coalesce packets to fewer frames
|
||||
* when possible. */
|
||||
#define GRPC_ARG_USE_CRONET_PACKET_COALESCING \
|
||||
"grpc.use_cronet_packet_coalescing"
|
||||
/** Channel arg (integer) setting how large a slice to try and read from the
|
||||
wire each time recvmsg (or equivalent) is called **/
|
||||
#define GRPC_ARG_TCP_READ_CHUNK_SIZE "grpc.experimental.tcp_read_chunk_size"
|
||||
/** Note this is not a "channel arg" key. This is the default slice size to use
|
||||
* when trying to read from the wire if the GRPC_ARG_TCP_READ_CHUNK_SIZE
|
||||
* channel arg is unspecified. */
|
||||
#define GRPC_TCP_DEFAULT_READ_SLICE_SIZE 8192
|
||||
#define GRPC_ARG_TCP_MIN_READ_CHUNK_SIZE \
|
||||
"grpc.experimental.tcp_min_read_chunk_size"
|
||||
#define GRPC_ARG_TCP_MAX_READ_CHUNK_SIZE \
|
||||
"grpc.experimental.tcp_max_read_chunk_size"
|
||||
/* Timeout in milliseconds to use for calls to the grpclb load balancer.
|
||||
If 0 or unset, the balancer calls will have no deadline. */
|
||||
#define GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS "grpc.grpclb_call_timeout_ms"
|
||||
/* Timeout in milliseconds to wait for the serverlist from the grpclb load
|
||||
balancer before using fallback backend addresses from the resolver.
|
||||
If 0, enter fallback mode immediately. Default value is 10000. */
|
||||
#define GRPC_ARG_GRPCLB_FALLBACK_TIMEOUT_MS "grpc.grpclb_fallback_timeout_ms"
|
||||
/* Timeout in milliseconds to wait for the serverlist from the xDS load
|
||||
balancer before using fallback backend addresses from the resolver.
|
||||
If 0, enter fallback mode immediately. Default value is 10000. */
|
||||
#define GRPC_ARG_XDS_FALLBACK_TIMEOUT_MS "grpc.xds_fallback_timeout_ms"
|
||||
/* Time in milliseconds to wait before a locality is deleted after it's removed
|
||||
from the received EDS update. If 0, delete the locality immediately. Default
|
||||
value is 15 minutes. */
|
||||
#define GRPC_ARG_LOCALITY_RETENTION_INTERVAL_MS \
|
||||
"grpc.xds_locality_retention_interval_ms"
|
||||
/** If non-zero, grpc server's cronet compression workaround will be enabled */
|
||||
#define GRPC_ARG_WORKAROUND_CRONET_COMPRESSION \
|
||||
"grpc.workaround.cronet_compression"
|
||||
/** String defining the optimization target for a channel.
|
||||
Can be: "latency" - attempt to minimize latency at the cost of throughput
|
||||
"blend" - try to balance latency and throughput
|
||||
"throughput" - attempt to maximize throughput at the expense of
|
||||
latency
|
||||
Defaults to "blend". In the current implementation "blend" is equivalent to
|
||||
"latency". */
|
||||
#define GRPC_ARG_OPTIMIZATION_TARGET "grpc.optimization_target"
|
||||
/** If set to zero, disables retry behavior. Otherwise, transparent retries
|
||||
are enabled for all RPCs, and configurable retries are enabled when they
|
||||
are configured via the service config. For details, see:
|
||||
https://github.com/grpc/proposal/blob/master/A6-client-retries.md
|
||||
*/
|
||||
#define GRPC_ARG_ENABLE_RETRIES "grpc.enable_retries"
|
||||
/** Per-RPC retry buffer size, in bytes. Default is 256 KiB. */
|
||||
#define GRPC_ARG_PER_RPC_RETRY_BUFFER_SIZE "grpc.per_rpc_retry_buffer_size"
|
||||
/** Channel arg that carries the bridged objective c object for custom metrics
|
||||
* logging filter. */
|
||||
#define GRPC_ARG_MOBILE_LOG_CONTEXT "grpc.mobile_log_context"
|
||||
/** If non-zero, client authority filter is disabled for the channel */
|
||||
#define GRPC_ARG_DISABLE_CLIENT_AUTHORITY_FILTER \
|
||||
"grpc.disable_client_authority_filter"
|
||||
/** If set to zero, disables use of http proxies. Enabled by default. */
|
||||
#define GRPC_ARG_ENABLE_HTTP_PROXY "grpc.enable_http_proxy"
|
||||
/** If set to non zero, surfaces the user agent string to the server. User
|
||||
agent is surfaced by default. */
|
||||
#define GRPC_ARG_SURFACE_USER_AGENT "grpc.surface_user_agent"
|
||||
/** If set, inhibits health checking (which may be enabled via the
|
||||
* service config.) */
|
||||
#define GRPC_ARG_INHIBIT_HEALTH_CHECKING "grpc.inhibit_health_checking"
|
||||
/** If set, the channel's resolver is allowed to query for SRV records.
|
||||
* For example, this is useful as a way to enable the "grpclb"
|
||||
* load balancing policy. Note that this only works with the "ares"
|
||||
* DNS resolver, and isn't supported by the "native" DNS resolver. */
|
||||
#define GRPC_ARG_DNS_ENABLE_SRV_QUERIES "grpc.dns_enable_srv_queries"
|
||||
/** If set, determines an upper bound on the number of milliseconds that the
|
||||
* c-ares based DNS resolver will wait on queries before cancelling them.
|
||||
* The default value is 120,000. Setting this to "0" will disable the
|
||||
* overall timeout entirely. Note that this doesn't include internal c-ares
|
||||
* timeouts/backoff/retry logic, and so the actual DNS resolution may time out
|
||||
* sooner than the value specified here. */
|
||||
#define GRPC_ARG_DNS_ARES_QUERY_TIMEOUT_MS "grpc.dns_ares_query_timeout"
|
||||
/** If set, uses a local subchannel pool within the channel. Otherwise, uses the
|
||||
* global subchannel pool. */
|
||||
#define GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL "grpc.use_local_subchannel_pool"
|
||||
/** gRPC Objective-C channel pooling domain string. */
|
||||
#define GRPC_ARG_CHANNEL_POOL_DOMAIN "grpc.channel_pooling_domain"
|
||||
/** gRPC Objective-C channel pooling id. */
|
||||
#define GRPC_ARG_CHANNEL_ID "grpc.channel_id"
|
||||
/** \} */
|
||||
|
||||
/** Result of a grpc call. If the caller satisfies the prerequisites of a
|
||||
particular operation, the grpc_call_error returned will be GRPC_CALL_OK.
|
||||
Receiving any other value listed here is an indication of a bug in the
|
||||
caller. */
|
||||
typedef enum grpc_call_error {
|
||||
/** everything went ok */
|
||||
GRPC_CALL_OK = 0,
|
||||
/** something failed, we don't know what */
|
||||
GRPC_CALL_ERROR,
|
||||
/** this method is not available on the server */
|
||||
GRPC_CALL_ERROR_NOT_ON_SERVER,
|
||||
/** this method is not available on the client */
|
||||
GRPC_CALL_ERROR_NOT_ON_CLIENT,
|
||||
/** this method must be called before server_accept */
|
||||
GRPC_CALL_ERROR_ALREADY_ACCEPTED,
|
||||
/** this method must be called before invoke */
|
||||
GRPC_CALL_ERROR_ALREADY_INVOKED,
|
||||
/** this method must be called after invoke */
|
||||
GRPC_CALL_ERROR_NOT_INVOKED,
|
||||
/** this call is already finished
|
||||
(writes_done or write_status has already been called) */
|
||||
GRPC_CALL_ERROR_ALREADY_FINISHED,
|
||||
/** there is already an outstanding read/write operation on the call */
|
||||
GRPC_CALL_ERROR_TOO_MANY_OPERATIONS,
|
||||
/** the flags value was illegal for this call */
|
||||
GRPC_CALL_ERROR_INVALID_FLAGS,
|
||||
/** invalid metadata was passed to this call */
|
||||
GRPC_CALL_ERROR_INVALID_METADATA,
|
||||
/** invalid message was passed to this call */
|
||||
GRPC_CALL_ERROR_INVALID_MESSAGE,
|
||||
/** completion queue for notification has not been registered
|
||||
* with the server */
|
||||
GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE,
|
||||
/** this batch of operations leads to more operations than allowed */
|
||||
GRPC_CALL_ERROR_BATCH_TOO_BIG,
|
||||
/** payload type requested is not the type registered */
|
||||
GRPC_CALL_ERROR_PAYLOAD_TYPE_MISMATCH,
|
||||
/** completion queue has been shutdown */
|
||||
GRPC_CALL_ERROR_COMPLETION_QUEUE_SHUTDOWN
|
||||
} grpc_call_error;
|
||||
|
||||
/** Default send/receive message size limits in bytes. -1 for unlimited. */
|
||||
/** TODO(roth) Make this match the default receive limit after next release */
|
||||
#define GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH -1
|
||||
#define GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH (4 * 1024 * 1024)
|
||||
|
||||
/** Write Flags: */
|
||||
/** Hint that the write may be buffered and need not go out on the wire
|
||||
immediately. GRPC is free to buffer the message until the next non-buffered
|
||||
write, or until writes_done, but it need not buffer completely or at all. */
|
||||
#define GRPC_WRITE_BUFFER_HINT (0x00000001u)
|
||||
/** Force compression to be disabled for a particular write
|
||||
(start_write/add_metadata). Illegal on invoke/accept. */
|
||||
#define GRPC_WRITE_NO_COMPRESS (0x00000002u)
|
||||
/** Force this message to be written to the socket before completing it */
|
||||
#define GRPC_WRITE_THROUGH (0x00000004u)
|
||||
/** Mask of all valid flags. */
|
||||
#define GRPC_WRITE_USED_MASK \
|
||||
(GRPC_WRITE_BUFFER_HINT | GRPC_WRITE_NO_COMPRESS | GRPC_WRITE_THROUGH)
|
||||
|
||||
/** Initial metadata flags */
|
||||
/** Signal that the call is idempotent */
|
||||
#define GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST (0x00000010u)
|
||||
/** Signal that the call should not return UNAVAILABLE before it has started */
|
||||
#define GRPC_INITIAL_METADATA_WAIT_FOR_READY (0x00000020u)
|
||||
/** Signal that the call is cacheable. GRPC is free to use GET verb */
|
||||
#define GRPC_INITIAL_METADATA_CACHEABLE_REQUEST (0x00000040u)
|
||||
/** Signal that GRPC_INITIAL_METADATA_WAIT_FOR_READY was explicitly set
|
||||
by the calling application. */
|
||||
#define GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET (0x00000080u)
|
||||
/** Signal that the initial metadata should be corked */
|
||||
#define GRPC_INITIAL_METADATA_CORKED (0x00000100u)
|
||||
|
||||
/** Mask of all valid flags */
|
||||
#define GRPC_INITIAL_METADATA_USED_MASK \
|
||||
(GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST | \
|
||||
GRPC_INITIAL_METADATA_WAIT_FOR_READY | \
|
||||
GRPC_INITIAL_METADATA_CACHEABLE_REQUEST | \
|
||||
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET | \
|
||||
GRPC_INITIAL_METADATA_CORKED | GRPC_WRITE_THROUGH)
|
||||
|
||||
/** A single metadata element */
|
||||
typedef struct grpc_metadata {
|
||||
/** the key, value values are expected to line up with grpc_mdelem: if
|
||||
changing them, update metadata.h at the same time. */
|
||||
grpc_slice key;
|
||||
grpc_slice value;
|
||||
|
||||
uint32_t flags;
|
||||
|
||||
/** The following fields are reserved for grpc internal use.
|
||||
There is no need to initialize them, and they will be set to garbage
|
||||
during calls to grpc. */
|
||||
struct /* internal */ {
|
||||
void* obfuscated[4];
|
||||
} internal_data;
|
||||
} grpc_metadata;
|
||||
|
||||
/** The type of completion (for grpc_event) */
|
||||
typedef enum grpc_completion_type {
|
||||
/** Shutting down */
|
||||
GRPC_QUEUE_SHUTDOWN,
|
||||
/** No event before timeout */
|
||||
GRPC_QUEUE_TIMEOUT,
|
||||
/** Operation completion */
|
||||
GRPC_OP_COMPLETE
|
||||
} grpc_completion_type;
|
||||
|
||||
/** The result of an operation.
|
||||
|
||||
Returned by a completion queue when the operation started with tag. */
|
||||
typedef struct grpc_event {
|
||||
/** The type of the completion. */
|
||||
grpc_completion_type type;
|
||||
/** If the grpc_completion_type is GRPC_OP_COMPLETE, this field indicates
|
||||
whether the operation was successful or not; 0 in case of failure and
|
||||
non-zero in case of success.
|
||||
If grpc_completion_type is GRPC_QUEUE_SHUTDOWN or GRPC_QUEUE_TIMEOUT, this
|
||||
field is guaranteed to be 0 */
|
||||
int success;
|
||||
/** The tag passed to grpc_call_start_batch etc to start this operation.
|
||||
*Only* GRPC_OP_COMPLETE has a tag. For all other grpc_completion_type
|
||||
values, tag is uninitialized. */
|
||||
void* tag;
|
||||
} grpc_event;
|
||||
|
||||
typedef struct {
|
||||
size_t count;
|
||||
size_t capacity;
|
||||
grpc_metadata* metadata;
|
||||
} grpc_metadata_array;
|
||||
|
||||
typedef struct {
|
||||
grpc_slice method;
|
||||
grpc_slice host;
|
||||
gpr_timespec deadline;
|
||||
uint32_t flags;
|
||||
void* reserved;
|
||||
} grpc_call_details;
|
||||
|
||||
typedef enum {
|
||||
/** Send initial metadata: one and only one instance MUST be sent for each
|
||||
call, unless the call was cancelled - in which case this can be skipped.
|
||||
This op completes after all bytes of metadata have been accepted by
|
||||
outgoing flow control. */
|
||||
GRPC_OP_SEND_INITIAL_METADATA = 0,
|
||||
/** Send a message: 0 or more of these operations can occur for each call.
|
||||
This op completes after all bytes for the message have been accepted by
|
||||
outgoing flow control. */
|
||||
GRPC_OP_SEND_MESSAGE,
|
||||
/** Send a close from the client: one and only one instance MUST be sent from
|
||||
the client, unless the call was cancelled - in which case this can be
|
||||
skipped. This op completes after all bytes for the call
|
||||
(including the close) have passed outgoing flow control. */
|
||||
GRPC_OP_SEND_CLOSE_FROM_CLIENT,
|
||||
/** Send status from the server: one and only one instance MUST be sent from
|
||||
the server unless the call was cancelled - in which case this can be
|
||||
skipped. This op completes after all bytes for the call
|
||||
(including the status) have passed outgoing flow control. */
|
||||
GRPC_OP_SEND_STATUS_FROM_SERVER,
|
||||
/** Receive initial metadata: one and only one MUST be made on the client,
|
||||
must not be made on the server.
|
||||
This op completes after all initial metadata has been read from the
|
||||
peer. */
|
||||
GRPC_OP_RECV_INITIAL_METADATA,
|
||||
/** Receive a message: 0 or more of these operations can occur for each call.
|
||||
This op completes after all bytes of the received message have been
|
||||
read, or after a half-close has been received on this call. */
|
||||
GRPC_OP_RECV_MESSAGE,
|
||||
/** Receive status on the client: one and only one must be made on the client.
|
||||
This operation always succeeds, meaning ops paired with this operation
|
||||
will also appear to succeed, even though they may not have. In that case
|
||||
the status will indicate some failure.
|
||||
This op completes after all activity on the call has completed. */
|
||||
GRPC_OP_RECV_STATUS_ON_CLIENT,
|
||||
/** Receive close on the server: one and only one must be made on the
|
||||
server. This op completes after the close has been received by the
|
||||
server. This operation always succeeds, meaning ops paired with
|
||||
this operation will also appear to succeed, even though they may not
|
||||
have. */
|
||||
GRPC_OP_RECV_CLOSE_ON_SERVER
|
||||
} grpc_op_type;
|
||||
|
||||
struct grpc_byte_buffer;
|
||||
|
||||
/** Operation data: one field for each op type (except SEND_CLOSE_FROM_CLIENT
|
||||
which has no arguments) */
|
||||
typedef struct grpc_op {
|
||||
/** Operation type, as defined by grpc_op_type */
|
||||
grpc_op_type op;
|
||||
/** Write flags bitset for grpc_begin_messages */
|
||||
uint32_t flags;
|
||||
/** Reserved for future usage */
|
||||
void* reserved;
|
||||
union grpc_op_data {
|
||||
/** Reserved for future usage */
|
||||
struct /* internal */ {
|
||||
void* reserved[8];
|
||||
} reserved;
|
||||
struct grpc_op_send_initial_metadata {
|
||||
size_t count;
|
||||
grpc_metadata* metadata;
|
||||
/** If \a is_set, \a compression_level will be used for the call.
|
||||
* Otherwise, \a compression_level won't be considered */
|
||||
struct grpc_op_send_initial_metadata_maybe_compression_level {
|
||||
uint8_t is_set;
|
||||
grpc_compression_level level;
|
||||
} maybe_compression_level;
|
||||
} send_initial_metadata;
|
||||
struct grpc_op_send_message {
|
||||
/** This op takes ownership of the slices in send_message. After
|
||||
* a call completes, the contents of send_message are not guaranteed
|
||||
* and likely empty. The original owner should still call
|
||||
* grpc_byte_buffer_destroy() on this object however.
|
||||
*/
|
||||
struct grpc_byte_buffer* send_message;
|
||||
} send_message;
|
||||
struct grpc_op_send_status_from_server {
|
||||
size_t trailing_metadata_count;
|
||||
grpc_metadata* trailing_metadata;
|
||||
grpc_status_code status;
|
||||
/** optional: set to NULL if no details need sending, non-NULL if they do
|
||||
* pointer will not be retained past the start_batch call
|
||||
*/
|
||||
grpc_slice* status_details;
|
||||
} send_status_from_server;
|
||||
/** ownership of the array is with the caller, but ownership of the elements
|
||||
stays with the call object (ie key, value members are owned by the call
|
||||
object, recv_initial_metadata->array is owned by the caller).
|
||||
After the operation completes, call grpc_metadata_array_destroy on this
|
||||
value, or reuse it in a future op. */
|
||||
struct grpc_op_recv_initial_metadata {
|
||||
grpc_metadata_array* recv_initial_metadata;
|
||||
} recv_initial_metadata;
|
||||
/** ownership of the byte buffer is moved to the caller; the caller must
|
||||
call grpc_byte_buffer_destroy on this value, or reuse it in a future op.
|
||||
The returned byte buffer will be NULL if trailing metadata was
|
||||
received instead of a message.
|
||||
*/
|
||||
struct grpc_op_recv_message {
|
||||
struct grpc_byte_buffer** recv_message;
|
||||
} recv_message;
|
||||
struct grpc_op_recv_status_on_client {
|
||||
/** ownership of the array is with the caller, but ownership of the
|
||||
elements stays with the call object (ie key, value members are owned
|
||||
by the call object, trailing_metadata->array is owned by the caller).
|
||||
After the operation completes, call grpc_metadata_array_destroy on
|
||||
this value, or reuse it in a future op. */
|
||||
grpc_metadata_array* trailing_metadata;
|
||||
grpc_status_code* status;
|
||||
grpc_slice* status_details;
|
||||
/** If this is not nullptr, it will be populated with the full fidelity
|
||||
* error string for debugging purposes. The application is responsible
|
||||
* for freeing the data by using gpr_free(). */
|
||||
const char** error_string;
|
||||
} recv_status_on_client;
|
||||
struct grpc_op_recv_close_on_server {
|
||||
/** out argument, set to 1 if the call failed in any way (seen as a
|
||||
cancellation on the server), or 0 if the call succeeded */
|
||||
int* cancelled;
|
||||
} recv_close_on_server;
|
||||
} data;
|
||||
} grpc_op;
|
||||
|
||||
/** Information requested from the channel. */
|
||||
typedef struct {
|
||||
/** If non-NULL, will be set to point to a string indicating the LB
|
||||
* policy name. Caller takes ownership. */
|
||||
char** lb_policy_name;
|
||||
/** If non-NULL, will be set to point to a string containing the
|
||||
* service config used by the channel in JSON form. */
|
||||
char** service_config_json;
|
||||
} grpc_channel_info;
|
||||
|
||||
typedef struct grpc_resource_quota grpc_resource_quota;
|
||||
|
||||
/** Completion queues internally MAY maintain a set of file descriptors in a
|
||||
structure called 'pollset'. This enum specifies if a completion queue has an
|
||||
associated pollset and any restrictions on the type of file descriptors that
|
||||
can be present in the pollset.
|
||||
|
||||
I/O progress can only be made when grpc_completion_queue_next() or
|
||||
grpc_completion_queue_pluck() are called on the completion queue (unless the
|
||||
grpc_cq_polling_type is GRPC_CQ_NON_POLLING) and hence it is very important
|
||||
to actively call these APIs */
|
||||
typedef enum {
|
||||
/** The completion queue will have an associated pollset and there is no
|
||||
restriction on the type of file descriptors the pollset may contain */
|
||||
GRPC_CQ_DEFAULT_POLLING,
|
||||
|
||||
/** Similar to GRPC_CQ_DEFAULT_POLLING except that the completion queues will
|
||||
not contain any 'listening file descriptors' (i.e file descriptors used to
|
||||
listen to incoming channels) */
|
||||
GRPC_CQ_NON_LISTENING,
|
||||
|
||||
/** The completion queue will not have an associated pollset. Note that
|
||||
grpc_completion_queue_next() or grpc_completion_queue_pluck() MUST still
|
||||
be called to pop events from the completion queue; it is not required to
|
||||
call them actively to make I/O progress */
|
||||
GRPC_CQ_NON_POLLING
|
||||
} grpc_cq_polling_type;
|
||||
|
||||
/** Specifies the type of APIs to use to pop events from the completion queue */
|
||||
typedef enum {
|
||||
/** Events are popped out by calling grpc_completion_queue_next() API ONLY */
|
||||
GRPC_CQ_NEXT,
|
||||
|
||||
/** Events are popped out by calling grpc_completion_queue_pluck() API ONLY*/
|
||||
GRPC_CQ_PLUCK,
|
||||
|
||||
/** EXPERIMENTAL: Events trigger a callback specified as the tag */
|
||||
GRPC_CQ_CALLBACK
|
||||
} grpc_cq_completion_type;
|
||||
|
||||
/** EXPERIMENTAL: Specifies an interface class to be used as a tag
|
||||
for callback-based completion queues. This can be used directly,
|
||||
as the first element of a struct in C, or as a base class in C++.
|
||||
Its "run" value should be assigned to some non-member function, such as
|
||||
a static method. */
|
||||
typedef struct grpc_experimental_completion_queue_functor {
|
||||
/** The run member specifies a function that will be called when this
|
||||
tag is extracted from the completion queue. Its arguments will be a
|
||||
pointer to this functor and a boolean that indicates whether the
|
||||
operation succeeded (non-zero) or failed (zero) */
|
||||
void (*functor_run)(struct grpc_experimental_completion_queue_functor*, int);
|
||||
|
||||
/** The following fields are not API. They are meant for internal use. */
|
||||
int internal_success;
|
||||
struct grpc_experimental_completion_queue_functor* internal_next;
|
||||
} grpc_experimental_completion_queue_functor;
|
||||
|
||||
/* The upgrade to version 2 is currently experimental. */
|
||||
|
||||
#define GRPC_CQ_CURRENT_VERSION 2
|
||||
#define GRPC_CQ_VERSION_MINIMUM_FOR_CALLBACKABLE 2
|
||||
typedef struct grpc_completion_queue_attributes {
|
||||
/** The version number of this structure. More fields might be added to this
|
||||
structure in future. */
|
||||
int version; /** Set to GRPC_CQ_CURRENT_VERSION */
|
||||
|
||||
grpc_cq_completion_type cq_completion_type;
|
||||
|
||||
grpc_cq_polling_type cq_polling_type;
|
||||
|
||||
/* END OF VERSION 1 CQ ATTRIBUTES */
|
||||
|
||||
/* EXPERIMENTAL: START OF VERSION 2 CQ ATTRIBUTES */
|
||||
/** When creating a callbackable CQ, pass in a functor to get invoked when
|
||||
* shutdown is complete */
|
||||
grpc_experimental_completion_queue_functor* cq_shutdown_cb;
|
||||
|
||||
/* END OF VERSION 2 CQ ATTRIBUTES */
|
||||
} grpc_completion_queue_attributes;
|
||||
|
||||
/** The completion queue factory structure is opaque to the callers of grpc */
|
||||
typedef struct grpc_completion_queue_factory grpc_completion_queue_factory;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_GRPC_TYPES_H */
|
112
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/log.h
generated
vendored
Normal file
112
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/log.h
generated
vendored
Normal file
@ -0,0 +1,112 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_LOG_H
|
||||
#define GRPC_IMPL_CODEGEN_LOG_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h> /* for abort() */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** GPR log API.
|
||||
|
||||
Usage (within grpc):
|
||||
|
||||
int argument1 = 3;
|
||||
char* argument2 = "hello";
|
||||
gpr_log(GPR_DEBUG, "format string %d", argument1);
|
||||
gpr_log(GPR_INFO, "hello world");
|
||||
gpr_log(GPR_ERROR, "%d %s!!", argument1, argument2); */
|
||||
|
||||
/** The severity of a log message - use the #defines below when calling into
|
||||
gpr_log to additionally supply file and line data */
|
||||
typedef enum gpr_log_severity {
|
||||
GPR_LOG_SEVERITY_DEBUG,
|
||||
GPR_LOG_SEVERITY_INFO,
|
||||
GPR_LOG_SEVERITY_ERROR
|
||||
} gpr_log_severity;
|
||||
|
||||
#define GPR_LOG_VERBOSITY_UNSET -1
|
||||
|
||||
/** Returns a string representation of the log severity */
|
||||
GPRAPI const char* gpr_log_severity_string(gpr_log_severity severity);
|
||||
|
||||
/** Macros to build log contexts at various severity levels */
|
||||
#define GPR_DEBUG __FILE__, __LINE__, GPR_LOG_SEVERITY_DEBUG
|
||||
#define GPR_INFO __FILE__, __LINE__, GPR_LOG_SEVERITY_INFO
|
||||
#define GPR_ERROR __FILE__, __LINE__, GPR_LOG_SEVERITY_ERROR
|
||||
|
||||
/** Log a message. It's advised to use GPR_xxx above to generate the context
|
||||
* for each message */
|
||||
GPRAPI void gpr_log(const char* file, int line, gpr_log_severity severity,
|
||||
const char* format, ...) GPR_PRINT_FORMAT_CHECK(4, 5);
|
||||
|
||||
GPRAPI int gpr_should_log(gpr_log_severity severity);
|
||||
|
||||
GPRAPI void gpr_log_message(const char* file, int line,
|
||||
gpr_log_severity severity, const char* message);
|
||||
|
||||
/** Set global log verbosity */
|
||||
GPRAPI void gpr_set_log_verbosity(gpr_log_severity min_severity_to_print);
|
||||
|
||||
GPRAPI void gpr_log_verbosity_init(void);
|
||||
|
||||
/** Log overrides: applications can use this API to intercept logging calls
|
||||
and use their own implementations */
|
||||
|
||||
struct gpr_log_func_args {
|
||||
const char* file;
|
||||
int line;
|
||||
gpr_log_severity severity;
|
||||
const char* message;
|
||||
};
|
||||
|
||||
typedef struct gpr_log_func_args gpr_log_func_args;
|
||||
|
||||
typedef void (*gpr_log_func)(gpr_log_func_args* args);
|
||||
GPRAPI void gpr_set_log_function(gpr_log_func func);
|
||||
|
||||
/** abort() the process if x is zero, having written a line to the log.
|
||||
|
||||
Intended for internal invariants. If the error can be recovered from,
|
||||
without the possibility of corruption, or might best be reflected via
|
||||
an exception in a higher-level language, consider returning error code. */
|
||||
#define GPR_ASSERT(x) \
|
||||
do { \
|
||||
if (GPR_UNLIKELY(!(x))) { \
|
||||
gpr_log(GPR_ERROR, "assertion failed: %s", #x); \
|
||||
abort(); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#ifndef NDEBUG
|
||||
#define GPR_DEBUG_ASSERT(x) GPR_ASSERT(x)
|
||||
#else
|
||||
#define GPR_DEBUG_ASSERT(x)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_LOG_H */
|
686
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/port_platform.h
generated
vendored
Normal file
686
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/port_platform.h
generated
vendored
Normal file
@ -0,0 +1,686 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_PORT_PLATFORM_H
|
||||
#define GRPC_IMPL_CODEGEN_PORT_PLATFORM_H
|
||||
|
||||
/*
|
||||
* Define GPR_BACKWARDS_COMPATIBILITY_MODE to try harder to be ABI
|
||||
* compatible with older platforms (currently only on Linux)
|
||||
* Causes:
|
||||
* - some libc calls to be gotten via dlsym
|
||||
* - some syscalls to be made directly
|
||||
*/
|
||||
|
||||
/*
|
||||
* Defines GRPC_USE_CPP_STD_LIB to use standard C++ library instead of
|
||||
* in-house library if possible. (e.g. std::map)
|
||||
*/
|
||||
#ifndef GRPC_USE_CPP_STD_LIB
|
||||
#define GRPC_USE_CPP_STD_LIB 1
|
||||
#endif
|
||||
|
||||
/* Get windows.h included everywhere (we need it) */
|
||||
#if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32)
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif /* WIN32_LEAN_AND_MEAN */
|
||||
|
||||
#ifndef NOMINMAX
|
||||
#define GRPC_NOMINMX_WAS_NOT_DEFINED
|
||||
#define NOMINMAX
|
||||
#endif /* NOMINMAX */
|
||||
|
||||
#ifndef _WIN32_WINNT
|
||||
#error \
|
||||
"Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)"
|
||||
#else /* !defined(_WIN32_WINNT) */
|
||||
#if (_WIN32_WINNT < 0x0600)
|
||||
#error \
|
||||
"Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)"
|
||||
#endif /* _WIN32_WINNT < 0x0600 */
|
||||
#endif /* defined(_WIN32_WINNT) */
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#ifdef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED
|
||||
#undef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#endif /* GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED */
|
||||
|
||||
#ifdef GRPC_NOMINMAX_WAS_NOT_DEFINED
|
||||
#undef GRPC_NOMINMAX_WAS_NOT_DEFINED
|
||||
#undef NOMINMAX
|
||||
#endif /* GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED */
|
||||
#endif /* defined(_WIN64) || defined(WIN64) || defined(_WIN32) || \
|
||||
defined(WIN32) */
|
||||
|
||||
/* Override this file with one for your platform if you need to redefine
|
||||
things. */
|
||||
|
||||
#if !defined(GPR_NO_AUTODETECT_PLATFORM)
|
||||
#if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32)
|
||||
#if defined(_WIN64) || defined(WIN64)
|
||||
#define GPR_ARCH_64 1
|
||||
#else
|
||||
#define GPR_ARCH_32 1
|
||||
#endif
|
||||
#define GPR_PLATFORM_STRING "windows"
|
||||
#define GPR_WINDOWS 1
|
||||
#define GPR_WINDOWS_SUBPROCESS 1
|
||||
#define GPR_WINDOWS_ENV
|
||||
#ifdef __MSYS__
|
||||
#define GPR_GETPID_IN_UNISTD_H 1
|
||||
#define GPR_MSYS_TMPFILE
|
||||
#define GPR_POSIX_LOG
|
||||
#define GPR_POSIX_STRING
|
||||
#define GPR_POSIX_TIME
|
||||
#else
|
||||
#define GPR_GETPID_IN_PROCESS_H 1
|
||||
#define GPR_WINDOWS_TMPFILE
|
||||
#define GPR_WINDOWS_LOG
|
||||
#define GPR_WINDOWS_CRASH_HANDLER 1
|
||||
#define GPR_WINDOWS_STRING
|
||||
#define GPR_WINDOWS_TIME
|
||||
#endif
|
||||
#ifdef __GNUC__
|
||||
#define GPR_GCC_ATOMIC 1
|
||||
#define GPR_GCC_TLS 1
|
||||
#else
|
||||
#define GPR_WINDOWS_ATOMIC 1
|
||||
#define GPR_MSVC_TLS 1
|
||||
#endif
|
||||
#elif defined(GPR_MANYLINUX1)
|
||||
// TODO(atash): manylinux1 is just another __linux__ but with ancient
|
||||
// libraries; it should be integrated with the `__linux__` definitions below.
|
||||
#define GPR_PLATFORM_STRING "manylinux"
|
||||
#define GPR_POSIX_CRASH_HANDLER 1
|
||||
#define GPR_CPU_POSIX 1
|
||||
#define GPR_GCC_ATOMIC 1
|
||||
#define GPR_GCC_TLS 1
|
||||
#define GPR_LINUX 1
|
||||
#define GPR_LINUX_LOG 1
|
||||
#define GPR_SUPPORT_CHANNELS_FROM_FD 1
|
||||
#define GPR_LINUX_ENV 1
|
||||
#define GPR_POSIX_TMPFILE 1
|
||||
#define GPR_POSIX_STRING 1
|
||||
#define GPR_POSIX_SUBPROCESS 1
|
||||
#define GPR_POSIX_SYNC 1
|
||||
#define GPR_POSIX_TIME 1
|
||||
#define GPR_HAS_PTHREAD_H 1
|
||||
#define GPR_GETPID_IN_UNISTD_H 1
|
||||
#ifdef _LP64
|
||||
#define GPR_ARCH_64 1
|
||||
#else /* _LP64 */
|
||||
#define GPR_ARCH_32 1
|
||||
#endif /* _LP64 */
|
||||
#include <linux/version.h>
|
||||
#elif defined(ANDROID) || defined(__ANDROID__)
|
||||
#define GPR_PLATFORM_STRING "android"
|
||||
#define GPR_ANDROID 1
|
||||
// TODO(apolcyn): re-evaluate support for c-ares
|
||||
// on android after upgrading our c-ares dependency.
|
||||
// See https://github.com/grpc/grpc/issues/18038.
|
||||
#define GRPC_ARES 0
|
||||
#ifdef _LP64
|
||||
#define GPR_ARCH_64 1
|
||||
#else /* _LP64 */
|
||||
#define GPR_ARCH_32 1
|
||||
#endif /* _LP64 */
|
||||
#define GPR_CPU_POSIX 1
|
||||
#define GPR_GCC_SYNC 1
|
||||
#define GPR_GCC_TLS 1
|
||||
#define GPR_POSIX_ENV 1
|
||||
#define GPR_POSIX_TMPFILE 1
|
||||
#define GPR_ANDROID_LOG 1
|
||||
#define GPR_POSIX_STRING 1
|
||||
#define GPR_POSIX_SUBPROCESS 1
|
||||
#define GPR_POSIX_SYNC 1
|
||||
#define GPR_POSIX_TIME 1
|
||||
#define GPR_HAS_PTHREAD_H 1
|
||||
#define GPR_GETPID_IN_UNISTD_H 1
|
||||
#define GPR_SUPPORT_CHANNELS_FROM_FD 1
|
||||
#elif defined(__linux__)
|
||||
#define GPR_PLATFORM_STRING "linux"
|
||||
#ifndef _BSD_SOURCE
|
||||
#define _BSD_SOURCE
|
||||
#endif
|
||||
#ifndef _DEFAULT_SOURCE
|
||||
#define _DEFAULT_SOURCE
|
||||
#endif
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#include <features.h>
|
||||
#define GPR_CPU_LINUX 1
|
||||
#define GPR_GCC_ATOMIC 1
|
||||
#define GPR_GCC_TLS 1
|
||||
#define GPR_LINUX 1
|
||||
#define GPR_LINUX_LOG
|
||||
#define GPR_SUPPORT_CHANNELS_FROM_FD 1
|
||||
#define GPR_LINUX_ENV 1
|
||||
#define GPR_POSIX_TMPFILE 1
|
||||
#define GPR_POSIX_STRING 1
|
||||
#define GPR_POSIX_SUBPROCESS 1
|
||||
#define GPR_POSIX_SYNC 1
|
||||
#define GPR_POSIX_TIME 1
|
||||
#define GPR_HAS_PTHREAD_H 1
|
||||
#define GPR_GETPID_IN_UNISTD_H 1
|
||||
#ifdef _LP64
|
||||
#define GPR_ARCH_64 1
|
||||
#else /* _LP64 */
|
||||
#define GPR_ARCH_32 1
|
||||
#endif /* _LP64 */
|
||||
#ifdef __GLIBC__
|
||||
#define GPR_POSIX_CRASH_HANDLER 1
|
||||
#define GPR_LINUX_PTHREAD_NAME 1
|
||||
#include <linux/version.h>
|
||||
#else /* musl libc */
|
||||
#define GPR_MUSL_LIBC_COMPAT 1
|
||||
#endif
|
||||
#elif defined(__APPLE__)
|
||||
#include <Availability.h>
|
||||
#include <TargetConditionals.h>
|
||||
#ifndef _BSD_SOURCE
|
||||
#define _BSD_SOURCE
|
||||
#endif
|
||||
#if TARGET_OS_IPHONE
|
||||
#define GPR_PLATFORM_STRING "ios"
|
||||
#define GPR_CPU_IPHONE 1
|
||||
#define GPR_PTHREAD_TLS 1
|
||||
#define GRPC_CFSTREAM 1
|
||||
/* the c-ares resolver isnt safe to enable on iOS */
|
||||
#define GRPC_ARES 0
|
||||
#else /* TARGET_OS_IPHONE */
|
||||
#define GPR_PLATFORM_STRING "osx"
|
||||
#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
|
||||
#if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7
|
||||
#define GPR_CPU_IPHONE 1
|
||||
#define GPR_PTHREAD_TLS 1
|
||||
#else /* __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7 */
|
||||
#define GPR_CPU_POSIX 1
|
||||
/* TODO(vjpai): there is a reported issue in bazel build for Mac where __thread
|
||||
in a header is currently not working (bazelbuild/bazel#4341). Remove
|
||||
the following conditional and use GPR_GCC_TLS when that is fixed */
|
||||
#ifndef GRPC_BAZEL_BUILD
|
||||
#define GPR_GCC_TLS 1
|
||||
#else /* GRPC_BAZEL_BUILD */
|
||||
#define GPR_PTHREAD_TLS 1
|
||||
#endif /* GRPC_BAZEL_BUILD */
|
||||
#define GPR_APPLE_PTHREAD_NAME 1
|
||||
#endif
|
||||
#else /* __MAC_OS_X_VERSION_MIN_REQUIRED */
|
||||
#define GPR_CPU_POSIX 1
|
||||
/* TODO(vjpai): Remove the following conditional and use only GPR_GCC_TLS
|
||||
when bazelbuild/bazel#4341 is fixed */
|
||||
#ifndef GRPC_BAZEL_BUILD
|
||||
#define GPR_GCC_TLS 1
|
||||
#else /* GRPC_BAZEL_BUILD */
|
||||
#define GPR_PTHREAD_TLS 1
|
||||
#endif /* GRPC_BAZEL_BUILD */
|
||||
#endif
|
||||
#define GPR_POSIX_CRASH_HANDLER 1
|
||||
#endif
|
||||
#define GPR_APPLE 1
|
||||
#define GPR_GCC_ATOMIC 1
|
||||
#define GPR_POSIX_LOG 1
|
||||
#define GPR_POSIX_ENV 1
|
||||
#define GPR_POSIX_TMPFILE 1
|
||||
#define GPR_POSIX_STRING 1
|
||||
#define GPR_POSIX_SUBPROCESS 1
|
||||
#define GPR_POSIX_SYNC 1
|
||||
#define GPR_POSIX_TIME 1
|
||||
#define GPR_HAS_PTHREAD_H 1
|
||||
#define GPR_GETPID_IN_UNISTD_H 1
|
||||
#ifndef GRPC_CFSTREAM
|
||||
#define GPR_SUPPORT_CHANNELS_FROM_FD 1
|
||||
#endif
|
||||
#ifdef _LP64
|
||||
#define GPR_ARCH_64 1
|
||||
#else /* _LP64 */
|
||||
#define GPR_ARCH_32 1
|
||||
#endif /* _LP64 */
|
||||
#elif defined(__FreeBSD__)
|
||||
#define GPR_PLATFORM_STRING "freebsd"
|
||||
#ifndef _BSD_SOURCE
|
||||
#define _BSD_SOURCE
|
||||
#endif
|
||||
#define GPR_FREEBSD 1
|
||||
#define GPR_CPU_POSIX 1
|
||||
#define GPR_GCC_ATOMIC 1
|
||||
#define GPR_GCC_TLS 1
|
||||
#define GPR_POSIX_LOG 1
|
||||
#define GPR_POSIX_ENV 1
|
||||
#define GPR_POSIX_TMPFILE 1
|
||||
#define GPR_POSIX_STRING 1
|
||||
#define GPR_POSIX_SUBPROCESS 1
|
||||
#define GPR_POSIX_SYNC 1
|
||||
#define GPR_POSIX_TIME 1
|
||||
#define GPR_HAS_PTHREAD_H 1
|
||||
#define GPR_GETPID_IN_UNISTD_H 1
|
||||
#define GPR_SUPPORT_CHANNELS_FROM_FD 1
|
||||
#ifdef _LP64
|
||||
#define GPR_ARCH_64 1
|
||||
#else /* _LP64 */
|
||||
#define GPR_ARCH_32 1
|
||||
#endif /* _LP64 */
|
||||
#elif defined(__OpenBSD__)
|
||||
#define GPR_PLATFORM_STRING "openbsd"
|
||||
#ifndef _BSD_SOURCE
|
||||
#define _BSD_SOURCE
|
||||
#endif
|
||||
#define GPR_OPENBSD 1
|
||||
#define GPR_CPU_POSIX 1
|
||||
#define GPR_GCC_ATOMIC 1
|
||||
#define GPR_GCC_TLS 1
|
||||
#define GPR_POSIX_LOG 1
|
||||
#define GPR_POSIX_ENV 1
|
||||
#define GPR_POSIX_TMPFILE 1
|
||||
#define GPR_POSIX_STRING 1
|
||||
#define GPR_POSIX_SUBPROCESS 1
|
||||
#define GPR_POSIX_SYNC 1
|
||||
#define GPR_POSIX_TIME 1
|
||||
#define GPR_HAS_PTHREAD_H 1
|
||||
#define GPR_GETPID_IN_UNISTD_H 1
|
||||
#define GPR_SUPPORT_CHANNELS_FROM_FD 1
|
||||
#ifdef _LP64
|
||||
#define GPR_ARCH_64 1
|
||||
#else /* _LP64 */
|
||||
#define GPR_ARCH_32 1
|
||||
#endif /* _LP64 */
|
||||
#elif defined(__sun) && defined(__SVR4)
|
||||
#define GPR_PLATFORM_STRING "solaris"
|
||||
#define GPR_SOLARIS 1
|
||||
#define GPR_CPU_POSIX 1
|
||||
#define GPR_GCC_ATOMIC 1
|
||||
#define GPR_GCC_TLS 1
|
||||
#define GPR_POSIX_LOG 1
|
||||
#define GPR_POSIX_ENV 1
|
||||
#define GPR_POSIX_TMPFILE 1
|
||||
#define GPR_POSIX_STRING 1
|
||||
#define GPR_POSIX_SUBPROCESS 1
|
||||
#define GPR_POSIX_SYNC 1
|
||||
#define GPR_POSIX_TIME 1
|
||||
#define GPR_HAS_PTHREAD_H 1
|
||||
#define GPR_GETPID_IN_UNISTD_H 1
|
||||
#ifdef _LP64
|
||||
#define GPR_ARCH_64 1
|
||||
#else /* _LP64 */
|
||||
#define GPR_ARCH_32 1
|
||||
#endif /* _LP64 */
|
||||
#elif defined(_AIX)
|
||||
#define GPR_PLATFORM_STRING "aix"
|
||||
#ifndef _ALL_SOURCE
|
||||
#define _ALL_SOURCE
|
||||
#endif
|
||||
#define GPR_AIX 1
|
||||
#define GPR_CPU_POSIX 1
|
||||
#define GPR_GCC_ATOMIC 1
|
||||
#define GPR_GCC_TLS 1
|
||||
#define GPR_POSIX_LOG 1
|
||||
#define GPR_POSIX_ENV 1
|
||||
#define GPR_POSIX_TMPFILE 1
|
||||
#define GPR_POSIX_STRING 1
|
||||
#define GPR_POSIX_SUBPROCESS 1
|
||||
#define GPR_POSIX_SYNC 1
|
||||
#define GPR_POSIX_TIME 1
|
||||
#define GPR_HAS_PTHREAD_H 1
|
||||
#define GPR_GETPID_IN_UNISTD_H 1
|
||||
#ifdef _LP64
|
||||
#define GPR_ARCH_64 1
|
||||
#else /* _LP64 */
|
||||
#define GPR_ARCH_32 1
|
||||
#endif /* _LP64 */
|
||||
#elif defined(__native_client__)
|
||||
#define GPR_PLATFORM_STRING "nacl"
|
||||
#ifndef _BSD_SOURCE
|
||||
#define _BSD_SOURCE
|
||||
#endif
|
||||
#ifndef _DEFAULT_SOURCE
|
||||
#define _DEFAULT_SOURCE
|
||||
#endif
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#define GPR_NACL 1
|
||||
#define GPR_CPU_POSIX 1
|
||||
#define GPR_GCC_ATOMIC 1
|
||||
#define GPR_GCC_TLS 1
|
||||
#define GPR_POSIX_LOG 1
|
||||
#define GPR_POSIX_ENV 1
|
||||
#define GPR_POSIX_TMPFILE 1
|
||||
#define GPR_POSIX_STRING 1
|
||||
#define GPR_POSIX_SUBPROCESS 1
|
||||
#define GPR_POSIX_SYNC 1
|
||||
#define GPR_POSIX_TIME 1
|
||||
#define GPR_HAS_PTHREAD_H 1
|
||||
#define GPR_GETPID_IN_UNISTD_H 1
|
||||
#ifdef _LP64
|
||||
#define GPR_ARCH_64 1
|
||||
#else /* _LP64 */
|
||||
#define GPR_ARCH_32 1
|
||||
#endif /* _LP64 */
|
||||
#elif defined(__Fuchsia__)
|
||||
#define GPR_FUCHSIA 1
|
||||
#define GPR_ARCH_64 1
|
||||
#define GPR_PLATFORM_STRING "fuchsia"
|
||||
#include <features.h>
|
||||
// Specifying musl libc affects wrap_memcpy.c. It causes memmove() to be
|
||||
// invoked.
|
||||
#define GPR_MUSL_LIBC_COMPAT 1
|
||||
#define GPR_CPU_POSIX 1
|
||||
#define GPR_GCC_ATOMIC 1
|
||||
#define GPR_PTHREAD_TLS 1
|
||||
#define GPR_POSIX_LOG 1
|
||||
#define GPR_POSIX_SYNC 1
|
||||
#define GPR_POSIX_ENV 1
|
||||
#define GPR_POSIX_TMPFILE 1
|
||||
#define GPR_POSIX_SUBPROCESS 1
|
||||
#define GPR_POSIX_SYNC 1
|
||||
#define GPR_POSIX_STRING 1
|
||||
#define GPR_POSIX_TIME 1
|
||||
#define GPR_HAS_PTHREAD_H 1
|
||||
#define GPR_GETPID_IN_UNISTD_H 1
|
||||
#else
|
||||
#error "Could not auto-detect platform"
|
||||
#endif
|
||||
#endif /* GPR_NO_AUTODETECT_PLATFORM */
|
||||
|
||||
#if defined(GPR_BACKWARDS_COMPATIBILITY_MODE)
|
||||
/*
|
||||
* For backward compatibility mode, reset _FORTIFY_SOURCE to prevent
|
||||
* a library from having non-standard symbols such as __asprintf_chk.
|
||||
* This helps non-glibc systems such as alpine using musl to find symbols.
|
||||
*/
|
||||
#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0
|
||||
#undef _FORTIFY_SOURCE
|
||||
#define _FORTIFY_SOURCE 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* There are platforms for which TLS should not be used even though the
|
||||
* compiler makes it seem like it's supported (Android NDK < r12b for example).
|
||||
* This is primarily because of linker problems and toolchain misconfiguration:
|
||||
* TLS isn't supported until NDK r12b per
|
||||
* https://developer.android.com/ndk/downloads/revision_history.html
|
||||
* TLS also does not work with Android NDK if GCC is being used as the compiler
|
||||
* instead of Clang.
|
||||
* Since NDK r16, `__NDK_MAJOR__` and `__NDK_MINOR__` are defined in
|
||||
* <android/ndk-version.h>. For NDK < r16, users should define these macros,
|
||||
* e.g. `-D__NDK_MAJOR__=11 -D__NKD_MINOR__=0` for NDK r11. */
|
||||
#if defined(__ANDROID__) && defined(GPR_GCC_TLS)
|
||||
#if __has_include(<android/ndk-version.h>)
|
||||
#include <android/ndk-version.h>
|
||||
#endif /* __has_include(<android/ndk-version.h>) */
|
||||
#if (defined(__clang__) && defined(__NDK_MAJOR__) && defined(__NDK_MINOR__) && \
|
||||
((__NDK_MAJOR__ < 12) || \
|
||||
((__NDK_MAJOR__ == 12) && (__NDK_MINOR__ < 1)))) || \
|
||||
(defined(__GNUC__) && !defined(__clang__))
|
||||
#undef GPR_GCC_TLS
|
||||
#define GPR_PTHREAD_TLS 1
|
||||
#endif
|
||||
#endif /*defined(__ANDROID__) && defined(GPR_GCC_TLS) */
|
||||
|
||||
#if defined(__has_include)
|
||||
#if __has_include(<atomic>)
|
||||
#define GRPC_HAS_CXX11_ATOMIC
|
||||
#endif /* __has_include(<atomic>) */
|
||||
#endif /* defined(__has_include) */
|
||||
|
||||
#ifndef GPR_PLATFORM_STRING
|
||||
#warning "GPR_PLATFORM_STRING not auto-detected"
|
||||
#define GPR_PLATFORM_STRING "unknown"
|
||||
#endif
|
||||
|
||||
#ifdef GPR_GCOV
|
||||
#undef GPR_FORBID_UNREACHABLE_CODE
|
||||
#define GPR_FORBID_UNREACHABLE_CODE 1
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#if _MSC_VER < 1700
|
||||
typedef __int8 int8_t;
|
||||
typedef __int16 int16_t;
|
||||
typedef __int32 int32_t;
|
||||
typedef __int64 int64_t;
|
||||
typedef unsigned __int8 uint8_t;
|
||||
typedef unsigned __int16 uint16_t;
|
||||
typedef unsigned __int32 uint32_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif /* _MSC_VER < 1700 */
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
/* Type of cycle clock implementation */
|
||||
#ifdef GPR_LINUX
|
||||
/* Disable cycle clock by default.
|
||||
TODO(soheil): enable when we support fallback for unstable cycle clocks.
|
||||
#if defined(__i386__)
|
||||
#define GPR_CYCLE_COUNTER_RDTSC_32 1
|
||||
#elif defined(__x86_64__) || defined(__amd64__)
|
||||
#define GPR_CYCLE_COUNTER_RDTSC_64 1
|
||||
#else
|
||||
#define GPR_CYCLE_COUNTER_FALLBACK 1
|
||||
#endif
|
||||
*/
|
||||
#define GPR_CYCLE_COUNTER_FALLBACK 1
|
||||
#else
|
||||
#define GPR_CYCLE_COUNTER_FALLBACK 1
|
||||
#endif /* GPR_LINUX */
|
||||
|
||||
/* Cache line alignment */
|
||||
#ifndef GPR_CACHELINE_SIZE_LOG
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
#define GPR_CACHELINE_SIZE_LOG 6
|
||||
#endif
|
||||
#ifndef GPR_CACHELINE_SIZE_LOG
|
||||
/* A reasonable default guess. Note that overestimates tend to waste more
|
||||
space, while underestimates tend to waste more time. */
|
||||
#define GPR_CACHELINE_SIZE_LOG 6
|
||||
#endif /* GPR_CACHELINE_SIZE_LOG */
|
||||
#endif /* GPR_CACHELINE_SIZE_LOG */
|
||||
|
||||
#define GPR_CACHELINE_SIZE (1 << GPR_CACHELINE_SIZE_LOG)
|
||||
|
||||
/* scrub GCC_ATOMIC if it's not available on this compiler */
|
||||
#if defined(GPR_GCC_ATOMIC) && !defined(__ATOMIC_RELAXED)
|
||||
#undef GPR_GCC_ATOMIC
|
||||
#define GPR_GCC_SYNC 1
|
||||
#endif
|
||||
|
||||
/* Validate platform combinations */
|
||||
#if defined(GPR_GCC_ATOMIC) + defined(GPR_GCC_SYNC) + \
|
||||
defined(GPR_WINDOWS_ATOMIC) != \
|
||||
1
|
||||
#error Must define exactly one of GPR_GCC_ATOMIC, GPR_GCC_SYNC, GPR_WINDOWS_ATOMIC
|
||||
#endif
|
||||
|
||||
#if defined(GPR_ARCH_32) + defined(GPR_ARCH_64) != 1
|
||||
#error Must define exactly one of GPR_ARCH_32, GPR_ARCH_64
|
||||
#endif
|
||||
|
||||
#if defined(GPR_CPU_LINUX) + defined(GPR_CPU_POSIX) + defined(GPR_WINDOWS) + \
|
||||
defined(GPR_CPU_IPHONE) + defined(GPR_CPU_CUSTOM) != \
|
||||
1
|
||||
#error Must define exactly one of GPR_CPU_LINUX, GPR_CPU_POSIX, GPR_WINDOWS, GPR_CPU_IPHONE, GPR_CPU_CUSTOM
|
||||
#endif
|
||||
|
||||
#if defined(GPR_MSVC_TLS) + defined(GPR_GCC_TLS) + defined(GPR_PTHREAD_TLS) + \
|
||||
defined(GPR_CUSTOM_TLS) != \
|
||||
1
|
||||
#error Must define exactly one of GPR_MSVC_TLS, GPR_GCC_TLS, GPR_PTHREAD_TLS, GPR_CUSTOM_TLS
|
||||
#endif
|
||||
|
||||
/* maximum alignment needed for any type on this platform, rounded up to a
|
||||
power of two */
|
||||
#define GPR_MAX_ALIGNMENT 16
|
||||
|
||||
#ifndef GRPC_ARES
|
||||
#define GRPC_ARES 1
|
||||
#endif
|
||||
|
||||
#ifndef GRPC_IF_NAMETOINDEX
|
||||
#define GRPC_IF_NAMETOINDEX 1
|
||||
#endif
|
||||
|
||||
#ifndef GRPC_MUST_USE_RESULT
|
||||
#if defined(__GNUC__) && !defined(__MINGW32__)
|
||||
#define GRPC_MUST_USE_RESULT __attribute__((warn_unused_result))
|
||||
#define GPR_ALIGN_STRUCT(n) __attribute__((aligned(n)))
|
||||
#else
|
||||
#define GRPC_MUST_USE_RESULT
|
||||
#define GPR_ALIGN_STRUCT(n)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef GRPC_UNUSED
|
||||
#if defined(__GNUC__) && !defined(__MINGW32__)
|
||||
#define GRPC_UNUSED __attribute__((unused))
|
||||
#else
|
||||
#define GRPC_UNUSED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef GPR_PRINT_FORMAT_CHECK
|
||||
#ifdef __GNUC__
|
||||
#define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) \
|
||||
__attribute__((format(printf, FORMAT_STR, ARGS)))
|
||||
#else
|
||||
#define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS)
|
||||
#endif
|
||||
#endif /* GPR_PRINT_FORMAT_CHECK */
|
||||
|
||||
#if GPR_FORBID_UNREACHABLE_CODE
|
||||
#define GPR_UNREACHABLE_CODE(STATEMENT)
|
||||
#else
|
||||
#define GPR_UNREACHABLE_CODE(STATEMENT) \
|
||||
do { \
|
||||
gpr_log(GPR_ERROR, "Should never reach here."); \
|
||||
abort(); \
|
||||
STATEMENT; \
|
||||
} while (0)
|
||||
#endif /* GPR_FORBID_UNREACHABLE_CODE */
|
||||
|
||||
#ifndef GPRAPI
|
||||
#define GPRAPI
|
||||
#endif
|
||||
|
||||
#ifndef GRPCAPI
|
||||
#define GRPCAPI GPRAPI
|
||||
#endif
|
||||
|
||||
#ifndef CENSUSAPI
|
||||
#define CENSUSAPI GRPCAPI
|
||||
#endif
|
||||
|
||||
#ifndef GPR_HAS_ATTRIBUTE
|
||||
#ifdef __has_attribute
|
||||
#define GPR_HAS_ATTRIBUTE(a) __has_attribute(a)
|
||||
#else
|
||||
#define GPR_HAS_ATTRIBUTE(a) 0
|
||||
#endif
|
||||
#endif /* GPR_HAS_ATTRIBUTE */
|
||||
|
||||
#ifndef GPR_HAS_FEATURE
|
||||
#ifdef __has_feature
|
||||
#define GPR_HAS_FEATURE(a) __has_feature(a)
|
||||
#else
|
||||
#define GPR_HAS_FEATURE(a) 0
|
||||
#endif
|
||||
#endif /* GPR_HAS_FEATURE */
|
||||
|
||||
#ifndef GPR_ATTRIBUTE_NOINLINE
|
||||
#if GPR_HAS_ATTRIBUTE(noinline) || (defined(__GNUC__) && !defined(__clang__))
|
||||
#define GPR_ATTRIBUTE_NOINLINE __attribute__((noinline))
|
||||
#define GPR_HAS_ATTRIBUTE_NOINLINE 1
|
||||
#else
|
||||
#define GPR_ATTRIBUTE_NOINLINE
|
||||
#endif
|
||||
#endif /* GPR_ATTRIBUTE_NOINLINE */
|
||||
|
||||
#ifndef GPR_ATTRIBUTE_WEAK
|
||||
/* Attribute weak is broken on LLVM/windows:
|
||||
* https://bugs.llvm.org/show_bug.cgi?id=37598 */
|
||||
#if (GPR_HAS_ATTRIBUTE(weak) || (defined(__GNUC__) && !defined(__clang__))) && \
|
||||
!(defined(__llvm__) && defined(_WIN32))
|
||||
#define GPR_ATTRIBUTE_WEAK __attribute__((weak))
|
||||
#define GPR_HAS_ATTRIBUTE_WEAK 1
|
||||
#else
|
||||
#define GPR_ATTRIBUTE_WEAK
|
||||
#endif
|
||||
#endif /* GPR_ATTRIBUTE_WEAK */
|
||||
|
||||
#ifndef GPR_ATTRIBUTE_NO_TSAN /* (1) */
|
||||
#if GPR_HAS_FEATURE(thread_sanitizer)
|
||||
#define GPR_ATTRIBUTE_NO_TSAN __attribute__((no_sanitize("thread")))
|
||||
#endif /* GPR_HAS_FEATURE */
|
||||
#ifndef GPR_ATTRIBUTE_NO_TSAN /* (2) */
|
||||
#define GPR_ATTRIBUTE_NO_TSAN
|
||||
#endif /* GPR_ATTRIBUTE_NO_TSAN (2) */
|
||||
#endif /* GPR_ATTRIBUTE_NO_TSAN (1) */
|
||||
|
||||
/* GRPC_TSAN_ENABLED will be defined, when compiled with thread sanitizer. */
|
||||
#if defined(__SANITIZE_THREAD__)
|
||||
#define GRPC_TSAN_ENABLED
|
||||
#elif GPR_HAS_FEATURE(thread_sanitizer)
|
||||
#define GRPC_TSAN_ENABLED
|
||||
#endif
|
||||
|
||||
/* GRPC_ASAN_ENABLED will be defined, when compiled with address sanitizer. */
|
||||
#if defined(__SANITIZE_ADDRESS__)
|
||||
#define GRPC_ASAN_ENABLED
|
||||
#elif GPR_HAS_FEATURE(address_sanitizer)
|
||||
#define GRPC_ASAN_ENABLED
|
||||
#endif
|
||||
|
||||
/* GRPC_ALLOW_EXCEPTIONS should be 0 or 1 if exceptions are allowed or not */
|
||||
#ifndef GRPC_ALLOW_EXCEPTIONS
|
||||
/* If not already set, set to 1 on Windows (style guide standard) but to
|
||||
* 0 on non-Windows platforms unless the compiler defines __EXCEPTIONS */
|
||||
#ifdef GPR_WINDOWS
|
||||
#define GRPC_ALLOW_EXCEPTIONS 1
|
||||
#else /* GPR_WINDOWS */
|
||||
#ifdef __EXCEPTIONS
|
||||
#define GRPC_ALLOW_EXCEPTIONS 1
|
||||
#else /* __EXCEPTIONS */
|
||||
#define GRPC_ALLOW_EXCEPTIONS 0
|
||||
#endif /* __EXCEPTIONS */
|
||||
#endif /* __GPR_WINDOWS */
|
||||
#endif /* GRPC_ALLOW_EXCEPTIONS */
|
||||
|
||||
/* Use GPR_LIKELY only in cases where you are sure that a certain outcome is the
|
||||
* most likely. Ideally, also collect performance numbers to justify the claim.
|
||||
*/
|
||||
#ifdef __GNUC__
|
||||
#define GPR_LIKELY(x) __builtin_expect((x), 1)
|
||||
#define GPR_UNLIKELY(x) __builtin_expect((x), 0)
|
||||
#else /* __GNUC__ */
|
||||
#define GPR_LIKELY(x) (x)
|
||||
#define GPR_UNLIKELY(x) (x)
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#ifndef __STDC_FORMAT_MACROS
|
||||
#define __STDC_FORMAT_MACROS
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_PORT_PLATFORM_H */
|
52
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/propagation_bits.h
generated
vendored
Normal file
52
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/propagation_bits.h
generated
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_PROPAGATION_BITS_H
|
||||
#define GRPC_IMPL_CODEGEN_PROPAGATION_BITS_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Propagation bits: this can be bitwise or-ed to form propagation_mask for
|
||||
* grpc_call */
|
||||
/** Propagate deadline */
|
||||
#define GRPC_PROPAGATE_DEADLINE ((uint32_t)1)
|
||||
/** Propagate census context */
|
||||
#define GRPC_PROPAGATE_CENSUS_STATS_CONTEXT ((uint32_t)2)
|
||||
#define GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT ((uint32_t)4)
|
||||
/** Propagate cancellation */
|
||||
#define GRPC_PROPAGATE_CANCELLATION ((uint32_t)8)
|
||||
|
||||
/** Default propagation mask: clients of the core API are encouraged to encode
|
||||
deltas from this in their implementations... ie write:
|
||||
GRPC_PROPAGATE_DEFAULTS & ~GRPC_PROPAGATE_DEADLINE to disable deadline
|
||||
propagation. Doing so gives flexibility in the future to define new
|
||||
propagation types that are default inherited or not. */
|
||||
#define GRPC_PROPAGATE_DEFAULTS \
|
||||
((uint32_t)(( \
|
||||
0xffff | GRPC_PROPAGATE_DEADLINE | GRPC_PROPAGATE_CENSUS_STATS_CONTEXT | \
|
||||
GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT | GRPC_PROPAGATE_CANCELLATION)))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_PROPAGATION_BITS_H */
|
127
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/slice.h
generated
vendored
Normal file
127
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/slice.h
generated
vendored
Normal file
@ -0,0 +1,127 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_SLICE_H
|
||||
#define GRPC_IMPL_CODEGEN_SLICE_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#include <grpc/impl/codegen/gpr_slice.h>
|
||||
|
||||
typedef struct grpc_slice grpc_slice;
|
||||
|
||||
/** Slice API
|
||||
|
||||
A slice represents a contiguous reference counted array of bytes.
|
||||
It is cheap to take references to a slice, and it is cheap to create a
|
||||
slice pointing to a subset of another slice.
|
||||
|
||||
The data-structure for slices is exposed here to allow non-gpr code to
|
||||
build slices from whatever data they have available.
|
||||
|
||||
When defining interfaces that handle slices, care should be taken to define
|
||||
reference ownership semantics (who should call unref?) and mutability
|
||||
constraints (is the callee allowed to modify the slice?) */
|
||||
|
||||
/* Inlined half of grpc_slice is allowed to expand the size of the overall type
|
||||
by this many bytes */
|
||||
#define GRPC_SLICE_INLINE_EXTRA_SIZE sizeof(void*)
|
||||
|
||||
#define GRPC_SLICE_INLINED_SIZE \
|
||||
(sizeof(size_t) + sizeof(uint8_t*) - 1 + GRPC_SLICE_INLINE_EXTRA_SIZE)
|
||||
|
||||
struct grpc_slice_refcount;
|
||||
/** A grpc_slice s, if initialized, represents the byte range
|
||||
s.bytes[0..s.length-1].
|
||||
|
||||
It can have an associated ref count which has a destruction routine to be run
|
||||
when the ref count reaches zero (see grpc_slice_new() and grp_slice_unref()).
|
||||
Multiple grpc_slice values may share a ref count.
|
||||
|
||||
If the slice does not have a refcount, it represents an inlined small piece
|
||||
of data that is copied by value. */
|
||||
struct grpc_slice {
|
||||
struct grpc_slice_refcount* refcount;
|
||||
union grpc_slice_data {
|
||||
struct grpc_slice_refcounted {
|
||||
size_t length;
|
||||
uint8_t* bytes;
|
||||
} refcounted;
|
||||
struct grpc_slice_inlined {
|
||||
uint8_t length;
|
||||
uint8_t bytes[GRPC_SLICE_INLINED_SIZE];
|
||||
} inlined;
|
||||
} data;
|
||||
};
|
||||
|
||||
#define GRPC_SLICE_BUFFER_INLINE_ELEMENTS 8
|
||||
|
||||
/** Represents an expandable array of slices, to be interpreted as a
|
||||
single item. */
|
||||
typedef struct grpc_slice_buffer {
|
||||
/** This is for internal use only. External users (i.e any code outside grpc
|
||||
* core) MUST NOT use this field */
|
||||
grpc_slice* base_slices;
|
||||
|
||||
/** slices in the array (Points to the first valid grpc_slice in the array) */
|
||||
grpc_slice* slices;
|
||||
/** the number of slices in the array */
|
||||
size_t count;
|
||||
/** the number of slices allocated in the array. External users (i.e any code
|
||||
* outside grpc core) MUST NOT use this field */
|
||||
size_t capacity;
|
||||
/** the combined length of all slices in the array */
|
||||
size_t length;
|
||||
/** inlined elements to avoid allocations */
|
||||
grpc_slice inlined[GRPC_SLICE_BUFFER_INLINE_ELEMENTS];
|
||||
} grpc_slice_buffer;
|
||||
|
||||
#define GRPC_SLICE_START_PTR(slice) \
|
||||
((slice).refcount ? (slice).data.refcounted.bytes \
|
||||
: (slice).data.inlined.bytes)
|
||||
#define GRPC_SLICE_LENGTH(slice) \
|
||||
((slice).refcount ? (slice).data.refcounted.length \
|
||||
: (slice).data.inlined.length)
|
||||
#define GRPC_SLICE_SET_LENGTH(slice, newlen) \
|
||||
((slice).refcount ? ((slice).data.refcounted.length = (size_t)(newlen)) \
|
||||
: ((slice).data.inlined.length = (uint8_t)(newlen)))
|
||||
#define GRPC_SLICE_END_PTR(slice) \
|
||||
GRPC_SLICE_START_PTR(slice) + GRPC_SLICE_LENGTH(slice)
|
||||
#define GRPC_SLICE_IS_EMPTY(slice) (GRPC_SLICE_LENGTH(slice) == 0)
|
||||
|
||||
#ifdef GRPC_ALLOW_GPR_SLICE_FUNCTIONS
|
||||
|
||||
/* Duplicate GPR_* definitions */
|
||||
#define GPR_SLICE_START_PTR(slice) \
|
||||
((slice).refcount ? (slice).data.refcounted.bytes \
|
||||
: (slice).data.inlined.bytes)
|
||||
#define GPR_SLICE_LENGTH(slice) \
|
||||
((slice).refcount ? (slice).data.refcounted.length \
|
||||
: (slice).data.inlined.length)
|
||||
#define GPR_SLICE_SET_LENGTH(slice, newlen) \
|
||||
((slice).refcount ? ((slice).data.refcounted.length = (size_t)(newlen)) \
|
||||
: ((slice).data.inlined.length = (uint8_t)(newlen)))
|
||||
#define GPR_SLICE_END_PTR(slice) \
|
||||
GRPC_SLICE_START_PTR(slice) + GRPC_SLICE_LENGTH(slice)
|
||||
#define GPR_SLICE_IS_EMPTY(slice) (GRPC_SLICE_LENGTH(slice) == 0)
|
||||
|
||||
#endif /* GRPC_ALLOW_GPR_SLICE_FUNCTIONS */
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_SLICE_H */
|
154
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/status.h
generated
vendored
Normal file
154
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/status.h
generated
vendored
Normal file
@ -0,0 +1,154 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_STATUS_H
|
||||
#define GRPC_IMPL_CODEGEN_STATUS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
/** Not an error; returned on success */
|
||||
GRPC_STATUS_OK = 0,
|
||||
|
||||
/** The operation was cancelled (typically by the caller). */
|
||||
GRPC_STATUS_CANCELLED = 1,
|
||||
|
||||
/** Unknown error. An example of where this error may be returned is
|
||||
if a Status value received from another address space belongs to
|
||||
an error-space that is not known in this address space. Also
|
||||
errors raised by APIs that do not return enough error information
|
||||
may be converted to this error. */
|
||||
GRPC_STATUS_UNKNOWN = 2,
|
||||
|
||||
/** Client specified an invalid argument. Note that this differs
|
||||
from FAILED_PRECONDITION. INVALID_ARGUMENT indicates arguments
|
||||
that are problematic regardless of the state of the system
|
||||
(e.g., a malformed file name). */
|
||||
GRPC_STATUS_INVALID_ARGUMENT = 3,
|
||||
|
||||
/** Deadline expired before operation could complete. For operations
|
||||
that change the state of the system, this error may be returned
|
||||
even if the operation has completed successfully. For example, a
|
||||
successful response from a server could have been delayed long
|
||||
enough for the deadline to expire. */
|
||||
GRPC_STATUS_DEADLINE_EXCEEDED = 4,
|
||||
|
||||
/** Some requested entity (e.g., file or directory) was not found. */
|
||||
GRPC_STATUS_NOT_FOUND = 5,
|
||||
|
||||
/** Some entity that we attempted to create (e.g., file or directory)
|
||||
already exists. */
|
||||
GRPC_STATUS_ALREADY_EXISTS = 6,
|
||||
|
||||
/** The caller does not have permission to execute the specified
|
||||
operation. PERMISSION_DENIED must not be used for rejections
|
||||
caused by exhausting some resource (use RESOURCE_EXHAUSTED
|
||||
instead for those errors). PERMISSION_DENIED must not be
|
||||
used if the caller can not be identified (use UNAUTHENTICATED
|
||||
instead for those errors). */
|
||||
GRPC_STATUS_PERMISSION_DENIED = 7,
|
||||
|
||||
/** The request does not have valid authentication credentials for the
|
||||
operation. */
|
||||
GRPC_STATUS_UNAUTHENTICATED = 16,
|
||||
|
||||
/** Some resource has been exhausted, perhaps a per-user quota, or
|
||||
perhaps the entire file system is out of space. */
|
||||
GRPC_STATUS_RESOURCE_EXHAUSTED = 8,
|
||||
|
||||
/** Operation was rejected because the system is not in a state
|
||||
required for the operation's execution. For example, directory
|
||||
to be deleted may be non-empty, an rmdir operation is applied to
|
||||
a non-directory, etc.
|
||||
|
||||
A litmus test that may help a service implementor in deciding
|
||||
between FAILED_PRECONDITION, ABORTED, and UNAVAILABLE:
|
||||
(a) Use UNAVAILABLE if the client can retry just the failing call.
|
||||
(b) Use ABORTED if the client should retry at a higher-level
|
||||
(e.g., restarting a read-modify-write sequence).
|
||||
(c) Use FAILED_PRECONDITION if the client should not retry until
|
||||
the system state has been explicitly fixed. E.g., if an "rmdir"
|
||||
fails because the directory is non-empty, FAILED_PRECONDITION
|
||||
should be returned since the client should not retry unless
|
||||
they have first fixed up the directory by deleting files from it.
|
||||
(d) Use FAILED_PRECONDITION if the client performs conditional
|
||||
REST Get/Update/Delete on a resource and the resource on the
|
||||
server does not match the condition. E.g., conflicting
|
||||
read-modify-write on the same resource. */
|
||||
GRPC_STATUS_FAILED_PRECONDITION = 9,
|
||||
|
||||
/** The operation was aborted, typically due to a concurrency issue
|
||||
like sequencer check failures, transaction aborts, etc.
|
||||
|
||||
See litmus test above for deciding between FAILED_PRECONDITION,
|
||||
ABORTED, and UNAVAILABLE. */
|
||||
GRPC_STATUS_ABORTED = 10,
|
||||
|
||||
/** Operation was attempted past the valid range. E.g., seeking or
|
||||
reading past end of file.
|
||||
|
||||
Unlike INVALID_ARGUMENT, this error indicates a problem that may
|
||||
be fixed if the system state changes. For example, a 32-bit file
|
||||
system will generate INVALID_ARGUMENT if asked to read at an
|
||||
offset that is not in the range [0,2^32-1], but it will generate
|
||||
OUT_OF_RANGE if asked to read from an offset past the current
|
||||
file size.
|
||||
|
||||
There is a fair bit of overlap between FAILED_PRECONDITION and
|
||||
OUT_OF_RANGE. We recommend using OUT_OF_RANGE (the more specific
|
||||
error) when it applies so that callers who are iterating through
|
||||
a space can easily look for an OUT_OF_RANGE error to detect when
|
||||
they are done. */
|
||||
GRPC_STATUS_OUT_OF_RANGE = 11,
|
||||
|
||||
/** Operation is not implemented or not supported/enabled in this service. */
|
||||
GRPC_STATUS_UNIMPLEMENTED = 12,
|
||||
|
||||
/** Internal errors. Means some invariants expected by underlying
|
||||
system has been broken. If you see one of these errors,
|
||||
something is very broken. */
|
||||
GRPC_STATUS_INTERNAL = 13,
|
||||
|
||||
/** The service is currently unavailable. This is a most likely a
|
||||
transient condition and may be corrected by retrying with
|
||||
a backoff. Note that it is not always safe to retry non-idempotent
|
||||
operations.
|
||||
|
||||
WARNING: Although data MIGHT not have been transmitted when this
|
||||
status occurs, there is NOT A GUARANTEE that the server has not seen
|
||||
anything. So in general it is unsafe to retry on this status code
|
||||
if the call is non-idempotent.
|
||||
|
||||
See litmus test above for deciding between FAILED_PRECONDITION,
|
||||
ABORTED, and UNAVAILABLE. */
|
||||
GRPC_STATUS_UNAVAILABLE = 14,
|
||||
|
||||
/** Unrecoverable data loss or corruption. */
|
||||
GRPC_STATUS_DATA_LOSS = 15,
|
||||
|
||||
/** Force users to include a default branch: */
|
||||
GRPC_STATUS__DO_NOT_USE = -1
|
||||
} grpc_status_code;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_STATUS_H */
|
63
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/sync.h
generated
vendored
Normal file
63
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/sync.h
generated
vendored
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_SYNC_H
|
||||
#define GRPC_IMPL_CODEGEN_SYNC_H
|
||||
/** Synchronization primitives for GPR.
|
||||
|
||||
The type gpr_mu provides a non-reentrant mutex (lock).
|
||||
|
||||
The type gpr_cv provides a condition variable.
|
||||
|
||||
The type gpr_once provides for one-time initialization.
|
||||
|
||||
The type gpr_event provides one-time-setting, reading, and
|
||||
waiting of a void*, with memory barriers.
|
||||
|
||||
The type gpr_refcount provides an object reference counter,
|
||||
with memory barriers suitable to control
|
||||
object lifetimes.
|
||||
|
||||
The type gpr_stats_counter provides an atomic statistics counter. It
|
||||
provides no memory barriers.
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Platform-specific type declarations of gpr_mu and gpr_cv. */
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/sync_generic.h>
|
||||
|
||||
#if defined(GPR_POSIX_SYNC)
|
||||
#include <grpc/impl/codegen/sync_posix.h>
|
||||
#elif defined(GPR_WINDOWS)
|
||||
#include <grpc/impl/codegen/sync_windows.h>
|
||||
#elif defined(GPR_CUSTOM_SYNC)
|
||||
#include <grpc/impl/codegen/sync_custom.h>
|
||||
#else
|
||||
#error Unable to determine platform for sync
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_SYNC_H */
|
38
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/sync_custom.h
generated
vendored
Normal file
38
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/sync_custom.h
generated
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_SYNC_CUSTOM_H
|
||||
#define GRPC_IMPL_CODEGEN_SYNC_CUSTOM_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/sync_generic.h>
|
||||
|
||||
/* Users defining GPR_CUSTOM_SYNC need to define the following macros. */
|
||||
|
||||
#ifdef GPR_CUSTOM_SYNC
|
||||
|
||||
typedef GPR_CUSTOM_MU_TYPE gpr_mu;
|
||||
typedef GPR_CUSTOM_CV_TYPE gpr_cv;
|
||||
typedef GPR_CUSTOM_ONCE_TYPE gpr_once;
|
||||
|
||||
#define GPR_ONCE_INIT GPR_CUSTOM_ONCE_INIT
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_SYNC_CUSTOM_H */
|
48
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/sync_generic.h
generated
vendored
Normal file
48
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/sync_generic.h
generated
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_SYNC_GENERIC_H
|
||||
#define GRPC_IMPL_CODEGEN_SYNC_GENERIC_H
|
||||
/* Generic type defintions for gpr_sync. */
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/atm.h>
|
||||
|
||||
/* gpr_event */
|
||||
typedef struct {
|
||||
gpr_atm state;
|
||||
} gpr_event;
|
||||
|
||||
#define GPR_EVENT_INIT \
|
||||
{ 0 }
|
||||
|
||||
/* gpr_refcount */
|
||||
typedef struct {
|
||||
gpr_atm count;
|
||||
} gpr_refcount;
|
||||
|
||||
/* gpr_stats_counter */
|
||||
typedef struct {
|
||||
gpr_atm value;
|
||||
} gpr_stats_counter;
|
||||
|
||||
#define GPR_STATS_INIT \
|
||||
{ 0 }
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_SYNC_GENERIC_H */
|
52
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/sync_posix.h
generated
vendored
Normal file
52
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/sync_posix.h
generated
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_SYNC_POSIX_H
|
||||
#define GRPC_IMPL_CODEGEN_SYNC_POSIX_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/sync_generic.h>
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#ifdef GRPC_ASAN_ENABLED
|
||||
/* The member |leak_checker| is used to check whether there is a memory leak
|
||||
* caused by upper layer logic that's missing the |gpr_xx_destroy| call
|
||||
* to the object before freeing it.
|
||||
* This issue was reported at https://github.com/grpc/grpc/issues/17563
|
||||
* and discussed at https://github.com/grpc/grpc/pull/17586
|
||||
*/
|
||||
typedef struct {
|
||||
pthread_mutex_t mutex;
|
||||
int* leak_checker;
|
||||
} gpr_mu;
|
||||
|
||||
typedef struct {
|
||||
pthread_cond_t cond_var;
|
||||
int* leak_checker;
|
||||
} gpr_cv;
|
||||
#else
|
||||
typedef pthread_mutex_t gpr_mu;
|
||||
typedef pthread_cond_t gpr_cv;
|
||||
#endif
|
||||
typedef pthread_once_t gpr_once;
|
||||
|
||||
#define GPR_ONCE_INIT PTHREAD_ONCE_INIT
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_SYNC_POSIX_H */
|
36
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/sync_windows.h
generated
vendored
Normal file
36
node_modules/grpc/deps/grpc/include/grpc/impl/codegen/sync_windows.h
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_IMPL_CODEGEN_SYNC_WINDOWS_H
|
||||
#define GRPC_IMPL_CODEGEN_SYNC_WINDOWS_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/sync_generic.h>
|
||||
|
||||
typedef struct {
|
||||
CRITICAL_SECTION cs; /* Not an SRWLock until Vista is unsupported */
|
||||
int locked;
|
||||
} gpr_mu;
|
||||
|
||||
typedef CONDITION_VARIABLE gpr_cv;
|
||||
|
||||
typedef INIT_ONCE gpr_once;
|
||||
#define GPR_ONCE_INIT INIT_ONCE_STATIC_INIT
|
||||
|
||||
#endif /* GRPC_IMPL_CODEGEN_SYNC_WINDOWS_H */
|
48
node_modules/grpc/deps/grpc/include/grpc/load_reporting.h
generated
vendored
Normal file
48
node_modules/grpc/deps/grpc/include/grpc/load_reporting.h
generated
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_LOAD_REPORTING_H
|
||||
#define GRPC_LOAD_REPORTING_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Metadata key for the gRPC LB load balancer token.
|
||||
*
|
||||
* The value corresponding to this key is an opaque token that is given to the
|
||||
* frontend as part of each pick; the frontend sends this token to the backend
|
||||
* in each request it sends when using that pick. The token is used by the
|
||||
* backend to verify the request and to allow the backend to report load to the
|
||||
* gRPC LB system. */
|
||||
#define GRPC_LB_TOKEN_MD_KEY "lb-token"
|
||||
|
||||
/** Metadata key for gRPC LB cost reporting.
|
||||
*
|
||||
* The value corresponding to this key is an opaque binary blob reported by the
|
||||
* backend as part of its trailing metadata containing cost information for the
|
||||
* call. */
|
||||
#define GRPC_LB_COST_MD_KEY "lb-cost-bin"
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_LOAD_REPORTING_H */
|
172
node_modules/grpc/deps/grpc/include/grpc/slice.h
generated
vendored
Normal file
172
node_modules/grpc/deps/grpc/include/grpc/slice.h
generated
vendored
Normal file
@ -0,0 +1,172 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SLICE_H
|
||||
#define GRPC_SLICE_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/slice.h>
|
||||
#include <grpc/support/sync.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Increment the refcount of s. Requires slice is initialized.
|
||||
Returns s. */
|
||||
GPRAPI grpc_slice grpc_slice_ref(grpc_slice s);
|
||||
|
||||
/** Decrement the ref count of s. If the ref count of s reaches zero, all
|
||||
slices sharing the ref count are destroyed, and considered no longer
|
||||
initialized. If s is ultimately derived from a call to grpc_slice_new(start,
|
||||
len, dest) where dest!=NULL , then (*dest)(start) is called, else if s is
|
||||
ultimately derived from a call to grpc_slice_new_with_len(start, len, dest)
|
||||
where dest!=NULL , then (*dest)(start, len). Requires s initialized. */
|
||||
GPRAPI void grpc_slice_unref(grpc_slice s);
|
||||
|
||||
/** Copy slice - create a new slice that contains the same data as s */
|
||||
GPRAPI grpc_slice grpc_slice_copy(grpc_slice s);
|
||||
|
||||
/** Create a slice pointing at some data. Calls malloc to allocate a refcount
|
||||
for the object, and arranges that destroy will be called with the pointer
|
||||
passed in at destruction. */
|
||||
GPRAPI grpc_slice grpc_slice_new(void* p, size_t len, void (*destroy)(void*));
|
||||
|
||||
/** Equivalent to grpc_slice_new, but with a separate pointer that is
|
||||
passed to the destroy function. This function can be useful when
|
||||
the data is part of a larger structure that must be destroyed when
|
||||
the data is no longer needed. */
|
||||
GPRAPI grpc_slice grpc_slice_new_with_user_data(void* p, size_t len,
|
||||
void (*destroy)(void*),
|
||||
void* user_data);
|
||||
|
||||
/** Equivalent to grpc_slice_new, but with a two argument destroy function that
|
||||
also takes the slice length. */
|
||||
GPRAPI grpc_slice grpc_slice_new_with_len(void* p, size_t len,
|
||||
void (*destroy)(void*, size_t));
|
||||
|
||||
/** Equivalent to grpc_slice_new(malloc(len), len, free), but saves one malloc()
|
||||
call.
|
||||
Aborts if malloc() fails. */
|
||||
GPRAPI grpc_slice grpc_slice_malloc(size_t length);
|
||||
GPRAPI grpc_slice grpc_slice_malloc_large(size_t length);
|
||||
|
||||
#define GRPC_SLICE_MALLOC(len) grpc_slice_malloc(len)
|
||||
|
||||
/** Intern a slice:
|
||||
|
||||
The return value for two invocations of this function with the same sequence
|
||||
of bytes is a slice which points to the same memory. */
|
||||
GPRAPI grpc_slice grpc_slice_intern(grpc_slice slice);
|
||||
|
||||
/** Create a slice by copying a string.
|
||||
Does not preserve null terminators.
|
||||
Equivalent to:
|
||||
size_t len = strlen(source);
|
||||
grpc_slice slice = grpc_slice_malloc(len);
|
||||
memcpy(slice->data, source, len); */
|
||||
GPRAPI grpc_slice grpc_slice_from_copied_string(const char* source);
|
||||
|
||||
/** Create a slice by copying a buffer.
|
||||
Equivalent to:
|
||||
grpc_slice slice = grpc_slice_malloc(len);
|
||||
memcpy(slice->data, source, len); */
|
||||
GPRAPI grpc_slice grpc_slice_from_copied_buffer(const char* source, size_t len);
|
||||
|
||||
/** Create a slice pointing to constant memory */
|
||||
GPRAPI grpc_slice grpc_slice_from_static_string(const char* source);
|
||||
|
||||
/** Create a slice pointing to constant memory */
|
||||
GPRAPI grpc_slice grpc_slice_from_static_buffer(const void* source, size_t len);
|
||||
|
||||
/** Return a result slice derived from s, which shares a ref count with \a s,
|
||||
where result.data==s.data+begin, and result.length==end-begin. The ref count
|
||||
of \a s is increased by one. Do not assign result back to \a s.
|
||||
Requires s initialized, begin <= end, begin <= s.length, and
|
||||
end <= source->length. */
|
||||
GPRAPI grpc_slice grpc_slice_sub(grpc_slice s, size_t begin, size_t end);
|
||||
|
||||
/** The same as grpc_slice_sub, but without altering the ref count */
|
||||
GPRAPI grpc_slice grpc_slice_sub_no_ref(grpc_slice s, size_t begin, size_t end);
|
||||
|
||||
/** Splits s into two: modifies s to be s[0:split], and returns a new slice,
|
||||
sharing a refcount with s, that contains s[split:s.length].
|
||||
Requires s initialized, split <= s.length */
|
||||
GPRAPI grpc_slice grpc_slice_split_tail(grpc_slice* s, size_t split);
|
||||
|
||||
typedef enum {
|
||||
GRPC_SLICE_REF_TAIL = 1,
|
||||
GRPC_SLICE_REF_HEAD = 2,
|
||||
GRPC_SLICE_REF_BOTH = 1 + 2
|
||||
} grpc_slice_ref_whom;
|
||||
|
||||
/** The same as grpc_slice_split_tail, but with an option to skip altering
|
||||
* refcounts (grpc_slice_split_tail_maybe_ref(..., true) is equivalent to
|
||||
* grpc_slice_split_tail(...)) */
|
||||
GPRAPI grpc_slice grpc_slice_split_tail_maybe_ref(grpc_slice* s, size_t split,
|
||||
grpc_slice_ref_whom ref_whom);
|
||||
|
||||
/** Splits s into two: modifies s to be s[split:s.length], and returns a new
|
||||
slice, sharing a refcount with s, that contains s[0:split].
|
||||
Requires s initialized, split <= s.length */
|
||||
GPRAPI grpc_slice grpc_slice_split_head(grpc_slice* s, size_t split);
|
||||
|
||||
GPRAPI grpc_slice grpc_empty_slice(void);
|
||||
|
||||
GPRAPI uint32_t grpc_slice_default_hash_impl(grpc_slice s);
|
||||
GPRAPI int grpc_slice_default_eq_impl(grpc_slice a, grpc_slice b);
|
||||
|
||||
GPRAPI int grpc_slice_eq(grpc_slice a, grpc_slice b);
|
||||
|
||||
/** Returns <0 if a < b, ==0 if a == b, >0 if a > b
|
||||
The order is arbitrary, and is not guaranteed to be stable across different
|
||||
versions of the API. */
|
||||
GPRAPI int grpc_slice_cmp(grpc_slice a, grpc_slice b);
|
||||
GPRAPI int grpc_slice_str_cmp(grpc_slice a, const char* b);
|
||||
|
||||
/** return non-zero if the first blen bytes of a are equal to b */
|
||||
GPRAPI int grpc_slice_buf_start_eq(grpc_slice a, const void* b, size_t blen);
|
||||
|
||||
/** return the index of the last instance of \a c in \a s, or -1 if not found */
|
||||
GPRAPI int grpc_slice_rchr(grpc_slice s, char c);
|
||||
GPRAPI int grpc_slice_chr(grpc_slice s, char c);
|
||||
|
||||
/** return the index of the first occurrence of \a needle in \a haystack, or -1
|
||||
if it's not found */
|
||||
GPRAPI int grpc_slice_slice(grpc_slice haystack, grpc_slice needle);
|
||||
|
||||
GPRAPI uint32_t grpc_slice_hash(grpc_slice s);
|
||||
|
||||
/** Do two slices point at the same memory, with the same length
|
||||
If a or b is inlined, actually compares data */
|
||||
GPRAPI int grpc_slice_is_equivalent(grpc_slice a, grpc_slice b);
|
||||
|
||||
/** Return a slice pointing to newly allocated memory that has the same contents
|
||||
* as \a s */
|
||||
GPRAPI grpc_slice grpc_slice_dup(grpc_slice a);
|
||||
|
||||
/** Return a copy of slice as a C string. Offers no protection against embedded
|
||||
NULL's. Returned string must be freed with gpr_free. */
|
||||
GPRAPI char* grpc_slice_to_c_string(grpc_slice s);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_SLICE_H */
|
84
node_modules/grpc/deps/grpc/include/grpc/slice_buffer.h
generated
vendored
Normal file
84
node_modules/grpc/deps/grpc/include/grpc/slice_buffer.h
generated
vendored
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SLICE_BUFFER_H
|
||||
#define GRPC_SLICE_BUFFER_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/slice.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** initialize a slice buffer */
|
||||
GPRAPI void grpc_slice_buffer_init(grpc_slice_buffer* sb);
|
||||
/** destroy a slice buffer - unrefs any held elements */
|
||||
GPRAPI void grpc_slice_buffer_destroy(grpc_slice_buffer* sb);
|
||||
/** Add an element to a slice buffer - takes ownership of the slice.
|
||||
This function is allowed to concatenate the passed in slice to the end of
|
||||
some other slice if desired by the slice buffer. */
|
||||
GPRAPI void grpc_slice_buffer_add(grpc_slice_buffer* sb, grpc_slice slice);
|
||||
/** add an element to a slice buffer - takes ownership of the slice and returns
|
||||
the index of the slice.
|
||||
Guarantees that the slice will not be concatenated at the end of another
|
||||
slice (i.e. the data for this slice will begin at the first byte of the
|
||||
slice at the returned index in sb->slices)
|
||||
The implementation MAY decide to concatenate data at the end of a small
|
||||
slice added in this fashion. */
|
||||
GPRAPI size_t grpc_slice_buffer_add_indexed(grpc_slice_buffer* sb,
|
||||
grpc_slice slice);
|
||||
GPRAPI void grpc_slice_buffer_addn(grpc_slice_buffer* sb, grpc_slice* slices,
|
||||
size_t n);
|
||||
/** add a very small (less than 8 bytes) amount of data to the end of a slice
|
||||
buffer: returns a pointer into which to add the data */
|
||||
GPRAPI uint8_t* grpc_slice_buffer_tiny_add(grpc_slice_buffer* sb, size_t len);
|
||||
/** pop the last buffer, but don't unref it */
|
||||
GPRAPI void grpc_slice_buffer_pop(grpc_slice_buffer* sb);
|
||||
/** clear a slice buffer, unref all elements */
|
||||
GPRAPI void grpc_slice_buffer_reset_and_unref(grpc_slice_buffer* sb);
|
||||
/** swap the contents of two slice buffers */
|
||||
GPRAPI void grpc_slice_buffer_swap(grpc_slice_buffer* a, grpc_slice_buffer* b);
|
||||
/** move all of the elements of src into dst */
|
||||
GPRAPI void grpc_slice_buffer_move_into(grpc_slice_buffer* src,
|
||||
grpc_slice_buffer* dst);
|
||||
/** remove n bytes from the end of a slice buffer */
|
||||
GPRAPI void grpc_slice_buffer_trim_end(grpc_slice_buffer* src, size_t n,
|
||||
grpc_slice_buffer* garbage);
|
||||
/** move the first n bytes of src into dst */
|
||||
GPRAPI void grpc_slice_buffer_move_first(grpc_slice_buffer* src, size_t n,
|
||||
grpc_slice_buffer* dst);
|
||||
/** move the first n bytes of src into dst without adding references */
|
||||
GPRAPI void grpc_slice_buffer_move_first_no_ref(grpc_slice_buffer* src,
|
||||
size_t n,
|
||||
grpc_slice_buffer* dst);
|
||||
/** move the first n bytes of src into dst (copying them) */
|
||||
GPRAPI void grpc_slice_buffer_move_first_into_buffer(grpc_slice_buffer* src,
|
||||
size_t n, void* dst);
|
||||
/** take the first slice in the slice buffer */
|
||||
GPRAPI grpc_slice grpc_slice_buffer_take_first(grpc_slice_buffer* src);
|
||||
/** undo the above with (a possibly different) \a slice */
|
||||
GPRAPI void grpc_slice_buffer_undo_take_first(grpc_slice_buffer* src,
|
||||
grpc_slice slice);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_SLICE_BUFFER_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/status.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/status.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_STATUS_H
|
||||
#define GRPC_STATUS_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/status.h>
|
||||
|
||||
#endif /* GRPC_STATUS_H */
|
68
node_modules/grpc/deps/grpc/include/grpc/support/alloc.h
generated
vendored
Normal file
68
node_modules/grpc/deps/grpc/include/grpc/support/alloc.h
generated
vendored
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_ALLOC_H
|
||||
#define GRPC_SUPPORT_ALLOC_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct gpr_allocation_functions {
|
||||
void* (*malloc_fn)(size_t size);
|
||||
void* (*zalloc_fn)(size_t size); /** if NULL, uses malloc_fn then memset */
|
||||
void* (*realloc_fn)(void* ptr, size_t size);
|
||||
void (*free_fn)(void* ptr);
|
||||
} gpr_allocation_functions;
|
||||
|
||||
/** malloc.
|
||||
* If size==0, always returns NULL. Otherwise this function never returns NULL.
|
||||
* The pointer returned is suitably aligned for any kind of variable it could
|
||||
* contain.
|
||||
*/
|
||||
GPRAPI void* gpr_malloc(size_t size);
|
||||
/** like malloc, but zero all bytes before returning them */
|
||||
GPRAPI void* gpr_zalloc(size_t size);
|
||||
/** free */
|
||||
GPRAPI void gpr_free(void* ptr);
|
||||
/** realloc, never returns NULL */
|
||||
GPRAPI void* gpr_realloc(void* p, size_t size);
|
||||
/** aligned malloc, never returns NULL, will align to alignment, which
|
||||
* must be a power of 2. */
|
||||
GPRAPI void* gpr_malloc_aligned(size_t size, size_t alignment);
|
||||
/** free memory allocated by gpr_malloc_aligned */
|
||||
GPRAPI void gpr_free_aligned(void* ptr);
|
||||
|
||||
/** Request the family of allocation functions in \a functions be used. NOTE
|
||||
* that this request will be honored in a *best effort* basis and that no
|
||||
* guarantees are made about the default functions (eg, malloc) being called.
|
||||
* The functions.free_fn implementation must be a no-op for NULL input. */
|
||||
GPRAPI void gpr_set_allocation_functions(gpr_allocation_functions functions);
|
||||
|
||||
/** Return the family of allocation functions currently in effect. */
|
||||
GPRAPI gpr_allocation_functions gpr_get_allocation_functions(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_SUPPORT_ALLOC_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/support/atm.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/support/atm.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_ATM_H
|
||||
#define GRPC_SUPPORT_ATM_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/atm.h>
|
||||
|
||||
#endif /* GRPC_SUPPORT_ATM_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/support/atm_gcc_atomic.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/support/atm_gcc_atomic.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_ATM_GCC_ATOMIC_H
|
||||
#define GRPC_SUPPORT_ATM_GCC_ATOMIC_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/atm_gcc_atomic.h>
|
||||
|
||||
#endif /* GRPC_SUPPORT_ATM_GCC_ATOMIC_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/support/atm_gcc_sync.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/support/atm_gcc_sync.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_ATM_GCC_SYNC_H
|
||||
#define GRPC_SUPPORT_ATM_GCC_SYNC_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/atm_gcc_sync.h>
|
||||
|
||||
#endif /* GRPC_SUPPORT_ATM_GCC_SYNC_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/support/atm_windows.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/support/atm_windows.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_ATM_WINDOWS_H
|
||||
#define GRPC_SUPPORT_ATM_WINDOWS_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/atm_windows.h>
|
||||
|
||||
#endif /* GRPC_SUPPORT_ATM_WINDOWS_H */
|
44
node_modules/grpc/deps/grpc/include/grpc/support/cpu.h
generated
vendored
Normal file
44
node_modules/grpc/deps/grpc/include/grpc/support/cpu.h
generated
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_CPU_H
|
||||
#define GRPC_SUPPORT_CPU_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Interface providing CPU information for currently running system */
|
||||
|
||||
/** Return the number of CPU cores on the current system. Will return 0 if
|
||||
the information is not available. */
|
||||
GPRAPI unsigned gpr_cpu_num_cores(void);
|
||||
|
||||
/** Return the CPU on which the current thread is executing; N.B. This should
|
||||
be considered advisory only - it is possible that the thread is switched
|
||||
to a different CPU at any time. Returns a value in range
|
||||
[0, gpr_cpu_num_cores() - 1] */
|
||||
GPRAPI unsigned gpr_cpu_current_cpu(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_SUPPORT_CPU_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/support/log.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/support/log.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_LOG_H
|
||||
#define GRPC_SUPPORT_LOG_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/log.h>
|
||||
|
||||
#endif /* GRPC_SUPPORT_LOG_H */
|
38
node_modules/grpc/deps/grpc/include/grpc/support/log_windows.h
generated
vendored
Normal file
38
node_modules/grpc/deps/grpc/include/grpc/support/log_windows.h
generated
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_LOG_WINDOWS_H
|
||||
#define GRPC_SUPPORT_LOG_WINDOWS_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Returns a string allocated with gpr_malloc that contains a UTF-8
|
||||
* formatted error message, corresponding to the error messageid.
|
||||
* Use in conjunction with GetLastError() et al.
|
||||
*/
|
||||
GPRAPI char* gpr_format_message(int messageid);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_SUPPORT_LOG_WINDOWS_H */
|
24
node_modules/grpc/deps/grpc/include/grpc/support/port_platform.h
generated
vendored
Normal file
24
node_modules/grpc/deps/grpc/include/grpc/support/port_platform.h
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_PORT_PLATFORM_H
|
||||
#define GRPC_SUPPORT_PORT_PLATFORM_H
|
||||
|
||||
#include <grpc/impl/codegen/port_platform.h>
|
||||
|
||||
#endif /* GRPC_SUPPORT_PORT_PLATFORM_H */
|
51
node_modules/grpc/deps/grpc/include/grpc/support/string_util.h
generated
vendored
Normal file
51
node_modules/grpc/deps/grpc/include/grpc/support/string_util.h
generated
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_STRING_UTIL_H
|
||||
#define GRPC_SUPPORT_STRING_UTIL_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/gpr_types.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** String utility functions */
|
||||
|
||||
/** Returns a copy of src that can be passed to gpr_free().
|
||||
If allocation fails or if src is NULL, returns NULL. */
|
||||
GPRAPI char* gpr_strdup(const char* src);
|
||||
|
||||
/** printf to a newly-allocated string. The set of supported formats may vary
|
||||
between platforms.
|
||||
|
||||
On success, returns the number of bytes printed (excluding the final '\0'),
|
||||
and *strp points to a string which must later be destroyed with gpr_free().
|
||||
|
||||
On error, returns -1 and sets *strp to NULL. If the format string is bad,
|
||||
the result is undefined. */
|
||||
GPRAPI int gpr_asprintf(char** strp, const char* format, ...)
|
||||
GPR_PRINT_FORMAT_CHECK(2, 3);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_SUPPORT_STRING_UTIL_H */
|
282
node_modules/grpc/deps/grpc/include/grpc/support/sync.h
generated
vendored
Normal file
282
node_modules/grpc/deps/grpc/include/grpc/support/sync.h
generated
vendored
Normal file
@ -0,0 +1,282 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_SYNC_H
|
||||
#define GRPC_SUPPORT_SYNC_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/gpr_types.h> /* for gpr_timespec */
|
||||
#include <grpc/impl/codegen/sync.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** --- Mutex interface ---
|
||||
|
||||
At most one thread may hold an exclusive lock on a mutex at any given time.
|
||||
Actions taken by a thread that holds a mutex exclusively happen after
|
||||
actions taken by all previous holders of the mutex. Variables of type
|
||||
gpr_mu are uninitialized when first declared. */
|
||||
|
||||
/** Initialize *mu. Requires: *mu uninitialized. */
|
||||
GPRAPI void gpr_mu_init(gpr_mu* mu);
|
||||
|
||||
/** Cause *mu no longer to be initialized, freeing any memory in use. Requires:
|
||||
*mu initialized; no other concurrent operation on *mu. */
|
||||
GPRAPI void gpr_mu_destroy(gpr_mu* mu);
|
||||
|
||||
/** Wait until no thread has a lock on *mu, cause the calling thread to own an
|
||||
exclusive lock on *mu, then return. May block indefinitely or crash if the
|
||||
calling thread has a lock on *mu. Requires: *mu initialized. */
|
||||
GPRAPI void gpr_mu_lock(gpr_mu* mu);
|
||||
|
||||
/** Release an exclusive lock on *mu held by the calling thread. Requires: *mu
|
||||
initialized; the calling thread holds an exclusive lock on *mu. */
|
||||
GPRAPI void gpr_mu_unlock(gpr_mu* mu);
|
||||
|
||||
/** Without blocking, attempt to acquire an exclusive lock on *mu for the
|
||||
calling thread, then return non-zero iff success. Fail, if any thread holds
|
||||
the lock; succeeds with high probability if no thread holds the lock.
|
||||
Requires: *mu initialized. */
|
||||
GPRAPI int gpr_mu_trylock(gpr_mu* mu);
|
||||
|
||||
/** --- Condition variable interface ---
|
||||
|
||||
A while-loop should be used with gpr_cv_wait() when waiting for conditions
|
||||
to become true. See the example below. Variables of type gpr_cv are
|
||||
uninitialized when first declared. */
|
||||
|
||||
/** Initialize *cv. Requires: *cv uninitialized. */
|
||||
GPRAPI void gpr_cv_init(gpr_cv* cv);
|
||||
|
||||
/** Cause *cv no longer to be initialized, freeing any memory in use. Requires:
|
||||
*cv initialized; no other concurrent operation on *cv.*/
|
||||
GPRAPI void gpr_cv_destroy(gpr_cv* cv);
|
||||
|
||||
/** Atomically release *mu and wait on *cv. When the calling thread is woken
|
||||
from *cv or the deadline abs_deadline is exceeded, execute gpr_mu_lock(mu)
|
||||
and return whether the deadline was exceeded. Use
|
||||
abs_deadline==gpr_inf_future for no deadline. abs_deadline can be either
|
||||
an absolute deadline, or a GPR_TIMESPAN. May return even when not
|
||||
woken explicitly. Requires: *mu and *cv initialized; the calling thread
|
||||
holds an exclusive lock on *mu. */
|
||||
GPRAPI int gpr_cv_wait(gpr_cv* cv, gpr_mu* mu, gpr_timespec abs_deadline);
|
||||
|
||||
/** If any threads are waiting on *cv, wake at least one.
|
||||
Clients may treat this as an optimization of gpr_cv_broadcast()
|
||||
for use in the case where waking more than one waiter is not useful.
|
||||
Requires: *cv initialized. */
|
||||
GPRAPI void gpr_cv_signal(gpr_cv* cv);
|
||||
|
||||
/** Wake all threads waiting on *cv. Requires: *cv initialized. */
|
||||
GPRAPI void gpr_cv_broadcast(gpr_cv* cv);
|
||||
|
||||
/** --- One-time initialization ---
|
||||
|
||||
gpr_once must be declared with static storage class, and initialized with
|
||||
GPR_ONCE_INIT. e.g.,
|
||||
static gpr_once once_var = GPR_ONCE_INIT; */
|
||||
|
||||
/** Ensure that (*init_routine)() has been called exactly once (for the
|
||||
specified gpr_once instance) and then return.
|
||||
If multiple threads call gpr_once() on the same gpr_once instance, one of
|
||||
them will call (*init_routine)(), and the others will block until that call
|
||||
finishes.*/
|
||||
GPRAPI void gpr_once_init(gpr_once* once, void (*init_routine)(void));
|
||||
|
||||
/** --- One-time event notification ---
|
||||
|
||||
These operations act on a gpr_event, which should be initialized with
|
||||
gpr_ev_init(), or with GPR_EVENT_INIT if static, e.g.,
|
||||
static gpr_event event_var = GPR_EVENT_INIT;
|
||||
It requires no destruction. */
|
||||
|
||||
/** Initialize *ev. */
|
||||
GPRAPI void gpr_event_init(gpr_event* ev);
|
||||
|
||||
/** Set *ev so that gpr_event_get() and gpr_event_wait() will return value.
|
||||
Requires: *ev initialized; value != NULL; no prior or concurrent calls to
|
||||
gpr_event_set(ev, ...) since initialization. */
|
||||
GPRAPI void gpr_event_set(gpr_event* ev, void* value);
|
||||
|
||||
/** Return the value set by gpr_event_set(ev, ...), or NULL if no such call has
|
||||
completed. If the result is non-NULL, all operations that occurred prior to
|
||||
the gpr_event_set(ev, ...) set will be visible after this call returns.
|
||||
Requires: *ev initialized. This operation is faster than acquiring a mutex
|
||||
on most platforms. */
|
||||
GPRAPI void* gpr_event_get(gpr_event* ev);
|
||||
|
||||
/** Wait until *ev is set by gpr_event_set(ev, ...), or abs_deadline is
|
||||
exceeded, then return gpr_event_get(ev). Requires: *ev initialized. Use
|
||||
abs_deadline==gpr_inf_future for no deadline. When the event has been
|
||||
signalled before the call, this operation is faster than acquiring a mutex
|
||||
on most platforms. */
|
||||
GPRAPI void* gpr_event_wait(gpr_event* ev, gpr_timespec abs_deadline);
|
||||
|
||||
/** --- Reference counting ---
|
||||
|
||||
These calls act on the type gpr_refcount. It requires no destruction. */
|
||||
|
||||
/** Initialize *r to value n. */
|
||||
GPRAPI void gpr_ref_init(gpr_refcount* r, int n);
|
||||
|
||||
/** Increment the reference count *r. Requires *r initialized. */
|
||||
GPRAPI void gpr_ref(gpr_refcount* r);
|
||||
|
||||
/** Increment the reference count *r. Requires *r initialized.
|
||||
Crashes if refcount is zero */
|
||||
GPRAPI void gpr_ref_non_zero(gpr_refcount* r);
|
||||
|
||||
/** Increment the reference count *r by n. Requires *r initialized, n > 0. */
|
||||
GPRAPI void gpr_refn(gpr_refcount* r, int n);
|
||||
|
||||
/** Decrement the reference count *r and return non-zero iff it has reached
|
||||
zero. . Requires *r initialized. */
|
||||
GPRAPI int gpr_unref(gpr_refcount* r);
|
||||
|
||||
/** Return non-zero iff the reference count of *r is one, and thus is owned
|
||||
by exactly one object. */
|
||||
GPRAPI int gpr_ref_is_unique(gpr_refcount* r);
|
||||
|
||||
/** --- Stats counters ---
|
||||
|
||||
These calls act on the integral type gpr_stats_counter. It requires no
|
||||
destruction. Static instances may be initialized with
|
||||
gpr_stats_counter c = GPR_STATS_INIT;
|
||||
Beware: These operations do not imply memory barriers. Do not use them to
|
||||
synchronize other events. */
|
||||
|
||||
/** Initialize *c to the value n. */
|
||||
GPRAPI void gpr_stats_init(gpr_stats_counter* c, intptr_t n);
|
||||
|
||||
/** *c += inc. Requires: *c initialized. */
|
||||
GPRAPI void gpr_stats_inc(gpr_stats_counter* c, intptr_t inc);
|
||||
|
||||
/** Return *c. Requires: *c initialized. */
|
||||
GPRAPI intptr_t gpr_stats_read(const gpr_stats_counter* c);
|
||||
|
||||
/** ==================Example use of interface===================
|
||||
A producer-consumer queue of up to N integers,
|
||||
illustrating the use of the calls in this interface. */
|
||||
#if 0
|
||||
|
||||
#define N 4
|
||||
|
||||
typedef struct queue {
|
||||
gpr_cv non_empty; /* Signalled when length becomes non-zero. */
|
||||
gpr_cv non_full; /* Signalled when length becomes non-N. */
|
||||
gpr_mu mu; /* Protects all fields below.
|
||||
(That is, except during initialization or
|
||||
destruction, the fields below should be accessed
|
||||
only by a thread that holds mu.) */
|
||||
int head; /* Index of head of queue 0..N-1. */
|
||||
int length; /* Number of valid elements in queue 0..N. */
|
||||
int elem[N]; /* elem[head .. head+length-1] are queue elements. */
|
||||
} queue;
|
||||
|
||||
/* Initialize *q. */
|
||||
void queue_init(queue *q) {
|
||||
gpr_mu_init(&q->mu);
|
||||
gpr_cv_init(&q->non_empty);
|
||||
gpr_cv_init(&q->non_full);
|
||||
q->head = 0;
|
||||
q->length = 0;
|
||||
}
|
||||
|
||||
/* Free storage associated with *q. */
|
||||
void queue_destroy(queue *q) {
|
||||
gpr_mu_destroy(&q->mu);
|
||||
gpr_cv_destroy(&q->non_empty);
|
||||
gpr_cv_destroy(&q->non_full);
|
||||
}
|
||||
|
||||
/* Wait until there is room in *q, then append x to *q. */
|
||||
void queue_append(queue *q, int x) {
|
||||
gpr_mu_lock(&q->mu);
|
||||
/* To wait for a predicate without a deadline, loop on the negation of the
|
||||
predicate, and use gpr_cv_wait(..., gpr_inf_future) inside the loop
|
||||
to release the lock, wait, and reacquire on each iteration. Code that
|
||||
makes the condition true should use gpr_cv_broadcast() on the
|
||||
corresponding condition variable. The predicate must be on state
|
||||
protected by the lock. */
|
||||
while (q->length == N) {
|
||||
gpr_cv_wait(&q->non_full, &q->mu, gpr_inf_future);
|
||||
}
|
||||
if (q->length == 0) { /* Wake threads blocked in queue_remove(). */
|
||||
/* It's normal to use gpr_cv_broadcast() or gpr_signal() while
|
||||
holding the lock. */
|
||||
gpr_cv_broadcast(&q->non_empty);
|
||||
}
|
||||
q->elem[(q->head + q->length) % N] = x;
|
||||
q->length++;
|
||||
gpr_mu_unlock(&q->mu);
|
||||
}
|
||||
|
||||
/* If it can be done without blocking, append x to *q and return non-zero.
|
||||
Otherwise return 0. */
|
||||
int queue_try_append(queue *q, int x) {
|
||||
int result = 0;
|
||||
if (gpr_mu_trylock(&q->mu)) {
|
||||
if (q->length != N) {
|
||||
if (q->length == 0) { /* Wake threads blocked in queue_remove(). */
|
||||
gpr_cv_broadcast(&q->non_empty);
|
||||
}
|
||||
q->elem[(q->head + q->length) % N] = x;
|
||||
q->length++;
|
||||
result = 1;
|
||||
}
|
||||
gpr_mu_unlock(&q->mu);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Wait until the *q is non-empty or deadline abs_deadline passes. If the
|
||||
queue is non-empty, remove its head entry, place it in *head, and return
|
||||
non-zero. Otherwise return 0. */
|
||||
int queue_remove(queue *q, int *head, gpr_timespec abs_deadline) {
|
||||
int result = 0;
|
||||
gpr_mu_lock(&q->mu);
|
||||
/* To wait for a predicate with a deadline, loop on the negation of the
|
||||
predicate or until gpr_cv_wait() returns true. Code that makes
|
||||
the condition true should use gpr_cv_broadcast() on the corresponding
|
||||
condition variable. The predicate must be on state protected by the
|
||||
lock. */
|
||||
while (q->length == 0 &&
|
||||
!gpr_cv_wait(&q->non_empty, &q->mu, abs_deadline)) {
|
||||
}
|
||||
if (q->length != 0) { /* Queue is non-empty. */
|
||||
result = 1;
|
||||
if (q->length == N) { /* Wake threads blocked in queue_append(). */
|
||||
gpr_cv_broadcast(&q->non_full);
|
||||
}
|
||||
*head = q->elem[q->head];
|
||||
q->head = (q->head + 1) % N;
|
||||
q->length--;
|
||||
} /* else deadline exceeded */
|
||||
gpr_mu_unlock(&q->mu);
|
||||
return result;
|
||||
}
|
||||
#endif /* 0 */
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_SUPPORT_SYNC_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/support/sync_custom.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/support/sync_custom.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_SYNC_CUSTOM_H
|
||||
#define GRPC_SUPPORT_SYNC_CUSTOM_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/sync_custom.h>
|
||||
|
||||
#endif /* GRPC_SUPPORT_SYNC_CUSTOM_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/support/sync_generic.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/support/sync_generic.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_SYNC_GENERIC_H
|
||||
#define GRPC_SUPPORT_SYNC_GENERIC_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/sync_generic.h>
|
||||
|
||||
#endif /* GRPC_SUPPORT_SYNC_GENERIC_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/support/sync_posix.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/support/sync_posix.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_SYNC_POSIX_H
|
||||
#define GRPC_SUPPORT_SYNC_POSIX_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/sync_posix.h>
|
||||
|
||||
#endif /* GRPC_SUPPORT_SYNC_POSIX_H */
|
26
node_modules/grpc/deps/grpc/include/grpc/support/sync_windows.h
generated
vendored
Normal file
26
node_modules/grpc/deps/grpc/include/grpc/support/sync_windows.h
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_SYNC_WINDOWS_H
|
||||
#define GRPC_SUPPORT_SYNC_WINDOWS_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/sync_windows.h>
|
||||
|
||||
#endif /* GRPC_SUPPORT_SYNC_WINDOWS_H */
|
44
node_modules/grpc/deps/grpc/include/grpc/support/thd_id.h
generated
vendored
Normal file
44
node_modules/grpc/deps/grpc/include/grpc/support/thd_id.h
generated
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2018 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_THD_ID_H
|
||||
#define GRPC_SUPPORT_THD_ID_H
|
||||
/** Thread ID interface for GPR.
|
||||
|
||||
Used by some wrapped languages for logging purposes.
|
||||
|
||||
Types
|
||||
gpr_thd_id a unique opaque identifier for a thread.
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef uintptr_t gpr_thd_id;
|
||||
|
||||
/** Returns the identifier of the current thread. */
|
||||
GPRAPI gpr_thd_id gpr_thd_currentid(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_SUPPORT_THD_ID_H */
|
92
node_modules/grpc/deps/grpc/include/grpc/support/time.h
generated
vendored
Normal file
92
node_modules/grpc/deps/grpc/include/grpc/support/time.h
generated
vendored
Normal file
@ -0,0 +1,92 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_TIME_H
|
||||
#define GRPC_SUPPORT_TIME_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/gpr_types.h>
|
||||
|
||||
#include <stddef.h>
|
||||
#include <time.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Time constants. */
|
||||
GPRAPI gpr_timespec
|
||||
gpr_time_0(gpr_clock_type type); /** The zero time interval. */
|
||||
GPRAPI gpr_timespec gpr_inf_future(gpr_clock_type type); /** The far future */
|
||||
GPRAPI gpr_timespec gpr_inf_past(gpr_clock_type type); /** The far past. */
|
||||
|
||||
#define GPR_MS_PER_SEC 1000
|
||||
#define GPR_US_PER_SEC 1000000
|
||||
#define GPR_NS_PER_SEC 1000000000
|
||||
#define GPR_NS_PER_MS 1000000
|
||||
#define GPR_NS_PER_US 1000
|
||||
#define GPR_US_PER_MS 1000
|
||||
|
||||
/** initialize time subsystem */
|
||||
GPRAPI void gpr_time_init(void);
|
||||
|
||||
/** Return the current time measured from the given clocks epoch. */
|
||||
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock);
|
||||
|
||||
/** Convert a timespec from one clock to another */
|
||||
GPRAPI gpr_timespec gpr_convert_clock_type(gpr_timespec t,
|
||||
gpr_clock_type target_clock);
|
||||
|
||||
/** Return -ve, 0, or +ve according to whether a < b, a == b, or a > b
|
||||
respectively. */
|
||||
GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b);
|
||||
|
||||
GPRAPI gpr_timespec gpr_time_max(gpr_timespec a, gpr_timespec b);
|
||||
GPRAPI gpr_timespec gpr_time_min(gpr_timespec a, gpr_timespec b);
|
||||
|
||||
/** Add and subtract times. Calculations saturate at infinities. */
|
||||
GPRAPI gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b);
|
||||
GPRAPI gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b);
|
||||
|
||||
/** Return a timespec representing a given number of time units. INT64_MIN is
|
||||
interpreted as gpr_inf_past, and INT64_MAX as gpr_inf_future. */
|
||||
GPRAPI gpr_timespec gpr_time_from_micros(int64_t x, gpr_clock_type clock_type);
|
||||
GPRAPI gpr_timespec gpr_time_from_nanos(int64_t x, gpr_clock_type clock_type);
|
||||
GPRAPI gpr_timespec gpr_time_from_millis(int64_t x, gpr_clock_type clock_type);
|
||||
GPRAPI gpr_timespec gpr_time_from_seconds(int64_t x, gpr_clock_type clock_type);
|
||||
GPRAPI gpr_timespec gpr_time_from_minutes(int64_t x, gpr_clock_type clock_type);
|
||||
GPRAPI gpr_timespec gpr_time_from_hours(int64_t x, gpr_clock_type clock_type);
|
||||
|
||||
GPRAPI int32_t gpr_time_to_millis(gpr_timespec timespec);
|
||||
|
||||
/** Return 1 if two times are equal or within threshold of each other,
|
||||
0 otherwise */
|
||||
GPRAPI int gpr_time_similar(gpr_timespec a, gpr_timespec b,
|
||||
gpr_timespec threshold);
|
||||
|
||||
/** Sleep until at least 'until' - an absolute timeout */
|
||||
GPRAPI void gpr_sleep_until(gpr_timespec until);
|
||||
|
||||
GPRAPI double gpr_timespec_to_micros(gpr_timespec t);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GRPC_SUPPORT_TIME_H */
|
31
node_modules/grpc/deps/grpc/include/grpc/support/workaround_list.h
generated
vendored
Normal file
31
node_modules/grpc/deps/grpc/include/grpc/support/workaround_list.h
generated
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_SUPPORT_WORKAROUND_LIST_H
|
||||
#define GRPC_SUPPORT_WORKAROUND_LIST_H
|
||||
|
||||
/* The list of IDs of server workarounds currently maintained by gRPC. For
|
||||
* explanation and detailed descriptions of workarounds, see
|
||||
* /doc/workarounds.md
|
||||
*/
|
||||
typedef enum {
|
||||
GRPC_WORKAROUND_ID_CRONET_COMPRESSION = 0,
|
||||
GRPC_MAX_WORKAROUND_ID
|
||||
} grpc_workaround_list;
|
||||
|
||||
#endif /* GRPC_SUPPORT_WORKAROUND_LIST_H */
|
1362
node_modules/grpc/deps/grpc/src/boringssl/err_data.c
generated
vendored
Normal file
1362
node_modules/grpc/deps/grpc/src/boringssl/err_data.c
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
4
node_modules/grpc/deps/grpc/src/core/README.md
generated
vendored
Normal file
4
node_modules/grpc/deps/grpc/src/core/README.md
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
# Overview
|
||||
|
||||
This directory contains source code for C library (a.k.a the *gRPC C core*) that provides all gRPC's core functionality through a low level API. Libraries in other languages in this repository (C++, C#, Ruby,
|
||||
Python, PHP, NodeJS, Objective-C) are layered on top of this library.
|
5
node_modules/grpc/deps/grpc/src/core/ext/README.md
generated
vendored
Normal file
5
node_modules/grpc/deps/grpc/src/core/ext/README.md
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
Optional plugins for gRPC Core: Modules in this directory extend gRPC Core in
|
||||
useful ways. All optional code belongs here.
|
||||
|
||||
NOTE: The movement of code between lib and ext is an ongoing effort, so this
|
||||
directory currently contains too much of the core library.
|
38
node_modules/grpc/deps/grpc/src/core/ext/filters/census/grpc_context.cc
generated
vendored
Normal file
38
node_modules/grpc/deps/grpc/src/core/ext/filters/census/grpc_context.cc
generated
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/census.h>
|
||||
#include <grpc/grpc.h>
|
||||
#include "src/core/lib/surface/api_trace.h"
|
||||
#include "src/core/lib/surface/call.h"
|
||||
|
||||
void grpc_census_call_set_context(grpc_call* call, census_context* context) {
|
||||
GRPC_API_TRACE("grpc_census_call_set_context(call=%p, census_context=%p)", 2,
|
||||
(call, context));
|
||||
if (context != nullptr) {
|
||||
grpc_call_context_set(call, GRPC_CONTEXT_TRACING, context, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
census_context* grpc_census_call_get_context(grpc_call* call) {
|
||||
GRPC_API_TRACE("grpc_census_call_get_context(call=%p)", 1, (call));
|
||||
return static_cast<census_context*>(
|
||||
grpc_call_context_get(call, GRPC_CONTEXT_TRACING));
|
||||
}
|
49
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/README.md
generated
vendored
Normal file
49
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/README.md
generated
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
Client Configuration Support for GRPC
|
||||
=====================================
|
||||
|
||||
This library provides high level configuration machinery to construct client
|
||||
channels and load balance between them.
|
||||
|
||||
Each `grpc_channel` is created with a `Resolver`. It is the resolver's duty
|
||||
to resolve a name into a set of arguments for the channel. Such arguments
|
||||
might include:
|
||||
|
||||
- a list of (ip, port) addresses to connect to
|
||||
- a load balancing policy to decide which server to send a request to
|
||||
- a set of filters to mutate outgoing requests (say, by adding metadata)
|
||||
|
||||
The resolver provides this data as a stream of `grpc_channel_args` objects to
|
||||
the channel. We represent arguments as a stream so that they can be changed
|
||||
by the resolver during execution, by reacting to external events (such as
|
||||
new service configuration data being pushed to some store).
|
||||
|
||||
|
||||
Load Balancing
|
||||
--------------
|
||||
|
||||
Load balancing configuration is provided by a `LoadBalancingPolicy` object.
|
||||
|
||||
The primary job of the load balancing policies is to pick a target server
|
||||
given only the initial metadata for a request. It does this by providing
|
||||
a `ConnectedSubchannel` object to the owning channel.
|
||||
|
||||
|
||||
Sub-Channels
|
||||
------------
|
||||
|
||||
A sub-channel provides a connection to a server for a client channel. It has a
|
||||
connectivity state like a regular channel, and so can be connected or
|
||||
disconnected. This connectivity state can be used to inform load balancing
|
||||
decisions (for example, by avoiding disconnected backends).
|
||||
|
||||
Configured sub-channels are fully setup to participate in the grpc data plane.
|
||||
Their behavior is specified by a set of grpc channel filters defined at their
|
||||
construction. To customize this behavior, transports build
|
||||
`ClientChannelFactory` objects, which customize construction arguments for
|
||||
concrete subchannel instances.
|
||||
|
||||
|
||||
Naming for GRPC
|
||||
===============
|
||||
|
||||
See [/doc/naming.md](gRPC name resolution).
|
78
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/backend_metric.cc
generated
vendored
Normal file
78
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/backend_metric.cc
generated
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
//
|
||||
// Copyright 2019 gRPC authors.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/backend_metric.h"
|
||||
|
||||
#include "src/core/lib/gprpp/string_view.h"
|
||||
#include "udpa/data/orca/v1/orca_load_report.upb.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
namespace {
|
||||
|
||||
template <typename EntryType>
|
||||
Map<StringView, double, StringLess> ParseMap(
|
||||
udpa_data_orca_v1_OrcaLoadReport* msg,
|
||||
EntryType** (*entry_func)(udpa_data_orca_v1_OrcaLoadReport*, size_t*),
|
||||
upb_strview (*key_func)(const EntryType*),
|
||||
double (*value_func)(const EntryType*), Arena* arena) {
|
||||
Map<StringView, double, StringLess> result;
|
||||
size_t size;
|
||||
const auto* const* entries = entry_func(msg, &size);
|
||||
for (size_t i = 0; i < size; ++i) {
|
||||
upb_strview key_view = key_func(entries[i]);
|
||||
char* key = static_cast<char*>(arena->Alloc(key_view.size + 1));
|
||||
memcpy(key, key_view.data, key_view.size);
|
||||
result[StringView(key, key_view.size)] = value_func(entries[i]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
const LoadBalancingPolicy::BackendMetricData* ParseBackendMetricData(
|
||||
const grpc_slice& serialized_load_report, Arena* arena) {
|
||||
upb::Arena upb_arena;
|
||||
udpa_data_orca_v1_OrcaLoadReport* msg =
|
||||
udpa_data_orca_v1_OrcaLoadReport_parse(
|
||||
reinterpret_cast<const char*>(
|
||||
GRPC_SLICE_START_PTR(serialized_load_report)),
|
||||
GRPC_SLICE_LENGTH(serialized_load_report), upb_arena.ptr());
|
||||
if (msg == nullptr) return nullptr;
|
||||
LoadBalancingPolicy::BackendMetricData* backend_metric_data =
|
||||
arena->New<LoadBalancingPolicy::BackendMetricData>();
|
||||
backend_metric_data->cpu_utilization =
|
||||
udpa_data_orca_v1_OrcaLoadReport_cpu_utilization(msg);
|
||||
backend_metric_data->mem_utilization =
|
||||
udpa_data_orca_v1_OrcaLoadReport_mem_utilization(msg);
|
||||
backend_metric_data->requests_per_second =
|
||||
udpa_data_orca_v1_OrcaLoadReport_rps(msg);
|
||||
backend_metric_data->request_cost =
|
||||
ParseMap<udpa_data_orca_v1_OrcaLoadReport_RequestCostEntry>(
|
||||
msg, udpa_data_orca_v1_OrcaLoadReport_mutable_request_cost,
|
||||
udpa_data_orca_v1_OrcaLoadReport_RequestCostEntry_key,
|
||||
udpa_data_orca_v1_OrcaLoadReport_RequestCostEntry_value, arena);
|
||||
backend_metric_data->utilization =
|
||||
ParseMap<udpa_data_orca_v1_OrcaLoadReport_UtilizationEntry>(
|
||||
msg, udpa_data_orca_v1_OrcaLoadReport_mutable_utilization,
|
||||
udpa_data_orca_v1_OrcaLoadReport_UtilizationEntry_key,
|
||||
udpa_data_orca_v1_OrcaLoadReport_UtilizationEntry_value, arena);
|
||||
return backend_metric_data;
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
36
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/backend_metric.h
generated
vendored
Normal file
36
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/backend_metric.h
generated
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
//
|
||||
// Copyright 2019 gRPC authors.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_BACKEND_METRIC_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_BACKEND_METRIC_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/slice.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/lb_policy.h"
|
||||
#include "src/core/lib/gprpp/arena.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
// Parses the serialized load report and allocates a BackendMetricData
|
||||
// object on the arena.
|
||||
const LoadBalancingPolicy::BackendMetricData* ParseBackendMetricData(
|
||||
const grpc_slice& serialized_load_report, Arena* arena);
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_BACKEND_METRIC_H */
|
181
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/backup_poller.cc
generated
vendored
Normal file
181
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/backup_poller.cc
generated
vendored
Normal file
@ -0,0 +1,181 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/backup_poller.h"
|
||||
|
||||
#include <grpc/grpc.h>
|
||||
#include <grpc/support/alloc.h>
|
||||
#include <grpc/support/log.h>
|
||||
#include <grpc/support/sync.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/client_channel.h"
|
||||
#include "src/core/lib/gpr/string.h"
|
||||
#include "src/core/lib/gprpp/global_config.h"
|
||||
#include "src/core/lib/iomgr/error.h"
|
||||
#include "src/core/lib/iomgr/iomgr.h"
|
||||
#include "src/core/lib/iomgr/pollset.h"
|
||||
#include "src/core/lib/iomgr/timer.h"
|
||||
#include "src/core/lib/surface/channel.h"
|
||||
#include "src/core/lib/surface/completion_queue.h"
|
||||
|
||||
#define DEFAULT_POLL_INTERVAL_MS 5000
|
||||
|
||||
namespace {
|
||||
struct backup_poller {
|
||||
grpc_timer polling_timer;
|
||||
grpc_closure run_poller_closure;
|
||||
grpc_closure shutdown_closure;
|
||||
gpr_mu* pollset_mu;
|
||||
grpc_pollset* pollset; // guarded by pollset_mu
|
||||
bool shutting_down; // guarded by pollset_mu
|
||||
gpr_refcount refs;
|
||||
gpr_refcount shutdown_refs;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
static gpr_once g_once = GPR_ONCE_INIT;
|
||||
static gpr_mu g_poller_mu;
|
||||
static backup_poller* g_poller = nullptr; // guarded by g_poller_mu
|
||||
// g_poll_interval_ms is set only once at the first time
|
||||
// grpc_client_channel_start_backup_polling() is called, after that it is
|
||||
// treated as const.
|
||||
static int g_poll_interval_ms = DEFAULT_POLL_INTERVAL_MS;
|
||||
|
||||
GPR_GLOBAL_CONFIG_DEFINE_INT32(
|
||||
grpc_client_channel_backup_poll_interval_ms, DEFAULT_POLL_INTERVAL_MS,
|
||||
"Declares the interval in ms between two backup polls on client channels. "
|
||||
"These polls are run in the timer thread so that gRPC can process "
|
||||
"connection failures while there is no active polling thread. "
|
||||
"They help reconnect disconnected client channels (mostly due to "
|
||||
"idleness), so that the next RPC on this channel won't fail. Set to 0 to "
|
||||
"turn off the backup polls.");
|
||||
|
||||
void grpc_client_channel_global_init_backup_polling() {
|
||||
gpr_once_init(&g_once, [] { gpr_mu_init(&g_poller_mu); });
|
||||
int32_t poll_interval_ms =
|
||||
GPR_GLOBAL_CONFIG_GET(grpc_client_channel_backup_poll_interval_ms);
|
||||
if (poll_interval_ms < 0) {
|
||||
gpr_log(GPR_ERROR,
|
||||
"Invalid GRPC_CLIENT_CHANNEL_BACKUP_POLL_INTERVAL_MS: %d, "
|
||||
"default value %d will be used.",
|
||||
poll_interval_ms, g_poll_interval_ms);
|
||||
} else {
|
||||
g_poll_interval_ms = poll_interval_ms;
|
||||
}
|
||||
}
|
||||
|
||||
static void backup_poller_shutdown_unref(backup_poller* p) {
|
||||
if (gpr_unref(&p->shutdown_refs)) {
|
||||
grpc_pollset_destroy(p->pollset);
|
||||
gpr_free(p->pollset);
|
||||
gpr_free(p);
|
||||
}
|
||||
}
|
||||
|
||||
static void done_poller(void* arg, grpc_error* error) {
|
||||
backup_poller_shutdown_unref(static_cast<backup_poller*>(arg));
|
||||
}
|
||||
|
||||
static void g_poller_unref() {
|
||||
gpr_mu_lock(&g_poller_mu);
|
||||
if (gpr_unref(&g_poller->refs)) {
|
||||
backup_poller* p = g_poller;
|
||||
g_poller = nullptr;
|
||||
gpr_mu_unlock(&g_poller_mu);
|
||||
gpr_mu_lock(p->pollset_mu);
|
||||
p->shutting_down = true;
|
||||
grpc_pollset_shutdown(
|
||||
p->pollset, GRPC_CLOSURE_INIT(&p->shutdown_closure, done_poller, p,
|
||||
grpc_schedule_on_exec_ctx));
|
||||
gpr_mu_unlock(p->pollset_mu);
|
||||
grpc_timer_cancel(&p->polling_timer);
|
||||
} else {
|
||||
gpr_mu_unlock(&g_poller_mu);
|
||||
}
|
||||
}
|
||||
|
||||
static void run_poller(void* arg, grpc_error* error) {
|
||||
backup_poller* p = static_cast<backup_poller*>(arg);
|
||||
if (error != GRPC_ERROR_NONE) {
|
||||
if (error != GRPC_ERROR_CANCELLED) {
|
||||
GRPC_LOG_IF_ERROR("run_poller", GRPC_ERROR_REF(error));
|
||||
}
|
||||
backup_poller_shutdown_unref(p);
|
||||
return;
|
||||
}
|
||||
gpr_mu_lock(p->pollset_mu);
|
||||
if (p->shutting_down) {
|
||||
gpr_mu_unlock(p->pollset_mu);
|
||||
backup_poller_shutdown_unref(p);
|
||||
return;
|
||||
}
|
||||
grpc_error* err =
|
||||
grpc_pollset_work(p->pollset, nullptr, grpc_core::ExecCtx::Get()->Now());
|
||||
gpr_mu_unlock(p->pollset_mu);
|
||||
GRPC_LOG_IF_ERROR("Run client channel backup poller", err);
|
||||
grpc_timer_init(&p->polling_timer,
|
||||
grpc_core::ExecCtx::Get()->Now() + g_poll_interval_ms,
|
||||
&p->run_poller_closure);
|
||||
}
|
||||
|
||||
static void g_poller_init_locked() {
|
||||
if (g_poller == nullptr) {
|
||||
g_poller = static_cast<backup_poller*>(gpr_zalloc(sizeof(backup_poller)));
|
||||
g_poller->pollset =
|
||||
static_cast<grpc_pollset*>(gpr_zalloc(grpc_pollset_size()));
|
||||
g_poller->shutting_down = false;
|
||||
grpc_pollset_init(g_poller->pollset, &g_poller->pollset_mu);
|
||||
gpr_ref_init(&g_poller->refs, 0);
|
||||
// one for timer cancellation, one for pollset shutdown
|
||||
gpr_ref_init(&g_poller->shutdown_refs, 2);
|
||||
GRPC_CLOSURE_INIT(&g_poller->run_poller_closure, run_poller, g_poller,
|
||||
grpc_schedule_on_exec_ctx);
|
||||
grpc_timer_init(&g_poller->polling_timer,
|
||||
grpc_core::ExecCtx::Get()->Now() + g_poll_interval_ms,
|
||||
&g_poller->run_poller_closure);
|
||||
}
|
||||
}
|
||||
|
||||
void grpc_client_channel_start_backup_polling(
|
||||
grpc_pollset_set* interested_parties) {
|
||||
if (g_poll_interval_ms == 0 || grpc_iomgr_run_in_background()) {
|
||||
return;
|
||||
}
|
||||
gpr_mu_lock(&g_poller_mu);
|
||||
g_poller_init_locked();
|
||||
gpr_ref(&g_poller->refs);
|
||||
/* Get a reference to g_poller->pollset before releasing g_poller_mu to make
|
||||
* TSAN happy. Otherwise, reading from g_poller (i.e g_poller->pollset) after
|
||||
* releasing the lock and setting g_poller to NULL in g_poller_unref() is
|
||||
* being flagged as a data-race by TSAN */
|
||||
grpc_pollset* pollset = g_poller->pollset;
|
||||
gpr_mu_unlock(&g_poller_mu);
|
||||
|
||||
grpc_pollset_set_add_pollset(interested_parties, pollset);
|
||||
}
|
||||
|
||||
void grpc_client_channel_stop_backup_polling(
|
||||
grpc_pollset_set* interested_parties) {
|
||||
if (g_poll_interval_ms == 0 || grpc_iomgr_run_in_background()) {
|
||||
return;
|
||||
}
|
||||
grpc_pollset_set_del_pollset(interested_parties, g_poller->pollset);
|
||||
g_poller_unref();
|
||||
}
|
41
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/backup_poller.h
generated
vendored
Normal file
41
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/backup_poller.h
generated
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_BACKUP_POLLER_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_BACKUP_POLLER_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/grpc.h>
|
||||
#include "src/core/lib/channel/channel_stack.h"
|
||||
#include "src/core/lib/gprpp/global_config.h"
|
||||
|
||||
GPR_GLOBAL_CONFIG_DECLARE_INT32(grpc_client_channel_backup_poll_interval_ms);
|
||||
|
||||
/* Initializes backup polling. */
|
||||
void grpc_client_channel_global_init_backup_polling();
|
||||
|
||||
/* Starts polling \a interested_parties periodically in the timer thread. */
|
||||
void grpc_client_channel_start_backup_polling(
|
||||
grpc_pollset_set* interested_parties);
|
||||
|
||||
/* Stops polling \a interested_parties. */
|
||||
void grpc_client_channel_stop_backup_polling(
|
||||
grpc_pollset_set* interested_parties);
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_BACKUP_POLLER_H */
|
264
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/channel_connectivity.cc
generated
vendored
Normal file
264
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/channel_connectivity.cc
generated
vendored
Normal file
@ -0,0 +1,264 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/lib/surface/channel.h"
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
#include <grpc/support/alloc.h>
|
||||
#include <grpc/support/log.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/client_channel.h"
|
||||
#include "src/core/lib/iomgr/timer.h"
|
||||
#include "src/core/lib/surface/api_trace.h"
|
||||
#include "src/core/lib/surface/completion_queue.h"
|
||||
|
||||
grpc_connectivity_state grpc_channel_check_connectivity_state(
|
||||
grpc_channel* channel, int try_to_connect) {
|
||||
/* forward through to the underlying client channel */
|
||||
grpc_channel_element* client_channel_elem =
|
||||
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
|
||||
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
||||
grpc_core::ExecCtx exec_ctx;
|
||||
grpc_connectivity_state state;
|
||||
GRPC_API_TRACE(
|
||||
"grpc_channel_check_connectivity_state(channel=%p, try_to_connect=%d)", 2,
|
||||
(channel, try_to_connect));
|
||||
if (GPR_LIKELY(client_channel_elem->filter == &grpc_client_channel_filter)) {
|
||||
state = grpc_client_channel_check_connectivity_state(client_channel_elem,
|
||||
try_to_connect);
|
||||
|
||||
return state;
|
||||
}
|
||||
gpr_log(GPR_ERROR,
|
||||
"grpc_channel_check_connectivity_state called on something that is "
|
||||
"not a client channel, but '%s'",
|
||||
client_channel_elem->filter->name);
|
||||
|
||||
return GRPC_CHANNEL_SHUTDOWN;
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
WAITING,
|
||||
READY_TO_CALL_BACK,
|
||||
CALLING_BACK_AND_FINISHED,
|
||||
} callback_phase;
|
||||
|
||||
namespace {
|
||||
struct state_watcher {
|
||||
gpr_mu mu;
|
||||
callback_phase phase;
|
||||
grpc_closure on_complete;
|
||||
grpc_closure on_timeout;
|
||||
grpc_closure watcher_timer_init;
|
||||
grpc_timer alarm;
|
||||
grpc_connectivity_state state;
|
||||
grpc_completion_queue* cq;
|
||||
grpc_cq_completion completion_storage;
|
||||
grpc_channel* channel;
|
||||
grpc_error* error;
|
||||
void* tag;
|
||||
};
|
||||
} // namespace
|
||||
|
||||
static void delete_state_watcher(state_watcher* w) {
|
||||
grpc_channel_element* client_channel_elem = grpc_channel_stack_last_element(
|
||||
grpc_channel_get_channel_stack(w->channel));
|
||||
if (client_channel_elem->filter == &grpc_client_channel_filter) {
|
||||
GRPC_CHANNEL_INTERNAL_UNREF(w->channel, "watch_channel_connectivity");
|
||||
} else {
|
||||
abort();
|
||||
}
|
||||
gpr_mu_destroy(&w->mu);
|
||||
gpr_free(w);
|
||||
}
|
||||
|
||||
static void finished_completion(void* pw, grpc_cq_completion* ignored) {
|
||||
bool should_delete = false;
|
||||
state_watcher* w = static_cast<state_watcher*>(pw);
|
||||
gpr_mu_lock(&w->mu);
|
||||
switch (w->phase) {
|
||||
case WAITING:
|
||||
case READY_TO_CALL_BACK:
|
||||
GPR_UNREACHABLE_CODE(return );
|
||||
case CALLING_BACK_AND_FINISHED:
|
||||
should_delete = true;
|
||||
break;
|
||||
}
|
||||
gpr_mu_unlock(&w->mu);
|
||||
|
||||
if (should_delete) {
|
||||
delete_state_watcher(w);
|
||||
}
|
||||
}
|
||||
|
||||
static void partly_done(state_watcher* w, bool due_to_completion,
|
||||
grpc_error* error) {
|
||||
bool end_op = false;
|
||||
void* end_op_tag = nullptr;
|
||||
grpc_error* end_op_error = nullptr;
|
||||
grpc_completion_queue* end_op_cq = nullptr;
|
||||
grpc_cq_completion* end_op_completion_storage = nullptr;
|
||||
|
||||
if (due_to_completion) {
|
||||
grpc_timer_cancel(&w->alarm);
|
||||
} else {
|
||||
grpc_channel_element* client_channel_elem = grpc_channel_stack_last_element(
|
||||
grpc_channel_get_channel_stack(w->channel));
|
||||
grpc_client_channel_watch_connectivity_state(
|
||||
client_channel_elem,
|
||||
grpc_polling_entity_create_from_pollset(grpc_cq_pollset(w->cq)),
|
||||
nullptr, &w->on_complete, nullptr);
|
||||
}
|
||||
|
||||
gpr_mu_lock(&w->mu);
|
||||
|
||||
if (due_to_completion) {
|
||||
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures)) {
|
||||
GRPC_LOG_IF_ERROR("watch_completion_error", GRPC_ERROR_REF(error));
|
||||
}
|
||||
GRPC_ERROR_UNREF(error);
|
||||
error = GRPC_ERROR_NONE;
|
||||
} else {
|
||||
if (error == GRPC_ERROR_NONE) {
|
||||
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
||||
"Timed out waiting for connection state change");
|
||||
} else if (error == GRPC_ERROR_CANCELLED) {
|
||||
error = GRPC_ERROR_NONE;
|
||||
}
|
||||
}
|
||||
switch (w->phase) {
|
||||
case WAITING:
|
||||
GRPC_ERROR_REF(error);
|
||||
w->error = error;
|
||||
w->phase = READY_TO_CALL_BACK;
|
||||
break;
|
||||
case READY_TO_CALL_BACK:
|
||||
if (error != GRPC_ERROR_NONE) {
|
||||
GPR_ASSERT(!due_to_completion);
|
||||
GRPC_ERROR_UNREF(w->error);
|
||||
GRPC_ERROR_REF(error);
|
||||
w->error = error;
|
||||
}
|
||||
w->phase = CALLING_BACK_AND_FINISHED;
|
||||
end_op = true;
|
||||
end_op_cq = w->cq;
|
||||
end_op_tag = w->tag;
|
||||
end_op_error = w->error;
|
||||
end_op_completion_storage = &w->completion_storage;
|
||||
break;
|
||||
case CALLING_BACK_AND_FINISHED:
|
||||
GPR_UNREACHABLE_CODE(return );
|
||||
break;
|
||||
}
|
||||
gpr_mu_unlock(&w->mu);
|
||||
|
||||
if (end_op) {
|
||||
grpc_cq_end_op(end_op_cq, end_op_tag, end_op_error, finished_completion, w,
|
||||
end_op_completion_storage);
|
||||
}
|
||||
|
||||
GRPC_ERROR_UNREF(error);
|
||||
}
|
||||
|
||||
static void watch_complete(void* pw, grpc_error* error) {
|
||||
partly_done(static_cast<state_watcher*>(pw), true, GRPC_ERROR_REF(error));
|
||||
}
|
||||
|
||||
static void timeout_complete(void* pw, grpc_error* error) {
|
||||
partly_done(static_cast<state_watcher*>(pw), false, GRPC_ERROR_REF(error));
|
||||
}
|
||||
|
||||
int grpc_channel_num_external_connectivity_watchers(grpc_channel* channel) {
|
||||
grpc_channel_element* client_channel_elem =
|
||||
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
|
||||
return grpc_client_channel_num_external_connectivity_watchers(
|
||||
client_channel_elem);
|
||||
}
|
||||
|
||||
typedef struct watcher_timer_init_arg {
|
||||
state_watcher* w;
|
||||
gpr_timespec deadline;
|
||||
} watcher_timer_init_arg;
|
||||
|
||||
static void watcher_timer_init(void* arg, grpc_error* error_ignored) {
|
||||
watcher_timer_init_arg* wa = static_cast<watcher_timer_init_arg*>(arg);
|
||||
|
||||
grpc_timer_init(&wa->w->alarm, grpc_timespec_to_millis_round_up(wa->deadline),
|
||||
&wa->w->on_timeout);
|
||||
gpr_free(wa);
|
||||
}
|
||||
|
||||
int grpc_channel_support_connectivity_watcher(grpc_channel* channel) {
|
||||
grpc_channel_element* client_channel_elem =
|
||||
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
|
||||
return client_channel_elem->filter != &grpc_client_channel_filter ? 0 : 1;
|
||||
}
|
||||
|
||||
void grpc_channel_watch_connectivity_state(
|
||||
grpc_channel* channel, grpc_connectivity_state last_observed_state,
|
||||
gpr_timespec deadline, grpc_completion_queue* cq, void* tag) {
|
||||
grpc_channel_element* client_channel_elem =
|
||||
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
|
||||
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
||||
grpc_core::ExecCtx exec_ctx;
|
||||
state_watcher* w = static_cast<state_watcher*>(gpr_malloc(sizeof(*w)));
|
||||
|
||||
GRPC_API_TRACE(
|
||||
"grpc_channel_watch_connectivity_state("
|
||||
"channel=%p, last_observed_state=%d, "
|
||||
"deadline=gpr_timespec { tv_sec: %" PRId64
|
||||
", tv_nsec: %d, clock_type: %d }, "
|
||||
"cq=%p, tag=%p)",
|
||||
7,
|
||||
(channel, (int)last_observed_state, deadline.tv_sec, deadline.tv_nsec,
|
||||
(int)deadline.clock_type, cq, tag));
|
||||
|
||||
GPR_ASSERT(grpc_cq_begin_op(cq, tag));
|
||||
|
||||
gpr_mu_init(&w->mu);
|
||||
GRPC_CLOSURE_INIT(&w->on_complete, watch_complete, w,
|
||||
grpc_schedule_on_exec_ctx);
|
||||
GRPC_CLOSURE_INIT(&w->on_timeout, timeout_complete, w,
|
||||
grpc_schedule_on_exec_ctx);
|
||||
w->phase = WAITING;
|
||||
w->state = last_observed_state;
|
||||
w->cq = cq;
|
||||
w->tag = tag;
|
||||
w->channel = channel;
|
||||
w->error = nullptr;
|
||||
|
||||
watcher_timer_init_arg* wa = static_cast<watcher_timer_init_arg*>(
|
||||
gpr_malloc(sizeof(watcher_timer_init_arg)));
|
||||
wa->w = w;
|
||||
wa->deadline = deadline;
|
||||
GRPC_CLOSURE_INIT(&w->watcher_timer_init, watcher_timer_init, wa,
|
||||
grpc_schedule_on_exec_ctx);
|
||||
|
||||
if (client_channel_elem->filter == &grpc_client_channel_filter) {
|
||||
GRPC_CHANNEL_INTERNAL_REF(channel, "watch_channel_connectivity");
|
||||
grpc_client_channel_watch_connectivity_state(
|
||||
client_channel_elem,
|
||||
grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq)), &w->state,
|
||||
&w->on_complete, &w->watcher_timer_init);
|
||||
} else {
|
||||
abort();
|
||||
}
|
||||
}
|
3961
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel.cc
generated
vendored
Normal file
3961
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel.cc
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
58
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel.h
generated
vendored
Normal file
58
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel.h
generated
vendored
Normal file
@ -0,0 +1,58 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
||||
#include "src/core/ext/filters/client_channel/client_channel_factory.h"
|
||||
#include "src/core/ext/filters/client_channel/resolver.h"
|
||||
#include "src/core/lib/channel/channel_stack.h"
|
||||
|
||||
extern grpc_core::TraceFlag grpc_client_channel_trace;
|
||||
|
||||
// Channel arg key for server URI string.
|
||||
#define GRPC_ARG_SERVER_URI "grpc.server_uri"
|
||||
|
||||
/* A client channel is a channel that begins disconnected, and can connect
|
||||
to some endpoint on demand. If that endpoint disconnects, it will be
|
||||
connected to again later.
|
||||
|
||||
Calls on a disconnected client channel are queued until a connection is
|
||||
established. */
|
||||
|
||||
extern const grpc_channel_filter grpc_client_channel_filter;
|
||||
|
||||
grpc_connectivity_state grpc_client_channel_check_connectivity_state(
|
||||
grpc_channel_element* elem, int try_to_connect);
|
||||
|
||||
int grpc_client_channel_num_external_connectivity_watchers(
|
||||
grpc_channel_element* elem);
|
||||
|
||||
void grpc_client_channel_watch_connectivity_state(
|
||||
grpc_channel_element* elem, grpc_polling_entity pollent,
|
||||
grpc_connectivity_state* state, grpc_closure* on_complete,
|
||||
grpc_closure* watcher_timer_init);
|
||||
|
||||
/* Debug helper: pull the subchannel call from a call stack element */
|
||||
grpc_core::RefCountedPtr<grpc_core::SubchannelCall>
|
||||
grpc_client_channel_get_subchannel_call(grpc_call_element* elem);
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H */
|
112
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel_channelz.cc
generated
vendored
Normal file
112
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel_channelz.cc
generated
vendored
Normal file
@ -0,0 +1,112 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2018 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/client_channel.h"
|
||||
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
||||
#include "src/core/lib/channel/channelz_registry.h"
|
||||
#include "src/core/lib/gpr/useful.h"
|
||||
#include "src/core/lib/surface/channel.h"
|
||||
#include "src/core/lib/transport/connectivity_state.h"
|
||||
|
||||
#include <grpc/support/string_util.h>
|
||||
|
||||
namespace grpc_core {
|
||||
namespace channelz {
|
||||
|
||||
SubchannelNode::SubchannelNode(const char* target_address,
|
||||
size_t channel_tracer_max_nodes)
|
||||
: BaseNode(EntityType::kSubchannel,
|
||||
UniquePtr<char>(gpr_strdup(target_address))),
|
||||
target_(UniquePtr<char>(gpr_strdup(target_address))),
|
||||
trace_(channel_tracer_max_nodes) {}
|
||||
|
||||
SubchannelNode::~SubchannelNode() {}
|
||||
|
||||
void SubchannelNode::UpdateConnectivityState(grpc_connectivity_state state) {
|
||||
connectivity_state_.Store(state, MemoryOrder::RELAXED);
|
||||
}
|
||||
|
||||
void SubchannelNode::SetChildSocket(RefCountedPtr<SocketNode> socket) {
|
||||
MutexLock lock(&socket_mu_);
|
||||
child_socket_ = std::move(socket);
|
||||
}
|
||||
|
||||
void SubchannelNode::PopulateConnectivityState(grpc_json* json) {
|
||||
grpc_connectivity_state state =
|
||||
connectivity_state_.Load(MemoryOrder::RELAXED);
|
||||
json = grpc_json_create_child(nullptr, json, "state", nullptr,
|
||||
GRPC_JSON_OBJECT, false);
|
||||
grpc_json_create_child(nullptr, json, "state",
|
||||
grpc_connectivity_state_name(state), GRPC_JSON_STRING,
|
||||
false);
|
||||
}
|
||||
|
||||
grpc_json* SubchannelNode::RenderJson() {
|
||||
grpc_json* top_level_json = grpc_json_create(GRPC_JSON_OBJECT);
|
||||
grpc_json* json = top_level_json;
|
||||
grpc_json* json_iterator = nullptr;
|
||||
json_iterator = grpc_json_create_child(json_iterator, json, "ref", nullptr,
|
||||
GRPC_JSON_OBJECT, false);
|
||||
json = json_iterator;
|
||||
json_iterator = nullptr;
|
||||
json_iterator = grpc_json_add_number_string_child(json, json_iterator,
|
||||
"subchannelId", uuid());
|
||||
// reset json iterators to top level object
|
||||
json = top_level_json;
|
||||
json_iterator = nullptr;
|
||||
// create and fill the data child.
|
||||
grpc_json* data = grpc_json_create_child(json_iterator, json, "data", nullptr,
|
||||
GRPC_JSON_OBJECT, false);
|
||||
json = data;
|
||||
json_iterator = nullptr;
|
||||
PopulateConnectivityState(json);
|
||||
GPR_ASSERT(target_.get() != nullptr);
|
||||
grpc_json_create_child(nullptr, json, "target", target_.get(),
|
||||
GRPC_JSON_STRING, false);
|
||||
// fill in the channel trace if applicable
|
||||
grpc_json* trace_json = trace_.RenderJson();
|
||||
if (trace_json != nullptr) {
|
||||
trace_json->key = "trace"; // this object is named trace in channelz.proto
|
||||
grpc_json_link_child(json, trace_json, nullptr);
|
||||
}
|
||||
// ask CallCountingHelper to populate trace and call count data.
|
||||
call_counter_.PopulateCallCounts(json);
|
||||
json = top_level_json;
|
||||
// populate the child socket.
|
||||
RefCountedPtr<SocketNode> child_socket;
|
||||
{
|
||||
MutexLock lock(&socket_mu_);
|
||||
child_socket = child_socket_;
|
||||
}
|
||||
if (child_socket != nullptr && child_socket->uuid() != 0) {
|
||||
grpc_json* array_parent = grpc_json_create_child(
|
||||
nullptr, json, "socketRef", nullptr, GRPC_JSON_ARRAY, false);
|
||||
json_iterator = grpc_json_create_child(json_iterator, array_parent, nullptr,
|
||||
nullptr, GRPC_JSON_OBJECT, false);
|
||||
grpc_json* sibling_iterator = grpc_json_add_number_string_child(
|
||||
json_iterator, nullptr, "socketId", child_socket->uuid());
|
||||
grpc_json_create_child(sibling_iterator, json_iterator, "name",
|
||||
child_socket->name(), GRPC_JSON_STRING, false);
|
||||
}
|
||||
return top_level_json;
|
||||
}
|
||||
|
||||
} // namespace channelz
|
||||
} // namespace grpc_core
|
78
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel_channelz.h
generated
vendored
Normal file
78
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel_channelz.h
generated
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2018 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_CHANNELZ_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_CHANNELZ_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/lib/channel/channel_args.h"
|
||||
#include "src/core/lib/channel/channel_stack.h"
|
||||
#include "src/core/lib/channel/channel_trace.h"
|
||||
#include "src/core/lib/channel/channelz.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
class Subchannel;
|
||||
|
||||
namespace channelz {
|
||||
|
||||
class SubchannelNode : public BaseNode {
|
||||
public:
|
||||
SubchannelNode(const char* target_address, size_t channel_tracer_max_nodes);
|
||||
~SubchannelNode() override;
|
||||
|
||||
// Sets the subchannel's connectivity state without health checking.
|
||||
void UpdateConnectivityState(grpc_connectivity_state state);
|
||||
|
||||
// Used when the subchannel's child socket changes. This should be set when
|
||||
// the subchannel's transport is created and set to nullptr when the
|
||||
// subchannel unrefs the transport.
|
||||
void SetChildSocket(RefCountedPtr<SocketNode> socket);
|
||||
|
||||
grpc_json* RenderJson() override;
|
||||
|
||||
// proxy methods to composed classes.
|
||||
void AddTraceEvent(ChannelTrace::Severity severity, const grpc_slice& data) {
|
||||
trace_.AddTraceEvent(severity, data);
|
||||
}
|
||||
void AddTraceEventWithReference(ChannelTrace::Severity severity,
|
||||
const grpc_slice& data,
|
||||
RefCountedPtr<BaseNode> referenced_channel) {
|
||||
trace_.AddTraceEventWithReference(severity, data,
|
||||
std::move(referenced_channel));
|
||||
}
|
||||
void RecordCallStarted() { call_counter_.RecordCallStarted(); }
|
||||
void RecordCallFailed() { call_counter_.RecordCallFailed(); }
|
||||
void RecordCallSucceeded() { call_counter_.RecordCallSucceeded(); }
|
||||
|
||||
private:
|
||||
void PopulateConnectivityState(grpc_json* json);
|
||||
|
||||
Atomic<grpc_connectivity_state> connectivity_state_{GRPC_CHANNEL_IDLE};
|
||||
Mutex socket_mu_;
|
||||
RefCountedPtr<SocketNode> child_socket_;
|
||||
UniquePtr<char> target_;
|
||||
CallCountingHelper call_counter_;
|
||||
ChannelTrace trace_;
|
||||
};
|
||||
|
||||
} // namespace channelz
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_CHANNELZ_H */
|
55
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel_factory.cc
generated
vendored
Normal file
55
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel_factory.cc
generated
vendored
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/client_channel_factory.h"
|
||||
#include "src/core/lib/channel/channel_args.h"
|
||||
|
||||
// Channel arg key for client channel factory.
|
||||
#define GRPC_ARG_CLIENT_CHANNEL_FACTORY "grpc.client_channel_factory"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
namespace {
|
||||
|
||||
void* factory_arg_copy(void* f) { return f; }
|
||||
void factory_arg_destroy(void* f) {}
|
||||
int factory_arg_cmp(void* factory1, void* factory2) {
|
||||
return GPR_ICMP(factory1, factory2);
|
||||
}
|
||||
const grpc_arg_pointer_vtable factory_arg_vtable = {
|
||||
factory_arg_copy, factory_arg_destroy, factory_arg_cmp};
|
||||
|
||||
} // namespace
|
||||
|
||||
grpc_arg ClientChannelFactory::CreateChannelArg(ClientChannelFactory* factory) {
|
||||
return grpc_channel_arg_pointer_create(
|
||||
const_cast<char*>(GRPC_ARG_CLIENT_CHANNEL_FACTORY), factory,
|
||||
&factory_arg_vtable);
|
||||
}
|
||||
|
||||
ClientChannelFactory* ClientChannelFactory::GetFromChannelArgs(
|
||||
const grpc_channel_args* args) {
|
||||
const grpc_arg* arg =
|
||||
grpc_channel_args_find(args, GRPC_ARG_CLIENT_CHANNEL_FACTORY);
|
||||
if (arg == nullptr || arg->type != GRPC_ARG_POINTER) return nullptr;
|
||||
return static_cast<ClientChannelFactory*>(arg->value.pointer.p);
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
51
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel_factory.h
generated
vendored
Normal file
51
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel_factory.h
generated
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/grpc_types.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/subchannel.h"
|
||||
#include "src/core/lib/gprpp/abstract.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
class ClientChannelFactory {
|
||||
public:
|
||||
virtual ~ClientChannelFactory() = default;
|
||||
|
||||
// Creates a subchannel with the specified args.
|
||||
virtual Subchannel* CreateSubchannel(const grpc_channel_args* args)
|
||||
GRPC_ABSTRACT;
|
||||
|
||||
// Returns a channel arg containing the specified factory.
|
||||
static grpc_arg CreateChannelArg(ClientChannelFactory* factory);
|
||||
|
||||
// Returns the factory from args, or null if not found.
|
||||
static ClientChannelFactory* GetFromChannelArgs(
|
||||
const grpc_channel_args* args);
|
||||
|
||||
GRPC_ABSTRACT_BASE_CLASS
|
||||
};
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_FACTORY_H */
|
69
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel_plugin.cc
generated
vendored
Normal file
69
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/client_channel_plugin.cc
generated
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <limits.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <grpc/support/alloc.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/backup_poller.h"
|
||||
#include "src/core/ext/filters/client_channel/client_channel.h"
|
||||
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
||||
#include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
|
||||
#include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
|
||||
#include "src/core/ext/filters/client_channel/http_proxy.h"
|
||||
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
||||
#include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
|
||||
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
||||
#include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
|
||||
#include "src/core/ext/filters/client_channel/retry_throttle.h"
|
||||
#include "src/core/lib/surface/channel_init.h"
|
||||
|
||||
static bool append_filter(grpc_channel_stack_builder* builder, void* arg) {
|
||||
return grpc_channel_stack_builder_append_filter(
|
||||
builder, static_cast<const grpc_channel_filter*>(arg), nullptr, nullptr);
|
||||
}
|
||||
|
||||
void grpc_client_channel_init(void) {
|
||||
grpc_core::ServiceConfig::Init();
|
||||
grpc_core::internal::ClientChannelServiceConfigParser::Register();
|
||||
grpc_core::LoadBalancingPolicyRegistry::Builder::InitRegistry();
|
||||
grpc_core::ResolverRegistry::Builder::InitRegistry();
|
||||
grpc_core::internal::ServerRetryThrottleMap::Init();
|
||||
grpc_proxy_mapper_registry_init();
|
||||
grpc_register_http_proxy_mapper();
|
||||
grpc_core::GlobalSubchannelPool::Init();
|
||||
grpc_channel_init_register_stage(
|
||||
GRPC_CLIENT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY, append_filter,
|
||||
(void*)&grpc_client_channel_filter);
|
||||
grpc_http_connect_register_handshaker_factory();
|
||||
grpc_client_channel_global_init_backup_polling();
|
||||
}
|
||||
|
||||
void grpc_client_channel_shutdown(void) {
|
||||
grpc_core::GlobalSubchannelPool::Shutdown();
|
||||
grpc_channel_init_shutdown();
|
||||
grpc_proxy_mapper_registry_shutdown();
|
||||
grpc_core::internal::ServerRetryThrottleMap::Shutdown();
|
||||
grpc_core::ResolverRegistry::Builder::ShutdownRegistry();
|
||||
grpc_core::LoadBalancingPolicyRegistry::Builder::ShutdownRegistry();
|
||||
grpc_core::ServiceConfig::Shutdown();
|
||||
}
|
41
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/connector.cc
generated
vendored
Normal file
41
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/connector.cc
generated
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/connector.h"
|
||||
|
||||
grpc_connector* grpc_connector_ref(grpc_connector* connector) {
|
||||
connector->vtable->ref(connector);
|
||||
return connector;
|
||||
}
|
||||
|
||||
void grpc_connector_unref(grpc_connector* connector) {
|
||||
connector->vtable->unref(connector);
|
||||
}
|
||||
|
||||
void grpc_connector_connect(grpc_connector* connector,
|
||||
const grpc_connect_in_args* in_args,
|
||||
grpc_connect_out_args* out_args,
|
||||
grpc_closure* notify) {
|
||||
connector->vtable->connect(connector, in_args, out_args, notify);
|
||||
}
|
||||
|
||||
void grpc_connector_shutdown(grpc_connector* connector, grpc_error* why) {
|
||||
connector->vtable->shutdown(connector, why);
|
||||
}
|
84
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/connector.h
generated
vendored
Normal file
84
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/connector.h
generated
vendored
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CONNECTOR_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CONNECTOR_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/lib/channel/channel_stack.h"
|
||||
#include "src/core/lib/channel/channelz.h"
|
||||
#include "src/core/lib/iomgr/resolve_address.h"
|
||||
#include "src/core/lib/transport/transport.h"
|
||||
|
||||
typedef struct grpc_connector grpc_connector;
|
||||
typedef struct grpc_connector_vtable grpc_connector_vtable;
|
||||
|
||||
struct grpc_connector {
|
||||
const grpc_connector_vtable* vtable;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
/** set of pollsets interested in this connection */
|
||||
grpc_pollset_set* interested_parties;
|
||||
/** deadline for connection */
|
||||
grpc_millis deadline;
|
||||
/** channel arguments (to be passed to transport) */
|
||||
const grpc_channel_args* channel_args;
|
||||
} grpc_connect_in_args;
|
||||
|
||||
typedef struct {
|
||||
/** the connected transport */
|
||||
grpc_transport* transport;
|
||||
|
||||
/** channel arguments (to be passed to the filters) */
|
||||
grpc_channel_args* channel_args;
|
||||
|
||||
/** channelz socket node of the connected transport. nullptr if not available
|
||||
*/
|
||||
grpc_core::RefCountedPtr<grpc_core::channelz::SocketNode> socket;
|
||||
|
||||
void reset() {
|
||||
transport = nullptr;
|
||||
channel_args = nullptr;
|
||||
socket = nullptr;
|
||||
}
|
||||
} grpc_connect_out_args;
|
||||
|
||||
struct grpc_connector_vtable {
|
||||
void (*ref)(grpc_connector* connector);
|
||||
void (*unref)(grpc_connector* connector);
|
||||
/** Implementation of grpc_connector_shutdown */
|
||||
void (*shutdown)(grpc_connector* connector, grpc_error* why);
|
||||
/** Implementation of grpc_connector_connect */
|
||||
void (*connect)(grpc_connector* connector,
|
||||
const grpc_connect_in_args* in_args,
|
||||
grpc_connect_out_args* out_args, grpc_closure* notify);
|
||||
};
|
||||
|
||||
grpc_connector* grpc_connector_ref(grpc_connector* connector);
|
||||
void grpc_connector_unref(grpc_connector* connector);
|
||||
/** Connect using the connector: max one outstanding call at a time */
|
||||
void grpc_connector_connect(grpc_connector* connector,
|
||||
const grpc_connect_in_args* in_args,
|
||||
grpc_connect_out_args* out_args,
|
||||
grpc_closure* notify);
|
||||
/** Cancel any pending connection */
|
||||
void grpc_connector_shutdown(grpc_connector* connector, grpc_error* why);
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CONNECTOR_H */
|
179
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/global_subchannel_pool.cc
generated
vendored
Normal file
179
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/global_subchannel_pool.cc
generated
vendored
Normal file
@ -0,0 +1,179 @@
|
||||
//
|
||||
//
|
||||
// Copyright 2018 gRPC authors.
|
||||
//
|
||||
// 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.
|
||||
//
|
||||
//
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
|
||||
|
||||
#include "src/core/ext/filters/client_channel/subchannel.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
GlobalSubchannelPool::GlobalSubchannelPool() {
|
||||
subchannel_map_ = grpc_avl_create(&subchannel_avl_vtable_);
|
||||
gpr_mu_init(&mu_);
|
||||
}
|
||||
|
||||
GlobalSubchannelPool::~GlobalSubchannelPool() {
|
||||
gpr_mu_destroy(&mu_);
|
||||
grpc_avl_unref(subchannel_map_, nullptr);
|
||||
}
|
||||
|
||||
void GlobalSubchannelPool::Init() {
|
||||
instance_ = New<RefCountedPtr<GlobalSubchannelPool>>(
|
||||
MakeRefCounted<GlobalSubchannelPool>());
|
||||
}
|
||||
|
||||
void GlobalSubchannelPool::Shutdown() {
|
||||
// To ensure Init() was called before.
|
||||
GPR_ASSERT(instance_ != nullptr);
|
||||
// To ensure Shutdown() was not called before.
|
||||
GPR_ASSERT(*instance_ != nullptr);
|
||||
instance_->reset();
|
||||
Delete(instance_);
|
||||
}
|
||||
|
||||
RefCountedPtr<GlobalSubchannelPool> GlobalSubchannelPool::instance() {
|
||||
GPR_ASSERT(instance_ != nullptr);
|
||||
GPR_ASSERT(*instance_ != nullptr);
|
||||
return *instance_;
|
||||
}
|
||||
|
||||
Subchannel* GlobalSubchannelPool::RegisterSubchannel(SubchannelKey* key,
|
||||
Subchannel* constructed) {
|
||||
Subchannel* c = nullptr;
|
||||
// Compare and swap (CAS) loop:
|
||||
while (c == nullptr) {
|
||||
// Ref the shared map to have a local copy.
|
||||
gpr_mu_lock(&mu_);
|
||||
grpc_avl old_map = grpc_avl_ref(subchannel_map_, nullptr);
|
||||
gpr_mu_unlock(&mu_);
|
||||
// Check to see if a subchannel already exists.
|
||||
c = static_cast<Subchannel*>(grpc_avl_get(old_map, key, nullptr));
|
||||
if (c != nullptr) {
|
||||
// The subchannel already exists. Try to reuse it.
|
||||
c = GRPC_SUBCHANNEL_REF_FROM_WEAK_REF(c, "subchannel_register+reuse");
|
||||
if (c != nullptr) {
|
||||
GRPC_SUBCHANNEL_UNREF(constructed,
|
||||
"subchannel_register+found_existing");
|
||||
// Exit the CAS loop without modifying the shared map.
|
||||
} // Else, reuse failed, so retry CAS loop.
|
||||
} else {
|
||||
// There hasn't been such subchannel. Add one.
|
||||
// Note that we should ref the old map first because grpc_avl_add() will
|
||||
// unref it while we still need to access it later.
|
||||
grpc_avl new_map = grpc_avl_add(
|
||||
grpc_avl_ref(old_map, nullptr), New<SubchannelKey>(*key),
|
||||
GRPC_SUBCHANNEL_WEAK_REF(constructed, "subchannel_register+new"),
|
||||
nullptr);
|
||||
// Try to publish the change to the shared map. It may happen (but
|
||||
// unlikely) that some other thread has changed the shared map, so compare
|
||||
// to make sure it's unchanged before swapping. Retry if it's changed.
|
||||
gpr_mu_lock(&mu_);
|
||||
if (old_map.root == subchannel_map_.root) {
|
||||
GPR_SWAP(grpc_avl, new_map, subchannel_map_);
|
||||
c = constructed;
|
||||
}
|
||||
gpr_mu_unlock(&mu_);
|
||||
grpc_avl_unref(new_map, nullptr);
|
||||
}
|
||||
grpc_avl_unref(old_map, nullptr);
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
void GlobalSubchannelPool::UnregisterSubchannel(SubchannelKey* key) {
|
||||
bool done = false;
|
||||
// Compare and swap (CAS) loop:
|
||||
while (!done) {
|
||||
// Ref the shared map to have a local copy.
|
||||
gpr_mu_lock(&mu_);
|
||||
grpc_avl old_map = grpc_avl_ref(subchannel_map_, nullptr);
|
||||
gpr_mu_unlock(&mu_);
|
||||
// Remove the subchannel.
|
||||
// Note that we should ref the old map first because grpc_avl_remove() will
|
||||
// unref it while we still need to access it later.
|
||||
grpc_avl new_map =
|
||||
grpc_avl_remove(grpc_avl_ref(old_map, nullptr), key, nullptr);
|
||||
// Try to publish the change to the shared map. It may happen (but
|
||||
// unlikely) that some other thread has changed the shared map, so compare
|
||||
// to make sure it's unchanged before swapping. Retry if it's changed.
|
||||
gpr_mu_lock(&mu_);
|
||||
if (old_map.root == subchannel_map_.root) {
|
||||
GPR_SWAP(grpc_avl, new_map, subchannel_map_);
|
||||
done = true;
|
||||
}
|
||||
gpr_mu_unlock(&mu_);
|
||||
grpc_avl_unref(new_map, nullptr);
|
||||
grpc_avl_unref(old_map, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
Subchannel* GlobalSubchannelPool::FindSubchannel(SubchannelKey* key) {
|
||||
// Lock, and take a reference to the subchannel map.
|
||||
// We don't need to do the search under a lock as AVL's are immutable.
|
||||
gpr_mu_lock(&mu_);
|
||||
grpc_avl index = grpc_avl_ref(subchannel_map_, nullptr);
|
||||
gpr_mu_unlock(&mu_);
|
||||
Subchannel* c = static_cast<Subchannel*>(grpc_avl_get(index, key, nullptr));
|
||||
if (c != nullptr) c = GRPC_SUBCHANNEL_REF_FROM_WEAK_REF(c, "found_from_pool");
|
||||
grpc_avl_unref(index, nullptr);
|
||||
return c;
|
||||
}
|
||||
|
||||
RefCountedPtr<GlobalSubchannelPool>* GlobalSubchannelPool::instance_ = nullptr;
|
||||
|
||||
namespace {
|
||||
|
||||
void sck_avl_destroy(void* p, void* user_data) {
|
||||
SubchannelKey* key = static_cast<SubchannelKey*>(p);
|
||||
Delete(key);
|
||||
}
|
||||
|
||||
void* sck_avl_copy(void* p, void* unused) {
|
||||
const SubchannelKey* key = static_cast<const SubchannelKey*>(p);
|
||||
auto* new_key = New<SubchannelKey>(*key);
|
||||
return static_cast<void*>(new_key);
|
||||
}
|
||||
|
||||
long sck_avl_compare(void* a, void* b, void* unused) {
|
||||
const SubchannelKey* key_a = static_cast<const SubchannelKey*>(a);
|
||||
const SubchannelKey* key_b = static_cast<const SubchannelKey*>(b);
|
||||
return key_a->Cmp(*key_b);
|
||||
}
|
||||
|
||||
void scv_avl_destroy(void* p, void* user_data) {
|
||||
GRPC_SUBCHANNEL_WEAK_UNREF((Subchannel*)p, "global_subchannel_pool");
|
||||
}
|
||||
|
||||
void* scv_avl_copy(void* p, void* unused) {
|
||||
GRPC_SUBCHANNEL_WEAK_REF((Subchannel*)p, "global_subchannel_pool");
|
||||
return p;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
const grpc_avl_vtable GlobalSubchannelPool::subchannel_avl_vtable_ = {
|
||||
sck_avl_destroy, // destroy_key
|
||||
sck_avl_copy, // copy_key
|
||||
sck_avl_compare, // compare_keys
|
||||
scv_avl_destroy, // destroy_value
|
||||
scv_avl_copy // copy_value
|
||||
};
|
||||
|
||||
} // namespace grpc_core
|
68
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/global_subchannel_pool.h
generated
vendored
Normal file
68
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/global_subchannel_pool.h
generated
vendored
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2018 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_GLOBAL_SUBCHANNEL_POOL_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_GLOBAL_SUBCHANNEL_POOL_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/subchannel_pool_interface.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
// The global subchannel pool. It shares subchannels among channels. There
|
||||
// should be only one instance of this class. Init() should be called once at
|
||||
// the filter initialization time; Shutdown() should be called once at the
|
||||
// filter shutdown time.
|
||||
// TODO(juanlishen): Enable subchannel retention.
|
||||
class GlobalSubchannelPool final : public SubchannelPoolInterface {
|
||||
public:
|
||||
// The ctor and dtor are not intended to use directly.
|
||||
GlobalSubchannelPool();
|
||||
~GlobalSubchannelPool() override;
|
||||
|
||||
// Should be called exactly once at filter initialization time.
|
||||
static void Init();
|
||||
// Should be called exactly once at filter shutdown time.
|
||||
static void Shutdown();
|
||||
|
||||
// Gets the singleton instance.
|
||||
static RefCountedPtr<GlobalSubchannelPool> instance();
|
||||
|
||||
// Implements interface methods.
|
||||
Subchannel* RegisterSubchannel(SubchannelKey* key,
|
||||
Subchannel* constructed) override;
|
||||
void UnregisterSubchannel(SubchannelKey* key) override;
|
||||
Subchannel* FindSubchannel(SubchannelKey* key) override;
|
||||
|
||||
private:
|
||||
// The singleton instance. (It's a pointer to RefCountedPtr so that this
|
||||
// non-local static object can be trivially destructible.)
|
||||
static RefCountedPtr<GlobalSubchannelPool>* instance_;
|
||||
|
||||
// The vtable for subchannel operations in an AVL tree.
|
||||
static const grpc_avl_vtable subchannel_avl_vtable_;
|
||||
// A map from subchannel key to subchannel.
|
||||
grpc_avl subchannel_map_;
|
||||
// To protect subchannel_map_.
|
||||
gpr_mu mu_;
|
||||
};
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_GLOBAL_SUBCHANNEL_POOL_H */
|
645
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/health/health_check_client.cc
generated
vendored
Normal file
645
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/health/health_check_client.cc
generated
vendored
Normal file
@ -0,0 +1,645 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2018 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/health/health_check_client.h"
|
||||
|
||||
#include "src/core/lib/debug/trace.h"
|
||||
#include "src/core/lib/gprpp/sync.h"
|
||||
#include "src/core/lib/slice/slice_internal.h"
|
||||
#include "src/core/lib/transport/error_utils.h"
|
||||
#include "src/core/lib/transport/status_metadata.h"
|
||||
#include "src/proto/grpc/health/v1/health.upb.h"
|
||||
|
||||
#define HEALTH_CHECK_INITIAL_CONNECT_BACKOFF_SECONDS 1
|
||||
#define HEALTH_CHECK_RECONNECT_BACKOFF_MULTIPLIER 1.6
|
||||
#define HEALTH_CHECK_RECONNECT_MAX_BACKOFF_SECONDS 120
|
||||
#define HEALTH_CHECK_RECONNECT_JITTER 0.2
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
TraceFlag grpc_health_check_client_trace(false, "health_check_client");
|
||||
|
||||
//
|
||||
// HealthCheckClient
|
||||
//
|
||||
|
||||
HealthCheckClient::HealthCheckClient(
|
||||
const char* service_name,
|
||||
RefCountedPtr<ConnectedSubchannel> connected_subchannel,
|
||||
grpc_pollset_set* interested_parties,
|
||||
RefCountedPtr<channelz::SubchannelNode> channelz_node)
|
||||
: InternallyRefCounted<HealthCheckClient>(&grpc_health_check_client_trace),
|
||||
service_name_(service_name),
|
||||
connected_subchannel_(std::move(connected_subchannel)),
|
||||
interested_parties_(interested_parties),
|
||||
channelz_node_(std::move(channelz_node)),
|
||||
retry_backoff_(
|
||||
BackOff::Options()
|
||||
.set_initial_backoff(
|
||||
HEALTH_CHECK_INITIAL_CONNECT_BACKOFF_SECONDS * 1000)
|
||||
.set_multiplier(HEALTH_CHECK_RECONNECT_BACKOFF_MULTIPLIER)
|
||||
.set_jitter(HEALTH_CHECK_RECONNECT_JITTER)
|
||||
.set_max_backoff(HEALTH_CHECK_RECONNECT_MAX_BACKOFF_SECONDS *
|
||||
1000)) {
|
||||
if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
|
||||
gpr_log(GPR_INFO, "created HealthCheckClient %p", this);
|
||||
}
|
||||
GRPC_CLOSURE_INIT(&retry_timer_callback_, OnRetryTimer, this,
|
||||
grpc_schedule_on_exec_ctx);
|
||||
StartCall();
|
||||
}
|
||||
|
||||
HealthCheckClient::~HealthCheckClient() {
|
||||
if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
|
||||
gpr_log(GPR_INFO, "destroying HealthCheckClient %p", this);
|
||||
}
|
||||
GRPC_ERROR_UNREF(error_);
|
||||
}
|
||||
|
||||
void HealthCheckClient::NotifyOnHealthChange(grpc_connectivity_state* state,
|
||||
grpc_closure* closure) {
|
||||
MutexLock lock(&mu_);
|
||||
GPR_ASSERT(notify_state_ == nullptr);
|
||||
if (*state != state_) {
|
||||
*state = state_;
|
||||
GRPC_CLOSURE_SCHED(closure, GRPC_ERROR_REF(error_));
|
||||
return;
|
||||
}
|
||||
notify_state_ = state;
|
||||
on_health_changed_ = closure;
|
||||
}
|
||||
|
||||
void HealthCheckClient::SetHealthStatus(grpc_connectivity_state state,
|
||||
grpc_error* error) {
|
||||
MutexLock lock(&mu_);
|
||||
SetHealthStatusLocked(state, error);
|
||||
}
|
||||
|
||||
void HealthCheckClient::SetHealthStatusLocked(grpc_connectivity_state state,
|
||||
grpc_error* error) {
|
||||
if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
|
||||
gpr_log(GPR_INFO, "HealthCheckClient %p: setting state=%d error=%s", this,
|
||||
state, grpc_error_string(error));
|
||||
}
|
||||
if (notify_state_ != nullptr && *notify_state_ != state) {
|
||||
*notify_state_ = state;
|
||||
notify_state_ = nullptr;
|
||||
GRPC_CLOSURE_SCHED(on_health_changed_, GRPC_ERROR_REF(error));
|
||||
on_health_changed_ = nullptr;
|
||||
}
|
||||
state_ = state;
|
||||
GRPC_ERROR_UNREF(error_);
|
||||
error_ = error;
|
||||
}
|
||||
|
||||
void HealthCheckClient::Orphan() {
|
||||
if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
|
||||
gpr_log(GPR_INFO, "HealthCheckClient %p: shutting down", this);
|
||||
}
|
||||
{
|
||||
MutexLock lock(&mu_);
|
||||
if (on_health_changed_ != nullptr) {
|
||||
*notify_state_ = GRPC_CHANNEL_SHUTDOWN;
|
||||
notify_state_ = nullptr;
|
||||
GRPC_CLOSURE_SCHED(on_health_changed_, GRPC_ERROR_NONE);
|
||||
on_health_changed_ = nullptr;
|
||||
}
|
||||
shutting_down_ = true;
|
||||
call_state_.reset();
|
||||
if (retry_timer_callback_pending_) {
|
||||
grpc_timer_cancel(&retry_timer_);
|
||||
}
|
||||
}
|
||||
Unref(DEBUG_LOCATION, "orphan");
|
||||
}
|
||||
|
||||
void HealthCheckClient::StartCall() {
|
||||
MutexLock lock(&mu_);
|
||||
StartCallLocked();
|
||||
}
|
||||
|
||||
void HealthCheckClient::StartCallLocked() {
|
||||
if (shutting_down_) return;
|
||||
GPR_ASSERT(call_state_ == nullptr);
|
||||
SetHealthStatusLocked(GRPC_CHANNEL_CONNECTING, GRPC_ERROR_NONE);
|
||||
call_state_ = MakeOrphanable<CallState>(Ref(), interested_parties_);
|
||||
if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
|
||||
gpr_log(GPR_INFO, "HealthCheckClient %p: created CallState %p", this,
|
||||
call_state_.get());
|
||||
}
|
||||
call_state_->StartCall();
|
||||
}
|
||||
|
||||
void HealthCheckClient::StartRetryTimer() {
|
||||
MutexLock lock(&mu_);
|
||||
SetHealthStatusLocked(
|
||||
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
||||
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
||||
"health check call failed; will retry after backoff"));
|
||||
grpc_millis next_try = retry_backoff_.NextAttemptTime();
|
||||
if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
|
||||
gpr_log(GPR_INFO, "HealthCheckClient %p: health check call lost...", this);
|
||||
grpc_millis timeout = next_try - ExecCtx::Get()->Now();
|
||||
if (timeout > 0) {
|
||||
gpr_log(GPR_INFO,
|
||||
"HealthCheckClient %p: ... will retry in %" PRId64 "ms.", this,
|
||||
timeout);
|
||||
} else {
|
||||
gpr_log(GPR_INFO, "HealthCheckClient %p: ... retrying immediately.",
|
||||
this);
|
||||
}
|
||||
}
|
||||
// Ref for callback, tracked manually.
|
||||
Ref(DEBUG_LOCATION, "health_retry_timer").release();
|
||||
retry_timer_callback_pending_ = true;
|
||||
grpc_timer_init(&retry_timer_, next_try, &retry_timer_callback_);
|
||||
}
|
||||
|
||||
void HealthCheckClient::OnRetryTimer(void* arg, grpc_error* error) {
|
||||
HealthCheckClient* self = static_cast<HealthCheckClient*>(arg);
|
||||
{
|
||||
MutexLock lock(&self->mu_);
|
||||
self->retry_timer_callback_pending_ = false;
|
||||
if (!self->shutting_down_ && error == GRPC_ERROR_NONE &&
|
||||
self->call_state_ == nullptr) {
|
||||
if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
|
||||
gpr_log(GPR_INFO, "HealthCheckClient %p: restarting health check call",
|
||||
self);
|
||||
}
|
||||
self->StartCallLocked();
|
||||
}
|
||||
}
|
||||
self->Unref(DEBUG_LOCATION, "health_retry_timer");
|
||||
}
|
||||
|
||||
//
|
||||
// protobuf helpers
|
||||
//
|
||||
|
||||
namespace {
|
||||
|
||||
void EncodeRequest(const char* service_name,
|
||||
ManualConstructor<SliceBufferByteStream>* send_message) {
|
||||
upb::Arena arena;
|
||||
grpc_health_v1_HealthCheckRequest* request_struct =
|
||||
grpc_health_v1_HealthCheckRequest_new(arena.ptr());
|
||||
grpc_health_v1_HealthCheckRequest_set_service(
|
||||
request_struct, upb_strview_makez(service_name));
|
||||
size_t buf_length;
|
||||
char* buf = grpc_health_v1_HealthCheckRequest_serialize(
|
||||
request_struct, arena.ptr(), &buf_length);
|
||||
grpc_slice request_slice = GRPC_SLICE_MALLOC(buf_length);
|
||||
memcpy(GRPC_SLICE_START_PTR(request_slice), buf, buf_length);
|
||||
grpc_slice_buffer slice_buffer;
|
||||
grpc_slice_buffer_init(&slice_buffer);
|
||||
grpc_slice_buffer_add(&slice_buffer, request_slice);
|
||||
send_message->Init(&slice_buffer, 0);
|
||||
grpc_slice_buffer_destroy_internal(&slice_buffer);
|
||||
}
|
||||
|
||||
// Returns true if healthy.
|
||||
// If there was an error parsing the response, sets *error and returns false.
|
||||
bool DecodeResponse(grpc_slice_buffer* slice_buffer, grpc_error** error) {
|
||||
// If message is empty, assume unhealthy.
|
||||
if (slice_buffer->length == 0) {
|
||||
*error =
|
||||
GRPC_ERROR_CREATE_FROM_STATIC_STRING("health check response was empty");
|
||||
return false;
|
||||
}
|
||||
// Concatenate the slices to form a single string.
|
||||
UniquePtr<uint8_t> recv_message_deleter;
|
||||
uint8_t* recv_message;
|
||||
if (slice_buffer->count == 1) {
|
||||
recv_message = GRPC_SLICE_START_PTR(slice_buffer->slices[0]);
|
||||
} else {
|
||||
recv_message = static_cast<uint8_t*>(gpr_malloc(slice_buffer->length));
|
||||
recv_message_deleter.reset(recv_message);
|
||||
size_t offset = 0;
|
||||
for (size_t i = 0; i < slice_buffer->count; ++i) {
|
||||
memcpy(recv_message + offset,
|
||||
GRPC_SLICE_START_PTR(slice_buffer->slices[i]),
|
||||
GRPC_SLICE_LENGTH(slice_buffer->slices[i]));
|
||||
offset += GRPC_SLICE_LENGTH(slice_buffer->slices[i]);
|
||||
}
|
||||
}
|
||||
// Deserialize message.
|
||||
upb::Arena arena;
|
||||
grpc_health_v1_HealthCheckResponse* response_struct =
|
||||
grpc_health_v1_HealthCheckResponse_parse(
|
||||
reinterpret_cast<char*>(recv_message), slice_buffer->length,
|
||||
arena.ptr());
|
||||
if (response_struct == nullptr) {
|
||||
// Can't parse message; assume unhealthy.
|
||||
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
||||
"cannot parse health check response");
|
||||
return false;
|
||||
}
|
||||
int32_t status = grpc_health_v1_HealthCheckResponse_status(response_struct);
|
||||
return status == grpc_health_v1_HealthCheckResponse_SERVING;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
//
|
||||
// HealthCheckClient::CallState
|
||||
//
|
||||
|
||||
HealthCheckClient::CallState::CallState(
|
||||
RefCountedPtr<HealthCheckClient> health_check_client,
|
||||
grpc_pollset_set* interested_parties)
|
||||
: health_check_client_(std::move(health_check_client)),
|
||||
pollent_(grpc_polling_entity_create_from_pollset_set(interested_parties)),
|
||||
arena_(Arena::Create(health_check_client_->connected_subchannel_
|
||||
->GetInitialCallSizeEstimate(0))),
|
||||
payload_(context_) {}
|
||||
|
||||
HealthCheckClient::CallState::~CallState() {
|
||||
if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
|
||||
gpr_log(GPR_INFO, "HealthCheckClient %p: destroying CallState %p",
|
||||
health_check_client_.get(), this);
|
||||
}
|
||||
for (size_t i = 0; i < GRPC_CONTEXT_COUNT; i++) {
|
||||
if (context_[i].destroy != nullptr) {
|
||||
context_[i].destroy(context_[i].value);
|
||||
}
|
||||
}
|
||||
// Unset the call combiner cancellation closure. This has the
|
||||
// effect of scheduling the previously set cancellation closure, if
|
||||
// any, so that it can release any internal references it may be
|
||||
// holding to the call stack. Also flush the closures on exec_ctx so that
|
||||
// filters that schedule cancel notification closures on exec_ctx do not
|
||||
// need to take a ref of the call stack to guarantee closure liveness.
|
||||
call_combiner_.SetNotifyOnCancel(nullptr);
|
||||
ExecCtx::Get()->Flush();
|
||||
arena_->Destroy();
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::Orphan() {
|
||||
call_combiner_.Cancel(GRPC_ERROR_CANCELLED);
|
||||
Cancel();
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::StartCall() {
|
||||
SubchannelCall::Args args = {
|
||||
health_check_client_->connected_subchannel_,
|
||||
&pollent_,
|
||||
GRPC_MDSTR_SLASH_GRPC_DOT_HEALTH_DOT_V1_DOT_HEALTH_SLASH_WATCH,
|
||||
gpr_get_cycle_counter(), // start_time
|
||||
GRPC_MILLIS_INF_FUTURE, // deadline
|
||||
arena_,
|
||||
context_,
|
||||
&call_combiner_,
|
||||
0, // parent_data_size
|
||||
};
|
||||
grpc_error* error = GRPC_ERROR_NONE;
|
||||
call_ = SubchannelCall::Create(std::move(args), &error).release();
|
||||
// Register after-destruction callback.
|
||||
GRPC_CLOSURE_INIT(&after_call_stack_destruction_, AfterCallStackDestruction,
|
||||
this, grpc_schedule_on_exec_ctx);
|
||||
call_->SetAfterCallStackDestroy(&after_call_stack_destruction_);
|
||||
// Check if creation failed.
|
||||
if (error != GRPC_ERROR_NONE) {
|
||||
gpr_log(GPR_ERROR,
|
||||
"HealthCheckClient %p CallState %p: error creating health "
|
||||
"checking call on subchannel (%s); will retry",
|
||||
health_check_client_.get(), this, grpc_error_string(error));
|
||||
GRPC_ERROR_UNREF(error);
|
||||
// Schedule instead of running directly, since we must not be
|
||||
// holding health_check_client_->mu_ when CallEnded() is called.
|
||||
call_->Ref(DEBUG_LOCATION, "call_end_closure").release();
|
||||
GRPC_CLOSURE_SCHED(
|
||||
GRPC_CLOSURE_INIT(&batch_.handler_private.closure, CallEndedRetry, this,
|
||||
grpc_schedule_on_exec_ctx),
|
||||
GRPC_ERROR_NONE);
|
||||
return;
|
||||
}
|
||||
// Initialize payload and batch.
|
||||
payload_.context = context_;
|
||||
batch_.payload = &payload_;
|
||||
// on_complete callback takes ref, handled manually.
|
||||
call_->Ref(DEBUG_LOCATION, "on_complete").release();
|
||||
batch_.on_complete = GRPC_CLOSURE_INIT(&on_complete_, OnComplete, this,
|
||||
grpc_schedule_on_exec_ctx);
|
||||
// Add send_initial_metadata op.
|
||||
grpc_metadata_batch_init(&send_initial_metadata_);
|
||||
error = grpc_metadata_batch_add_head(
|
||||
&send_initial_metadata_, &path_metadata_storage_,
|
||||
grpc_mdelem_from_slices(
|
||||
GRPC_MDSTR_PATH,
|
||||
GRPC_MDSTR_SLASH_GRPC_DOT_HEALTH_DOT_V1_DOT_HEALTH_SLASH_WATCH),
|
||||
GRPC_BATCH_PATH);
|
||||
GPR_ASSERT(error == GRPC_ERROR_NONE);
|
||||
payload_.send_initial_metadata.send_initial_metadata =
|
||||
&send_initial_metadata_;
|
||||
payload_.send_initial_metadata.send_initial_metadata_flags = 0;
|
||||
payload_.send_initial_metadata.peer_string = nullptr;
|
||||
batch_.send_initial_metadata = true;
|
||||
// Add send_message op.
|
||||
EncodeRequest(health_check_client_->service_name_, &send_message_);
|
||||
payload_.send_message.send_message.reset(send_message_.get());
|
||||
batch_.send_message = true;
|
||||
// Add send_trailing_metadata op.
|
||||
grpc_metadata_batch_init(&send_trailing_metadata_);
|
||||
payload_.send_trailing_metadata.send_trailing_metadata =
|
||||
&send_trailing_metadata_;
|
||||
batch_.send_trailing_metadata = true;
|
||||
// Add recv_initial_metadata op.
|
||||
grpc_metadata_batch_init(&recv_initial_metadata_);
|
||||
payload_.recv_initial_metadata.recv_initial_metadata =
|
||||
&recv_initial_metadata_;
|
||||
payload_.recv_initial_metadata.recv_flags = nullptr;
|
||||
payload_.recv_initial_metadata.trailing_metadata_available = nullptr;
|
||||
payload_.recv_initial_metadata.peer_string = nullptr;
|
||||
// recv_initial_metadata_ready callback takes ref, handled manually.
|
||||
call_->Ref(DEBUG_LOCATION, "recv_initial_metadata_ready").release();
|
||||
payload_.recv_initial_metadata.recv_initial_metadata_ready =
|
||||
GRPC_CLOSURE_INIT(&recv_initial_metadata_ready_, RecvInitialMetadataReady,
|
||||
this, grpc_schedule_on_exec_ctx);
|
||||
batch_.recv_initial_metadata = true;
|
||||
// Add recv_message op.
|
||||
payload_.recv_message.recv_message = &recv_message_;
|
||||
// recv_message callback takes ref, handled manually.
|
||||
call_->Ref(DEBUG_LOCATION, "recv_message_ready").release();
|
||||
payload_.recv_message.recv_message_ready = GRPC_CLOSURE_INIT(
|
||||
&recv_message_ready_, RecvMessageReady, this, grpc_schedule_on_exec_ctx);
|
||||
batch_.recv_message = true;
|
||||
// Start batch.
|
||||
StartBatch(&batch_);
|
||||
// Initialize recv_trailing_metadata batch.
|
||||
recv_trailing_metadata_batch_.payload = &payload_;
|
||||
// Add recv_trailing_metadata op.
|
||||
grpc_metadata_batch_init(&recv_trailing_metadata_);
|
||||
payload_.recv_trailing_metadata.recv_trailing_metadata =
|
||||
&recv_trailing_metadata_;
|
||||
payload_.recv_trailing_metadata.collect_stats = &collect_stats_;
|
||||
// This callback signals the end of the call, so it relies on the
|
||||
// initial ref instead of taking a new ref. When it's invoked, the
|
||||
// initial ref is released.
|
||||
payload_.recv_trailing_metadata.recv_trailing_metadata_ready =
|
||||
GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
|
||||
RecvTrailingMetadataReady, this,
|
||||
grpc_schedule_on_exec_ctx);
|
||||
recv_trailing_metadata_batch_.recv_trailing_metadata = true;
|
||||
// Start recv_trailing_metadata batch.
|
||||
StartBatch(&recv_trailing_metadata_batch_);
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::StartBatchInCallCombiner(void* arg,
|
||||
grpc_error* error) {
|
||||
grpc_transport_stream_op_batch* batch =
|
||||
static_cast<grpc_transport_stream_op_batch*>(arg);
|
||||
SubchannelCall* call =
|
||||
static_cast<SubchannelCall*>(batch->handler_private.extra_arg);
|
||||
call->StartTransportStreamOpBatch(batch);
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::StartBatch(
|
||||
grpc_transport_stream_op_batch* batch) {
|
||||
batch->handler_private.extra_arg = call_;
|
||||
GRPC_CLOSURE_INIT(&batch->handler_private.closure, StartBatchInCallCombiner,
|
||||
batch, grpc_schedule_on_exec_ctx);
|
||||
GRPC_CALL_COMBINER_START(&call_combiner_, &batch->handler_private.closure,
|
||||
GRPC_ERROR_NONE, "start_subchannel_batch");
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::AfterCallStackDestruction(
|
||||
void* arg, grpc_error* error) {
|
||||
HealthCheckClient::CallState* self =
|
||||
static_cast<HealthCheckClient::CallState*>(arg);
|
||||
Delete(self);
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::OnCancelComplete(void* arg,
|
||||
grpc_error* error) {
|
||||
HealthCheckClient::CallState* self =
|
||||
static_cast<HealthCheckClient::CallState*>(arg);
|
||||
GRPC_CALL_COMBINER_STOP(&self->call_combiner_, "health_cancel");
|
||||
self->call_->Unref(DEBUG_LOCATION, "cancel");
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::StartCancel(void* arg, grpc_error* error) {
|
||||
HealthCheckClient::CallState* self =
|
||||
static_cast<HealthCheckClient::CallState*>(arg);
|
||||
auto* batch = grpc_make_transport_stream_op(
|
||||
GRPC_CLOSURE_CREATE(OnCancelComplete, self, grpc_schedule_on_exec_ctx));
|
||||
batch->cancel_stream = true;
|
||||
batch->payload->cancel_stream.cancel_error = GRPC_ERROR_CANCELLED;
|
||||
self->call_->StartTransportStreamOpBatch(batch);
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::Cancel() {
|
||||
bool expected = false;
|
||||
if (cancelled_.CompareExchangeStrong(&expected, true, MemoryOrder::ACQ_REL,
|
||||
MemoryOrder::ACQUIRE)) {
|
||||
call_->Ref(DEBUG_LOCATION, "cancel").release();
|
||||
GRPC_CALL_COMBINER_START(
|
||||
&call_combiner_,
|
||||
GRPC_CLOSURE_CREATE(StartCancel, this, grpc_schedule_on_exec_ctx),
|
||||
GRPC_ERROR_NONE, "health_cancel");
|
||||
}
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::OnComplete(void* arg, grpc_error* error) {
|
||||
HealthCheckClient::CallState* self =
|
||||
static_cast<HealthCheckClient::CallState*>(arg);
|
||||
GRPC_CALL_COMBINER_STOP(&self->call_combiner_, "on_complete");
|
||||
grpc_metadata_batch_destroy(&self->send_initial_metadata_);
|
||||
grpc_metadata_batch_destroy(&self->send_trailing_metadata_);
|
||||
self->call_->Unref(DEBUG_LOCATION, "on_complete");
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::RecvInitialMetadataReady(void* arg,
|
||||
grpc_error* error) {
|
||||
HealthCheckClient::CallState* self =
|
||||
static_cast<HealthCheckClient::CallState*>(arg);
|
||||
GRPC_CALL_COMBINER_STOP(&self->call_combiner_, "recv_initial_metadata_ready");
|
||||
grpc_metadata_batch_destroy(&self->recv_initial_metadata_);
|
||||
self->call_->Unref(DEBUG_LOCATION, "recv_initial_metadata_ready");
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::DoneReadingRecvMessage(grpc_error* error) {
|
||||
recv_message_.reset();
|
||||
if (error != GRPC_ERROR_NONE) {
|
||||
GRPC_ERROR_UNREF(error);
|
||||
Cancel();
|
||||
grpc_slice_buffer_destroy_internal(&recv_message_buffer_);
|
||||
call_->Unref(DEBUG_LOCATION, "recv_message_ready");
|
||||
return;
|
||||
}
|
||||
const bool healthy = DecodeResponse(&recv_message_buffer_, &error);
|
||||
const grpc_connectivity_state state =
|
||||
healthy ? GRPC_CHANNEL_READY : GRPC_CHANNEL_TRANSIENT_FAILURE;
|
||||
if (error == GRPC_ERROR_NONE && !healthy) {
|
||||
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("backend unhealthy");
|
||||
}
|
||||
health_check_client_->SetHealthStatus(state, error);
|
||||
seen_response_.Store(true, MemoryOrder::RELEASE);
|
||||
grpc_slice_buffer_destroy_internal(&recv_message_buffer_);
|
||||
// Start another recv_message batch.
|
||||
// This re-uses the ref we're holding.
|
||||
// Note: Can't just reuse batch_ here, since we don't know that all
|
||||
// callbacks from the original batch have completed yet.
|
||||
recv_message_batch_.payload = &payload_;
|
||||
payload_.recv_message.recv_message = &recv_message_;
|
||||
payload_.recv_message.recv_message_ready = GRPC_CLOSURE_INIT(
|
||||
&recv_message_ready_, RecvMessageReady, this, grpc_schedule_on_exec_ctx);
|
||||
recv_message_batch_.recv_message = true;
|
||||
StartBatch(&recv_message_batch_);
|
||||
}
|
||||
|
||||
grpc_error* HealthCheckClient::CallState::PullSliceFromRecvMessage() {
|
||||
grpc_slice slice;
|
||||
grpc_error* error = recv_message_->Pull(&slice);
|
||||
if (error == GRPC_ERROR_NONE) {
|
||||
grpc_slice_buffer_add(&recv_message_buffer_, slice);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::ContinueReadingRecvMessage() {
|
||||
while (recv_message_->Next(SIZE_MAX, &recv_message_ready_)) {
|
||||
grpc_error* error = PullSliceFromRecvMessage();
|
||||
if (error != GRPC_ERROR_NONE) {
|
||||
DoneReadingRecvMessage(error);
|
||||
return;
|
||||
}
|
||||
if (recv_message_buffer_.length == recv_message_->length()) {
|
||||
DoneReadingRecvMessage(GRPC_ERROR_NONE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::OnByteStreamNext(void* arg,
|
||||
grpc_error* error) {
|
||||
HealthCheckClient::CallState* self =
|
||||
static_cast<HealthCheckClient::CallState*>(arg);
|
||||
if (error != GRPC_ERROR_NONE) {
|
||||
self->DoneReadingRecvMessage(GRPC_ERROR_REF(error));
|
||||
return;
|
||||
}
|
||||
error = self->PullSliceFromRecvMessage();
|
||||
if (error != GRPC_ERROR_NONE) {
|
||||
self->DoneReadingRecvMessage(error);
|
||||
return;
|
||||
}
|
||||
if (self->recv_message_buffer_.length == self->recv_message_->length()) {
|
||||
self->DoneReadingRecvMessage(GRPC_ERROR_NONE);
|
||||
} else {
|
||||
self->ContinueReadingRecvMessage();
|
||||
}
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::RecvMessageReady(void* arg,
|
||||
grpc_error* error) {
|
||||
HealthCheckClient::CallState* self =
|
||||
static_cast<HealthCheckClient::CallState*>(arg);
|
||||
GRPC_CALL_COMBINER_STOP(&self->call_combiner_, "recv_message_ready");
|
||||
if (self->recv_message_ == nullptr) {
|
||||
self->call_->Unref(DEBUG_LOCATION, "recv_message_ready");
|
||||
return;
|
||||
}
|
||||
grpc_slice_buffer_init(&self->recv_message_buffer_);
|
||||
GRPC_CLOSURE_INIT(&self->recv_message_ready_, OnByteStreamNext, self,
|
||||
grpc_schedule_on_exec_ctx);
|
||||
self->ContinueReadingRecvMessage();
|
||||
// Ref will continue to be held until we finish draining the byte stream.
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::RecvTrailingMetadataReady(
|
||||
void* arg, grpc_error* error) {
|
||||
HealthCheckClient::CallState* self =
|
||||
static_cast<HealthCheckClient::CallState*>(arg);
|
||||
GRPC_CALL_COMBINER_STOP(&self->call_combiner_,
|
||||
"recv_trailing_metadata_ready");
|
||||
// Get call status.
|
||||
grpc_status_code status = GRPC_STATUS_UNKNOWN;
|
||||
if (error != GRPC_ERROR_NONE) {
|
||||
grpc_error_get_status(error, GRPC_MILLIS_INF_FUTURE, &status,
|
||||
nullptr /* slice */, nullptr /* http_error */,
|
||||
nullptr /* error_string */);
|
||||
} else if (self->recv_trailing_metadata_.idx.named.grpc_status != nullptr) {
|
||||
status = grpc_get_status_code_from_metadata(
|
||||
self->recv_trailing_metadata_.idx.named.grpc_status->md);
|
||||
}
|
||||
if (GRPC_TRACE_FLAG_ENABLED(grpc_health_check_client_trace)) {
|
||||
gpr_log(GPR_INFO,
|
||||
"HealthCheckClient %p CallState %p: health watch failed with "
|
||||
"status %d",
|
||||
self->health_check_client_.get(), self, status);
|
||||
}
|
||||
// Clean up.
|
||||
grpc_metadata_batch_destroy(&self->recv_trailing_metadata_);
|
||||
// For status UNIMPLEMENTED, give up and assume always healthy.
|
||||
bool retry = true;
|
||||
if (status == GRPC_STATUS_UNIMPLEMENTED) {
|
||||
static const char kErrorMessage[] =
|
||||
"health checking Watch method returned UNIMPLEMENTED; "
|
||||
"disabling health checks but assuming server is healthy";
|
||||
gpr_log(GPR_ERROR, kErrorMessage);
|
||||
if (self->health_check_client_->channelz_node_ != nullptr) {
|
||||
self->health_check_client_->channelz_node_->AddTraceEvent(
|
||||
channelz::ChannelTrace::Error,
|
||||
grpc_slice_from_static_string(kErrorMessage));
|
||||
}
|
||||
self->health_check_client_->SetHealthStatus(GRPC_CHANNEL_READY,
|
||||
GRPC_ERROR_NONE);
|
||||
retry = false;
|
||||
}
|
||||
self->CallEnded(retry);
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::CallEndedRetry(void* arg,
|
||||
grpc_error* error) {
|
||||
HealthCheckClient::CallState* self =
|
||||
static_cast<HealthCheckClient::CallState*>(arg);
|
||||
self->CallEnded(true /* retry */);
|
||||
self->call_->Unref(DEBUG_LOCATION, "call_end_closure");
|
||||
}
|
||||
|
||||
void HealthCheckClient::CallState::CallEnded(bool retry) {
|
||||
// If this CallState is still in use, this call ended because of a failure,
|
||||
// so we need to stop using it and optionally create a new one.
|
||||
// Otherwise, we have deliberately ended this call, and no further action
|
||||
// is required.
|
||||
if (this == health_check_client_->call_state_.get()) {
|
||||
health_check_client_->call_state_.reset();
|
||||
if (retry) {
|
||||
GPR_ASSERT(!health_check_client_->shutting_down_);
|
||||
if (seen_response_.Load(MemoryOrder::ACQUIRE)) {
|
||||
// If the call fails after we've gotten a successful response, reset
|
||||
// the backoff and restart the call immediately.
|
||||
health_check_client_->retry_backoff_.Reset();
|
||||
health_check_client_->StartCall();
|
||||
} else {
|
||||
// If the call failed without receiving any messages, retry later.
|
||||
health_check_client_->StartRetryTimer();
|
||||
}
|
||||
}
|
||||
}
|
||||
// When the last ref to the call stack goes away, the CallState object
|
||||
// will be automatically destroyed.
|
||||
call_->Unref(DEBUG_LOCATION, "call_ended");
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
183
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/health/health_check_client.h
generated
vendored
Normal file
183
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/health/health_check_client.h
generated
vendored
Normal file
@ -0,0 +1,183 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2018 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HEALTH_HEALTH_CHECK_CLIENT_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HEALTH_HEALTH_CHECK_CLIENT_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/grpc.h>
|
||||
#include <grpc/support/sync.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
||||
#include "src/core/ext/filters/client_channel/subchannel.h"
|
||||
#include "src/core/lib/backoff/backoff.h"
|
||||
#include "src/core/lib/gprpp/arena.h"
|
||||
#include "src/core/lib/gprpp/atomic.h"
|
||||
#include "src/core/lib/gprpp/orphanable.h"
|
||||
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
||||
#include "src/core/lib/gprpp/sync.h"
|
||||
#include "src/core/lib/iomgr/call_combiner.h"
|
||||
#include "src/core/lib/iomgr/closure.h"
|
||||
#include "src/core/lib/iomgr/polling_entity.h"
|
||||
#include "src/core/lib/iomgr/timer.h"
|
||||
#include "src/core/lib/transport/byte_stream.h"
|
||||
#include "src/core/lib/transport/metadata_batch.h"
|
||||
#include "src/core/lib/transport/transport.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
class HealthCheckClient : public InternallyRefCounted<HealthCheckClient> {
|
||||
public:
|
||||
HealthCheckClient(const char* service_name,
|
||||
RefCountedPtr<ConnectedSubchannel> connected_subchannel,
|
||||
grpc_pollset_set* interested_parties,
|
||||
RefCountedPtr<channelz::SubchannelNode> channelz_node);
|
||||
|
||||
~HealthCheckClient();
|
||||
|
||||
// When the health state changes from *state, sets *state to the new
|
||||
// value and schedules closure.
|
||||
// Only one closure can be outstanding at a time.
|
||||
void NotifyOnHealthChange(grpc_connectivity_state* state,
|
||||
grpc_closure* closure);
|
||||
|
||||
void Orphan() override;
|
||||
|
||||
private:
|
||||
// Contains a call to the backend and all the data related to the call.
|
||||
class CallState : public Orphanable {
|
||||
public:
|
||||
CallState(RefCountedPtr<HealthCheckClient> health_check_client,
|
||||
grpc_pollset_set* interested_parties_);
|
||||
~CallState();
|
||||
|
||||
void Orphan() override;
|
||||
|
||||
void StartCall();
|
||||
|
||||
private:
|
||||
void Cancel();
|
||||
|
||||
void StartBatch(grpc_transport_stream_op_batch* batch);
|
||||
static void StartBatchInCallCombiner(void* arg, grpc_error* error);
|
||||
|
||||
static void CallEndedRetry(void* arg, grpc_error* error);
|
||||
void CallEnded(bool retry);
|
||||
|
||||
static void OnComplete(void* arg, grpc_error* error);
|
||||
static void RecvInitialMetadataReady(void* arg, grpc_error* error);
|
||||
static void RecvMessageReady(void* arg, grpc_error* error);
|
||||
static void RecvTrailingMetadataReady(void* arg, grpc_error* error);
|
||||
static void StartCancel(void* arg, grpc_error* error);
|
||||
static void OnCancelComplete(void* arg, grpc_error* error);
|
||||
|
||||
static void OnByteStreamNext(void* arg, grpc_error* error);
|
||||
void ContinueReadingRecvMessage();
|
||||
grpc_error* PullSliceFromRecvMessage();
|
||||
void DoneReadingRecvMessage(grpc_error* error);
|
||||
|
||||
static void AfterCallStackDestruction(void* arg, grpc_error* error);
|
||||
|
||||
RefCountedPtr<HealthCheckClient> health_check_client_;
|
||||
grpc_polling_entity pollent_;
|
||||
|
||||
Arena* arena_;
|
||||
grpc_core::CallCombiner call_combiner_;
|
||||
grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
|
||||
|
||||
// The streaming call to the backend. Always non-null.
|
||||
// Refs are tracked manually; when the last ref is released, the
|
||||
// CallState object will be automatically destroyed.
|
||||
SubchannelCall* call_;
|
||||
|
||||
grpc_transport_stream_op_batch_payload payload_;
|
||||
grpc_transport_stream_op_batch batch_;
|
||||
grpc_transport_stream_op_batch recv_message_batch_;
|
||||
grpc_transport_stream_op_batch recv_trailing_metadata_batch_;
|
||||
|
||||
grpc_closure on_complete_;
|
||||
|
||||
// send_initial_metadata
|
||||
grpc_metadata_batch send_initial_metadata_;
|
||||
grpc_linked_mdelem path_metadata_storage_;
|
||||
|
||||
// send_message
|
||||
ManualConstructor<SliceBufferByteStream> send_message_;
|
||||
|
||||
// send_trailing_metadata
|
||||
grpc_metadata_batch send_trailing_metadata_;
|
||||
|
||||
// recv_initial_metadata
|
||||
grpc_metadata_batch recv_initial_metadata_;
|
||||
grpc_closure recv_initial_metadata_ready_;
|
||||
|
||||
// recv_message
|
||||
OrphanablePtr<ByteStream> recv_message_;
|
||||
grpc_closure recv_message_ready_;
|
||||
grpc_slice_buffer recv_message_buffer_;
|
||||
Atomic<bool> seen_response_{false};
|
||||
|
||||
// recv_trailing_metadata
|
||||
grpc_metadata_batch recv_trailing_metadata_;
|
||||
grpc_transport_stream_stats collect_stats_;
|
||||
grpc_closure recv_trailing_metadata_ready_;
|
||||
|
||||
// True if the cancel_stream batch has been started.
|
||||
Atomic<bool> cancelled_{false};
|
||||
|
||||
// Closure for call stack destruction.
|
||||
grpc_closure after_call_stack_destruction_;
|
||||
};
|
||||
|
||||
void StartCall();
|
||||
void StartCallLocked(); // Requires holding mu_.
|
||||
|
||||
void StartRetryTimer();
|
||||
static void OnRetryTimer(void* arg, grpc_error* error);
|
||||
|
||||
void SetHealthStatus(grpc_connectivity_state state, grpc_error* error);
|
||||
void SetHealthStatusLocked(grpc_connectivity_state state,
|
||||
grpc_error* error); // Requires holding mu_.
|
||||
|
||||
const char* service_name_; // Do not own.
|
||||
RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
|
||||
grpc_pollset_set* interested_parties_; // Do not own.
|
||||
RefCountedPtr<channelz::SubchannelNode> channelz_node_;
|
||||
|
||||
Mutex mu_;
|
||||
grpc_connectivity_state state_ = GRPC_CHANNEL_CONNECTING;
|
||||
grpc_error* error_ = GRPC_ERROR_NONE;
|
||||
grpc_connectivity_state* notify_state_ = nullptr;
|
||||
grpc_closure* on_health_changed_ = nullptr;
|
||||
bool shutting_down_ = false;
|
||||
|
||||
// The data associated with the current health check call. It holds a ref
|
||||
// to this HealthCheckClient object.
|
||||
OrphanablePtr<CallState> call_state_;
|
||||
|
||||
// Call retry state.
|
||||
BackOff retry_backoff_;
|
||||
grpc_timer retry_timer_;
|
||||
grpc_closure retry_timer_callback_;
|
||||
bool retry_timer_callback_pending_ = false;
|
||||
};
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HEALTH_HEALTH_CHECK_CLIENT_H */
|
360
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/http_connect_handshaker.cc
generated
vendored
Normal file
360
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/http_connect_handshaker.cc
generated
vendored
Normal file
@ -0,0 +1,360 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <grpc/slice_buffer.h>
|
||||
#include <grpc/support/alloc.h>
|
||||
#include <grpc/support/log.h>
|
||||
#include <grpc/support/string_util.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/client_channel.h"
|
||||
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
||||
#include "src/core/lib/channel/channel_args.h"
|
||||
#include "src/core/lib/channel/handshaker_registry.h"
|
||||
#include "src/core/lib/gpr/string.h"
|
||||
#include "src/core/lib/gprpp/sync.h"
|
||||
#include "src/core/lib/http/format_request.h"
|
||||
#include "src/core/lib/http/parser.h"
|
||||
#include "src/core/lib/slice/slice_internal.h"
|
||||
#include "src/core/lib/uri/uri_parser.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
namespace {
|
||||
|
||||
class HttpConnectHandshaker : public Handshaker {
|
||||
public:
|
||||
HttpConnectHandshaker();
|
||||
void Shutdown(grpc_error* why) override;
|
||||
void DoHandshake(grpc_tcp_server_acceptor* acceptor,
|
||||
grpc_closure* on_handshake_done,
|
||||
HandshakerArgs* args) override;
|
||||
const char* name() const override { return "http_connect"; }
|
||||
|
||||
private:
|
||||
virtual ~HttpConnectHandshaker();
|
||||
void CleanupArgsForFailureLocked();
|
||||
void HandshakeFailedLocked(grpc_error* error);
|
||||
static void OnWriteDone(void* arg, grpc_error* error);
|
||||
static void OnReadDone(void* arg, grpc_error* error);
|
||||
|
||||
gpr_mu mu_;
|
||||
|
||||
bool is_shutdown_ = false;
|
||||
// Endpoint and read buffer to destroy after a shutdown.
|
||||
grpc_endpoint* endpoint_to_destroy_ = nullptr;
|
||||
grpc_slice_buffer* read_buffer_to_destroy_ = nullptr;
|
||||
|
||||
// State saved while performing the handshake.
|
||||
HandshakerArgs* args_ = nullptr;
|
||||
grpc_closure* on_handshake_done_ = nullptr;
|
||||
|
||||
// Objects for processing the HTTP CONNECT request and response.
|
||||
grpc_slice_buffer write_buffer_;
|
||||
grpc_closure request_done_closure_;
|
||||
grpc_closure response_read_closure_;
|
||||
grpc_http_parser http_parser_;
|
||||
grpc_http_response http_response_;
|
||||
};
|
||||
|
||||
HttpConnectHandshaker::~HttpConnectHandshaker() {
|
||||
gpr_mu_destroy(&mu_);
|
||||
if (endpoint_to_destroy_ != nullptr) {
|
||||
grpc_endpoint_destroy(endpoint_to_destroy_);
|
||||
}
|
||||
if (read_buffer_to_destroy_ != nullptr) {
|
||||
grpc_slice_buffer_destroy_internal(read_buffer_to_destroy_);
|
||||
gpr_free(read_buffer_to_destroy_);
|
||||
}
|
||||
grpc_slice_buffer_destroy_internal(&write_buffer_);
|
||||
grpc_http_parser_destroy(&http_parser_);
|
||||
grpc_http_response_destroy(&http_response_);
|
||||
}
|
||||
|
||||
// Set args fields to nullptr, saving the endpoint and read buffer for
|
||||
// later destruction.
|
||||
void HttpConnectHandshaker::CleanupArgsForFailureLocked() {
|
||||
endpoint_to_destroy_ = args_->endpoint;
|
||||
args_->endpoint = nullptr;
|
||||
read_buffer_to_destroy_ = args_->read_buffer;
|
||||
args_->read_buffer = nullptr;
|
||||
grpc_channel_args_destroy(args_->args);
|
||||
args_->args = nullptr;
|
||||
}
|
||||
|
||||
// If the handshake failed or we're shutting down, clean up and invoke the
|
||||
// callback with the error.
|
||||
void HttpConnectHandshaker::HandshakeFailedLocked(grpc_error* error) {
|
||||
if (error == GRPC_ERROR_NONE) {
|
||||
// If we were shut down after an endpoint operation succeeded but
|
||||
// before the endpoint callback was invoked, we need to generate our
|
||||
// own error.
|
||||
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Handshaker shutdown");
|
||||
}
|
||||
if (!is_shutdown_) {
|
||||
// TODO(ctiller): It is currently necessary to shutdown endpoints
|
||||
// before destroying them, even if we know that there are no
|
||||
// pending read/write callbacks. This should be fixed, at which
|
||||
// point this can be removed.
|
||||
grpc_endpoint_shutdown(args_->endpoint, GRPC_ERROR_REF(error));
|
||||
// Not shutting down, so the handshake failed. Clean up before
|
||||
// invoking the callback.
|
||||
CleanupArgsForFailureLocked();
|
||||
// Set shutdown to true so that subsequent calls to
|
||||
// http_connect_handshaker_shutdown() do nothing.
|
||||
is_shutdown_ = true;
|
||||
}
|
||||
// Invoke callback.
|
||||
GRPC_CLOSURE_SCHED(on_handshake_done_, error);
|
||||
}
|
||||
|
||||
// Callback invoked when finished writing HTTP CONNECT request.
|
||||
void HttpConnectHandshaker::OnWriteDone(void* arg, grpc_error* error) {
|
||||
auto* handshaker = static_cast<HttpConnectHandshaker*>(arg);
|
||||
gpr_mu_lock(&handshaker->mu_);
|
||||
if (error != GRPC_ERROR_NONE || handshaker->is_shutdown_) {
|
||||
// If the write failed or we're shutting down, clean up and invoke the
|
||||
// callback with the error.
|
||||
handshaker->HandshakeFailedLocked(GRPC_ERROR_REF(error));
|
||||
gpr_mu_unlock(&handshaker->mu_);
|
||||
handshaker->Unref();
|
||||
} else {
|
||||
// Otherwise, read the response.
|
||||
// The read callback inherits our ref to the handshaker.
|
||||
grpc_endpoint_read(handshaker->args_->endpoint,
|
||||
handshaker->args_->read_buffer,
|
||||
&handshaker->response_read_closure_, /*urgent=*/true);
|
||||
gpr_mu_unlock(&handshaker->mu_);
|
||||
}
|
||||
}
|
||||
|
||||
// Callback invoked for reading HTTP CONNECT response.
|
||||
void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error* error) {
|
||||
auto* handshaker = static_cast<HttpConnectHandshaker*>(arg);
|
||||
|
||||
gpr_mu_lock(&handshaker->mu_);
|
||||
if (error != GRPC_ERROR_NONE || handshaker->is_shutdown_) {
|
||||
// If the read failed or we're shutting down, clean up and invoke the
|
||||
// callback with the error.
|
||||
handshaker->HandshakeFailedLocked(GRPC_ERROR_REF(error));
|
||||
goto done;
|
||||
}
|
||||
// Add buffer to parser.
|
||||
for (size_t i = 0; i < handshaker->args_->read_buffer->count; ++i) {
|
||||
if (GRPC_SLICE_LENGTH(handshaker->args_->read_buffer->slices[i]) > 0) {
|
||||
size_t body_start_offset = 0;
|
||||
error = grpc_http_parser_parse(&handshaker->http_parser_,
|
||||
handshaker->args_->read_buffer->slices[i],
|
||||
&body_start_offset);
|
||||
if (error != GRPC_ERROR_NONE) {
|
||||
handshaker->HandshakeFailedLocked(error);
|
||||
goto done;
|
||||
}
|
||||
if (handshaker->http_parser_.state == GRPC_HTTP_BODY) {
|
||||
// Remove the data we've already read from the read buffer,
|
||||
// leaving only the leftover bytes (if any).
|
||||
grpc_slice_buffer tmp_buffer;
|
||||
grpc_slice_buffer_init(&tmp_buffer);
|
||||
if (body_start_offset <
|
||||
GRPC_SLICE_LENGTH(handshaker->args_->read_buffer->slices[i])) {
|
||||
grpc_slice_buffer_add(
|
||||
&tmp_buffer,
|
||||
grpc_slice_split_tail(&handshaker->args_->read_buffer->slices[i],
|
||||
body_start_offset));
|
||||
}
|
||||
grpc_slice_buffer_addn(&tmp_buffer,
|
||||
&handshaker->args_->read_buffer->slices[i + 1],
|
||||
handshaker->args_->read_buffer->count - i - 1);
|
||||
grpc_slice_buffer_swap(handshaker->args_->read_buffer, &tmp_buffer);
|
||||
grpc_slice_buffer_destroy_internal(&tmp_buffer);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// If we're not done reading the response, read more data.
|
||||
// TODO(roth): In practice, I suspect that the response to a CONNECT
|
||||
// request will never include a body, in which case this check is
|
||||
// sufficient. However, the language of RFC-2817 doesn't explicitly
|
||||
// forbid the response from including a body. If there is a body,
|
||||
// it's possible that we might have parsed part but not all of the
|
||||
// body, in which case this check will cause us to fail to parse the
|
||||
// remainder of the body. If that ever becomes an issue, we may
|
||||
// need to fix the HTTP parser to understand when the body is
|
||||
// complete (e.g., handling chunked transfer encoding or looking
|
||||
// at the Content-Length: header).
|
||||
if (handshaker->http_parser_.state != GRPC_HTTP_BODY) {
|
||||
grpc_slice_buffer_reset_and_unref_internal(handshaker->args_->read_buffer);
|
||||
grpc_endpoint_read(handshaker->args_->endpoint,
|
||||
handshaker->args_->read_buffer,
|
||||
&handshaker->response_read_closure_, /*urgent=*/true);
|
||||
gpr_mu_unlock(&handshaker->mu_);
|
||||
return;
|
||||
}
|
||||
// Make sure we got a 2xx response.
|
||||
if (handshaker->http_response_.status < 200 ||
|
||||
handshaker->http_response_.status >= 300) {
|
||||
char* msg;
|
||||
gpr_asprintf(&msg, "HTTP proxy returned response code %d",
|
||||
handshaker->http_response_.status);
|
||||
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
|
||||
gpr_free(msg);
|
||||
handshaker->HandshakeFailedLocked(error);
|
||||
goto done;
|
||||
}
|
||||
// Success. Invoke handshake-done callback.
|
||||
GRPC_CLOSURE_SCHED(handshaker->on_handshake_done_, error);
|
||||
done:
|
||||
// Set shutdown to true so that subsequent calls to
|
||||
// http_connect_handshaker_shutdown() do nothing.
|
||||
handshaker->is_shutdown_ = true;
|
||||
gpr_mu_unlock(&handshaker->mu_);
|
||||
handshaker->Unref();
|
||||
}
|
||||
|
||||
//
|
||||
// Public handshaker methods
|
||||
//
|
||||
|
||||
void HttpConnectHandshaker::Shutdown(grpc_error* why) {
|
||||
gpr_mu_lock(&mu_);
|
||||
if (!is_shutdown_) {
|
||||
is_shutdown_ = true;
|
||||
grpc_endpoint_shutdown(args_->endpoint, GRPC_ERROR_REF(why));
|
||||
CleanupArgsForFailureLocked();
|
||||
}
|
||||
gpr_mu_unlock(&mu_);
|
||||
GRPC_ERROR_UNREF(why);
|
||||
}
|
||||
|
||||
void HttpConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* acceptor,
|
||||
grpc_closure* on_handshake_done,
|
||||
HandshakerArgs* args) {
|
||||
// Check for HTTP CONNECT channel arg.
|
||||
// If not found, invoke on_handshake_done without doing anything.
|
||||
const grpc_arg* arg =
|
||||
grpc_channel_args_find(args->args, GRPC_ARG_HTTP_CONNECT_SERVER);
|
||||
char* server_name = grpc_channel_arg_get_string(arg);
|
||||
if (server_name == nullptr) {
|
||||
// Set shutdown to true so that subsequent calls to
|
||||
// http_connect_handshaker_shutdown() do nothing.
|
||||
gpr_mu_lock(&mu_);
|
||||
is_shutdown_ = true;
|
||||
gpr_mu_unlock(&mu_);
|
||||
GRPC_CLOSURE_SCHED(on_handshake_done, GRPC_ERROR_NONE);
|
||||
return;
|
||||
}
|
||||
// Get headers from channel args.
|
||||
arg = grpc_channel_args_find(args->args, GRPC_ARG_HTTP_CONNECT_HEADERS);
|
||||
char* arg_header_string = grpc_channel_arg_get_string(arg);
|
||||
grpc_http_header* headers = nullptr;
|
||||
size_t num_headers = 0;
|
||||
char** header_strings = nullptr;
|
||||
size_t num_header_strings = 0;
|
||||
if (arg_header_string != nullptr) {
|
||||
gpr_string_split(arg_header_string, "\n", &header_strings,
|
||||
&num_header_strings);
|
||||
headers = static_cast<grpc_http_header*>(
|
||||
gpr_malloc(sizeof(grpc_http_header) * num_header_strings));
|
||||
for (size_t i = 0; i < num_header_strings; ++i) {
|
||||
char* sep = strchr(header_strings[i], ':');
|
||||
|
||||
if (sep == nullptr) {
|
||||
gpr_log(GPR_ERROR, "skipping unparseable HTTP CONNECT header: %s",
|
||||
header_strings[i]);
|
||||
continue;
|
||||
}
|
||||
*sep = '\0';
|
||||
headers[num_headers].key = header_strings[i];
|
||||
headers[num_headers].value = sep + 1;
|
||||
++num_headers;
|
||||
}
|
||||
}
|
||||
// Save state in the handshaker object.
|
||||
MutexLock lock(&mu_);
|
||||
args_ = args;
|
||||
on_handshake_done_ = on_handshake_done;
|
||||
// Log connection via proxy.
|
||||
char* proxy_name = grpc_endpoint_get_peer(args->endpoint);
|
||||
gpr_log(GPR_INFO, "Connecting to server %s via HTTP proxy %s", server_name,
|
||||
proxy_name);
|
||||
gpr_free(proxy_name);
|
||||
// Construct HTTP CONNECT request.
|
||||
grpc_httpcli_request request;
|
||||
request.host = server_name;
|
||||
request.ssl_host_override = nullptr;
|
||||
request.http.method = (char*)"CONNECT";
|
||||
request.http.path = server_name;
|
||||
request.http.version = GRPC_HTTP_HTTP10; // Set by OnReadDone
|
||||
request.http.hdrs = headers;
|
||||
request.http.hdr_count = num_headers;
|
||||
request.http.body_length = 0;
|
||||
request.http.body = nullptr;
|
||||
request.handshaker = &grpc_httpcli_plaintext;
|
||||
grpc_slice request_slice = grpc_httpcli_format_connect_request(&request);
|
||||
grpc_slice_buffer_add(&write_buffer_, request_slice);
|
||||
// Clean up.
|
||||
gpr_free(headers);
|
||||
for (size_t i = 0; i < num_header_strings; ++i) {
|
||||
gpr_free(header_strings[i]);
|
||||
}
|
||||
gpr_free(header_strings);
|
||||
// Take a new ref to be held by the write callback.
|
||||
Ref().release();
|
||||
grpc_endpoint_write(args->endpoint, &write_buffer_, &request_done_closure_,
|
||||
nullptr);
|
||||
}
|
||||
|
||||
HttpConnectHandshaker::HttpConnectHandshaker() {
|
||||
gpr_mu_init(&mu_);
|
||||
grpc_slice_buffer_init(&write_buffer_);
|
||||
GRPC_CLOSURE_INIT(&request_done_closure_, &HttpConnectHandshaker::OnWriteDone,
|
||||
this, grpc_schedule_on_exec_ctx);
|
||||
GRPC_CLOSURE_INIT(&response_read_closure_, &HttpConnectHandshaker::OnReadDone,
|
||||
this, grpc_schedule_on_exec_ctx);
|
||||
grpc_http_parser_init(&http_parser_, GRPC_HTTP_RESPONSE, &http_response_);
|
||||
}
|
||||
|
||||
//
|
||||
// handshaker factory
|
||||
//
|
||||
|
||||
class HttpConnectHandshakerFactory : public HandshakerFactory {
|
||||
public:
|
||||
void AddHandshakers(const grpc_channel_args* args,
|
||||
grpc_pollset_set* interested_parties,
|
||||
HandshakeManager* handshake_mgr) override {
|
||||
handshake_mgr->Add(MakeRefCounted<HttpConnectHandshaker>());
|
||||
}
|
||||
~HttpConnectHandshakerFactory() override = default;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
void grpc_http_connect_register_handshaker_factory() {
|
||||
using namespace grpc_core;
|
||||
HandshakerRegistry::RegisterHandshakerFactory(
|
||||
true /* at_start */, HANDSHAKER_CLIENT,
|
||||
UniquePtr<HandshakerFactory>(New<HttpConnectHandshakerFactory>()));
|
||||
}
|
34
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/http_connect_handshaker.h
generated
vendored
Normal file
34
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/http_connect_handshaker.h
generated
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H
|
||||
|
||||
/// Channel arg indicating the server in HTTP CONNECT request (string).
|
||||
/// The presence of this arg triggers the use of HTTP CONNECT.
|
||||
#define GRPC_ARG_HTTP_CONNECT_SERVER "grpc.http_connect_server"
|
||||
|
||||
/// Channel arg indicating HTTP CONNECT headers (string).
|
||||
/// Multiple headers are separated by newlines. Key/value pairs are
|
||||
/// separated by colons.
|
||||
#define GRPC_ARG_HTTP_CONNECT_HEADERS "grpc.http_connect_headers"
|
||||
|
||||
/// Registers handshaker factory.
|
||||
void grpc_http_connect_register_handshaker_factory();
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_CONNECT_HANDSHAKER_H */
|
215
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/http_proxy.cc
generated
vendored
Normal file
215
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/http_proxy.cc
generated
vendored
Normal file
@ -0,0 +1,215 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/http_proxy.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <grpc/support/alloc.h>
|
||||
#include <grpc/support/log.h>
|
||||
#include <grpc/support/string_util.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
|
||||
#include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
|
||||
#include "src/core/lib/channel/channel_args.h"
|
||||
#include "src/core/lib/gpr/env.h"
|
||||
#include "src/core/lib/gpr/string.h"
|
||||
#include "src/core/lib/gprpp/host_port.h"
|
||||
#include "src/core/lib/slice/b64.h"
|
||||
#include "src/core/lib/uri/uri_parser.h"
|
||||
|
||||
/**
|
||||
* Parses the 'https_proxy' env var (fallback on 'http_proxy') and returns the
|
||||
* proxy hostname to resolve or nullptr on error. Also sets 'user_cred' to user
|
||||
* credentials if present in the 'http_proxy' env var, otherwise leaves it
|
||||
* unchanged. It is caller's responsibility to gpr_free user_cred.
|
||||
*/
|
||||
static char* get_http_proxy_server(char** user_cred) {
|
||||
GPR_ASSERT(user_cred != nullptr);
|
||||
char* proxy_name = nullptr;
|
||||
char** authority_strs = nullptr;
|
||||
size_t authority_nstrs;
|
||||
/* Prefer using 'grpc_proxy'. Fallback on 'http_proxy' if it is not set.
|
||||
* Also prefer using 'https_proxy' with fallback on 'http_proxy'. The
|
||||
* fallback behavior can be removed if there's a demand for it.
|
||||
*/
|
||||
char* uri_str = gpr_getenv("grpc_proxy");
|
||||
if (uri_str == nullptr) uri_str = gpr_getenv("https_proxy");
|
||||
if (uri_str == nullptr) uri_str = gpr_getenv("http_proxy");
|
||||
if (uri_str == nullptr) return nullptr;
|
||||
grpc_uri* uri = grpc_uri_parse(uri_str, false /* suppress_errors */);
|
||||
if (uri == nullptr || uri->authority == nullptr) {
|
||||
gpr_log(GPR_ERROR, "cannot parse value of 'http_proxy' env var");
|
||||
goto done;
|
||||
}
|
||||
if (strcmp(uri->scheme, "http") != 0) {
|
||||
gpr_log(GPR_ERROR, "'%s' scheme not supported in proxy URI", uri->scheme);
|
||||
goto done;
|
||||
}
|
||||
/* Split on '@' to separate user credentials from host */
|
||||
gpr_string_split(uri->authority, "@", &authority_strs, &authority_nstrs);
|
||||
GPR_ASSERT(authority_nstrs != 0); /* should have at least 1 string */
|
||||
if (authority_nstrs == 1) {
|
||||
/* User cred not present in authority */
|
||||
proxy_name = authority_strs[0];
|
||||
} else if (authority_nstrs == 2) {
|
||||
/* User cred found */
|
||||
*user_cred = authority_strs[0];
|
||||
proxy_name = authority_strs[1];
|
||||
gpr_log(GPR_DEBUG, "userinfo found in proxy URI");
|
||||
} else {
|
||||
/* Bad authority */
|
||||
for (size_t i = 0; i < authority_nstrs; i++) {
|
||||
gpr_free(authority_strs[i]);
|
||||
}
|
||||
proxy_name = nullptr;
|
||||
}
|
||||
gpr_free(authority_strs);
|
||||
done:
|
||||
gpr_free(uri_str);
|
||||
grpc_uri_destroy(uri);
|
||||
return proxy_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the value of GRPC_ARG_ENABLE_HTTP_PROXY to determine if http_proxy
|
||||
* should be used.
|
||||
*/
|
||||
bool http_proxy_enabled(const grpc_channel_args* args) {
|
||||
const grpc_arg* arg =
|
||||
grpc_channel_args_find(args, GRPC_ARG_ENABLE_HTTP_PROXY);
|
||||
return grpc_channel_arg_get_bool(arg, true);
|
||||
}
|
||||
|
||||
static bool proxy_mapper_map_name(grpc_proxy_mapper* mapper,
|
||||
const char* server_uri,
|
||||
const grpc_channel_args* args,
|
||||
char** name_to_resolve,
|
||||
grpc_channel_args** new_args) {
|
||||
if (!http_proxy_enabled(args)) {
|
||||
return false;
|
||||
}
|
||||
char* user_cred = nullptr;
|
||||
*name_to_resolve = get_http_proxy_server(&user_cred);
|
||||
if (*name_to_resolve == nullptr) return false;
|
||||
char* no_proxy_str = nullptr;
|
||||
grpc_uri* uri = grpc_uri_parse(server_uri, false /* suppress_errors */);
|
||||
if (uri == nullptr || uri->path[0] == '\0') {
|
||||
gpr_log(GPR_ERROR,
|
||||
"'http_proxy' environment variable set, but cannot "
|
||||
"parse server URI '%s' -- not using proxy",
|
||||
server_uri);
|
||||
goto no_use_proxy;
|
||||
}
|
||||
if (strcmp(uri->scheme, "unix") == 0) {
|
||||
gpr_log(GPR_INFO, "not using proxy for Unix domain socket '%s'",
|
||||
server_uri);
|
||||
goto no_use_proxy;
|
||||
}
|
||||
/* Prefer using 'no_grpc_proxy'. Fallback on 'no_proxy' if it is not set. */
|
||||
no_proxy_str = gpr_getenv("no_grpc_proxy");
|
||||
if (no_proxy_str == nullptr) no_proxy_str = gpr_getenv("no_proxy");
|
||||
if (no_proxy_str != nullptr) {
|
||||
static const char* NO_PROXY_SEPARATOR = ",";
|
||||
bool use_proxy = true;
|
||||
grpc_core::UniquePtr<char> server_host;
|
||||
grpc_core::UniquePtr<char> server_port;
|
||||
if (!grpc_core::SplitHostPort(
|
||||
uri->path[0] == '/' ? uri->path + 1 : uri->path, &server_host,
|
||||
&server_port)) {
|
||||
gpr_log(GPR_INFO,
|
||||
"unable to split host and port, not checking no_proxy list for "
|
||||
"host '%s'",
|
||||
server_uri);
|
||||
gpr_free(no_proxy_str);
|
||||
} else {
|
||||
size_t uri_len = strlen(server_host.get());
|
||||
char** no_proxy_hosts;
|
||||
size_t num_no_proxy_hosts;
|
||||
gpr_string_split(no_proxy_str, NO_PROXY_SEPARATOR, &no_proxy_hosts,
|
||||
&num_no_proxy_hosts);
|
||||
for (size_t i = 0; i < num_no_proxy_hosts; i++) {
|
||||
char* no_proxy_entry = no_proxy_hosts[i];
|
||||
size_t no_proxy_len = strlen(no_proxy_entry);
|
||||
if (no_proxy_len <= uri_len &&
|
||||
gpr_stricmp(no_proxy_entry,
|
||||
&(server_host.get()[uri_len - no_proxy_len])) == 0) {
|
||||
gpr_log(GPR_INFO, "not using proxy for host in no_proxy list '%s'",
|
||||
server_uri);
|
||||
use_proxy = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (size_t i = 0; i < num_no_proxy_hosts; i++) {
|
||||
gpr_free(no_proxy_hosts[i]);
|
||||
}
|
||||
gpr_free(no_proxy_hosts);
|
||||
gpr_free(no_proxy_str);
|
||||
if (!use_proxy) goto no_use_proxy;
|
||||
}
|
||||
}
|
||||
grpc_arg args_to_add[2];
|
||||
args_to_add[0] = grpc_channel_arg_string_create(
|
||||
(char*)GRPC_ARG_HTTP_CONNECT_SERVER,
|
||||
uri->path[0] == '/' ? uri->path + 1 : uri->path);
|
||||
if (user_cred != nullptr) {
|
||||
/* Use base64 encoding for user credentials as stated in RFC 7617 */
|
||||
char* encoded_user_cred =
|
||||
grpc_base64_encode(user_cred, strlen(user_cred), 0, 0);
|
||||
char* header;
|
||||
gpr_asprintf(&header, "Proxy-Authorization:Basic %s", encoded_user_cred);
|
||||
gpr_free(encoded_user_cred);
|
||||
args_to_add[1] = grpc_channel_arg_string_create(
|
||||
(char*)GRPC_ARG_HTTP_CONNECT_HEADERS, header);
|
||||
*new_args = grpc_channel_args_copy_and_add(args, args_to_add, 2);
|
||||
gpr_free(header);
|
||||
} else {
|
||||
*new_args = grpc_channel_args_copy_and_add(args, args_to_add, 1);
|
||||
}
|
||||
grpc_uri_destroy(uri);
|
||||
gpr_free(user_cred);
|
||||
return true;
|
||||
no_use_proxy:
|
||||
if (uri != nullptr) grpc_uri_destroy(uri);
|
||||
gpr_free(*name_to_resolve);
|
||||
*name_to_resolve = nullptr;
|
||||
gpr_free(user_cred);
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool proxy_mapper_map_address(grpc_proxy_mapper* mapper,
|
||||
const grpc_resolved_address* address,
|
||||
const grpc_channel_args* args,
|
||||
grpc_resolved_address** new_address,
|
||||
grpc_channel_args** new_args) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static void proxy_mapper_destroy(grpc_proxy_mapper* mapper) {}
|
||||
|
||||
static const grpc_proxy_mapper_vtable proxy_mapper_vtable = {
|
||||
proxy_mapper_map_name, proxy_mapper_map_address, proxy_mapper_destroy};
|
||||
|
||||
static grpc_proxy_mapper proxy_mapper = {&proxy_mapper_vtable};
|
||||
|
||||
void grpc_register_http_proxy_mapper() {
|
||||
grpc_proxy_mapper_register(true /* at_start */, &proxy_mapper);
|
||||
}
|
24
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/http_proxy.h
generated
vendored
Normal file
24
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/http_proxy.h
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2016 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_PROXY_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_PROXY_H
|
||||
|
||||
void grpc_register_http_proxy_mapper();
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_HTTP_PROXY_H */
|
137
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy.cc
generated
vendored
Normal file
137
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy.cc
generated
vendored
Normal file
@ -0,0 +1,137 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/lb_policy.h"
|
||||
|
||||
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
||||
#include "src/core/lib/iomgr/combiner.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
DebugOnlyTraceFlag grpc_trace_lb_policy_refcount(false, "lb_policy_refcount");
|
||||
|
||||
//
|
||||
// LoadBalancingPolicy
|
||||
//
|
||||
|
||||
LoadBalancingPolicy::LoadBalancingPolicy(Args args, intptr_t initial_refcount)
|
||||
: InternallyRefCounted(&grpc_trace_lb_policy_refcount, initial_refcount),
|
||||
combiner_(GRPC_COMBINER_REF(args.combiner, "lb_policy")),
|
||||
interested_parties_(grpc_pollset_set_create()),
|
||||
channel_control_helper_(std::move(args.channel_control_helper)) {}
|
||||
|
||||
LoadBalancingPolicy::~LoadBalancingPolicy() {
|
||||
grpc_pollset_set_destroy(interested_parties_);
|
||||
GRPC_COMBINER_UNREF(combiner_, "lb_policy");
|
||||
}
|
||||
|
||||
void LoadBalancingPolicy::Orphan() {
|
||||
ShutdownLocked();
|
||||
Unref();
|
||||
}
|
||||
|
||||
//
|
||||
// LoadBalancingPolicy::UpdateArgs
|
||||
//
|
||||
|
||||
LoadBalancingPolicy::UpdateArgs::UpdateArgs(const UpdateArgs& other) {
|
||||
addresses = other.addresses;
|
||||
config = other.config;
|
||||
args = grpc_channel_args_copy(other.args);
|
||||
}
|
||||
|
||||
LoadBalancingPolicy::UpdateArgs::UpdateArgs(UpdateArgs&& other) {
|
||||
addresses = std::move(other.addresses);
|
||||
config = std::move(other.config);
|
||||
// TODO(roth): Use std::move() once channel args is converted to C++.
|
||||
args = other.args;
|
||||
other.args = nullptr;
|
||||
}
|
||||
|
||||
LoadBalancingPolicy::UpdateArgs& LoadBalancingPolicy::UpdateArgs::operator=(
|
||||
const UpdateArgs& other) {
|
||||
addresses = other.addresses;
|
||||
config = other.config;
|
||||
grpc_channel_args_destroy(args);
|
||||
args = grpc_channel_args_copy(other.args);
|
||||
return *this;
|
||||
}
|
||||
|
||||
LoadBalancingPolicy::UpdateArgs& LoadBalancingPolicy::UpdateArgs::operator=(
|
||||
UpdateArgs&& other) {
|
||||
addresses = std::move(other.addresses);
|
||||
config = std::move(other.config);
|
||||
// TODO(roth): Use std::move() once channel args is converted to C++.
|
||||
grpc_channel_args_destroy(args);
|
||||
args = other.args;
|
||||
other.args = nullptr;
|
||||
return *this;
|
||||
}
|
||||
|
||||
//
|
||||
// LoadBalancingPolicy::QueuePicker
|
||||
//
|
||||
|
||||
LoadBalancingPolicy::PickResult LoadBalancingPolicy::QueuePicker::Pick(
|
||||
PickArgs args) {
|
||||
// We invoke the parent's ExitIdleLocked() via a closure instead
|
||||
// of doing it directly here, for two reasons:
|
||||
// 1. ExitIdleLocked() may cause the policy's state to change and
|
||||
// a new picker to be delivered to the channel. If that new
|
||||
// picker is delivered before ExitIdleLocked() returns, then by
|
||||
// the time this function returns, the pick will already have
|
||||
// been processed, and we'll be trying to re-process the same
|
||||
// pick again, leading to a crash.
|
||||
// 2. We are currently running in the data plane combiner, but we
|
||||
// need to bounce into the control plane combiner to call
|
||||
// ExitIdleLocked().
|
||||
if (!exit_idle_called_) {
|
||||
exit_idle_called_ = true;
|
||||
parent_->Ref().release(); // ref held by closure.
|
||||
GRPC_CLOSURE_SCHED(
|
||||
GRPC_CLOSURE_CREATE(&CallExitIdle, parent_.get(),
|
||||
grpc_combiner_scheduler(parent_->combiner())),
|
||||
GRPC_ERROR_NONE);
|
||||
}
|
||||
PickResult result;
|
||||
result.type = PickResult::PICK_QUEUE;
|
||||
return result;
|
||||
}
|
||||
|
||||
void LoadBalancingPolicy::QueuePicker::CallExitIdle(void* arg,
|
||||
grpc_error* error) {
|
||||
LoadBalancingPolicy* parent = static_cast<LoadBalancingPolicy*>(arg);
|
||||
parent->ExitIdleLocked();
|
||||
parent->Unref();
|
||||
}
|
||||
|
||||
//
|
||||
// LoadBalancingPolicy::TransientFailurePicker
|
||||
//
|
||||
|
||||
LoadBalancingPolicy::PickResult
|
||||
LoadBalancingPolicy::TransientFailurePicker::Pick(PickArgs args) {
|
||||
PickResult result;
|
||||
result.type = PickResult::PICK_FAILED;
|
||||
result.error = GRPC_ERROR_REF(error_);
|
||||
return result;
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
398
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy.h
generated
vendored
Normal file
398
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy.h
generated
vendored
Normal file
@ -0,0 +1,398 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2015 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/server_address.h"
|
||||
#include "src/core/ext/filters/client_channel/service_config.h"
|
||||
#include "src/core/ext/filters/client_channel/subchannel_interface.h"
|
||||
#include "src/core/lib/gprpp/abstract.h"
|
||||
#include "src/core/lib/gprpp/map.h"
|
||||
#include "src/core/lib/gprpp/orphanable.h"
|
||||
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
||||
#include "src/core/lib/gprpp/string_view.h"
|
||||
#include "src/core/lib/iomgr/combiner.h"
|
||||
#include "src/core/lib/iomgr/polling_entity.h"
|
||||
#include "src/core/lib/transport/connectivity_state.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
extern DebugOnlyTraceFlag grpc_trace_lb_policy_refcount;
|
||||
|
||||
/// Interface for load balancing policies.
|
||||
///
|
||||
/// The following concepts are used here:
|
||||
///
|
||||
/// Channel: An abstraction that manages connections to backend servers
|
||||
/// on behalf of a client application. The application creates a channel
|
||||
/// for a given server name and then sends calls (RPCs) on it, and the
|
||||
/// channel figures out which backend server to send each call to. A channel
|
||||
/// contains a resolver, a load balancing policy (or a tree of LB policies),
|
||||
/// and a set of one or more subchannels.
|
||||
///
|
||||
/// Subchannel: A subchannel represents a connection to one backend server.
|
||||
/// The LB policy decides which subchannels to create, manages the
|
||||
/// connectivity state of those subchannels, and decides which subchannel
|
||||
/// to send any given call to.
|
||||
///
|
||||
/// Resolver: A plugin that takes a gRPC server URI and resolves it to a
|
||||
/// list of one or more addresses and a service config, as described
|
||||
/// in https://github.com/grpc/grpc/blob/master/doc/naming.md. See
|
||||
/// resolver.h for the resolver API.
|
||||
///
|
||||
/// Load Balancing (LB) Policy: A plugin that takes a list of addresses
|
||||
/// from the resolver, maintains and manages a subchannel for each
|
||||
/// backend address, and decides which subchannel to send each call on.
|
||||
/// An LB policy has two parts:
|
||||
/// - A LoadBalancingPolicy, which deals with the control plane work of
|
||||
/// managing subchannels.
|
||||
/// - A SubchannelPicker, which handles the data plane work of
|
||||
/// determining which subchannel a given call should be sent on.
|
||||
|
||||
/// LoadBalacingPolicy API.
|
||||
///
|
||||
/// Note: All methods with a "Locked" suffix must be called from the
|
||||
/// combiner passed to the constructor.
|
||||
///
|
||||
/// Any I/O done by the LB policy should be done under the pollset_set
|
||||
/// returned by \a interested_parties().
|
||||
// TODO(roth): Once we move to EventManager-based polling, remove the
|
||||
// interested_parties() hooks from the API.
|
||||
class LoadBalancingPolicy : public InternallyRefCounted<LoadBalancingPolicy> {
|
||||
public:
|
||||
// Represents backend metrics reported by the backend to the client.
|
||||
struct BackendMetricData {
|
||||
/// CPU utilization expressed as a fraction of available CPU resources.
|
||||
double cpu_utilization;
|
||||
/// Memory utilization expressed as a fraction of available memory
|
||||
/// resources.
|
||||
double mem_utilization;
|
||||
/// Total requests per second being served by the backend. This
|
||||
/// should include all services that a backend is responsible for.
|
||||
uint64_t requests_per_second;
|
||||
/// Application-specific requests cost metrics. Metric names are
|
||||
/// determined by the application. Each value is an absolute cost
|
||||
/// (e.g. 3487 bytes of storage) associated with the request.
|
||||
Map<StringView, double, StringLess> request_cost;
|
||||
/// Application-specific resource utilization metrics. Metric names
|
||||
/// are determined by the application. Each value is expressed as a
|
||||
/// fraction of total resources available.
|
||||
Map<StringView, double, StringLess> utilization;
|
||||
};
|
||||
|
||||
/// Interface for accessing per-call state.
|
||||
/// Implemented by the client channel and used by the SubchannelPicker.
|
||||
class CallState {
|
||||
public:
|
||||
CallState() = default;
|
||||
virtual ~CallState() = default;
|
||||
|
||||
/// Allocates memory associated with the call, which will be
|
||||
/// automatically freed when the call is complete.
|
||||
/// It is more efficient to use this than to allocate memory directly
|
||||
/// for allocations that need to be made on a per-call basis.
|
||||
virtual void* Alloc(size_t size) GRPC_ABSTRACT;
|
||||
|
||||
/// Returns the backend metric data returned by the server for the call,
|
||||
/// or null if no backend metric data was returned.
|
||||
virtual const BackendMetricData* GetBackendMetricData() GRPC_ABSTRACT;
|
||||
|
||||
GRPC_ABSTRACT_BASE_CLASS
|
||||
};
|
||||
|
||||
/// Interface for accessing metadata.
|
||||
/// Implemented by the client channel and used by the SubchannelPicker.
|
||||
class MetadataInterface {
|
||||
public:
|
||||
// Implementations whose iterators fit in intptr_t may internally
|
||||
// cast this directly to their iterator type. Otherwise, they may
|
||||
// dynamically allocate their iterators and store the address here.
|
||||
typedef intptr_t Iterator;
|
||||
|
||||
virtual ~MetadataInterface() = default;
|
||||
|
||||
/// Adds a key/value pair.
|
||||
/// Does NOT take ownership of \a key or \a value.
|
||||
/// Implementations must ensure that the key and value remain alive
|
||||
/// until the call ends. If desired, they may be allocated via
|
||||
/// CallState::Alloc().
|
||||
virtual void Add(StringView key, StringView value) GRPC_ABSTRACT;
|
||||
|
||||
/// Iteration interface.
|
||||
virtual Iterator Begin() const GRPC_ABSTRACT;
|
||||
virtual bool IsEnd(Iterator it) const GRPC_ABSTRACT;
|
||||
virtual void Next(Iterator* it) const GRPC_ABSTRACT;
|
||||
virtual StringView Key(Iterator it) const GRPC_ABSTRACT;
|
||||
virtual StringView Value(Iterator it) const GRPC_ABSTRACT;
|
||||
|
||||
/// Removes the element pointed to by \a it, which is modified to
|
||||
/// point to the next element.
|
||||
virtual void Erase(Iterator* it) GRPC_ABSTRACT;
|
||||
|
||||
GRPC_ABSTRACT_BASE_CLASS
|
||||
};
|
||||
|
||||
/// Arguments used when picking a subchannel for a call.
|
||||
struct PickArgs {
|
||||
/// Initial metadata associated with the picking call.
|
||||
/// The LB policy may use the existing metadata to influence its routing
|
||||
/// decision, and it may add new metadata elements to be sent with the
|
||||
/// call to the chosen backend.
|
||||
MetadataInterface* initial_metadata;
|
||||
/// An interface for accessing call state. Can be used to allocate
|
||||
/// data associated with the call in an efficient way.
|
||||
CallState* call_state;
|
||||
};
|
||||
|
||||
/// The result of picking a subchannel for a call.
|
||||
struct PickResult {
|
||||
enum ResultType {
|
||||
/// Pick complete. If \a subchannel is non-null, the client channel
|
||||
/// will immediately proceed with the call on that subchannel;
|
||||
/// otherwise, it will drop the call.
|
||||
PICK_COMPLETE,
|
||||
/// Pick cannot be completed until something changes on the control
|
||||
/// plane. The client channel will queue the pick and try again the
|
||||
/// next time the picker is updated.
|
||||
PICK_QUEUE,
|
||||
/// Pick failed. If the call is wait_for_ready, the client channel
|
||||
/// will wait for the next picker and try again; otherwise, it
|
||||
/// will immediately fail the call with the status indicated via
|
||||
/// \a error (although the call may be retried if the client channel
|
||||
/// is configured to do so).
|
||||
PICK_FAILED,
|
||||
};
|
||||
ResultType type;
|
||||
|
||||
/// Used only if type is PICK_COMPLETE. Will be set to the selected
|
||||
/// subchannel, or nullptr if the LB policy decides to drop the call.
|
||||
RefCountedPtr<SubchannelInterface> subchannel;
|
||||
|
||||
/// Used only if type is PICK_FAILED.
|
||||
/// Error to be set when returning a failure.
|
||||
// TODO(roth): Replace this with something similar to grpc::Status,
|
||||
// so that we don't expose grpc_error to this API.
|
||||
grpc_error* error = GRPC_ERROR_NONE;
|
||||
|
||||
/// Used only if type is PICK_COMPLETE.
|
||||
/// Callback set by LB policy to be notified of trailing metadata.
|
||||
/// The user_data argument will be set to the
|
||||
/// recv_trailing_metadata_ready_user_data field.
|
||||
/// recv_trailing_metadata will be set to the metadata, which may be
|
||||
/// modified by the callback. The callback does not take ownership,
|
||||
/// however, so any data that needs to be used after returning must
|
||||
/// be copied.
|
||||
/// call_state can be used to obtain backend metric data.
|
||||
// TODO(roth): Replace grpc_error with something better before we allow
|
||||
// people outside of gRPC team to use this API.
|
||||
void (*recv_trailing_metadata_ready)(
|
||||
void* user_data, grpc_error* error,
|
||||
MetadataInterface* recv_trailing_metadata,
|
||||
CallState* call_state) = nullptr;
|
||||
void* recv_trailing_metadata_ready_user_data = nullptr;
|
||||
};
|
||||
|
||||
/// A subchannel picker is the object used to pick the subchannel to
|
||||
/// use for a given call. This is implemented by the LB policy and
|
||||
/// used by the client channel to perform picks.
|
||||
///
|
||||
/// Pickers are intended to encapsulate all of the state and logic
|
||||
/// needed on the data plane (i.e., to actually process picks for
|
||||
/// individual calls sent on the channel) while excluding all of the
|
||||
/// state and logic needed on the control plane (i.e., resolver
|
||||
/// updates, connectivity state notifications, etc); the latter should
|
||||
/// live in the LB policy object itself.
|
||||
///
|
||||
/// Currently, pickers are always accessed from within the
|
||||
/// client_channel data plane combiner, so they do not have to be
|
||||
/// thread-safe.
|
||||
class SubchannelPicker {
|
||||
public:
|
||||
SubchannelPicker() = default;
|
||||
virtual ~SubchannelPicker() = default;
|
||||
|
||||
virtual PickResult Pick(PickArgs args) GRPC_ABSTRACT;
|
||||
|
||||
GRPC_ABSTRACT_BASE_CLASS
|
||||
};
|
||||
|
||||
/// A proxy object implemented by the client channel and used by the
|
||||
/// LB policy to communicate with the channel.
|
||||
// TODO(juanlishen): Consider adding a mid-layer subclass that helps handle
|
||||
// things like swapping in pending policy when it's ready. Currently, we are
|
||||
// duplicating the logic in many subclasses.
|
||||
class ChannelControlHelper {
|
||||
public:
|
||||
ChannelControlHelper() = default;
|
||||
virtual ~ChannelControlHelper() = default;
|
||||
|
||||
/// Creates a new subchannel with the specified channel args.
|
||||
virtual RefCountedPtr<SubchannelInterface> CreateSubchannel(
|
||||
const grpc_channel_args& args) GRPC_ABSTRACT;
|
||||
|
||||
/// Sets the connectivity state and returns a new picker to be used
|
||||
/// by the client channel.
|
||||
virtual void UpdateState(grpc_connectivity_state state,
|
||||
UniquePtr<SubchannelPicker>) GRPC_ABSTRACT;
|
||||
|
||||
/// Requests that the resolver re-resolve.
|
||||
virtual void RequestReresolution() GRPC_ABSTRACT;
|
||||
|
||||
/// Adds a trace message associated with the channel.
|
||||
enum TraceSeverity { TRACE_INFO, TRACE_WARNING, TRACE_ERROR };
|
||||
virtual void AddTraceEvent(TraceSeverity severity,
|
||||
StringView message) GRPC_ABSTRACT;
|
||||
|
||||
GRPC_ABSTRACT_BASE_CLASS
|
||||
};
|
||||
|
||||
/// Interface for configuration data used by an LB policy implementation.
|
||||
/// Individual implementations will create a subclass that adds methods to
|
||||
/// return the parameters they need.
|
||||
class Config : public RefCounted<Config> {
|
||||
public:
|
||||
virtual ~Config() = default;
|
||||
|
||||
// Returns the load balancing policy name
|
||||
virtual const char* name() const GRPC_ABSTRACT;
|
||||
|
||||
GRPC_ABSTRACT_BASE_CLASS
|
||||
};
|
||||
|
||||
/// Data passed to the UpdateLocked() method when new addresses and
|
||||
/// config are available.
|
||||
struct UpdateArgs {
|
||||
ServerAddressList addresses;
|
||||
RefCountedPtr<Config> config;
|
||||
const grpc_channel_args* args = nullptr;
|
||||
|
||||
// TODO(roth): Remove everything below once channel args is
|
||||
// converted to a copyable and movable C++ object.
|
||||
UpdateArgs() = default;
|
||||
~UpdateArgs() { grpc_channel_args_destroy(args); }
|
||||
UpdateArgs(const UpdateArgs& other);
|
||||
UpdateArgs(UpdateArgs&& other);
|
||||
UpdateArgs& operator=(const UpdateArgs& other);
|
||||
UpdateArgs& operator=(UpdateArgs&& other);
|
||||
};
|
||||
|
||||
/// Args used to instantiate an LB policy.
|
||||
struct Args {
|
||||
/// The combiner under which all LB policy calls will be run.
|
||||
/// Policy does NOT take ownership of the reference to the combiner.
|
||||
// TODO(roth): Once we have a C++-like interface for combiners, this
|
||||
// API should change to take a smart pointer that does pass ownership
|
||||
// of a reference.
|
||||
grpc_combiner* combiner = nullptr;
|
||||
/// Channel control helper.
|
||||
/// Note: LB policies MUST NOT call any method on the helper from
|
||||
/// their constructor.
|
||||
UniquePtr<ChannelControlHelper> channel_control_helper;
|
||||
/// Channel args.
|
||||
// TODO(roth): Find a better channel args representation for this API.
|
||||
const grpc_channel_args* args = nullptr;
|
||||
};
|
||||
|
||||
explicit LoadBalancingPolicy(Args args, intptr_t initial_refcount = 1);
|
||||
virtual ~LoadBalancingPolicy();
|
||||
|
||||
// Not copyable nor movable.
|
||||
LoadBalancingPolicy(const LoadBalancingPolicy&) = delete;
|
||||
LoadBalancingPolicy& operator=(const LoadBalancingPolicy&) = delete;
|
||||
|
||||
/// Returns the name of the LB policy.
|
||||
virtual const char* name() const GRPC_ABSTRACT;
|
||||
|
||||
/// Updates the policy with new data from the resolver. Will be invoked
|
||||
/// immediately after LB policy is constructed, and then again whenever
|
||||
/// the resolver returns a new result.
|
||||
virtual void UpdateLocked(UpdateArgs) GRPC_ABSTRACT; // NOLINT
|
||||
|
||||
/// Tries to enter a READY connectivity state.
|
||||
/// This is a no-op by default, since most LB policies never go into
|
||||
/// IDLE state.
|
||||
virtual void ExitIdleLocked() {}
|
||||
|
||||
/// Resets connection backoff.
|
||||
virtual void ResetBackoffLocked() GRPC_ABSTRACT;
|
||||
|
||||
grpc_pollset_set* interested_parties() const { return interested_parties_; }
|
||||
|
||||
// Note: This must be invoked while holding the combiner.
|
||||
void Orphan() override;
|
||||
|
||||
// A picker that returns PICK_QUEUE for all picks.
|
||||
// Also calls the parent LB policy's ExitIdleLocked() method when the
|
||||
// first pick is seen.
|
||||
class QueuePicker : public SubchannelPicker {
|
||||
public:
|
||||
explicit QueuePicker(RefCountedPtr<LoadBalancingPolicy> parent)
|
||||
: parent_(std::move(parent)) {}
|
||||
|
||||
~QueuePicker() { parent_.reset(DEBUG_LOCATION, "QueuePicker"); }
|
||||
|
||||
PickResult Pick(PickArgs args) override;
|
||||
|
||||
private:
|
||||
static void CallExitIdle(void* arg, grpc_error* error);
|
||||
|
||||
RefCountedPtr<LoadBalancingPolicy> parent_;
|
||||
bool exit_idle_called_ = false;
|
||||
};
|
||||
|
||||
// A picker that returns PICK_TRANSIENT_FAILURE for all picks.
|
||||
class TransientFailurePicker : public SubchannelPicker {
|
||||
public:
|
||||
explicit TransientFailurePicker(grpc_error* error) : error_(error) {}
|
||||
~TransientFailurePicker() override { GRPC_ERROR_UNREF(error_); }
|
||||
|
||||
PickResult Pick(PickArgs args) override;
|
||||
|
||||
private:
|
||||
grpc_error* error_;
|
||||
};
|
||||
|
||||
GRPC_ABSTRACT_BASE_CLASS
|
||||
|
||||
protected:
|
||||
grpc_combiner* combiner() const { return combiner_; }
|
||||
|
||||
// Note: LB policies MUST NOT call any method on the helper from their
|
||||
// constructor.
|
||||
ChannelControlHelper* channel_control_helper() const {
|
||||
return channel_control_helper_.get();
|
||||
}
|
||||
|
||||
/// Shuts down the policy.
|
||||
virtual void ShutdownLocked() GRPC_ABSTRACT;
|
||||
|
||||
private:
|
||||
/// Combiner under which LB policy actions take place.
|
||||
grpc_combiner* combiner_;
|
||||
/// Owned pointer to interested parties in load balancing decisions.
|
||||
grpc_pollset_set* interested_parties_;
|
||||
/// Channel control helper.
|
||||
UniquePtr<ChannelControlHelper> channel_control_helper_;
|
||||
};
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_H */
|
155
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc
generated
vendored
Normal file
155
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc
generated
vendored
Normal file
@ -0,0 +1,155 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <grpc/support/atm.h>
|
||||
#include <grpc/support/log.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h"
|
||||
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
|
||||
#include "src/core/lib/iomgr/error.h"
|
||||
#include "src/core/lib/profiling/timers.h"
|
||||
|
||||
static grpc_error* init_channel_elem(grpc_channel_element* elem,
|
||||
grpc_channel_element_args* args) {
|
||||
return GRPC_ERROR_NONE;
|
||||
}
|
||||
|
||||
static void destroy_channel_elem(grpc_channel_element* elem) {}
|
||||
|
||||
namespace {
|
||||
|
||||
struct call_data {
|
||||
// Stats object to update.
|
||||
grpc_core::RefCountedPtr<grpc_core::GrpcLbClientStats> client_stats;
|
||||
// State for intercepting send_initial_metadata.
|
||||
grpc_closure on_complete_for_send;
|
||||
grpc_closure* original_on_complete_for_send;
|
||||
bool send_initial_metadata_succeeded = false;
|
||||
// State for intercepting recv_initial_metadata.
|
||||
grpc_closure recv_initial_metadata_ready;
|
||||
grpc_closure* original_recv_initial_metadata_ready;
|
||||
bool recv_initial_metadata_succeeded = false;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
static void on_complete_for_send(void* arg, grpc_error* error) {
|
||||
call_data* calld = static_cast<call_data*>(arg);
|
||||
if (error == GRPC_ERROR_NONE) {
|
||||
calld->send_initial_metadata_succeeded = true;
|
||||
}
|
||||
GRPC_CLOSURE_RUN(calld->original_on_complete_for_send, GRPC_ERROR_REF(error));
|
||||
}
|
||||
|
||||
static void recv_initial_metadata_ready(void* arg, grpc_error* error) {
|
||||
call_data* calld = static_cast<call_data*>(arg);
|
||||
if (error == GRPC_ERROR_NONE) {
|
||||
calld->recv_initial_metadata_succeeded = true;
|
||||
}
|
||||
GRPC_CLOSURE_RUN(calld->original_recv_initial_metadata_ready,
|
||||
GRPC_ERROR_REF(error));
|
||||
}
|
||||
|
||||
static grpc_error* init_call_elem(grpc_call_element* elem,
|
||||
const grpc_call_element_args* args) {
|
||||
GPR_ASSERT(args->context != nullptr);
|
||||
new (elem->call_data) call_data();
|
||||
return GRPC_ERROR_NONE;
|
||||
}
|
||||
|
||||
static void destroy_call_elem(grpc_call_element* elem,
|
||||
const grpc_call_final_info* final_info,
|
||||
grpc_closure* ignored) {
|
||||
call_data* calld = static_cast<call_data*>(elem->call_data);
|
||||
if (calld->client_stats != nullptr) {
|
||||
// Record call finished, optionally setting client_failed_to_send and
|
||||
// received.
|
||||
calld->client_stats->AddCallFinished(
|
||||
!calld->send_initial_metadata_succeeded /* client_failed_to_send */,
|
||||
calld->recv_initial_metadata_succeeded /* known_received */);
|
||||
}
|
||||
calld->~call_data();
|
||||
}
|
||||
|
||||
static void start_transport_stream_op_batch(
|
||||
grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
|
||||
call_data* calld = static_cast<call_data*>(elem->call_data);
|
||||
GPR_TIMER_SCOPE("clr_start_transport_stream_op_batch", 0);
|
||||
// Handle send_initial_metadata.
|
||||
if (batch->send_initial_metadata) {
|
||||
// Grab client stats object from metadata.
|
||||
grpc_linked_mdelem* client_stats_md =
|
||||
batch->payload->send_initial_metadata.send_initial_metadata->list.head;
|
||||
for (; client_stats_md != nullptr;
|
||||
client_stats_md = client_stats_md->next) {
|
||||
if (GRPC_SLICE_START_PTR(GRPC_MDKEY(client_stats_md->md)) ==
|
||||
static_cast<const void*>(grpc_core::kGrpcLbClientStatsMetadataKey)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (client_stats_md != nullptr) {
|
||||
grpc_core::GrpcLbClientStats* client_stats =
|
||||
const_cast<grpc_core::GrpcLbClientStats*>(
|
||||
reinterpret_cast<const grpc_core::GrpcLbClientStats*>(
|
||||
GRPC_SLICE_START_PTR(GRPC_MDVALUE(client_stats_md->md))));
|
||||
if (client_stats != nullptr) {
|
||||
calld->client_stats.reset(client_stats);
|
||||
// Intercept completion.
|
||||
calld->original_on_complete_for_send = batch->on_complete;
|
||||
GRPC_CLOSURE_INIT(&calld->on_complete_for_send, on_complete_for_send,
|
||||
calld, grpc_schedule_on_exec_ctx);
|
||||
batch->on_complete = &calld->on_complete_for_send;
|
||||
}
|
||||
// Remove metadata so it doesn't go out on the wire.
|
||||
grpc_metadata_batch_remove(
|
||||
batch->payload->send_initial_metadata.send_initial_metadata,
|
||||
client_stats_md);
|
||||
}
|
||||
}
|
||||
// Intercept completion of recv_initial_metadata.
|
||||
if (batch->recv_initial_metadata) {
|
||||
calld->original_recv_initial_metadata_ready =
|
||||
batch->payload->recv_initial_metadata.recv_initial_metadata_ready;
|
||||
GRPC_CLOSURE_INIT(&calld->recv_initial_metadata_ready,
|
||||
recv_initial_metadata_ready, calld,
|
||||
grpc_schedule_on_exec_ctx);
|
||||
batch->payload->recv_initial_metadata.recv_initial_metadata_ready =
|
||||
&calld->recv_initial_metadata_ready;
|
||||
}
|
||||
// Chain to next filter.
|
||||
grpc_call_next_op(elem, batch);
|
||||
}
|
||||
|
||||
const grpc_channel_filter grpc_client_load_reporting_filter = {
|
||||
start_transport_stream_op_batch,
|
||||
grpc_channel_next_op,
|
||||
sizeof(call_data),
|
||||
init_call_elem,
|
||||
grpc_call_stack_ignore_set_pollset_or_pollset_set,
|
||||
destroy_call_elem,
|
||||
0, // sizeof(channel_data)
|
||||
init_channel_elem,
|
||||
destroy_channel_elem,
|
||||
grpc_channel_next_get_info,
|
||||
"client_load_reporting"};
|
29
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h
generated
vendored
Normal file
29
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h
generated
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_CLIENT_LOAD_REPORTING_FILTER_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_CLIENT_LOAD_REPORTING_FILTER_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/lib/channel/channel_stack.h"
|
||||
|
||||
extern const grpc_channel_filter grpc_client_load_reporting_filter;
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_CLIENT_LOAD_REPORTING_FILTER_H \
|
||||
*/
|
1882
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc
generated
vendored
Normal file
1882
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
43
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h
generated
vendored
Normal file
43
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h
generated
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2018 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
/** Channel arg indicating if a target corresponding to the address is grpclb
|
||||
* loadbalancer. The type of this arg is an integer and the value is treated as
|
||||
* a bool. */
|
||||
#define GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER \
|
||||
"grpc.address_is_grpclb_load_balancer"
|
||||
/** Channel arg indicating if a target corresponding to the address is a backend
|
||||
* received from a balancer. The type of this arg is an integer and the value is
|
||||
* treated as a bool. */
|
||||
#define GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER \
|
||||
"grpc.address_is_backend_from_grpclb_load_balancer"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
extern const char kGrpcLbClientStatsMetadataKey[];
|
||||
extern const char kGrpcLbLbTokenMetadataKey[];
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_H \
|
||||
*/
|
37
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc
generated
vendored
Normal file
37
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.cc
generated
vendored
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/grpc.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
grpc_channel_args* ModifyGrpclbBalancerChannelArgs(
|
||||
const ServerAddressList& addresses, grpc_channel_args* args) {
|
||||
return args;
|
||||
}
|
||||
|
||||
grpc_channel* CreateGrpclbBalancerChannel(const char* target_uri,
|
||||
const grpc_channel_args& args) {
|
||||
return grpc_insecure_channel_create(target_uri, &args, nullptr);
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
45
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h
generated
vendored
Normal file
45
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h
generated
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_CHANNEL_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_CHANNEL_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/impl/codegen/grpc_types.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/server_address.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
/// Makes any necessary modifications to \a args for use in the grpclb
|
||||
/// balancer channel.
|
||||
///
|
||||
/// Takes ownership of \a args.
|
||||
///
|
||||
/// Caller takes ownership of the returned args.
|
||||
grpc_channel_args* ModifyGrpclbBalancerChannelArgs(
|
||||
const ServerAddressList& addresses, grpc_channel_args* args);
|
||||
|
||||
grpc_channel* CreateGrpclbBalancerChannel(const char* target_uri,
|
||||
const grpc_channel_args& args);
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_CHANNEL_H \
|
||||
*/
|
119
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc
generated
vendored
Normal file
119
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc
generated
vendored
Normal file
@ -0,0 +1,119 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <grpc/grpc_security.h>
|
||||
#include <grpc/support/alloc.h>
|
||||
#include <grpc/support/string_util.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/client_channel.h"
|
||||
#include "src/core/ext/filters/client_channel/server_address.h"
|
||||
#include "src/core/lib/channel/channel_args.h"
|
||||
#include "src/core/lib/gpr/string.h"
|
||||
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
||||
#include "src/core/lib/security/credentials/credentials.h"
|
||||
#include "src/core/lib/security/transport/target_authority_table.h"
|
||||
#include "src/core/lib/slice/slice_internal.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
namespace {
|
||||
|
||||
int BalancerNameCmp(const grpc_core::UniquePtr<char>& a,
|
||||
const grpc_core::UniquePtr<char>& b) {
|
||||
return strcmp(a.get(), b.get());
|
||||
}
|
||||
|
||||
RefCountedPtr<TargetAuthorityTable> CreateTargetAuthorityTable(
|
||||
const ServerAddressList& addresses) {
|
||||
TargetAuthorityTable::Entry* target_authority_entries =
|
||||
static_cast<TargetAuthorityTable::Entry*>(
|
||||
gpr_zalloc(sizeof(*target_authority_entries) * addresses.size()));
|
||||
for (size_t i = 0; i < addresses.size(); ++i) {
|
||||
char* addr_str;
|
||||
GPR_ASSERT(
|
||||
grpc_sockaddr_to_string(&addr_str, &addresses[i].address(), true) > 0);
|
||||
target_authority_entries[i].key = grpc_slice_from_copied_string(addr_str);
|
||||
gpr_free(addr_str);
|
||||
char* balancer_name = grpc_channel_arg_get_string(grpc_channel_args_find(
|
||||
addresses[i].args(), GRPC_ARG_ADDRESS_BALANCER_NAME));
|
||||
target_authority_entries[i].value.reset(gpr_strdup(balancer_name));
|
||||
}
|
||||
RefCountedPtr<TargetAuthorityTable> target_authority_table =
|
||||
TargetAuthorityTable::Create(addresses.size(), target_authority_entries,
|
||||
BalancerNameCmp);
|
||||
gpr_free(target_authority_entries);
|
||||
return target_authority_table;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
grpc_channel_args* ModifyGrpclbBalancerChannelArgs(
|
||||
const ServerAddressList& addresses, grpc_channel_args* args) {
|
||||
InlinedVector<const char*, 1> args_to_remove;
|
||||
InlinedVector<grpc_arg, 2> args_to_add;
|
||||
// Add arg for targets info table.
|
||||
RefCountedPtr<TargetAuthorityTable> target_authority_table =
|
||||
CreateTargetAuthorityTable(addresses);
|
||||
args_to_add.emplace_back(
|
||||
CreateTargetAuthorityTableChannelArg(target_authority_table.get()));
|
||||
// Substitute the channel credentials with a version without call
|
||||
// credentials: the load balancer is not necessarily trusted to handle
|
||||
// bearer token credentials.
|
||||
grpc_channel_credentials* channel_credentials =
|
||||
grpc_channel_credentials_find_in_args(args);
|
||||
RefCountedPtr<grpc_channel_credentials> creds_sans_call_creds;
|
||||
if (channel_credentials != nullptr) {
|
||||
creds_sans_call_creds =
|
||||
channel_credentials->duplicate_without_call_credentials();
|
||||
GPR_ASSERT(creds_sans_call_creds != nullptr);
|
||||
args_to_remove.emplace_back(GRPC_ARG_CHANNEL_CREDENTIALS);
|
||||
args_to_add.emplace_back(
|
||||
grpc_channel_credentials_to_arg(creds_sans_call_creds.get()));
|
||||
}
|
||||
grpc_channel_args* result = grpc_channel_args_copy_and_add_and_remove(
|
||||
args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
|
||||
args_to_add.size());
|
||||
// Clean up.
|
||||
grpc_channel_args_destroy(args);
|
||||
return result;
|
||||
}
|
||||
|
||||
grpc_channel* CreateGrpclbBalancerChannel(const char* target_uri,
|
||||
const grpc_channel_args& args) {
|
||||
grpc_channel_credentials* creds =
|
||||
grpc_channel_credentials_find_in_args(&args);
|
||||
if (creds == nullptr) {
|
||||
// Build with security but parent channel is insecure.
|
||||
return grpc_insecure_channel_create(target_uri, &args, nullptr);
|
||||
}
|
||||
const char* arg_to_remove = GRPC_ARG_CHANNEL_CREDENTIALS;
|
||||
grpc_channel_args* new_args =
|
||||
grpc_channel_args_copy_and_remove(&args, &arg_to_remove, 1);
|
||||
grpc_channel* channel =
|
||||
grpc_secure_channel_create(creds, target_uri, new_args, nullptr);
|
||||
grpc_channel_args_destroy(new_args);
|
||||
return channel;
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
90
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc
generated
vendored
Normal file
90
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc
generated
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <grpc/support/atm.h>
|
||||
#include <grpc/support/string_util.h>
|
||||
|
||||
#include "src/core/lib/gprpp/sync.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
void GrpcLbClientStats::AddCallStarted() {
|
||||
gpr_atm_full_fetch_add(&num_calls_started_, (gpr_atm)1);
|
||||
}
|
||||
|
||||
void GrpcLbClientStats::AddCallFinished(
|
||||
bool finished_with_client_failed_to_send, bool finished_known_received) {
|
||||
gpr_atm_full_fetch_add(&num_calls_finished_, (gpr_atm)1);
|
||||
if (finished_with_client_failed_to_send) {
|
||||
gpr_atm_full_fetch_add(&num_calls_finished_with_client_failed_to_send_,
|
||||
(gpr_atm)1);
|
||||
}
|
||||
if (finished_known_received) {
|
||||
gpr_atm_full_fetch_add(&num_calls_finished_known_received_, (gpr_atm)1);
|
||||
}
|
||||
}
|
||||
|
||||
void GrpcLbClientStats::AddCallDropped(const char* token) {
|
||||
// Increment num_calls_started and num_calls_finished.
|
||||
gpr_atm_full_fetch_add(&num_calls_started_, (gpr_atm)1);
|
||||
gpr_atm_full_fetch_add(&num_calls_finished_, (gpr_atm)1);
|
||||
// Record the drop.
|
||||
MutexLock lock(&drop_count_mu_);
|
||||
if (drop_token_counts_ == nullptr) {
|
||||
drop_token_counts_.reset(New<DroppedCallCounts>());
|
||||
}
|
||||
for (size_t i = 0; i < drop_token_counts_->size(); ++i) {
|
||||
if (strcmp((*drop_token_counts_)[i].token.get(), token) == 0) {
|
||||
++(*drop_token_counts_)[i].count;
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Not found, so add a new entry.
|
||||
drop_token_counts_->emplace_back(UniquePtr<char>(gpr_strdup(token)), 1);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
void AtomicGetAndResetCounter(int64_t* value, gpr_atm* counter) {
|
||||
*value = static_cast<int64_t>(gpr_atm_full_xchg(counter, (gpr_atm)0));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void GrpcLbClientStats::Get(
|
||||
int64_t* num_calls_started, int64_t* num_calls_finished,
|
||||
int64_t* num_calls_finished_with_client_failed_to_send,
|
||||
int64_t* num_calls_finished_known_received,
|
||||
UniquePtr<DroppedCallCounts>* drop_token_counts) {
|
||||
AtomicGetAndResetCounter(num_calls_started, &num_calls_started_);
|
||||
AtomicGetAndResetCounter(num_calls_finished, &num_calls_finished_);
|
||||
AtomicGetAndResetCounter(num_calls_finished_with_client_failed_to_send,
|
||||
&num_calls_finished_with_client_failed_to_send_);
|
||||
AtomicGetAndResetCounter(num_calls_finished_known_received,
|
||||
&num_calls_finished_known_received_);
|
||||
MutexLock lock(&drop_count_mu_);
|
||||
*drop_token_counts = std::move(drop_token_counts_);
|
||||
}
|
||||
|
||||
} // namespace grpc_core
|
74
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h
generated
vendored
Normal file
74
node_modules/grpc/deps/grpc/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h
generated
vendored
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
*
|
||||
* Copyright 2017 gRPC authors.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_CLIENT_STATS_H
|
||||
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_CLIENT_STATS_H
|
||||
|
||||
#include <grpc/support/port_platform.h>
|
||||
|
||||
#include <grpc/support/atm.h>
|
||||
|
||||
#include "src/core/lib/gprpp/inlined_vector.h"
|
||||
#include "src/core/lib/gprpp/memory.h"
|
||||
#include "src/core/lib/gprpp/ref_counted.h"
|
||||
#include "src/core/lib/gprpp/sync.h"
|
||||
|
||||
namespace grpc_core {
|
||||
|
||||
class GrpcLbClientStats : public RefCounted<GrpcLbClientStats> {
|
||||
public:
|
||||
struct DropTokenCount {
|
||||
UniquePtr<char> token;
|
||||
int64_t count;
|
||||
|
||||
DropTokenCount(UniquePtr<char> token, int64_t count)
|
||||
: token(std::move(token)), count(count) {}
|
||||
};
|
||||
|
||||
typedef InlinedVector<DropTokenCount, 10> DroppedCallCounts;
|
||||
|
||||
void AddCallStarted();
|
||||
void AddCallFinished(bool finished_with_client_failed_to_send,
|
||||
bool finished_known_received);
|
||||
|
||||
void AddCallDropped(const char* token);
|
||||
|
||||
void Get(int64_t* num_calls_started, int64_t* num_calls_finished,
|
||||
int64_t* num_calls_finished_with_client_failed_to_send,
|
||||
int64_t* num_calls_finished_known_received,
|
||||
UniquePtr<DroppedCallCounts>* drop_token_counts);
|
||||
|
||||
// A destruction function to use as the user_data key when attaching
|
||||
// client stats to a grpc_mdelem.
|
||||
static void Destroy(void* arg) {
|
||||
static_cast<GrpcLbClientStats*>(arg)->Unref();
|
||||
}
|
||||
|
||||
private:
|
||||
gpr_atm num_calls_started_ = 0;
|
||||
gpr_atm num_calls_finished_ = 0;
|
||||
gpr_atm num_calls_finished_with_client_failed_to_send_ = 0;
|
||||
gpr_atm num_calls_finished_known_received_ = 0;
|
||||
Mutex drop_count_mu_; // Guards drop_token_counts_.
|
||||
UniquePtr<DroppedCallCounts> drop_token_counts_;
|
||||
};
|
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_GRPCLB_GRPCLB_CLIENT_STATS_H \
|
||||
*/
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user