{
struct oh323_pvt *p = NULL;
- struct ast_channel *c = NULL;
+/* struct ast_channel *c = NULL; */
struct oh323_user *user = NULL;
struct oh323_alias *alias = NULL;
}
exit:
+#if 0
/* allocate a channel and tell asterisk about it */
c = oh323_new(p, AST_STATE_RINGING, cd.call_token);
if (!c) {
ast_log(LOG_ERROR, "Couldn't create channel. This is bad\n");
return 0;
}
+#endif
+ return 1;
+}
+/**
+ * Call-back function to start PBX when OpenH323 ready to serve incoming call
+ *
+ * Returns 1 on success
+ */
+static int answer_call(unsigned call_reference)
+{
+ struct oh323_pvt *p = NULL;
+ struct ast_channel *c = NULL;
+
+ /* Find the call or allocate a private structure if call not found */
+ p = find_call(call_reference);
+
+ if (!p) {
+ ast_log(LOG_ERROR, "Something is wrong: answer_call\n");
+ return 0;
+ }
+
+ /* allocate a channel and tell asterisk about it */
+ c = oh323_new(p, AST_STATE_RINGING, p->cd.call_token);
+ if (!c) {
+ ast_log(LOG_ERROR, "Couldn't create channel. This is bad\n");
+ return 0;
+ }
return 1;
}
cleanup_connection,
chan_ringing,
connection_made,
- send_digit);
+ send_digit,
+ answer_call);
/* start the h.323 listener */
const H323SignalPDU & /*setupPDU*/,
H323SignalPDU & /*connectPDU*/)
{
+ if (!on_answer_call(GetCallReference()))
+ return H323Connection::AnswerCallDenied;
+
/* The call will be answered later with "AnsweringCall()" function.
*/
return H323Connection::AnswerCallDeferred;
clear_con_cb clfunc,
chan_ringing_cb rfunc,
con_established_cb efunc,
- send_digit_cb dfunc)
+ send_digit_cb dfunc,
+ answer_call_cb acfunc)
{
on_incoming_call = ifunc;
on_outgoing_call = sfunc;
on_chan_ringing = rfunc;
on_connection_established = efunc;
on_send_digit = dfunc;
+ on_answer_call = acfunc;
}
/**
typedef void (*clear_con_cb)(call_details_t);
clear_con_cb on_connection_cleared;
+typedef int (*answer_call_cb)(unsigned);
+answer_call_cb on_answer_call;
+
/* debug flag */
int h323debug;
clear_con_cb,
chan_ringing_cb,
con_established_cb,
- send_digit_cb);
+ send_digit_cb,
+ answer_call_cb);
int h323_set_capability(int, int);