83{
84 pjsip_msg_body *body = rdata->msg_info.msg->body;
85 char buf[body ? body->len + 1 : 1];
87 char *line;
88 char event = '\0';
89 unsigned int duration = 100;
90 char is_dtmf, is_dtmf_relay, is_flash;
91 int res;
92
94 return 0;
95 }
96
100
101 if (!is_flash && !is_dtmf && !is_dtmf_relay) {
102 return 0;
103 }
104
105 if (!body || !body->len) {
106
108 return 1;
109 }
110
111 res = body->print_body(body,
buf, body->len);
112 if (res < 0) {
114 return 1;
115 }
117
118 if (is_dtmf) {
119
121 } else if (is_dtmf_relay) {
122 while ((line =
strsep(&cur,
"\r\n"))) {
124
125 if (!(
c = strchr(line,
'='))) {
126 continue;
127 }
128
131
132 if (!strcasecmp(line, "signal")) {
134 break;
135 }
136 } else if (!strcasecmp(line, "duration")) {
137 sscanf(
c,
"%30u", &duration);
138 }
139 }
140 }
141
142 if (
event ==
'!' || is_flash) {
145 }
else if (
event !=
'\0') {
150 } else {
152 }
153
155 return 1;
156}
char * strsep(char **str, const char *delims)
static struct ast_mansession session
int ast_queue_frame(struct ast_channel *chan, struct ast_frame *f)
Queue one or more frames to a channel's frame queue.
static char get_event(const char *c)
static int is_media_type(pjsip_rx_data *rdata, char *subtype)
static void send_response(struct ast_sip_session *session, struct pjsip_rx_data *rdata, int code)
char *attribute_pure ast_skip_blanks(const char *str)
Gets a pointer to the first non-whitespace character in a string.
Data structure associated with a single frame of data.
struct ast_frame_subclass subclass