[asterisk-commits] mmichelson: branch group/CCSS r236712 - /team/group/CCSS/channels/chan_sip.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon Dec 28 15:33:43 CST 2009
Author: mmichelson
Date: Mon Dec 28 15:33:41 2009
New Revision: 236712
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=236712
Log:
First part of handling CC NOTIFY requests.
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=236712&r1=236711&r2=236712
==============================================================================
--- team/group/CCSS/channels/chan_sip.c (original)
+++ team/group/CCSS/channels/chan_sip.c Mon Dec 28 15:33:41 2009
@@ -3647,6 +3647,12 @@
return ao2_find(sip_monitor_instances, &finder, OBJ_POINTER);
}
+static int find_sip_monitor_instance_by_subscription_pvt(void *obj, void *arg, int flags)
+{
+ struct sip_monitor_instance *monitor_instance = obj;
+ return monitor_instance->subscription_pvt == arg ? CMP_MATCH | CMP_STOP : 0;
+}
+
static int sip_cc_monitor_init(struct ast_cc_monitor *monitor, const int core_id);
static int sip_cc_monitor_request_cc(struct ast_cc_monitor *monitor, const int core_id, struct ast_cc_monitor_link *parent_link);
static int sip_cc_monitor_suspend(struct ast_cc_monitor *monitor, const int core_id);
@@ -21275,6 +21281,28 @@
return NULL;
}
+static int handle_cc_notify(struct sip_pvt *pvt, struct sip_request *req)
+{
+ /* Let's map this out
+ *
+ * We need to find the appropriate sip_monitor_instance. Unfortunately, we don't have
+ * a core_id. We'll have to do a bit of an ao2_callback using the sip_pvt in order
+ * to do this correctly.
+ *
+ * After finding the sip_monitor_instance, we can then check the body to find whether
+ * the status is "queued" or "ready" and act accordingly
+ */
+ struct sip_monitor_instance *monitor_instance = ao2_callback(sip_monitor_instances, 0,
+ find_sip_monitor_instance_by_subscription_pvt, pvt);
+
+ if (!monitor_instance) {
+ return -1;
+ }
+
+ /* XXX STUB */
+ return 0;
+}
+
/*! \brief Handle incoming notifications */
static int handle_request_notify(struct sip_pvt *p, struct sip_request *req, struct sockaddr_in *sin, int seqno, const char *e)
{
@@ -21437,6 +21465,8 @@
/* Used by Sipura/Linksys for NAT pinhole,
* just confirm that we recieved the packet. */
transmit_response(p, "200 OK", req);
+ } else if (!strcmp(event, "call-completion")) {
+ res = handle_cc_notify(p, req);
} else {
/* We don't understand this event. */
transmit_response(p, "489 Bad event", req);
More information about the asterisk-commits
mailing list