switch_event_create_brackets
该函数在switch_event.h/switch_event.c中。
switch_event_create_brackets(char *data, char a, char b, char c, switch_event_t **event, char **new_data, switch_bool_t dup)
它是将字符串中带的key=value字符串初始化到switch_event结构体中。
所以,它会做几件事情
- 新建一个event(如果传入event参数为NULL)
- 将字符串中的key=value字符串赋值到event中
#include <switch_event.h>
int main() {
switch_event_t *event = NULL;
//switch_event_create(&event, SWITCH_EVENT_CLONE);
char *parsed = NULL;
const char *data = "{origination_uuid = 55 ca91c5 - 9783 - 458e-8 d9d - 4853 ab538f5e, sip_status = 183} test";
char *odata = strdup(data);
switch_status_t status = switch_event_create_brackets(odata, '{', '}', ',', &event, &parsed, SWITCH_TRUE);
printf("the status is %d\n", status);
free(parsed);
free(odata);
switch_event_destroy(&event);
return 0;
}
新建的switch_event中的值,可见switch_event_create_brackets函数中创建的event id为SWITCH_EVENT_CHANNEL_DATA.
这个event是在该函数中生成的,内存需要调用者释放。使用switch_event_destroy函数释放switch_event指针
TIPS: 如果需要在body中复制,可以使用_body=xxxx的形式赋值。
再来看一下headers里的值,
headers里的key-value键值对就是字符串里的key=value键值对
parsed的值就是除去参数a开始到参数b结束外的值,这里就是除去{key=value键值对}的值,也就是test。
这个char*是指向值,实际上不单独占有内存,所以不需要释放该指针。但是如果最后一个参数为SWITCH_TRUE,则该char*是复制来的,需要调用者自己释放