Author: rmudgett
Date: Thu Jun 27 11:30:56 2013
New Revision: 393057

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=393057
Log:
Implement agent waiting COLP.

Modified:
    team/rmudgett/bridge_phase/apps/app_agent_pool.c

Modified: team/rmudgett/bridge_phase/apps/app_agent_pool.c
URL: 
http://svnview.digium.com/svn/asterisk/team/rmudgett/bridge_phase/apps/app_agent_pool.c?view=diff&rev=393057&r1=393056&r2=393057
==============================================================================
--- team/rmudgett/bridge_phase/apps/app_agent_pool.c (original)
+++ team/rmudgett/bridge_phase/apps/app_agent_pool.c Thu Jun 27 11:30:56 2013
@@ -72,6 +72,11 @@
                        and will hear a configurable <literal>beep</literal> 
sound when a new call
                        comes in for the agent.  Login failures will continue 
in the dialplan
                        with AGENT_STATUS set.</para>
+                       <para>Before logging in, you can setup on the real 
agent channel the
+                       CHANNEL(dtmf-features) an agent will have when talking 
to a caller
+                       and you can setup on the channel running this 
application the
+                       CONNECTEDLINE() information the agent will see while 
waiting for a
+                       caller.</para>
                        <para>AGENT_STATUS enumeration values:</para>
                        <enumlist>
                                <enum name = "INVALID"><para>The specified 
agent is invalid.</para></enum>
@@ -87,6 +92,7 @@
                        <ref type="application">UnpauseQueueMember</ref>
                        <ref type="function">AGENT</ref>
                        <ref type="function">CHANNEL(dtmf-features)</ref>
+                       <ref type="function">CONNECTEDLINE()</ref>
                        <ref type="filename">agents.conf</ref>
                        <ref type="filename">queues.conf</ref>
                </see-also>
@@ -236,7 +242,6 @@
                AST_STRING_FIELD(save_calls_in);
                /*! Recording format filename extension. */
                AST_STRING_FIELD(record_format);
-/* BUGBUG Add an agent waiting COLP to differentiate between an incomming 
caller's COLP and so the caller's COLP does not hang around after the call. */
        );
        /*!
         * \brief Number of seconds for agent to ack a call before being logged 
off.
@@ -512,6 +517,8 @@
                /*! Login override DTMF string for an agent to accept a call. */
                AST_STRING_FIELD(override_dtmf_accept);
        );
+       /*! Connected line information to send when reentering the holding 
bridge. */
+       struct ast_party_connected_line waiting_colp;
        /*! Flags show if settings were overridden by channel vars. */
        unsigned int flags;
        /*! Login override number of seconds for agent to ack a call before 
being logged off. */
@@ -671,6 +678,11 @@
                agent_devstate_changed(doomed->username);
        }
 
+       ast_party_connected_line_free(&doomed->waiting_colp);
+       if (doomed->caller_bridge) {
+               ast_bridge_destroy(doomed->caller_bridge);
+               doomed->caller_bridge = NULL;
+       }
        if (doomed->logged) {
                doomed->logged = ast_channel_unref(doomed->logged);
        }
@@ -692,6 +704,7 @@
                return NULL;
        }
        ast_string_field_set(agent, username, cfg->username);
+       ast_party_connected_line_init(&agent->waiting_colp);
        ao2_ref(cfg, +1);
        agent->cfg = cfg;
        agent->devstate = AST_DEVICE_UNAVAILABLE;
@@ -1432,6 +1445,12 @@
                                || ast_check_hangup_locked(logged)) {
                                break;
                        }
+
+                       /*
+                        * It is safe to access agent->waiting_colp without a 
lock.  It
+                        * is only setup on agent login and not changed.
+                        */
+                       ast_channel_update_connected_line(logged, 
&agent->waiting_colp, NULL);
                }
                ast_channel_unref(logged);
                ast_bridge_features_cleanup(&features);
@@ -1720,25 +1739,30 @@
 
 /*!
  * \internal
- * \brief Setup agent override config values.
+ * \brief Get agent config values from the login channel.
  * \since 12.0.0
  *
- * \param agent What to setup override config values on.
+ * \param agent What to setup channel config values on.
  * \param chan Channel logging in as an agent.
  *
  * \return Nothing
  */
-static void agent_login_override_config(struct agent_pvt *agent, struct 
ast_channel *chan)
+static void agent_login_channel_config(struct agent_pvt *agent, struct 
ast_channel *chan)
 {
        struct ast_flags opts = { 0 };
+       struct ast_party_connected_line connected;
        unsigned int override_ack_call = 0;
        unsigned int override_auto_logoff = 0;
        unsigned int override_wrapup_time = 0;
        const char *override_dtmf_accept = NULL;
        const char *var;
 
-       /* Get override values from channel. */
+       ast_party_connected_line_init(&connected);
+
+       /* Get config values from channel. */
        ast_channel_lock(chan);
+       ast_party_connected_line_copy(&connected, ast_channel_connected(chan));
+
        var = pbx_builtin_getvar_helper(chan, "AGENTACKCALL");
        if (!ast_strlen_zero(var)) {
                override_ack_call = ast_true(var) ? 1 : 0;
@@ -1766,8 +1790,11 @@
        }
        ast_channel_unlock(chan);
 
-       /* Set override values on agent. */
+       /* Set config values on agent. */
        agent_lock(agent);
+       ast_party_connected_line_free(&agent->waiting_colp);
+       agent->waiting_colp = connected;
+
        ast_string_field_set(agent, override_dtmf_accept, override_dtmf_accept);
        ast_copy_flags(agent, &opts, AST_FLAGS_ALL);
        agent->override_auto_logoff = override_auto_logoff;
@@ -1846,7 +1873,7 @@
        time(&agent->login_start);
        agent_unlock(agent);
 
-       agent_login_override_config(agent, chan);
+       agent_login_channel_config(agent, chan);
 
        if (!ast_test_flag(&opts, OPT_SILENT)
                && !ast_streamfile(chan, "agent-loginok", 
ast_channel_language(chan))) {


--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to