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

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Sep 8 17:29:52 CDT 2009


Author: mmichelson
Date: Tue Sep  8 17:29:50 2009
New Revision: 217318

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=217318
Log:
Map a plan of attack for the agent callback function.

I've got some exciting work ahead :)


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=217318&r1=217317&r2=217318
==============================================================================
--- team/group/CCSS/main/ccss.c (original)
+++ team/group/CCSS/main/ccss.c Tue Sep  8 17:29:50 2009
@@ -795,7 +795,58 @@
 
 static int cc_generic_agent_recall(struct ast_cc_agent *agent)
 {
-	/* STUB */
+	/* Let's map this out
+	 *
+	 * What should this function actually DO? This function needs
+	 * to place a call to agent->interface. Upon answering the call,
+	 * a pbx needs to be started and the topmost extension monitor
+	 * in the monitor graph should be where the pbx starts.
+	 *
+	 * That's simple enough, but there are two things which complicate
+	 * matters.
+	 *
+	 * 1) When the PBX is started, there needs to be a magic CC_INTERFACES
+	 * channel variable which contains the proper interfaces to dial at
+	 * each step. This includes Dials which call local channels which then
+	 * dial more devices. My thinking on this matter is that we can re-use
+	 * the pending offer used for the caller. This will require some changes
+	 * to how pending offers currently work. I think one way that might work
+	 * would be to unlink the pending offer from the container of pending
+	 * offers like we currently do when CC is requested by the caller, BUT also
+	 * let the core_instance (or perhaps the agent) gain a reference to the
+	 * pending offer so it is not freed. In fact, I think that giving the
+	 * agent a reference to the pending offer is the best idea since we could
+	 * have centralized code in the core for setting the CC_INTERFACES variable.
+	 * The other tricky part of this is that the interface dialed initially is
+	 * not going to be the same as was originally dialed. The answer to this
+	 * is to create a monitor callback to retrieve a specific dial string to
+	 * use given a device name and a core_id.
+	 *
+	 * Another idea regarding the pending offers is just to not have a container
+	 * of them. Since the pending offer, agent, and core instance are all created
+	 * around the same time, it would probably be sufficient to just give the
+	 * agent a reference to the pending offer when everything gets created. Wow, what
+	 * a great idea.
+	 *
+	 * 2) This function is called from the core state machine processing thread, meaning
+	 * that it will block all state change requests. Some amount of asyncronicity needs
+	 * to be used here. Sure, I could make use of ast_pbx_outgoing_exten, but it has problems.
+	 * 		a) It still *mostly* runs synchronously. The portion where the caller is called
+	 * 		back will run in this thread. We can't afford for that sort of delay.
+	 * 		b) We need to be able to set the CC_INTERFACES variable on the channel we create.
+	 * 		Or we need to attach the pending offer as a datastore. Either way, the channel
+	 * 		structure is completely hidden from us if we use outgoing_exten.
+	 * Yeah, so I can't make use of the typical "origination" function. I also considered using
+	 * the dialing API, but that is no good either since it completely hides the ast_channel
+	 * from view.
+	 *
+	 * So, my plan is to create a new thread immediately. Inside that thread, I'll call
+	 * ast_request_and_dial to request a channel and dial the channel. IF the channel answers, I
+	 * will first run the callback_macro, then set the CC_INTERFACES as necessary, and then start
+	 * a PBX.
+	 *
+	 * Phew!
+	 */
 	return 0;
 }
 




More information about the asterisk-commits mailing list