1 /* 2 * 3 * Copyright 2018 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 <grpc/support/port_platform.h> 20 21 #include "src/core/tsi/alts/handshaker/alts_tsi_event.h" 22 23 #include <grpc/grpc.h> 24 #include <grpc/support/alloc.h> 25 #include <grpc/support/log.h> 26 27 #include "src/core/lib/slice/slice_internal.h" 28 29 tsi_result alts_tsi_event_create(alts_tsi_handshaker* handshaker, 30 tsi_handshaker_on_next_done_cb cb, 31 void* user_data, 32 grpc_alts_credentials_options* options, 33 grpc_slice target_name, 34 alts_tsi_event** event) { 35 if (event == nullptr || handshaker == nullptr || cb == nullptr) { 36 gpr_log(GPR_ERROR, "Invalid arguments to alts_tsi_event_create()"); 37 return TSI_INVALID_ARGUMENT; 38 } 39 alts_tsi_event* e = static_cast<alts_tsi_event*>(gpr_zalloc(sizeof(*e))); 40 e->handshaker = handshaker; 41 e->cb = cb; 42 e->user_data = user_data; 43 e->options = grpc_alts_credentials_options_copy(options); 44 e->target_name = grpc_slice_copy(target_name); 45 grpc_metadata_array_init(&e->initial_metadata); 46 grpc_metadata_array_init(&e->trailing_metadata); 47 *event = e; 48 return TSI_OK; 49 } 50 51 void alts_tsi_event_dispatch_to_handshaker(alts_tsi_event* event, bool is_ok) { 52 if (event == nullptr) { 53 gpr_log( 54 GPR_ERROR, 55 "ALTS TSI event is nullptr in alts_tsi_event_dispatch_to_handshaker()"); 56 return; 57 } 58 alts_tsi_handshaker_handle_response(event->handshaker, event->recv_buffer, 59 event->status, &event->details, event->cb, 60 event->user_data, is_ok); 61 } 62 63 void alts_tsi_event_destroy(alts_tsi_event* event) { 64 if (event == nullptr) { 65 return; 66 } 67 grpc_byte_buffer_destroy(event->send_buffer); 68 grpc_byte_buffer_destroy(event->recv_buffer); 69 grpc_metadata_array_destroy(&event->initial_metadata); 70 grpc_metadata_array_destroy(&event->trailing_metadata); 71 grpc_slice_unref_internal(event->details); 72 grpc_slice_unref_internal(event->target_name); 73 grpc_alts_credentials_options_destroy(event->options); 74 gpr_free(event); 75 } 76