Asterisk - The Open Source Telephony Project GIT-master-c7a8271
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Modules Pages
channelstorage.h
Go to the documentation of this file.
1/*
2 * Asterisk -- An open source telephony toolkit.
3 *
4 * Copyright (C) 2024, Sangoma Technologies Corporation
5 *
6 * George Joseph <gjoseph@sangoma.com>
7 *
8 * See http://www.asterisk.org for more information about
9 * the Asterisk project. Please do not directly contact
10 * any of the maintainers of this project for assistance;
11 * the project provides a web site, mailing lists and IRC
12 * channels for your use.
13 *
14 * This program is free software, distributed under the terms of
15 * the GNU General Public License Version 2. See the LICENSE file
16 * at the top of the source tree.
17 */
18
19#ifndef CHANNELSTORAGE_H_
20#define CHANNELSTORAGE_H_
21
22#if defined(__cplusplus) || defined(c_plusplus)
23extern "C" {
24#endif
25
26#include "asterisk.h"
27#include "asterisk/channel.h"
29
30#define AST_CHANNELSTORAGE_DEFAULT_TYPE "ao2_legacy"
31
33 const char *driver_name;
34 struct ast_channelstorage_instance* (*open)(const char *instance_name);
35};
36
38 const struct ast_channelstorage_driver *driver_name);
39
41 const char *driver_name);
42
44
48 void (*close)(struct ast_channelstorage_instance *driver);
49 int (*insert)(struct ast_channelstorage_instance *driver, struct ast_channel *chan, int flags, int lock);
50 int (*remove)(struct ast_channelstorage_instance *driver, struct ast_channel *chan, int lock);
51 void (*rdlock)(struct ast_channelstorage_instance *driver);
52 void (*wrlock)(struct ast_channelstorage_instance *driver);
53 void (*unlock)(struct ast_channelstorage_instance *driver);
55 struct ast_channel *(*callback)(struct ast_channelstorage_instance *driver, ao2_callback_data_fn *cb_fn,
56 void *arg, void *data, int ao2_flags);
57 struct ast_channel *(*get_by_name_prefix)(struct ast_channelstorage_instance *driver, const char *name, size_t len);
58 struct ast_channel *(*get_by_name_prefix_or_uniqueid)(struct ast_channelstorage_instance *driver, const char *name, size_t len);
59 struct ast_channel *(*get_by_exten)(struct ast_channelstorage_instance *driver, const char *exten, const char *context);
60 struct ast_channel *(*get_by_uniqueid)(struct ast_channelstorage_instance *driver, const char *uniqueid);
61 struct ast_channel_iterator *(*iterator_all_new)(struct ast_channelstorage_instance *driver);
62 struct ast_channel_iterator *(*iterator_by_exten_new)
63 (struct ast_channelstorage_instance *driver, const char *exten, const char *context);
64 struct ast_channel_iterator *(*iterator_by_name_new)
65 (struct ast_channelstorage_instance *driver, const char *driver_name, size_t name_len);
66 struct ast_channel *(*iterator_next)(struct ast_channelstorage_instance *driver, struct ast_channel_iterator *i);
67 struct ast_channel_iterator *(*iterator_destroy)(
68 struct ast_channelstorage_instance *driver, struct ast_channel_iterator *i);
69 char name[0];
70};
71
72#define CHANNELSTORAGE_API(_instance, _func, ...) \
73 (_instance)->_func((_instance), ##__VA_ARGS__)
74
76
78 const struct ast_channelstorage_driver *storage_driver, const char *instance_name);
79
80void ast_channelstorage_close(struct ast_channelstorage_instance *storage_instance);
81
82int channelstorage_exten_cb(void *obj, void *arg, void *data, int flags);
84 const char *exten, const char *context);
85int channelstorage_name_cb(void *obj, void *arg, void *data, int flags);
87 const char *name);
89 const char *name, size_t name_len);
90int channelstorage_uniqueid_cb(void *obj, void *arg, void *data, int flags);
92 const char *uniqueid);
93
94#if defined(__cplusplus) || defined(c_plusplus)
95}
96#endif
97
98#endif /* CHANNELSTORAGE_H_ */
ast_mutex_t lock
Definition: app_sla.c:337
Asterisk main include file. File version handling, generic pbx functions.
int() ao2_callback_data_fn(void *obj, void *arg, void *data, int flags)
Type of a generic callback function.
Definition: astobj2.h:1244
General Asterisk PBX channel definitions.
Internal channel functions for channel.c to use.
struct ast_channelstorage_instance * ast_channelstorage_open(const struct ast_channelstorage_driver *storage_driver, const char *instance_name)
int ast_channelstorage_init(void)
int channelstorage_exten_cb(void *obj, void *arg, void *data, int flags)
int channelstorage_name_cb(void *obj, void *arg, void *data, int flags)
int channelstorage_uniqueid_cb(void *obj, void *arg, void *data, int flags)
int ast_channelstorage_register_driver(const struct ast_channelstorage_driver *driver_name)
const struct ast_channelstorage_driver * ast_channelstorage_get_driver(const char *driver_name)
struct ast_channel * channelstorage_by_name_prefix_or_uniqueid(struct ast_channelstorage_instance *driver, const char *name, size_t name_len)
struct ast_channel * channelstorage_by_name_or_uniqueid(struct ast_channelstorage_instance *driver, const char *name)
void ast_channelstorage_close(struct ast_channelstorage_instance *storage_instance)
struct ast_channel * channelstorage_by_exten(struct ast_channelstorage_instance *driver, const char *exten, const char *context)
struct ast_channel * channelstorage_by_uniqueid(struct ast_channelstorage_instance *driver, const char *uniqueid)
static const char name[]
Definition: format_mp3.c:68
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
Main Channel structure associated with a channel.
struct ast_channel_id uniqueid
char exten[AST_MAX_EXTENSION]
const char * data
struct ast_flags flags
int(* active_channels)(struct ast_channelstorage_instance *driver)
void(* close)(struct ast_channelstorage_instance *driver)
void(* rdlock)(struct ast_channelstorage_instance *driver)
void(* unlock)(struct ast_channelstorage_instance *driver)
struct ast_channelstorage_driver_pvt * handle
void(* wrlock)(struct ast_channelstorage_instance *driver)
int(* remove)(struct ast_channelstorage_instance *driver, struct ast_channel *chan, int lock)
int(* insert)(struct ast_channelstorage_instance *driver, struct ast_channel *chan, int flags, int lock)