Asterisk - The Open Source Telephony Project
18.5.0
|
#include "asterisk.h"
#include <openssl/evp.h>
#include "asterisk/module.h"
#include "asterisk/sorcery.h"
#include "asterisk/time.h"
#include "asterisk/json.h"
#include "asterisk/astdb.h"
#include "asterisk/paths.h"
#include "asterisk/conversions.h"
#include "asterisk/pbx.h"
#include "asterisk/global_datastores.h"
#include "asterisk/app.h"
#include "asterisk/test.h"
#include "asterisk/res_stir_shaken.h"
#include "res_stir_shaken/stir_shaken.h"
#include "res_stir_shaken/general.h"
#include "res_stir_shaken/store.h"
#include "res_stir_shaken/certificate.h"
#include "res_stir_shaken/curl.h"
Go to the source code of this file.
Data Structures | |
struct | ast_stir_shaken_payload |
struct | stir_shaken_datastore |
Macros | |
#define | AST_DB_FAMILY "STIR_SHAKEN" |
#define | EXPIRATION_BUFFER 15 |
#define | MAX_PATH_LEN 256 |
#define | STIR_SHAKEN_DIR_NAME "stir_shaken" |
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
static void | add_public_key_to_astdb (const char *public_cert_url, const char *filepath) |
Add the public key details and file path to AstDB. More... | |
struct ast_module * | AST_MODULE_SELF_SYM (void) |
int | ast_stir_shaken_add_verification (struct ast_channel *chan, const char *identity, const char *attestation, enum ast_stir_shaken_verification_result result) |
Add a STIR/SHAKEN verification result to a channel. More... | |
unsigned int | ast_stir_shaken_get_signature_timeout (void) |
Retrieve the value for 'signature_timeout' from 'general' config object. More... | |
void | ast_stir_shaken_payload_free (struct ast_stir_shaken_payload *payload) |
Free a STIR/SHAKEN payload. More... | |
char * | ast_stir_shaken_payload_get_public_cert_url (const struct ast_stir_shaken_payload *payload) |
Retrieve the value for 'public_cert_url' from an ast_stir_shaken_payload. More... | |
unsigned char * | ast_stir_shaken_payload_get_signature (const struct ast_stir_shaken_payload *payload) |
Retrieve the value for 'signature' from an ast_stir_shaken_payload. More... | |
struct ast_stir_shaken_payload * | ast_stir_shaken_sign (struct ast_json *json) |
Sign a JSON STIR/SHAKEN payload. More... | |
struct ast_sorcery * | ast_stir_shaken_sorcery (void) |
Retrieve the stir/shaken sorcery context. More... | |
struct ast_stir_shaken_payload * | ast_stir_shaken_verify (const char *header, const char *payload, const char *signature, const char *algorithm, const char *public_cert_url) |
Verify a JSON STIR/SHAKEN payload. More... | |
AST_TEST_DEFINE (test_stir_shaken_sign) | |
AST_TEST_DEFINE (test_stir_shaken_verify) | |
static char * | curl_and_check_expiration (const char *public_cert_url, const char *path, int *curl) |
Downloads the public cert from public_cert_url. If curl is non-zero, that signals CURL has already been run, and we should bail here. The entry is added to AstDB as well. More... | |
static char * | get_path_to_public_key (const char *public_cert_url) |
Returns the path to the downloaded file for the provided URL. More... | |
static int | load_module (void) |
static int | public_key_is_expired (const char *public_cert_url) |
Check to see if the public key is expired. More... | |
static int | reload_module (void) |
static void | remove_public_key_from_astdb (const char *public_cert_url) |
Remove the public key details and associated information from AstDB. More... | |
static char * | run_curl (const char *public_cert_url, const char *path) |
CURL the file located at public_cert_url to the specified path. More... | |
static void | set_public_key_expiration (const char *public_cert_url, const struct curl_cb_data *data) |
Sets the expiration for the public key based on the provided fields. If Cache-Control is present, use it. Otherwise, use Expires. More... | |
static int | stir_shaken_add_attest (struct ast_json *json, const char *attest) |
Adds the 'attest' field to the JWT. More... | |
static int | stir_shaken_add_iat (struct ast_json *json) |
Adds the 'iat' field to the JWT. More... | |
static int | stir_shaken_add_origid (struct ast_json *json) |
Adds the 'origid' field to the JWT. More... | |
static int | stir_shaken_add_x5u (struct ast_json *json, const char *x5u) |
Adds the 'x5u' (public key URL) field to the JWT. More... | |
static void | stir_shaken_datastore_destroy_cb (void *data) |
The callback to destroy a stir_shaken_datastore. More... | |
static void | stir_shaken_datastore_free (struct stir_shaken_datastore *datastore) |
Frees a stir_shaken_datastore structure. More... | |
static int | stir_shaken_read (struct ast_channel *chan, const char *function, char *data, char *buf, size_t len) |
Retrieves STIR/SHAKEN verification information for the channel via dialplan. Examples: More... | |
static unsigned char * | stir_shaken_sign (char *json_str, EVP_PKEY *private_key) |
Signs the payload and returns the signature. More... | |
static const char * | stir_shaken_verification_result_to_string (enum ast_stir_shaken_verification_result result) |
Convert an ast_stir_shaken_verification_result to string representation. More... | |
static struct ast_stir_shaken_payload * | stir_shaken_verify_json (struct ast_json *json) |
Verifies the necessary contents are in the JSON and returns a ast_stir_shaken_payload with the extracted values. More... | |
static int | stir_shaken_verify_signature (const char *msg, const char *signature, EVP_PKEY *public_key) |
Verifies the signature using a public key. More... | |
static void | test_stir_shaken_add_fake_astdb_entry (const char *public_cert_url, const char *file_path) |
static int | test_stir_shaken_write_temp_key (char *file_path, int private) |
Create a private or public key certificate. More... | |
static int | unload_module (void) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER , .description = "STIR/SHAKEN Module for Asterisk" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .reload = reload_module, .load_pri = AST_MODPRI_CHANNEL_DEPEND - 1, .requires = "res_curl", } |
static const struct ast_module_info * | ast_module_info = &__mod_info |
static const struct ast_datastore_info | stir_shaken_datastore_info |
static struct ast_custom_function | stir_shaken_function |
static struct ast_sorcery * | stir_shaken_sorcery |
#define AST_DB_FAMILY "STIR_SHAKEN" |
Definition at line 147 of file res_stir_shaken.c.
Referenced by add_public_key_to_astdb(), and remove_public_key_from_astdb().
#define EXPIRATION_BUFFER 15 |
Definition at line 158 of file res_stir_shaken.c.
Referenced by set_public_key_expiration().
#define MAX_PATH_LEN 256 |
Definition at line 153 of file res_stir_shaken.c.
Referenced by get_path_to_public_key(), and remove_public_key_from_astdb().
#define STIR_SHAKEN_DIR_NAME "stir_shaken" |
Definition at line 150 of file res_stir_shaken.c.
Referenced by ast_stir_shaken_verify().
|
static |
Definition at line 1677 of file res_stir_shaken.c.
|
static |
Definition at line 1677 of file res_stir_shaken.c.
|
static |
Add the public key details and file path to AstDB.
public_cert_url | The public cert URL |
filepath | The path to the file |
Definition at line 456 of file res_stir_shaken.c.
References AST_DB_FAMILY, ast_db_put(), and ast_sha1_hash().
Referenced by ast_stir_shaken_verify(), curl_and_check_expiration(), and test_stir_shaken_add_fake_astdb_entry().
struct ast_module* AST_MODULE_SELF_SYM | ( | void | ) |
Definition at line 1677 of file res_stir_shaken.c.
int ast_stir_shaken_add_verification | ( | struct ast_channel * | chan, |
const char * | identity, | ||
const char * | attestation, | ||
enum ast_stir_shaken_verification_result | result | ||
) |
Add a STIR/SHAKEN verification result to a channel.
chan | The channel |
identity | The identity |
attestation | The attestation |
result | The verification result |
-1 | on failure |
0 | on success |
Definition at line 277 of file res_stir_shaken.c.
References ast_calloc, ast_channel_datastore_add(), ast_channel_lock, ast_channel_name(), ast_channel_unlock, ast_datastore_alloc, ast_log, ast_strdup, stir_shaken_datastore::attestation, ast_datastore::data, stir_shaken_datastore::identity, LOG_ERROR, NULL, result, stir_shaken_datastore_free(), and stir_shaken_datastore::verify_result.
Referenced by stir_shaken_incoming_request().
unsigned int ast_stir_shaken_get_signature_timeout | ( | void | ) |
Retrieve the value for 'signature_timeout' from 'general' config object.
The | signature timeout |
Definition at line 203 of file res_stir_shaken.c.
References ast_stir_shaken_signature_timeout(), and stir_shaken_general_get().
Referenced by compare_timestamp().
void ast_stir_shaken_payload_free | ( | struct ast_stir_shaken_payload * | payload | ) |
Free a STIR/SHAKEN payload.
Definition at line 178 of file res_stir_shaken.c.
References ast_stir_shaken_payload::algorithm, ast_free, ast_json_unref(), ast_stir_shaken_payload::header, ast_stir_shaken_payload::payload, ast_stir_shaken_payload::public_cert_url, and ast_stir_shaken_payload::signature.
Referenced by add_identity_header(), ast_stir_shaken_sign(), ast_stir_shaken_verify(), AST_TEST_DEFINE(), stir_shaken_incoming_request(), and stir_shaken_verify_json().
char* ast_stir_shaken_payload_get_public_cert_url | ( | const struct ast_stir_shaken_payload * | payload | ) |
Retrieve the value for 'public_cert_url' from an ast_stir_shaken_payload.
payload | The payload |
The | public key URL |
Definition at line 198 of file res_stir_shaken.c.
References NULL, and ast_stir_shaken_payload::public_cert_url.
Referenced by add_identity_header().
unsigned char* ast_stir_shaken_payload_get_signature | ( | const struct ast_stir_shaken_payload * | payload | ) |
Retrieve the value for 'signature' from an ast_stir_shaken_payload.
payload | The payload |
The | signature |
Definition at line 193 of file res_stir_shaken.c.
References NULL, and ast_stir_shaken_payload::signature.
Referenced by add_identity_header().
struct ast_stir_shaken_payload* ast_stir_shaken_sign | ( | struct ast_json * | json | ) |
Sign a JSON STIR/SHAKEN payload.
json | The JWT to sign |
ast_stir_shaken_payload | on success |
NULL | on failure |
Definition at line 1046 of file res_stir_shaken.c.
References ao2_cleanup, ast_calloc, ast_free, ast_json_dump_string, ast_json_object_get(), ast_json_string_get(), ast_log, ast_stir_shaken_payload_free(), ast_strdup, cleanup(), ast_stir_shaken_payload::header, LOG_ERROR, NULL, ast_stir_shaken_payload::payload, ast_stir_shaken_payload::public_cert_url, ast_stir_shaken_payload::signature, stir_shaken_add_attest(), stir_shaken_add_iat(), stir_shaken_add_origid(), stir_shaken_add_x5u(), stir_shaken_certificate_get_attestation(), stir_shaken_certificate_get_by_caller_id_number(), stir_shaken_certificate_get_private_key(), stir_shaken_certificate_get_public_cert_url(), stir_shaken_sign(), and stir_shaken_verify_json().
Referenced by add_identity_header(), and AST_TEST_DEFINE().
struct ast_sorcery* ast_stir_shaken_sorcery | ( | void | ) |
Retrieve the stir/shaken sorcery context.
The | stir/shaken sorcery context |
Definition at line 173 of file res_stir_shaken.c.
References stir_shaken_sorcery.
Referenced by load_module(), stir_shaken_certificate_get(), stir_shaken_certificate_get_all(), stir_shaken_certificate_get_by_caller_id_number(), stir_shaken_certificate_load(), stir_shaken_cli_show(), stir_shaken_general_get(), stir_shaken_general_load(), stir_shaken_general_unload(), stir_shaken_store_get(), stir_shaken_store_get_all(), stir_shaken_store_load(), test_stir_shaken_cleanup_cert(), and test_stir_shaken_create_cert().
struct ast_stir_shaken_payload* ast_stir_shaken_verify | ( | const char * | header, |
const char * | payload, | ||
const char * | signature, | ||
const char * | algorithm, | ||
const char * | public_cert_url | ||
) |
Verify a JSON STIR/SHAKEN payload.
header | The payload header |
payload | The payload section |
signature | The payload signature |
algorithm | The signature algorithm |
public_cert_url | The public key URL |
ast_stir_shaken_payload | on success |
NULL | on failure |
Definition at line 620 of file res_stir_shaken.c.
References add_public_key_to_astdb(), ast_stir_shaken_payload::algorithm, ast_asprintf, ast_calloc, ast_config_AST_DATA_DIR, ast_debug, ast_free, ast_json_load_string(), ast_log, ast_stir_shaken_payload_free(), ast_strdup, ast_strlen_zero, curl_and_check_expiration(), get_path_to_public_key(), ast_stir_shaken_payload::header, LOG_ERROR, NULL, ast_stir_shaken_payload::payload, ast_stir_shaken_payload::public_cert_url, public_key_is_expired(), RAII_VAR, remove_public_key_from_astdb(), run_curl(), ast_stir_shaken_payload::signature, STIR_SHAKEN_DIR_NAME, stir_shaken_read_key(), and stir_shaken_verify_signature().
Referenced by AST_TEST_DEFINE(), and stir_shaken_incoming_request().
AST_TEST_DEFINE | ( | test_stir_shaken_sign | ) |
Definition at line 1333 of file res_stir_shaken.c.
References ast_json_free(), ast_json_pack(), ast_stir_shaken_payload_free(), ast_stir_shaken_sign(), AST_TEST_FAIL, AST_TEST_NOT_RUN, AST_TEST_PASS, ast_test_status_update, sip_to_pjsip::info(), NULL, ast_stir_shaken_payload::payload, RAII_VAR, STIR_SHAKEN_ENCRYPTION_ALGORITHM, STIR_SHAKEN_PPT, STIR_SHAKEN_TYPE, TEST_EXECUTE, TEST_INIT, test_stir_shaken_cleanup_cert(), test_stir_shaken_create_cert(), and test_stir_shaken_write_temp_key().
AST_TEST_DEFINE | ( | test_stir_shaken_verify | ) |
Definition at line 1491 of file res_stir_shaken.c.
References ast_json_dump_string, ast_json_free(), ast_json_object_get(), ast_json_pack(), ast_stir_shaken_payload_free(), ast_stir_shaken_sign(), ast_stir_shaken_verify(), AST_TEST_FAIL, AST_TEST_NOT_RUN, AST_TEST_PASS, ast_test_status_update, ast_stir_shaken_payload::header, sip_to_pjsip::info(), NULL, ast_stir_shaken_payload::payload, ast_stir_shaken_payload::public_cert_url, RAII_VAR, remove_public_key_from_astdb(), STIR_SHAKEN_ENCRYPTION_ALGORITHM, STIR_SHAKEN_PPT, STIR_SHAKEN_TYPE, TEST_EXECUTE, TEST_INIT, test_stir_shaken_add_fake_astdb_entry(), test_stir_shaken_cleanup_cert(), test_stir_shaken_create_cert(), and test_stir_shaken_write_temp_key().
|
static |
Downloads the public cert from public_cert_url. If curl is non-zero, that signals CURL has already been run, and we should bail here. The entry is added to AstDB as well.
public_cert_url | The public cert URL |
path | The path to download the file to |
curl | Flag signaling if we have run CURL or not |
NULL | on failure |
full | path filename on success |
Definition at line 594 of file res_stir_shaken.c.
References add_public_key_to_astdb(), ast_free, ast_log, LOG_ERROR, NULL, public_key_is_expired(), and run_curl().
Referenced by ast_stir_shaken_verify().
|
static |
Returns the path to the downloaded file for the provided URL.
public_cert_url | The public cert URL |
Empty | string if not present in AstDB |
The | file path if present in AstDB |
Definition at line 434 of file res_stir_shaken.c.
References ast_db_get(), ast_sha1_hash(), ast_strdup, ast_strlen_zero, and MAX_PATH_LEN.
Referenced by ast_stir_shaken_verify().
|
static |
Definition at line 1636 of file res_stir_shaken.c.
References ast_custom_function_register, ast_log, AST_MODFLAG_GLOBAL_SYMBOLS, AST_MODFLAG_LOAD_ORDER, AST_MODPRI_CHANNEL_DEPEND, AST_MODULE_INFO(), AST_MODULE_LOAD_DECLINE, AST_MODULE_SUPPORT_CORE, ast_sorcery_load(), ast_sorcery_open, ast_stir_shaken_sorcery(), AST_TEST_REGISTER, ASTERISK_GPL_KEY, LOG_ERROR, reload(), reload_module(), stir_shaken_certificate_load(), stir_shaken_general_load(), stir_shaken_store_load(), and unload_module().
|
static |
Check to see if the public key is expired.
public_cert_url | The public cert URL |
1 | if expired |
0 | if not expired |
Definition at line 405 of file res_stir_shaken.c.
References ast_db_get(), ast_sha1_hash(), ast_str_to_ulong(), ast_strlen_zero, ast_tvcmp(), and ast_tvnow().
Referenced by ast_stir_shaken_verify(), and curl_and_check_expiration().
|
static |
Definition at line 1608 of file res_stir_shaken.c.
References ast_sorcery_reload().
Referenced by load_module().
|
static |
Remove the public key details and associated information from AstDB.
public_cert_url | The public cert URL |
Definition at line 471 of file res_stir_shaken.c.
References ast_db_del(), ast_db_deltree(), AST_DB_FAMILY, ast_db_get(), ast_sha1_hash(), MAX_PATH_LEN, and NULL.
Referenced by ast_stir_shaken_verify(), and AST_TEST_DEFINE().
|
static |
CURL the file located at public_cert_url to the specified path.
public_cert_url | The public cert URL |
path | The path to download the file to |
NULL | on failure |
full | path filename on success |
Definition at line 557 of file res_stir_shaken.c.
References ast_log, curl_cb_data_create(), curl_cb_data_free(), curl_public_key(), LOG_ERROR, NULL, and set_public_key_expiration().
Referenced by ast_stir_shaken_verify(), and curl_and_check_expiration().
|
static |
Sets the expiration for the public key based on the provided fields. If Cache-Control is present, use it. Otherwise, use Expires.
public_cert_url | The URL to the public certificate |
data | The CURL callback data containing expiration data |
Definition at line 352 of file res_stir_shaken.c.
References ast_db_put(), ast_sha1_hash(), ast_str_to_uint(), ast_strlen_zero, ast_tvnow(), curl_cb_data_get_cache_control(), curl_cb_data_get_expires(), EXPIRATION_BUFFER, and value.
Referenced by run_curl().
|
static |
Adds the 'attest' field to the JWT.
json | The JWT |
attest | The value to set attest to |
0 | on success |
-1 | on failure |
Definition at line 990 of file res_stir_shaken.c.
References ast_json_object_get(), ast_json_object_set(), ast_json_string_create(), and value.
Referenced by ast_stir_shaken_sign().
|
static |
Adds the 'iat' field to the JWT.
json | The JWT |
0 | on success |
-1 | on failure |
Definition at line 1033 of file res_stir_shaken.c.
References ast_json_integer_create(), ast_json_object_get(), ast_json_object_set(), ast_tvnow(), and value.
Referenced by ast_stir_shaken_sign().
|
static |
Adds the 'origid' field to the JWT.
json | The JWT |
0 | on success |
-1 | on failure |
Definition at line 1010 of file res_stir_shaken.c.
References ast_json_object_get(), ast_json_object_set(), ast_json_string_create(), ast_uuid_generate_str(), AST_UUID_STR_LEN, and value.
Referenced by ast_stir_shaken_sign().
|
static |
Adds the 'x5u' (public key URL) field to the JWT.
json | The JWT |
x5u | The public key URL |
0 | on success |
-1 | on failure |
Definition at line 969 of file res_stir_shaken.c.
References ast_json_object_get(), ast_json_object_set(), ast_json_string_create(), and value.
Referenced by ast_stir_shaken_sign().
|
static |
The callback to destroy a stir_shaken_datastore.
data | The stir_shaken_datastore |
Definition at line 265 of file res_stir_shaken.c.
References stir_shaken_datastore_free().
|
static |
Frees a stir_shaken_datastore structure.
datastore | The datastore to free |
Definition at line 249 of file res_stir_shaken.c.
References ast_free, stir_shaken_datastore::attestation, and stir_shaken_datastore::identity.
Referenced by ast_stir_shaken_add_verification(), and stir_shaken_datastore_destroy_cb().
|
static |
Retrieves STIR/SHAKEN verification information for the channel via dialplan. Examples:
STIR_SHAKEN(count) STIR_SHAKEN(0, identity) STIR_SHAKEN(1, attestation) STIR_SHAKEN(27, verify_result)
-1 | on failure |
0 | on success |
Definition at line 1145 of file res_stir_shaken.c.
References args, AST_APP_ARG, ast_channel_datastores(), ast_channel_lock, ast_channel_unlock, ast_copy_string(), AST_DECLARE_APP_ARGS, AST_LIST_TRAVERSE, ast_log, AST_STANDARD_APP_ARGS, ast_str_to_uint(), ast_strdupa, ast_strip(), ast_strlen_zero, stir_shaken_datastore::attestation, ast_datastore::data, first, stir_shaken_datastore::identity, ast_datastore::info, LOG_ERROR, LOG_WARNING, parse(), stir_shaken_verification_result_to_string(), and stir_shaken_datastore::verify_result.
|
static |
Signs the payload and returns the signature.
json_str | The string representation of the JSON |
private_key | The private key used to sign the payload |
signature | on success |
NULL | on failure |
Definition at line 892 of file res_stir_shaken.c.
References ast_base64url_encode(), ast_calloc, ast_free, ast_log, cleanup(), LOG_ERROR, NULL, and ast_stir_shaken_payload::signature.
Referenced by ast_stir_shaken_sign().
|
static |
Convert an ast_stir_shaken_verification_result to string representation.
result | The result to convert |
empty | string if not a valid enum value |
string | representation of result otherwise |
Definition at line 216 of file res_stir_shaken.c.
References AST_STIR_SHAKEN_VERIFY_MISMATCH, AST_STIR_SHAKEN_VERIFY_NOT_PRESENT, AST_STIR_SHAKEN_VERIFY_PASSED, and AST_STIR_SHAKEN_VERIFY_SIGNATURE_FAILED.
Referenced by stir_shaken_read().
|
static |
Verifies the necessary contents are in the JSON and returns a ast_stir_shaken_payload with the extracted values.
json | The JSON to verify |
Definition at line 788 of file res_stir_shaken.c.
References ast_stir_shaken_payload::algorithm, ast_calloc, ast_json_deep_copy(), ast_json_object_get(), ast_json_string_get(), ast_log, ast_stir_shaken_payload_free(), ast_strdup, ast_strlen_zero, cleanup(), ast_stir_shaken_payload::header, LOG_ERROR, NULL, ast_stir_shaken_payload::payload, STIR_SHAKEN_ENCRYPTION_ALGORITHM, STIR_SHAKEN_PPT, and STIR_SHAKEN_TYPE.
Referenced by ast_stir_shaken_sign().
|
static |
Verifies the signature using a public key.
msg | The payload |
signature | The signature to verify |
public_key | The public key used for verification |
-1 | on failure |
0 | on success |
Definition at line 498 of file res_stir_shaken.c.
References ast_base64url_decode(), ast_calloc, ast_free, ast_log, LOG_ERROR, and NULL.
Referenced by ast_stir_shaken_verify().
|
static |
Definition at line 1260 of file res_stir_shaken.c.
References add_public_key_to_astdb(), ast_db_put(), ast_sha1_hash(), and ast_tvnow().
Referenced by AST_TEST_DEFINE().
|
static |
Create a private or public key certificate.
file_path | The path of the file to create |
private | Set to 0 if public, 1 if private |
-1 | on failure |
0 | on success |
Definition at line 1282 of file res_stir_shaken.c.
References ast_log, errno, make_ari_stubs::file, LOG_ERROR, and type.
Referenced by AST_TEST_DEFINE().
|
static |
Definition at line 1617 of file res_stir_shaken.c.
References ast_custom_function_unregister(), ast_sorcery_unref, AST_TEST_UNREGISTER, NULL, stir_shaken_certificate_unload(), stir_shaken_general_unload(), and stir_shaken_store_unload().
Referenced by load_module().
|
static |
Definition at line 1677 of file res_stir_shaken.c.
|
static |
Definition at line 1677 of file res_stir_shaken.c.
|
static |
Definition at line 272 of file res_stir_shaken.c.
|
static |
Definition at line 1253 of file res_stir_shaken.c.
|
static |
Definition at line 144 of file res_stir_shaken.c.
Referenced by ast_stir_shaken_sorcery().