[asterisk-commits] mmichelson: branch group/CCSS r231599 - /team/group/CCSS/channels/chan_sip.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Nov 30 14:26:49 CST 2009


Author: mmichelson
Date: Mon Nov 30 14:26:46 2009
New Revision: 231599

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=231599
Log:
Create a function to transmit CC-related NOTIFY requests.

Up next, using the function!


Modified:
    team/group/CCSS/channels/chan_sip.c

Modified: team/group/CCSS/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/channels/chan_sip.c?view=diff&rev=231599&r1=231598&r2=231599
==============================================================================
--- team/group/CCSS/channels/chan_sip.c (original)
+++ team/group/CCSS/channels/chan_sip.c Mon Nov 30 14:26:46 2009
@@ -1722,6 +1722,19 @@
 	CC_OPEN,
 };
 
+enum sip_cc_notify_state {
+	CC_QUEUED,
+	CC_READY,
+};
+
+static struct {
+	enum sip_cc_notify_state state;
+	const char *state_string;
+} sip_cc_notify_state_map [] = {
+	{CC_QUEUED, "state: queued"},
+	{CC_READY, "state: ready"},
+};
+
 struct cc_epa_entry {
 	/* The core ID of the CC transaction
      * for which this EPA entry belongs. This
@@ -3343,6 +3356,12 @@
 	 * to send one
 	 */
 	struct sip_pvt *subscribe_pvt;
+	/* When we send a NOTIFY, we include a URI
+	 * that should be used by the caller when he
+	 * wishes to send a PUBLISH or INVITE to us.
+	 * We store that URI here.
+	 */
+	char notify_uri[SIPBUFSIZE];
 	char is_available;
 };
 
@@ -12448,6 +12467,26 @@
 	}
 }
 
+static int transmit_cc_notify(struct ast_cc_agent *agent, struct sip_pvt *subscription, enum sip_cc_notify_state state)
+{
+	struct sip_request req;
+	struct sip_cc_agent_pvt *agent_pvt = agent->private_data;
+	char state_str[64];
+
+	if (state < CC_QUEUED || state > CC_READY) {
+		ast_log(LOG_WARNING, "Invalid state provided for transmit_cc_notify (%d)\n", state);
+		return -1;
+	}
+
+	reqprep(&req, subscription, SIP_NOTIFY, 0, TRUE);
+	ast_copy_string(state_str, sip_cc_notify_state_map[state].state_string, sizeof(state_str));
+	generate_random_string(agent_pvt->notify_uri, sizeof(agent_pvt->notify_uri));
+	add_header(&req, "Content-Type", "application/call-completion");
+	add_header_contentLength(&req, strlen(state_str) + strlen(agent_pvt->notify_uri));
+	add_line(&req, state_str);
+	add_line(&req, agent_pvt->notify_uri);
+	return send_request(subscription, &req, XMIT_RELIABLE, subscription->ocseq);
+}
 
 /*! \brief Used in the SUBSCRIBE notification subsystem (RFC3265) */
 static int transmit_state_notify(struct sip_pvt *p, int state, int full, int timeout)




More information about the asterisk-commits mailing list