[asterisk-commits] mmichelson: branch group/CCSS r214773 - /team/group/CCSS/main/ccss.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Aug 28 16:04:01 CDT 2009


Author: mmichelson
Date: Fri Aug 28 16:03:58 2009
New Revision: 214773

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=214773
Log:
Unstub CallCompletionRequest application


Modified:
    team/group/CCSS/main/ccss.c

Modified: team/group/CCSS/main/ccss.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/group/CCSS/main/ccss.c?view=diff&rev=214773&r1=214772&r2=214773
==============================================================================
--- team/group/CCSS/main/ccss.c (original)
+++ team/group/CCSS/main/ccss.c Fri Aug 28 16:03:58 2009
@@ -518,8 +518,6 @@
 	 * This is why we pass CMP_STOP in addition to CMP_MATCH.
 	 */
 	if (!strcmp(pending_offer->caller, caller)) {
-		/* XXX Remember to remove this notice if I use this callback for other purposes */
-		ast_log(LOG_NOTICE, "Killing duplicate pending offer for caller '%s'\n", caller);
 		return CMP_MATCH | CMP_STOP;
 	}
 	return 0;
@@ -886,23 +884,35 @@
 
 static int ccreq_exec(struct ast_channel *chan, const char *data)
 {
-	/* Let's map this shizzle out.
-	 *
-	 * First, let's be sure that the channel is configured to
-	 * use a generic agent, because otherwise, calling this
-	 * application is invalid as all git out.
-	 *
-	 * Then, we neec to find the pending offer which corresponds to
-	 * this device's previous failed attempt.
-	 *
-	 * Once we have that, we can then request a state change to
-	 * the appropriate core instance. Then it's up to the core to
-	 * change states, change the pending offer into a monitor, and
-	 * destroy the pending offer.
-	 */
-	
-	/* STUB */
-	return 0;
+	struct cc_pending_offer *pending_offer;
+	struct cc_core_instance *core_instance;
+	struct cc_core_instance finder;
+	char interface[AST_CHANNEL_NAME];
+	char *dash;
+
+	ast_copy_string(interface, chan->name, sizeof(interface));
+	if ((dash = strrchr(interface, '-'))) {
+		*dash = '\0';
+	}
+
+	if (!(pending_offer = ao2_callback(pending_cc_offers, 0, match_caller, interface))) {
+		ast_log(LOG_NOTICE, "Couldn't find a pending offer for interface %s\n", interface);
+		return -1;
+	}
+
+	finder.core_id = pending_offer->core_id;
+
+	if (!(core_instance = ao2_find(cc_core_instances, &finder, OBJ_POINTER))) {
+		ast_log(LOG_NOTICE, "Couldn't find a core instance with core_id %d\n", pending_offer->core_id);
+		return -1;
+	}
+
+	if (strcmp(core_instance->agent->callbacks->type, "generic")) {
+		ast_log(LOG_NOTICE, "CallCompletionRequest is only for generic agent types.\n");
+		return -1;
+	}
+
+	return ast_cc_request_state_change(CC_CALLER_REQUESTED, core_instance->core_id, "CallCompletionRequest called");
 }
 
 int ast_cc_init(void)




More information about the asterisk-commits mailing list