print_google_default_creds_token.cc
Go to the documentation of this file.
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 #include <stdio.h>
20 #include <string.h>
21 
22 #include <grpc/grpc.h>
23 #include <grpc/grpc_security.h>
24 #include <grpc/slice.h>
25 #include <grpc/support/alloc.h>
26 #include <grpc/support/log.h>
27 #include <grpc/support/sync.h>
28 
33 #include "test/core/util/cmdline.h"
34 
35 typedef struct {
38  bool is_done;
39 
42 } synchronizer;
43 
45  synchronizer* sync = static_cast<synchronizer*>(arg);
46  if (!GRPC_ERROR_IS_NONE(error)) {
47  fprintf(stderr, "Fetching token failed: %s\n",
49  fflush(stderr);
50  } else {
51  char* token;
52  GPR_ASSERT(sync->md_array.size == 1);
53  token = grpc_slice_to_c_string(GRPC_MDVALUE(sync->md_array.md[0]));
54  printf("\nGot token: %s\n\n", token);
55  gpr_free(token);
56  }
57  gpr_mu_lock(sync->mu);
58  sync->is_done = true;
60  "pollset_kick",
62  gpr_mu_unlock(sync->mu);
63 }
64 
65 int main(int argc, char** argv) {
66  int result = 0;
68  synchronizer sync;
69  grpc_channel_credentials* creds = nullptr;
70  const char* service_url = "https://test.foo.google.com/Foo";
72  gpr_cmdline* cl = gpr_cmdline_create("print_google_default_creds_token");
73  grpc_pollset* pollset = nullptr;
75  gpr_cmdline_add_string(cl, "service_url",
76  "Service URL for the token request.", &service_url);
77  gpr_cmdline_parse(cl, argc, argv);
78  memset(&context, 0, sizeof(context));
79  context.service_url = service_url;
80 
81  grpc_init();
82 
84  if (creds == nullptr) {
85  fprintf(stderr, "\nCould not find default credentials.\n\n");
86  fflush(stderr);
87  result = 1;
88  goto end;
89  }
90 
91  memset(&sync, 0, sizeof(sync));
92  pollset = static_cast<grpc_pollset*>(gpr_zalloc(grpc_pollset_size()));
93  grpc_pollset_init(pollset, &sync.mu);
95  sync.is_done = false;
97  grpc_schedule_on_exec_ctx);
98 
100  if (reinterpret_cast<grpc_composite_channel_credentials*>(creds)
101  ->mutable_call_creds()
102  ->get_request_metadata(&sync.pops, context, &sync.md_array,
103  &sync.on_request_metadata, &error)) {
104  // Synchronous response. Invoke callback directly.
105  on_metadata_response(&sync, error);
107  }
108 
109  gpr_mu_lock(sync.mu);
110  while (!sync.is_done) {
111  grpc_pollset_worker* worker = nullptr;
112  if (!GRPC_LOG_IF_ERROR(
113  "pollset_work",
116  sync.is_done = true;
117  gpr_mu_unlock(sync.mu);
119  gpr_mu_lock(sync.mu);
120  }
121  gpr_mu_unlock(sync.mu);
122 
125 
126 end:
128  grpc_shutdown();
129  return result;
130 }
grpc_pollset_worker
struct grpc_pollset_worker grpc_pollset_worker
Definition: pollset.h:39
GRPC_CLOSURE_INIT
#define GRPC_CLOSURE_INIT(closure, cb, cb_arg, scheduler)
Definition: closure.h:115
_gevent_test_main.result
result
Definition: _gevent_test_main.py:96
grpc_pollset_size
size_t grpc_pollset_size(void)
Definition: pollset.cc:56
gpr_mu_unlock
GPRAPI void gpr_mu_unlock(gpr_mu *mu)
grpc_polling_entity_pollset
grpc_pollset * grpc_polling_entity_pollset(grpc_polling_entity *pollent)
Definition: polling_entity.cc:42
GRPC_ERROR_NONE
#define GRPC_ERROR_NONE
Definition: error.h:234
log.h
memset
return memset(p, 0, total)
slice.h
string.h
printf
_Use_decl_annotations_ int __cdecl printf(const char *_Format,...)
Definition: cs_driver.c:91
gpr_free
GPRAPI void gpr_free(void *ptr)
Definition: alloc.cc:51
gpr_cmdline_destroy
void gpr_cmdline_destroy(gpr_cmdline *cl)
Definition: cmdline.cc:79
error
grpc_error_handle error
Definition: retry_filter.cc:499
grpc_composite_channel_credentials
Definition: composite_credentials.h:47
grpc_pollset_work
grpc_error_handle grpc_pollset_work(grpc_pollset *pollset, grpc_pollset_worker **worker, grpc_core::Timestamp deadline)
Definition: pollset.cc:45
GRPC_LOG_IF_ERROR
#define GRPC_LOG_IF_ERROR(what, error)
Definition: error.h:398
grpc_security.h
service_url
std::string service_url
Definition: call_creds_util.cc:39
credentials.h
grpc_pollset_init
void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu)
Definition: pollset.cc:33
python_utils.port_server.stderr
stderr
Definition: port_server.py:51
gpr_zalloc
GPRAPI void * gpr_zalloc(size_t size)
Definition: alloc.cc:40
GPR_ASSERT
#define GPR_ASSERT(x)
Definition: include/grpc/impl/codegen/log.h:94
end
char * end
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1008
gen_stats_data.c_str
def c_str(s, encoding='ascii')
Definition: gen_stats_data.py:38
grpc_core::ExecCtx::Flush
bool Flush()
Definition: exec_ctx.cc:69
worker
Definition: worker.py:1
grpc_polling_entity_create_from_pollset
grpc_polling_entity grpc_polling_entity_create_from_pollset(grpc_pollset *pollset)
Definition: polling_entity.cc:34
gpr_cmdline_add_string
void gpr_cmdline_add_string(gpr_cmdline *cl, const char *name, const char *help, const char **value)
Definition: cmdline.cc:115
grpc.h
arg
Definition: cmdline.cc:40
synchronizer::is_done
bool is_done
Definition: print_google_default_creds_token.cc:38
gpr_mu_lock
GPRAPI void gpr_mu_lock(gpr_mu *mu)
grpc_polling_entity
Definition: polling_entity.h:38
grpc_pollset_kick
grpc_error_handle grpc_pollset_kick(grpc_pollset *pollset, grpc_pollset_worker *specific_worker)
Definition: pollset.cc:51
synchronizer::md_array
grpc_core::CredentialsMetadataArray md_array
Definition: print_google_default_creds_token.cc:40
grpc_core::ExecCtx
Definition: exec_ctx.h:97
synchronizer::mu
gpr_mu * mu
Definition: print_google_default_creds_token.cc:36
grpc_slice_to_c_string
GPRAPI char * grpc_slice_to_c_string(grpc_slice s)
Definition: slice/slice.cc:35
grpc_channel_credentials_release
GRPCAPI void grpc_channel_credentials_release(grpc_channel_credentials *creds)
Definition: credentials.cc:36
gpr_mu
pthread_mutex_t gpr_mu
Definition: impl/codegen/sync_posix.h:47
exec_ctx
grpc_core::ExecCtx exec_ctx
Definition: end2end_binder_transport_test.cc:75
grpc_error_std_string
std::string grpc_error_std_string(grpc_error_handle error)
Definition: error.cc:944
composite_credentials.h
synchronizer
Definition: print_google_default_creds_token.cc:35
alloc.h
cmdline.h
gpr_cmdline_create
gpr_cmdline * gpr_cmdline_create(const char *description)
Definition: cmdline.cc:66
arg
struct arg arg
GRPC_ERROR_UNREF
#define GRPC_ERROR_UNREF(err)
Definition: error.h:262
grpc_core::CredentialsMetadataArray
std::vector< std::pair< Slice, Slice > > CredentialsMetadataArray
Definition: src/core/lib/security/credentials/credentials.h:181
synchronizer::on_request_metadata
grpc_closure on_request_metadata
Definition: print_google_default_creds_token.cc:41
gpr_cmdline
Definition: cmdline.cc:48
on_metadata_response
static void on_metadata_response(void *arg, grpc_error_handle error)
Definition: print_google_default_creds_token.cc:44
context
grpc::ClientContext context
Definition: istio_echo_server_lib.cc:61
grpc_google_default_credentials_create
GRPCAPI grpc_channel_credentials * grpc_google_default_credentials_create(grpc_call_credentials *call_credentials)
Definition: google_default_credentials.cc:429
grpc_core::Timestamp::InfFuture
static constexpr Timestamp InfFuture()
Definition: src/core/lib/gprpp/time.h:79
synchronizer::pops
grpc_polling_entity pops
Definition: print_google_default_creds_token.cc:37
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
grpc_error
Definition: error_internal.h:42
main
int main(int argc, char **argv)
Definition: print_google_default_creds_token.cc:65
grpc_auth_metadata_context
Definition: grpc_security.h:391
grpc_pollset
Definition: bm_cq_multiple_threads.cc:37
sync.h
grpc_closure
Definition: closure.h:56
grpc_shutdown
GRPCAPI void grpc_shutdown(void)
Definition: init.cc:209
grpc_channel_credentials
Definition: src/core/lib/security/credentials/credentials.h:96
grpc_core::ExecCtx::Get
static ExecCtx * Get()
Definition: exec_ctx.h:205
slice_string_helpers.h
gpr_cmdline_parse
int gpr_cmdline_parse(gpr_cmdline *cl, int argc, char **argv)
Definition: cmdline.cc:309
GRPC_ERROR_IS_NONE
#define GRPC_ERROR_IS_NONE(err)
Definition: error.h:241


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:45