[asterisk-commits] mmichelson: branch group/CCSS r248349 - in /team/group/CCSS: apps/ channels/ ...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Feb 22 15:08:20 CST 2010


Author: mmichelson
Date: Mon Feb 22 15:08:15 2010
New Revision: 248349

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=248349
Log:
Address comments made by myself on reviewboard.

After I do some quick SIP sanity tests, I will
upload a new diff to ReviewBoard.


Modified:
    team/group/CCSS/apps/app_dial.c
    team/group/CCSS/channels/chan_local.c
    team/group/CCSS/channels/chan_sip.c
    team/group/CCSS/channels/sip/include/sip.h
    team/group/CCSS/include/asterisk/ccss.h
    team/group/CCSS/main/ccss.c

Modified: team/group/CCSS/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/apps/app_dial.c?view=diff&rev=248349&r1=248348&r2=248349
==============================================================================
--- team/group/CCSS/apps/app_dial.c (original)
+++ team/group/CCSS/apps/app_dial.c Mon Feb 22 15:08:15 2010
@@ -817,7 +817,7 @@
 			 * any Dial operations that happen later won't record CC interfaces.
 			 */
 			ast_ignore_cc(o->chan);
-			ast_log(LOG_NOTICE, "Since we're forwarding to %s, we will not accept CC offers from him\n", o->chan->name);
+			ast_log(LOG_NOTICE, "Not accepting call completion offers from call-forward recipient %s\n", o->chan->name);
 		} else
 			ast_log(LOG_NOTICE, "Unable to create local channel for call forward to '%s/%s' (cause = %d)\n", tech, stuff, cause);
 	}
@@ -1946,7 +1946,7 @@
 			if (!rest) /* we are on the last destination */
 				chan->hangupcause = cause;
 			chanlist_free(tmp);
-			if (cause == AST_CAUSE_BUSY || cause == AST_CAUSE_CONGESTION) {
+			if (!ignore_cc && (cause == AST_CAUSE_BUSY || cause == AST_CAUSE_CONGESTION)) {
 				if (!ast_cc_callback(chan, tech, numsubst, ast_cc_busy_interface)) {
 					ast_cc_extension_monitor_add_dialstring(chan, interface, "");
 				}

Modified: team/group/CCSS/channels/chan_local.c
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/channels/chan_local.c?view=diff&rev=248349&r1=248348&r2=248349
==============================================================================
--- team/group/CCSS/channels/chan_local.c (original)
+++ team/group/CCSS/channels/chan_local.c Mon Feb 22 15:08:15 2010
@@ -597,7 +597,6 @@
 	struct ast_var_t *varptr = NULL, *new;
 	size_t len, namelen;
 	char *reduced_dest = ast_strdupa(dest);
-	char full_dest[AST_CHANNEL_NAME];
 	char *slash;
 
 	if (!p)
@@ -688,9 +687,7 @@
 	if ((slash = strrchr(reduced_dest, '/'))) {
 		*slash = '\0';
 	}
-	snprintf(full_dest, sizeof(full_dest), "Local/%s", dest);
 	ast_set_cc_interfaces_chanvar(p->chan, reduced_dest);
-	ast_cc_set_extension_dialstring(p->chan, full_dest);
 
 	/* Start switch on sub channel */
 	if (!(res = ast_pbx_start(p->chan)))

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=248349&r1=248348&r2=248349
==============================================================================
--- team/group/CCSS/channels/chan_sip.c (original)
+++ team/group/CCSS/channels/chan_sip.c Mon Feb 22 15:08:15 2010
@@ -928,24 +928,6 @@
  * the reference count by 1.
  */
 
-enum sip_cc_publish_state {
-	CC_CLOSED,
-	CC_OPEN,
-};
-
-enum sip_cc_notify_state {
-	CC_QUEUED,
-	CC_READY,
-};
-
-enum sip_publish_type {
-	SIP_PUBLISH_UNKNOWN,
-	SIP_PUBLISH_INITIAL,
-	SIP_PUBLISH_REFRESH,
-	SIP_PUBLISH_MODIFY,
-	SIP_PUBLISH_REMOVE,
-};
-
 static struct {
 	enum ast_cc_service_type service;
 	const char *service_string;
@@ -974,41 +956,6 @@
 	[CC_READY] = {CC_READY, "cc-state: ready"},
 };
 
-struct cc_epa_entry {
-	/*!
-	 * The core ID of the CC transaction
-	 * for which this EPA entry belongs. This
-	 * essentially acts as a unique identifier
-	 * for the entry and is used in the hash
-	 * and comparison functions
-	 */
-	int core_id;
-	/*!
-	 * We keep the last known state of the
-	 * device in question handy in case
-	 * it needs to be known by a third party.
-	 * Also, in the case where for some reason
-	 * we get asked to transmit state that we
-	 * already sent, we can just ignore the
-	 * request.
-	 */
-	enum sip_cc_publish_state current_state;
-};
-
-struct sip_epa_entry;
-
-struct epa_static_data {
-	enum subscriptiontype event;
-	const char *name;
-	void (*handle_ok)(struct sip_pvt *, struct sip_request *, struct sip_epa_entry *);
-	void (*handle_error)(struct sip_pvt *, const int resp, struct sip_request *, struct sip_epa_entry *);
-	void (*destructor)(void *instance_data);
-};
-
-struct epa_backend {
-	const struct epa_static_data *static_data;
-	AST_LIST_ENTRY(epa_backend) next;
-};
 AST_LIST_HEAD_STATIC(epa_static_data_list, epa_backend);
 
 static int sip_epa_register(const struct epa_static_data *static_data)
@@ -1028,45 +975,6 @@
 }
 
 static void cc_handle_publish_error(struct sip_pvt *pvt, const int resp, struct sip_request *req, struct sip_epa_entry *epa_entry);
-
-struct sip_epa_entry {
-	/*!
-	 * When we are going to send a publish, we need to
-	 * know the type of PUBLISH to send.
-	 */
-	enum sip_publish_type publish_type;
-	/*!
-	 * When we send a PUBLISH, we have to be
-	 * sure to include the entity tag that we
-	 * received in the previous response.
-	 */
-	char entity_tag[SIPBUFSIZE];
-	/*!
-	 * The destination to which this EPA should send
-	 * PUBLISHes. This may be the name of a SIP peer
-	 * or a hostname.
-	 */
-	char destination[SIPBUFSIZE];
-	/*!
-	 * The body of the most recently-sent PUBLISH message.
-	 * This is useful for situations such as authentication,
-	 * in which we must send a message identical to the
-	 * one previously sent
-	 */
-	char body[SIPBUFSIZE];
-	/*!
-	 * Every event package has some constant data and
-	 * callbacks that all instances will share. This
-	 * data resides in this field.
-	 */
-	const struct epa_static_data *static_data;
-	/*!
-	 * In addition to the static data that all instances
-	 * of sip_epa_entry will have, each instance will
-	 * require its own instance-specific data.
-	 */
-	void *instance_data;
-};
 
 static void cc_epa_destructor(void *data)
 {
@@ -1117,94 +1025,8 @@
 /*!
  * Used to create new entity IDs by ESCs.
  */
-int esc_etag_counter;
+static int esc_etag_counter;
 static const int DEFAULT_PUBLISH_EXPIRES = 3600;
-
-/*!
- * \brief common ESC items for all event types
- *
- * The entity_id field serves as a means by which
- * A specific entry may be found.
- */
-struct sip_esc_entry {
-	/*!
-	 * The name of the party who
-	 * sent us the PUBLISH. This will more
-	 * than likely correspond to a peer name.
-	 *
-	 * This field's utility isn't really that
-	 * great. It's mainly just a user-recognizable
-	 * handle that can be printed in debug messages.
-	 */
-	const char *device_name;
-	/*!
-	 * The event package for which this esc_entry
-	 * exists. Most of the time this isn't really
-	 * necessary since you'll have easy access to the
-	 * ESC which contains this entry. However, in
-	 * some circumstances, we won't have the ESC
-	 * available.
-	 */
-	const char *event;
-	/*!
-	 * The entity ID used when corresponding
-	 * with the EPA on the other side. As the
-	 * ESC, we generate an entity ID for each
-	 * received PUBLISH and store it in this
-	 * structure.
-	 */
-	char entity_tag[30];
-	/*!
-	 * The ID for the scheduler. We schedule
-	 * destruction of a sip_esc_entry when we
-	 * receive a PUBLISH. The destruction is
-	 * scheduled for the duration received in
-	 * the Expires header.
-	 */
-	int sched_id;
-	/*!
-	 * Each ESC entry will be for a specific
-	 * event type. Those entries will need to
-	 * carry data which is intrinsic to the
-	 * ESC entry but which is specific to
-	 * the event package
-	 */
-	void *event_specific_data;
-};
-
-/*!
- * \brief Data specific to CC ESC entries.
- *
- * This structure lives in the event_specific_data
- * section of a sip_esc_entry for the CC ESC.
- */
-struct cc_esc_data {
-	/*!
-	 * The current state of the device from which
-	 * we have received a PUBLISH.
-	 */
-	enum sip_cc_publish_state current_state;
-	/*!
-	 * The core_id to which this particular ESC entry
-	 * pertains. We can determine this information using
-	 * either the Request-URI to which the received PUBLISH
-	 * was sent, or by seeing in which dialog the PUBLISH
-	 * arrived if sent in the same dialog as the SUBSCRIBE-
-	 * NOTIFY
-	 */
-	int core_id;
-};
-
-struct event_state_compositor;
-
-typedef int (* const esc_publish_callback)(struct sip_pvt *, struct sip_request *, struct event_state_compositor *, struct sip_esc_entry *);
-
-struct sip_esc_publish_callbacks {
-	const esc_publish_callback initial_handler;
-	const esc_publish_callback refresh_handler;
-	const esc_publish_callback modify_handler;
-	const esc_publish_callback remove_handler;
-};
 
 #ifdef HAVE_LIBXML2
 static int cc_esc_publish_handler(struct sip_pvt *pvt, struct sip_request *req, struct event_state_compositor *esc, struct sip_esc_entry *esc_entry);
@@ -1240,52 +1062,12 @@
 
 static const int ESC_MAX_BUCKETS = 37;
 
-#ifdef HAVE_LIBXML2
-/* I don't actually know if I'll need to do anything here yet,
- * but this helps to fit the skeleton that I've designed for
- * PUBLISH support
- */
-static void cc_esc_destructor(struct sip_esc_entry *esc_entry)
-{
-	struct cc_esc_data *cc_data = esc_entry->event_specific_data;
-	ast_free(cc_data);
-	return;
-}
-
-static int cc_esc_init(struct sip_esc_entry *sip_esc_entry, struct sip_request *req)
-{
-	struct cc_esc_data *cc_data = ast_calloc(1, sizeof(*cc_data));
-
-	if (!cc_data) {
-		return -1;
-	}
-
-	/* For CC, we can associate the incoming request with a CC core_id in one of two ways.
-	 * 1. The Request-URI will be one that we sent in a NOTIFY to let the phone know that
-	 * the called party has become available.
-	 * 2. The PUBLISH is sent in the SUBSCRIBE-NOTIFY dialog.
-	 *
-	 * Since we're focusing for now specifically on SIP PUBLISH support, and not how it ties
-	 * in with CC specifically, I'm leaving this as a TODO XXX type thing.
-	 */
-
-	sip_esc_entry->event_specific_data = cc_data;
-
-	return 0;
-}
-#endif
-
 static void esc_entry_destructor(void *obj)
 {
 	struct sip_esc_entry *esc_entry = obj;
 	if (esc_entry->sched_id > -1) {
 		AST_SCHED_DEL(sched, esc_entry->sched_id);
 	}
-#ifdef HAVE_LIBXML2
-	if (!strcasecmp(esc_entry->event, "call-completion")) {
-		cc_esc_destructor(esc_entry);
-	}
-#endif
 }
 
 static int esc_hash_fn(const void *obj, const int flags)
@@ -1358,16 +1140,6 @@
 	}
 
 	esc_entry->event = esc->name;
-
-	switch (esc->event) {
-#ifdef HAVE_LIBXML2
-	case CALL_COMPLETION:
-		cc_esc_init(esc_entry, req);
-		break;
-#endif
-	default:
-		break;
-	}
 
 	expires_ms = expires * 1000;
 	/* Bump refcount for scheduler */
@@ -2284,6 +2056,12 @@
 	 * body gets a lot more extra junk that isn't necessary, so we'll leave it out here.
 	 */
 	ast_str_append(&body, 0, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+	/* XXX The entity attribute is currently set to the peer name associated with the
+	 * dialog. This is because we currently only call this function for call-completion
+	 * PUBLISH bodies. In such cases, the entity is completely disregarded. For other
+	 * event packages, it may be crucial to have a proper URI as the presentity so this
+	 * should be revisited as support is expanded.
+	 */
 	ast_str_append(&body, 0, "<presence xmlns=\"urn:ietf:params:xml:ns:pidf\" entity=\"%s\">\n", presentity);
 	ast_str_append(&body, 0, "<tuple id=\"%s\">\n", tuple_id);
 	ast_str_append(&body, 0, "<status><basic>%s</basic></status>\n", state == CC_OPEN ? "open" : "closed");
@@ -2349,6 +2127,7 @@
 	/* This will never be called because the SIP monitor will never make a status request to
 	 * begin with
 	 */
+	ast_log(LOG_WARNING, "sip_cc_monitor_status_response called. Something dreadfully wrong must have happened.\n");
 	return 0;
 }
 
@@ -2398,6 +2177,8 @@
 	char *uri;
 	char *purpose;
 	char *service_str;
+	static const char cc_purpose[] = "purpose=call-completion";
+	static const int cc_purpose_len = sizeof(cc_purpose) - 1;
 
 	if (ast_strlen_zero(call_info)) {
 		/* No Call-Info present. Definitely no CC offer */
@@ -2407,7 +2188,7 @@
 	uri = strsep(&call_info, ";");
 
 	while ((purpose = strsep(&call_info, ";"))) {
-		if (!strncmp(purpose, "purpose=call-completion", 23)) {
+		if (!strncmp(purpose, cc_purpose, cc_purpose_len)) {
 			break;
 		}
 	}
@@ -11007,22 +10788,24 @@
 		if (ast_str_strlen(p->notify->content))
 			add_line(&req, ast_str_buffer(p->notify->content));
 	} else if (sipmethod == SIP_PUBLISH) {
-		/* XXX This would need to be modified in case other event packages get PUBLISH
-		 * support at any point. This can easily be done by checking the epa_entry->static_data->event
-		 */
 		char expires[SIPBUFSIZE];
-		snprintf(expires, sizeof(expires), "%d", p->expiry);
-		add_header(&req, "Event", "call-completion");
-		add_header(&req, "Expires", expires);
-		if (p->epa_entry->publish_type != SIP_PUBLISH_INITIAL) {
-			add_header(&req, "SIP-If-Match", p->epa_entry->entity_tag);
-		}
-		if (!ast_strlen_zero(p->epa_entry->body)) {
-			add_header(&req, "Content-Type", "application/pidf+xml");
-			add_header_contentLength(&req, strlen(p->epa_entry->body));
-			add_line(&req, p->epa_entry->body);
-		} else {
-			add_header_contentLength(&req, 0);
+		switch (p->epa_entry->static_data->event) {
+		case CALL_COMPLETION:
+			snprintf(expires, sizeof(expires), "%d", p->expiry);
+			add_header(&req, "Event", "call-completion");
+			add_header(&req, "Expires", expires);
+			if (p->epa_entry->publish_type != SIP_PUBLISH_INITIAL) {
+				add_header(&req, "SIP-If-Match", p->epa_entry->entity_tag);
+			}
+			if (!ast_strlen_zero(p->epa_entry->body)) {
+				add_header(&req, "Content-Type", "application/pidf+xml");
+				add_header_contentLength(&req, strlen(p->epa_entry->body));
+				add_line(&req, p->epa_entry->body);
+			} else {
+				add_header_contentLength(&req, 0);
+			}
+		default:
+			break;
 		}
 	} else {
 		add_header_contentLength(&req, 0);

Modified: team/group/CCSS/channels/sip/include/sip.h
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/channels/sip/include/sip.h?view=diff&rev=248349&r1=248348&r2=248349
==============================================================================
--- team/group/CCSS/channels/sip/include/sip.h (original)
+++ team/group/CCSS/channels/sip/include/sip.h Mon Feb 22 15:08:15 2010
@@ -1289,4 +1289,245 @@
 	struct ast_dnsmgr_entry *dnsmgr; /*!< DNS refresh manager for subscription */
 	struct sockaddr_in us;           /*!< Who the server thinks we are */
 };
+
+/*!
+ * \brief The states that can be represented in a SIP call-completion PUBLISH
+ */
+enum sip_cc_publish_state {
+	/*! Closed, i.e. unavailable */
+	CC_CLOSED,
+	/*! Open, i.e. available */
+	CC_OPEN,
+};
+
+/*!
+ * \brief The states that can be represented in a SIP call-completion NOTIFY
+ */
+enum sip_cc_notify_state {
+	/*! Queued, i.e. unavailable */
+	CC_QUEUED,
+	/*! Ready, i.e. available */
+	CC_READY,
+};
+
+/*!
+ * \brief The types of PUBLISH messages defined in RFC 3903
+ */
+enum sip_publish_type {
+	/*!
+	 * \brief Unknown
+	 *
+	 * \details
+	 * This actually is not defined in RFC 3903. We use this as a constant
+	 * to indicate that an incoming PUBLISH does not fit into any of the
+	 * other categories and is thus invalid.
+	 */
+	SIP_PUBLISH_UNKNOWN,
+	/*!
+	 * \brief Initial
+	 *
+	 * \details
+	 * The first PUBLISH sent. This will contain a non-zero Expires header
+	 * as well as a body that indicates the current state of the endpoint
+	 * that has sent the message. The initial PUBLISH is the only type
+	 * of PUBLISH to not contain a Sip-If-Match header in it.
+	 */
+	SIP_PUBLISH_INITIAL,
+	/*!
+	 * \brief Refresh
+	 *
+	 * \details
+	 * Used to keep a published state from expiring. This will contain a
+	 * non-zero Expires header but no body since its purpose is not to
+	 * update state.
+	 */
+	SIP_PUBLISH_REFRESH,
+	/*!
+	 * \brief Modify
+	 *
+	 * \details
+	 * Used to change state from its previous value. This will contain
+	 * a body updating the published state. May or may not contain an
+	 * Expires header.
+	 */
+	SIP_PUBLISH_MODIFY,
+	/*!
+	 * \brief Remove
+	 * 
+	 * \details
+	 * Used to remove published state from an ESC. This will contain
+	 * an Expires header set to 0 and likely no body.
+	 */
+	SIP_PUBLISH_REMOVE,
+};
+
+/*!
+ * Data which is the same for all instances of an EPA for a
+ * particular event package
+ */
+struct epa_static_data {
+	/*! The event type */
+	enum subscriptiontype event;
+	/*!
+	 * The name of the event as it would
+	 * appear in a SIP message
+	 */
+	const char *name;
+	/*!
+	 * The callback called when a 200 OK is received on an outbound PUBLISH
+	 */
+	void (*handle_ok)(struct sip_pvt *, struct sip_request *, struct sip_epa_entry *);
+	/*!
+	 * The callback called when an error response is received on an outbound PUBLISH
+	 */
+	void (*handle_error)(struct sip_pvt *, const int resp, struct sip_request *, struct sip_epa_entry *);
+	/*!
+	 * Destructor to call to clean up instance data
+	 */
+	void (*destructor)(void *instance_data);
+};
+
+/*!
+ * \brief backend for an event publication agent
+ */
+struct epa_backend {
+	const struct epa_static_data *static_data;
+	AST_LIST_ENTRY(epa_backend) next;
+};
+
+struct sip_epa_entry {
+	/*!
+	 * When we are going to send a publish, we need to
+	 * know the type of PUBLISH to send.
+	 */
+	enum sip_publish_type publish_type;
+	/*!
+	 * When we send a PUBLISH, we have to be
+	 * sure to include the entity tag that we
+	 * received in the previous response.
+	 */
+	char entity_tag[SIPBUFSIZE];
+	/*!
+	 * The destination to which this EPA should send
+	 * PUBLISHes. This may be the name of a SIP peer
+	 * or a hostname.
+	 */
+	char destination[SIPBUFSIZE];
+	/*!
+	 * The body of the most recently-sent PUBLISH message.
+	 * This is useful for situations such as authentication,
+	 * in which we must send a message identical to the
+	 * one previously sent
+	 */
+	char body[SIPBUFSIZE];
+	/*!
+	 * Every event package has some constant data and
+	 * callbacks that all instances will share. This
+	 * data resides in this field.
+	 */
+	const struct epa_static_data *static_data;
+	/*!
+	 * In addition to the static data that all instances
+	 * of sip_epa_entry will have, each instance will
+	 * require its own instance-specific data.
+	 */
+	void *instance_data;
+};
+
+/*!
+ * \brief Instance data for a Call completion EPA entry
+ */
+struct cc_epa_entry {
+	/*!
+	 * The core ID of the CC transaction
+	 * for which this EPA entry belongs. This
+	 * essentially acts as a unique identifier
+	 * for the entry and is used in the hash
+	 * and comparison functions
+	 */
+	int core_id;
+	/*!
+	 * We keep the last known state of the
+	 * device in question handy in case
+	 * it needs to be known by a third party.
+	 * Also, in the case where for some reason
+	 * we get asked to transmit state that we
+	 * already sent, we can just ignore the
+	 * request.
+	 */
+	enum sip_cc_publish_state current_state;
+};
+
+struct sip_esc_entry;
+struct event_state_compositor;
+
+typedef int (* const esc_publish_callback)(struct sip_pvt *, struct sip_request *, struct event_state_compositor *, struct sip_esc_entry *);
+
+/*!
+ * \brief Callbacks for SIP ESCs
+ *
+ * \details
+ * The names of the callbacks are self-explanatory. The
+ * corresponding handler is called whenever the specific
+ * type of PUBLISH is received.
+ */
+struct sip_esc_publish_callbacks {
+	const esc_publish_callback initial_handler;
+	const esc_publish_callback refresh_handler;
+	const esc_publish_callback modify_handler;
+	const esc_publish_callback remove_handler;
+};
+
+/*!
+ * \brief common ESC items for all event types
+ *
+ * The entity_id field serves as a means by which
+ * A specific entry may be found.
+ */
+struct sip_esc_entry {
+	/*!
+	 * The name of the party who
+	 * sent us the PUBLISH. This will more
+	 * than likely correspond to a peer name.
+	 *
+	 * This field's utility isn't really that
+	 * great. It's mainly just a user-recognizable
+	 * handle that can be printed in debug messages.
+	 */
+	const char *device_name;
+	/*!
+	 * The event package for which this esc_entry
+	 * exists. Most of the time this isn't really
+	 * necessary since you'll have easy access to the
+	 * ESC which contains this entry. However, in
+	 * some circumstances, we won't have the ESC
+	 * available.
+	 */
+	const char *event;
+	/*!
+	 * The entity ID used when corresponding
+	 * with the EPA on the other side. As the
+	 * ESC, we generate an entity ID for each
+	 * received PUBLISH and store it in this
+	 * structure.
+	 */
+	char entity_tag[30];
+	/*!
+	 * The ID for the scheduler. We schedule
+	 * destruction of a sip_esc_entry when we
+	 * receive a PUBLISH. The destruction is
+	 * scheduled for the duration received in
+	 * the Expires header.
+	 */
+	int sched_id;
+	/*!
+	 * Each ESC entry will be for a specific
+	 * event type. Those entries will need to
+	 * carry data which is intrinsic to the
+	 * ESC entry but which is specific to
+	 * the event package
+	 */
+	void *event_specific_data;
+};
+
 #endif

Modified: team/group/CCSS/include/asterisk/ccss.h
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/include/asterisk/ccss.h?view=diff&rev=248349&r1=248348&r2=248349
==============================================================================
--- team/group/CCSS/include/asterisk/ccss.h (original)
+++ team/group/CCSS/include/asterisk/ccss.h Mon Feb 22 15:08:15 2010
@@ -667,28 +667,6 @@
  * \retval void
  */
 void ast_ignore_cc(struct ast_channel *chan);
-
-/*!
- * \since 1.8
- *
- * \brief Set the dialable name for an extension
- *
- * \details
- * An extension will look like "exten at context." But when it
- * comes time to dial the extension again, what we actually will
- * need to dial may be "Local/exten at context" or "Local/exten at context/n"
- * or something like that. As such, we need to store this information
- * when we call the local channel.
- *
- * Currently, this function is only used by chan_local.c, and probably
- * will never be used outside of that file, so you can safely ignore
- * this function, most likely.
- *
- * \param chan The channel whose CC datastore we wish to modify
- * \param dialstring The dialstring we wish to set
- * \retval void
- */
-void ast_cc_set_extension_dialstring(struct ast_channel *chan, const char * const dialstring);
 
 /*!
  * \since 1.8

Modified: team/group/CCSS/main/ccss.c
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/main/ccss.c?view=diff&rev=248349&r1=248348&r2=248349
==============================================================================
--- team/group/CCSS/main/ccss.c (original)
+++ team/group/CCSS/main/ccss.c Mon Feb 22 15:08:15 2010
@@ -1617,23 +1617,6 @@
 	.destroy = dialed_cc_interfaces_destroy,
 };
 
-void ast_cc_set_extension_dialstring(struct ast_channel *chan, const char * const dialstring)
-{
-	struct ast_datastore *datastore;
-	struct dialed_cc_interfaces *cc_interfaces;
-
-	ast_channel_lock(chan);
-	if (!(datastore = ast_channel_datastore_find(chan, &dialed_cc_interfaces_info, NULL))) {
-		ast_channel_unlock(chan);
-		return;
-	}
-
-	cc_interfaces = datastore->data;
-	cc_interfaces->current_extension_dialstring = ast_strdup(dialstring);
-	ast_channel_unlock(chan);
-	return;
-}
-
 static struct extension_monitor_pvt *extension_monitor_pvt_init(void)
 {
 	struct extension_monitor_pvt *ext_pvt = ast_calloc(1, sizeof(*ext_pvt));




More information about the asterisk-commits mailing list