Go to the documentation of this file.
39 }
while (
ret < 0 && errno == EINTR);
43 ssize_t write_eintr(
int fd,
const void *
in,
size_t len) {
47 }
while (
ret < 0 && errno == EINTR);
51 bool HandbackReady(
SSL *ssl,
int ret) {
57 UniquePtr<SSL_CTX>
ctx =
config->SetupCtx(
nullptr);
62 config->NewSSL(
ctx.get(),
nullptr,
nullptr);
70 if (fcntl(rfd, F_SETFL, O_NONBLOCK) != 0) {
84 fprintf(
stderr,
"Handoff application failed.\n");
91 "SSL_do_handshake", ssl.get(),
92 [&]() ->
int { return SSL_do_handshake(ssl.get()); });
96 char msg = kControlMsgWantRead;
97 if (write_eintr(control, &
msg, 1) != 1 ||
98 read_eintr(control, &
msg, 1) != 1 ||
99 msg != kControlMsgWriteCompleted) {
100 fprintf(
stderr,
"read via proxy failed\n");
109 if (!HandbackReady(ssl.get(),
ret)) {
110 fprintf(
stderr,
"Handshaker: %s\n",
123 fprintf(
stderr,
"Handback serialisation failed.\n");
127 char msg = kControlMsgDone;
128 if (write_eintr(control, &
msg, 1) == -1 ||
138 bssl::Span<const uint8_t>
request,
int control) {
141 CBS client_hello, capabilities;
145 fprintf(
stderr,
"Handshaker: Could not parse hint request\n");
149 UniquePtr<SSL_CTX>
ctx =
config->SetupCtx(
nullptr);
156 std::unique_ptr<TestState>(
new TestState));
162 assert(
config->is_server);
168 fprintf(
stderr,
"Handshaker: SSL_request_handshake_hints failed\n");
175 [&] { return SSL_do_handshake(ssl.get()); });
179 fprintf(
stderr,
"Handshaker: handshake unexpectedly succeeded.\n");
191 char msg = kControlMsgError;
192 if (write_eintr(control, &
msg, 1) == -1) {
198 bssl::ScopedCBB hints;
201 fprintf(
stderr,
"Handshaker: failed to serialize handshake hints\n");
205 char msg = kControlMsgDone;
206 if (write_eintr(control, &
msg, 1) == -1 ||
207 write_eintr(control,
CBB_data(hints.get()),
CBB_len(hints.get())) == -1) {
216 const char msg = kControlMsgError;
217 if (write_eintr(kFdControl, &
msg, 1) != 1) {
225 int main(
int argc,
char **argv) {
226 TestConfig initial_config, resume_config, retry_config;
227 if (!
ParseConfig(argc - 1, argv + 1,
false, &initial_config,
228 &resume_config, &retry_config)) {
229 return SignalError();
233 #if defined(BORINGSSL_UNSAFE_DETERMINISTIC_MODE)
242 #endif // BORINGSSL_UNSAFE_DETERMINISTIC_MODE
246 constexpr
size_t kBufSize = 1024 * 1024;
247 std::vector<uint8_t>
request(kBufSize);
255 if (
config->handshake_hints) {
257 return SignalError();
260 if (!Handshaker(
config, kFdProxyToHandshaker, kFdHandshakerToProxy,
262 return SignalError();
int main(int argc, char **argv)
#define CBS_get_u24_length_prefixed
#define SSL_request_handshake_hints
TestState * GetTestState(const SSL *ssl)
bool Serialize(CBB *out) const
#define SSL_set_accept_state
#define SSL_ERROR_WANT_READ
#define ERR_print_errors_fp
bool SerializeContextState(SSL_CTX *ctx, CBB *cbb)
static std::unique_ptr< TestState > Deserialize(CBS *cbs, SSL_CTX *ctx)
bool ParseConfig(int argc, char **argv, bool is_shim, TestConfig *out_initial, TestConfig *out_resume, TestConfig *out_retry)
#define SSL_ERROR_HANDBACK
#define SSL_error_description
#define SSL_ERROR_HANDSHAKE_HINTS_READY
bool RetryAsync(SSL *ssl, int ret)
#define SSL_serialize_handshake_hints
bool SetTestState(SSL *ssl, std::unique_ptr< TestState > state)
int read(izstream &zs, T *x, Items items)
UniquePtr< SSL_SESSION > ret
bool SSL_apply_handoff(SSL *ssl, Span< const uint8_t > handoff)
#define CBS_get_asn1_element
#define CBS_ASN1_SEQUENCE
bool SSL_serialize_handback(const SSL *ssl, CBB *out)
bool DeserializeContextState(CBS *cbs, SSL_CTX *ctx)
int CheckIdempotentError(const char *name, SSL *ssl, std::function< int()> func)
#define CBB_add_u24_length_prefixed
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:00