Presenting a revised data stores and oh my, a generic speech recognition API! I wonde...
[asterisk/asterisk.git] / doc / datastores.txt
1 Asterisk Channel Data Stores
2 ============================
3
4 * What is a data store?
5
6 A data store is a way of storing complex data (such as a structure) on a channel
7 so it can be retrieved at a later time by another application, or the same application.
8
9 If the data store is not freed by said application though, a callback to a destroy function
10 occurs which frees the memory used by the data in the data store so no memory loss occurs.
11
12 * A datastore info structure
13 static const struct example_datastore {
14        .type = "example",
15        .destroy = callback_destroy
16 };
17
18 This is a needed structure that contains information about a datastore, it's used by many API calls.
19
20 * How do you create a data store?
21
22 1. Use ast_channel_datastore_alloc function to return a pre-allocated structure
23    Ex: datastore = ast_channel_datastore_alloc(&example_datastore, "uid");
24    This function takes two arguments: (datastore info structure, uid)
25 2. Attach data and destroy callback to pre-allocated structure.
26    Ex: datastore->data = mysillydata;
27        datastore->destroy = callback_destroy;
28 3. Add datastore to the channel
29    Ex: ast_channel_datastore_add(chan, datastore);
30    This function takes two arguments: (pointer to channel, pointer to data store)
31
32 Full Example:
33
34 void callback_destroy(void *data)
35 {
36         free(data);
37 }
38
39 struct ast_datastore *datastore = NULL;
40 datastore = ast_channel_datastore_alloc(&example_datastore, NULL);
41 datastore->data = mysillydata;
42 datastore->destroy = callback_destroy;
43 ast_channel_datastore_add(chan, datastore);
44
45 NOTE: Because you're passing a pointer to a function in your module, you'll want to include
46 this in your use count. When allocated increment, when destroyed decrement.
47
48 * How do you remove a data store?
49
50 1. Find the data store
51    Ex: datastore = ast_channel_datastore_find(chan, &example_datastore, NULL);
52    This function takes three arguments: (pointer to channel, datastore info structure, uid)
53 2. Remove the data store from the channel
54    Ex: ast_channel_datastore_remove(chan, datastore);
55    This function takes two arguments: (pointer to channel, pointer to data store)
56 3. If we want to now, free the memory or do stuff to the data on the data store
57    If we do then we will want to unset the data and callback
58    Ex: datastore->data = NULL;
59        datastore->destroy = NULL;
60 4. Free the data store
61    Ex: ast_channel_datastore_free(datastore);
62    This function takes one argument: (pointer to data store)
63
64 * How do you find a data store?
65
66 1. Find the data store
67    Ex: datastore = ast_channel_datastore_find(chan, &example_datastore, NULL);
68    This function takes three arguments: (pointer to channel, datastore info structure, uid)