Asterisk - The Open Source Telephony Project GIT-master-3a5ffe2
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Modules Pages
Functions | Variables
channelstorage.c File Reference
#include "asterisk.h"
#include "asterisk/options.h"
#include "channelstorage.h"
Include dependency graph for channelstorage.c:

Go to the source code of this file.

Functions

void ast_channelstorage_close (struct ast_channelstorage_instance *storage_instance)
 
const struct ast_channelstorage_driverast_channelstorage_get_driver (const char *driver_name)
 
int ast_channelstorage_init (void)
 
struct ast_channelstorage_instanceast_channelstorage_open (const struct ast_channelstorage_driver *storage_driver, const char *instance_name)
 
int ast_channelstorage_register_driver (const struct ast_channelstorage_driver *driver_type)
 
struct ast_channelchannelstorage_by_exten (struct ast_channelstorage_instance *driver, const char *exten, const char *context)
 
struct ast_channelchannelstorage_by_name_or_uniqueid (struct ast_channelstorage_instance *driver, const char *name)
 
struct ast_channelchannelstorage_by_name_prefix_or_uniqueid (struct ast_channelstorage_instance *driver, const char *name, size_t name_len)
 
struct ast_channelchannelstorage_by_uniqueid (struct ast_channelstorage_instance *driver, const char *uniqueid)
 
int channelstorage_exten_cb (void *obj, void *arg, void *data, int flags)
 
int channelstorage_name_cb (void *obj, void *arg, void *data, int flags)
 
static void channelstorage_shutdown (void)
 
int channelstorage_uniqueid_cb (void *obj, void *arg, void *data, int flags)
 

Variables

struct {
   size_t   current
 
   const struct ast_channelstorage_driver **   elems
 
   size_t   max
 
storage_drivers
 

Function Documentation

◆ ast_channelstorage_close()

void ast_channelstorage_close ( struct ast_channelstorage_instance storage_instance)

Definition at line 65 of file channelstorage.c.

66{
67 CHANNELSTORAGE_API(storage_instance, close);
68};
#define CHANNELSTORAGE_API(_instance, _func,...)

References CHANNELSTORAGE_API, and ast_channelstorage_instance::close.

Referenced by ast_channel_close_storage(), and channels_shutdown().

◆ ast_channelstorage_get_driver()

const struct ast_channelstorage_driver * ast_channelstorage_get_driver ( const char *  driver_name)

Definition at line 34 of file channelstorage.c.

36{
37 int i;
38
39 for (i = 0; i < AST_VECTOR_SIZE(&storage_drivers); i++) {
40 const struct ast_channelstorage_driver *dt =
42 if (strcasecmp(driver_name, dt->driver_name) == 0) {
43 return dt;
44 }
45 }
46 return NULL;
47}
static struct @333 storage_drivers
#define NULL
Definition: resample.c:96
#define AST_VECTOR_SIZE(vec)
Get the number of elements in a vector.
Definition: vector.h:609
#define AST_VECTOR_GET(vec, idx)
Get an element from a vector.
Definition: vector.h:680

References AST_VECTOR_GET, AST_VECTOR_SIZE, ast_channelstorage_driver::driver_name, NULL, and storage_drivers.

Referenced by internal_channel_set_current_storage_driver().

◆ ast_channelstorage_init()

int ast_channelstorage_init ( void  )

Definition at line 513 of file channelstorage.c.

514{
515#ifdef TEST_FRAMEWORK
516 /* Tests run in the reverse order registered */
517 REGISTER_STORAGE_TEST(cpp_map_name_id);
518 AST_TEST_REGISTER(ao2_legacy);
519#endif
521
522 return 0;
523}
int ast_register_cleanup(void(*func)(void))
Register a function to be executed before Asterisk gracefully exits.
Definition: clicompat.c:19
static void channelstorage_shutdown(void)
#define AST_TEST_REGISTER(cb)
Definition: test.h:127

References ast_register_cleanup(), AST_TEST_REGISTER, and channelstorage_shutdown().

Referenced by ast_channels_init().

◆ ast_channelstorage_open()

struct ast_channelstorage_instance * ast_channelstorage_open ( const struct ast_channelstorage_driver storage_driver,
const char *  instance_name 
)

Definition at line 49 of file channelstorage.c.

52{
53 struct ast_channelstorage_instance *storage_instance = NULL;
54
55 storage_instance = storage_driver->open(instance_name);
56 if (!storage_instance) {
57 ast_log(LOG_ERROR, "Failed to open channel storage driver '%s'\n",
58 storage_driver->driver_name);
59 return NULL;
60 }
61
62 return storage_instance;
63};
#define ast_log
Definition: astobj2.c:42
#define LOG_ERROR
struct ast_channelstorage_instance *(* open)(const char *instance_name)

References ast_log, ast_channelstorage_driver::driver_name, LOG_ERROR, NULL, and ast_channelstorage_driver::open.

Referenced by ast_channel_open_storage().

◆ ast_channelstorage_register_driver()

int ast_channelstorage_register_driver ( const struct ast_channelstorage_driver driver_type)

Definition at line 25 of file channelstorage.c.

27{
28 if (storage_drivers.elems == NULL) {
30 }
32}
static struct ast_channelstorage_driver driver_type
#define AST_VECTOR_INIT(vec, size)
Initialize a vector.
Definition: vector.h:113
#define AST_VECTOR_APPEND(vec, elem)
Append an element to a vector, growing the vector if needed.
Definition: vector.h:256

References AST_VECTOR_APPEND, AST_VECTOR_INIT, driver_type, NULL, and storage_drivers.

Referenced by __startup().

◆ channelstorage_by_exten()

struct ast_channel * channelstorage_by_exten ( struct ast_channelstorage_instance driver,
const char *  exten,
const char *  context 
)

Definition at line 87 of file channelstorage.c.

89{
90 char *l_exten = (char *) exten;
91 char *l_context = (char *) context;
92
93 return CHANNELSTORAGE_API(driver, callback, channelstorage_exten_cb, l_context, l_exten, 0);
94}
int channelstorage_exten_cb(void *obj, void *arg, void *data, int flags)
static struct ast_channel * callback(struct ast_channelstorage_instance *driver, ao2_callback_data_fn *cb_fn, void *arg, void *data, int ao2_flags)

References callback(), CHANNELSTORAGE_API, channelstorage_exten_cb(), voicemailpwcheck::context, and ast_channel::exten.

◆ channelstorage_by_name_or_uniqueid()

struct ast_channel * channelstorage_by_name_or_uniqueid ( struct ast_channelstorage_instance driver,
const char *  name 
)

Definition at line 116 of file channelstorage.c.

118{
119 return CHANNELSTORAGE_API(driver, get_by_name_prefix_or_uniqueid, name, 0);
120}
static const char name[]
Definition: format_mp3.c:68

References CHANNELSTORAGE_API, and name.

◆ channelstorage_by_name_prefix_or_uniqueid()

struct ast_channel * channelstorage_by_name_prefix_or_uniqueid ( struct ast_channelstorage_instance driver,
const char *  name,
size_t  name_len 
)

Definition at line 122 of file channelstorage.c.

124{
125 struct ast_channel *chan = NULL;
126
127 chan = CHANNELSTORAGE_API(driver, get_by_name_prefix, name, name_len);
128 if (chan) {
129 return chan;
130 }
131
132 if (name_len == 0) {
133 chan = CHANNELSTORAGE_API(driver, get_by_uniqueid, name);
134 }
135
136 return chan;
137}
static struct ast_channel * get_by_uniqueid(struct ast_channelstorage_instance *driver, const char *uniqueid)
static struct ast_channel * get_by_name_prefix(struct ast_channelstorage_instance *driver, const char *name, size_t name_len)
Main Channel structure associated with a channel.

References CHANNELSTORAGE_API, get_by_name_prefix(), get_by_uniqueid(), name, and NULL.

◆ channelstorage_by_uniqueid()

struct ast_channel * channelstorage_by_uniqueid ( struct ast_channelstorage_instance driver,
const char *  uniqueid 
)

Definition at line 152 of file channelstorage.c.

154{
155 return CHANNELSTORAGE_API(driver, callback, channelstorage_uniqueid_cb, (char *)uniqueid, NULL, 0);
156}
int channelstorage_uniqueid_cb(void *obj, void *arg, void *data, int flags)

References callback(), CHANNELSTORAGE_API, channelstorage_uniqueid_cb(), NULL, and ast_channel::uniqueid.

◆ channelstorage_exten_cb()

int channelstorage_exten_cb ( void *  obj,
void *  arg,
void *  data,
int  flags 
)

Definition at line 70 of file channelstorage.c.

71{
72 struct ast_channel *chan = (struct ast_channel *)obj;
73 const char *context = (const char *)arg;
74 const char *exten = (const char *)data;
75 int ret = 0;
76
77 ao2_lock(chan);
78 if (strcasecmp(ast_channel_context(chan), context) == 0 &&
79 strcasecmp(ast_channel_exten(chan), exten) == 0) {
80 ret = CMP_MATCH | ((flags & OBJ_MULTIPLE) ? 0 : CMP_STOP);
81 }
82 ao2_unlock(chan);
83
84 return ret;
85}
@ CMP_MATCH
Definition: astobj2.h:1027
@ CMP_STOP
Definition: astobj2.h:1028
#define ao2_unlock(a)
Definition: astobj2.h:729
#define ao2_lock(a)
Definition: astobj2.h:717
@ OBJ_MULTIPLE
Definition: astobj2.h:1049
const char * ast_channel_context(const struct ast_channel *chan)
const char * ast_channel_exten(const struct ast_channel *chan)
char exten[AST_MAX_EXTENSION]
const char * data
struct ast_flags flags

References ao2_lock, ao2_unlock, ast_channel_context(), ast_channel_exten(), CMP_MATCH, CMP_STOP, voicemailpwcheck::context, ast_channel::data, ast_channel::exten, ast_channel::flags, and OBJ_MULTIPLE.

Referenced by channelstorage_by_exten().

◆ channelstorage_name_cb()

int channelstorage_name_cb ( void *  obj,
void *  arg,
void *  data,
int  flags 
)

Definition at line 96 of file channelstorage.c.

97{
98 struct ast_channel *chan = obj;
99 const char *name = arg;
100 size_t name_len = *(size_t *) data;
101 int ret = 0;
102
103 if (name_len == 0) {
104 if(strcasecmp(ast_channel_name(chan), name) == 0) {
105 ret = CMP_MATCH | ((flags & OBJ_MULTIPLE) ? 0 : CMP_STOP);
106 }
107 } else {
108 if (strncasecmp(ast_channel_name(chan), name, name_len) == 0) {
109 ret = CMP_MATCH | ((flags & OBJ_MULTIPLE) ? 0 : CMP_STOP);
110 }
111 }
112
113 return ret;
114}
const char * ast_channel_name(const struct ast_channel *chan)

References ast_channel_name(), CMP_MATCH, CMP_STOP, ast_channel::data, ast_channel::flags, name, and OBJ_MULTIPLE.

◆ channelstorage_shutdown()

static void channelstorage_shutdown ( void  )
static

Definition at line 504 of file channelstorage.c.

505{
506#ifdef TEST_FRAMEWORK
507 /* Unregistering a test that wasn't previously registered is safe */
508 AST_TEST_UNREGISTER(cpp_map_name_id);
509 AST_TEST_UNREGISTER(ao2_legacy);
510#endif
511}
#define AST_TEST_UNREGISTER(cb)
Definition: test.h:128

References AST_TEST_UNREGISTER.

Referenced by ast_channelstorage_init().

◆ channelstorage_uniqueid_cb()

int channelstorage_uniqueid_cb ( void *  obj,
void *  arg,
void *  data,
int  flags 
)

Definition at line 139 of file channelstorage.c.

140{
141 struct ast_channel *chan = obj;
142 char *uniqueid = arg;
143 int ret = 0;
144
145 if(strcasecmp(ast_channel_uniqueid(chan), uniqueid) == 0) {
146 ret = CMP_MATCH | CMP_STOP;
147 }
148
149 return ret;
150}
const char * ast_channel_uniqueid(const struct ast_channel *chan)
struct ast_channel_id uniqueid

References ast_channel_uniqueid(), CMP_MATCH, CMP_STOP, and ast_channel::uniqueid.

Referenced by channelstorage_by_uniqueid().

Variable Documentation

◆ current

size_t current

◆ elems

const struct ast_channelstorage_driver* * elems

Definition at line 23 of file channelstorage.c.

◆ max

size_t max

Definition at line 23 of file channelstorage.c.

◆ 

struct { ... } storage_drivers