[Asterisk-cvs] asterisk/channels chan_h323.c,1.2,1.3
jeremy at lists.digium.com
jeremy at lists.digium.com
Sat Sep 6 15:28:16 CDT 2003
Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv20457
Modified Files:
chan_h323.c
Log Message:
implement transfer and call forwarding. Bug #221
Index: chan_h323.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_h323.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** chan_h323.c 25 Aug 2003 09:54:36 -0000 1.2
--- chan_h323.c 6 Sep 2003 20:29:25 -0000 1.3
***************
*** 1089,1092 ****
--- 1089,1147 ----
}
#endif
+
+
+ /* Call-back function that gets called on transfer
+ *
+ * Returns 1 on success
+ */
+ int setup_transfer_call(unsigned call_reference, const char *extension)
+ {
+ struct oh323_pvt *p;
+ struct ast_channel *c = NULL;
+ char exten[AST_MAX_EXTENSION];
+ char *context;
+
+ p = find_call(call_reference);
+
+ if (!p) {
+ ast_log(LOG_WARNING, "No such call %d.\n", call_reference);
+ return -1;
+ }
+
+ if (!p->owner) {
+ ast_log(LOG_WARNING, "Call %d has no owner.\n", call_reference);
+ return -1;
+ }
+
+ memcpy(exten, extension, sizeof(exten));
+
+ c = p->owner;
+ if (c && c->bridge) {
+ strncpy(exten, extension, sizeof(exten) - 1);
+ context = strchr(exten, '@');
+ if (context) {
+ *context = '\0';
+ context++;
+ } else
+ context = c->context;
+ if (!strlen(context))
+ context = c->bridge->context;
+ if (ast_exists_extension(c->bridge, context, exten, 1, c->bridge->callerid)) {
+
+ ast_log(LOG_NOTICE, "Transfering call %s to %s@%s.\n", c->bridge->name, exten, context);
+
+ if (!ast_async_goto(c->bridge, context, exten, 1, 1))
+ return 1;
+
+ ast_log(LOG_WARNING, "Failed to transfer.\n");
+ } else {
+ ast_log(LOG_WARNING, "No such extension '%s' exists.\n", exten);
+ }
+ } else {
+ ast_log(LOG_WARNING, "There is no call to transfer\n");
+ }
+ return 0;
+ }
+
/**
***************
*** 1715,1723 ****
h323_callback_register(setup_incoming_call,
setup_outgoing_call,
create_connection,
setup_rtp_connection,
cleanup_connection,
connection_made, send_digit);
!
/* start the h.323 listener */
if (h323_start_listener(port, bindaddr)) {
--- 1770,1780 ----
h323_callback_register(setup_incoming_call,
setup_outgoing_call,
+ setup_transfer_call,
create_connection,
setup_rtp_connection,
cleanup_connection,
connection_made, send_digit);
!
!
/* start the h.323 listener */
if (h323_start_listener(port, bindaddr)) {
More information about the svn-commits
mailing list