[asterisk-commits] rmudgett: branch group/CCSS r267351 - in /team/group/CCSS: ./ channels/ inclu...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Jun 2 17:33:14 CDT 2010
Author: rmudgett
Date: Wed Jun 2 17:33:10 2010
New Revision: 267351
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=267351
Log:
Merged revisions 267350 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r267350 | rmudgett | 2010-06-02 17:28:58 -0500 (Wed, 02 Jun 2010) | 9 lines
Add ETSI Malicious Call ID support.
Add the ability to report malicious callers as an AMI event in the call
event class.
Relevant specification: EN 300 180
Review: https://reviewboard.asterisk.org/r/576/
........
Modified:
team/group/CCSS/ (props changed)
team/group/CCSS/CHANGES
team/group/CCSS/channels/sig_pri.c
team/group/CCSS/configure
team/group/CCSS/configure.ac
team/group/CCSS/include/asterisk/autoconfig.h.in
team/group/CCSS/include/asterisk/channel.h
team/group/CCSS/main/channel.c
Propchange: team/group/CCSS/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Wed Jun 2 17:33:10 2010
@@ -1,1 +1,1 @@
-/trunk:1-267310
+/trunk:1-267350
Modified: team/group/CCSS/CHANGES
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/CHANGES?view=diff&rev=267351&r1=267350&r2=267351
==============================================================================
--- team/group/CCSS/CHANGES (original)
+++ team/group/CCSS/CHANGES Wed Jun 2 17:33:10 2010
@@ -346,6 +346,7 @@
* Added the ability to send and receive ETSI Advice-Of-Charge messages.
* Added the ability to support call waiting calls. (The SETUP has no B channel
assigned.)
+ * Added Malicious Call ID (MCID) event to the AMI call event class.
Asterisk Manager Interface
--------------------------
Modified: team/group/CCSS/channels/sig_pri.c
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/channels/sig_pri.c?view=diff&rev=267351&r1=267350&r2=267351
==============================================================================
--- team/group/CCSS/channels/sig_pri.c (original)
+++ team/group/CCSS/channels/sig_pri.c Wed Jun 2 17:33:10 2010
@@ -1643,6 +1643,98 @@
/* Did not match any pattern in the list. */
return 0;
}
+
+#if defined(HAVE_PRI_MCID)
+/*!
+ * \internal
+ * \brief Append the given party id to the event string.
+ * \since 1.8
+ *
+ * \param msg Event message string being built.
+ * \param prefix Prefix to add to the party id lines.
+ * \param party Party information to encode.
+ *
+ * \return Nothing
+ */
+static void sig_pri_event_party_id(struct ast_str **msg, const char *prefix, struct ast_party_id *party)
+{
+ ast_str_append(msg, 0, "%sPres: %d (%s)\r\n", prefix,
+ party->number_presentation,
+ ast_describe_caller_presentation(party->number_presentation));
+ ast_str_append(msg, 0, "%sNum: %s\r\n", prefix, S_OR(party->number, ""));
+ ast_str_append(msg, 0, "%ston: %d\r\n", prefix, party->number_type);
+ ast_str_append(msg, 0, "%sName: %s\r\n", prefix, S_OR(party->name, ""));
+#if defined(HAVE_PRI_SUBADDR)
+ if (party->subaddress.valid) {
+ static const char subaddress[] = "Subaddr";
+
+ ast_str_append(msg, 0, "%s%s: %s\r\n", prefix, subaddress,
+ S_OR(party->subaddress.str, ""));
+ ast_str_append(msg, 0, "%s%sType: %d\r\n", prefix, subaddress,
+ party->subaddress.type);
+ ast_str_append(msg, 0, "%s%sOdd: %d\r\n", prefix, subaddress,
+ party->subaddress.odd_even_indicator);
+ }
+#endif /* defined(HAVE_PRI_SUBADDR) */
+}
+#endif /* defined(HAVE_PRI_MCID) */
+
+#if defined(HAVE_PRI_MCID)
+/*!
+ * \internal
+ * \brief Handle the MCID event.
+ * \since 1.8
+ *
+ * \param pri sig_pri PRI control structure.
+ * \param mcid MCID event parameters.
+ * \param owner Asterisk channel associated with the call.
+ * NULL if Asterisk no longer has the ast_channel struct.
+ *
+ * \note Assumes the pri->lock is already obtained.
+ * \note Assumes the owner channel lock is already obtained if still present.
+ *
+ * \return Nothing
+ */
+static void sig_pri_mcid_event(struct sig_pri_pri *pri, const struct pri_subcmd_mcid_req *mcid, struct ast_channel *owner)
+{
+ struct ast_channel *chans[1];
+ struct ast_str *msg;
+ struct ast_party_id party;
+
+ msg = ast_str_create(4096);
+ if (!msg) {
+ return;
+ }
+
+ if (owner) {
+ /* The owner channel is present. */
+ ast_str_append(&msg, 0, "Channel: %s\r\n", owner->name);
+ ast_str_append(&msg, 0, "UniqueID: %s\r\n", owner->uniqueid);
+
+ sig_pri_event_party_id(&msg, "CallerID", &owner->connected.id);
+ } else {
+ /*
+ * Since we no longer have an owner channel,
+ * we have to use the caller information supplied by libpri.
+ */
+ ast_party_id_init(&party);
+ sig_pri_party_id_convert(&party, &mcid->originator, pri);
+ sig_pri_event_party_id(&msg, "CallerID", &party);
+ ast_party_id_free(&party);
+ }
+
+ /* Always use libpri's called party information. */
+ ast_party_id_init(&party);
+ sig_pri_party_id_convert(&party, &mcid->answerer, pri);
+ sig_pri_event_party_id(&msg, "ConnectedID", &party);
+ ast_party_id_free(&party);
+
+ chans[0] = owner;
+ ast_manager_event_multichan(EVENT_FLAG_CALL, "MCID", owner ? 1 : 0, chans, "%s",
+ ast_str_buffer(msg));
+ ast_free(msg);
+}
+#endif /* defined(HAVE_PRI_MCID) */
#if defined(HAVE_PRI_CALL_HOLD) || defined(HAVE_PRI_TRANSFER)
/*!
@@ -3640,6 +3732,21 @@
}
break;
#endif /* defined(HAVE_PRI_AOC_EVENTS) */
+#if defined(HAVE_PRI_MCID)
+ case PRI_SUBCMD_MCID_REQ:
+ sig_pri_lock_owner(pri, chanpos);
+ owner = pri->pvts[chanpos]->owner;
+ sig_pri_mcid_event(pri, &subcmd->u.mcid_req, owner);
+ if (owner) {
+ ast_channel_unlock(owner);
+ }
+ break;
+#endif /* defined(HAVE_PRI_MCID) */
+#if defined(HAVE_PRI_MCID)
+ case PRI_SUBCMD_MCID_RSP:
+ /* Ignore for now. */
+ break;
+#endif /* defined(HAVE_PRI_MCID) */
default:
ast_debug(2,
"Unknown call subcommand(%d) in %s event on channel %d/%d on span %d.\n",
@@ -6451,6 +6558,9 @@
#if defined(HAVE_PRI_CALL_WAITING)
pri_connect_ack_enable(pri->pri, 1);
#endif /* defined(HAVE_PRI_CALL_WAITING) */
+#if defined(HAVE_PRI_MCID)
+ pri_mcid_enable(pri->pri, 1);
+#endif /* defined(HAVE_PRI_MCID) */
pri->resetpos = -1;
if (ast_pthread_create_background(&pri->master, NULL, pri_dchannel, pri)) {
Modified: team/group/CCSS/configure.ac
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/configure.ac?view=diff&rev=267351&r1=267350&r2=267351
==============================================================================
--- team/group/CCSS/configure.ac (original)
+++ team/group/CCSS/configure.ac Wed Jun 2 17:33:10 2010
@@ -341,6 +341,7 @@
AST_EXT_LIB_SETUP([POPT], [popt], [popt])
AST_EXT_LIB_SETUP([PORTAUDIO], [PortAudio], [portaudio])
AST_EXT_LIB_SETUP([PRI], [ISDN PRI], [pri])
+AST_EXT_LIB_SETUP_DEPENDENT([PRI_MCID], [ISDN PRI Malicious Call ID], [PRI], [pri])
AST_EXT_LIB_SETUP_DEPENDENT([PRI_CALL_WAITING], [ISDN PRI call waiting supplementary service], [PRI], [pri])
AST_EXT_LIB_SETUP_DEPENDENT([PRI_AOC_EVENTS], [ISDN PRI advice of charge supplementary service events], [PRI], [pri])
AST_EXT_LIB_SETUP_DEPENDENT([PRI_TRANSFER], [ISDN PRI call transfer supplementary service], [PRI], [pri])
@@ -1593,6 +1594,7 @@
AST_EXT_LIB_CHECK([PORTAUDIO], [portaudio], [Pa_GetDeviceCount], [portaudio.h])
AST_EXT_LIB_CHECK([PRI], [pri], [pri_connected_line_update], [libpri.h])
+AST_EXT_LIB_CHECK([PRI_MCID], [pri], [pri_mcid_enable], [libpri.h])
AST_EXT_LIB_CHECK([PRI_CALL_WAITING], [pri], [pri_connect_ack_enable], [libpri.h])
AST_EXT_LIB_CHECK([PRI_AOC_EVENTS], [pri], [pri_aoc_events_enable], [libpri.h])
AST_EXT_LIB_CHECK([PRI_TRANSFER], [pri], [pri_transfer_enable], [libpri.h])
Modified: team/group/CCSS/include/asterisk/autoconfig.h.in
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/include/asterisk/autoconfig.h.in?view=diff&rev=267351&r1=267350&r2=267351
==============================================================================
--- team/group/CCSS/include/asterisk/autoconfig.h.in (original)
+++ team/group/CCSS/include/asterisk/autoconfig.h.in Wed Jun 2 17:33:10 2010
@@ -556,6 +556,9 @@
/* Define to 1 if you have the ISDN PRI set_inbanddisconnect library. */
#undef HAVE_PRI_INBANDDISCONNECT
+
+/* Define to 1 if you have the ISDN PRI Malicious Call ID library. */
+#undef HAVE_PRI_MCID
/* Define to 1 if you have the ISDN progress with cause library. */
#undef HAVE_PRI_PROG_W_CAUSE
Modified: team/group/CCSS/include/asterisk/channel.h
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/include/asterisk/channel.h?view=diff&rev=267351&r1=267350&r2=267351
==============================================================================
--- team/group/CCSS/include/asterisk/channel.h (original)
+++ team/group/CCSS/include/asterisk/channel.h Wed Jun 2 17:33:10 2010
@@ -2462,6 +2462,26 @@
void ast_party_subaddress_free(struct ast_party_subaddress *doomed);
/*!
+ * \brief Initialize the given party id structure.
+ * \since 1.8
+ *
+ * \param init Party id structure to initialize.
+ *
+ * \return Nothing
+ */
+void ast_party_id_init(struct ast_party_id *init);
+
+/*!
+ * \brief Destroy the party id contents
+ * \since 1.8
+ *
+ * \param doomed The party id to destroy.
+ *
+ * \return Nothing
+ */
+void ast_party_id_free(struct ast_party_id *doomed);
+
+/*!
* \since 1.8
* \brief Initialize the given caller structure.
*
Modified: team/group/CCSS/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/main/channel.c?view=diff&rev=267351&r1=267350&r2=267351
==============================================================================
--- team/group/CCSS/main/channel.c (original)
+++ team/group/CCSS/main/channel.c Wed Jun 2 17:33:10 2010
@@ -1652,15 +1652,7 @@
}
}
-/*!
- * \internal
- * \brief Initialize the given party id structure.
- *
- * \param init Party id structure to initialize.
- *
- * \return Nothing
- */
-static void ast_party_id_init(struct ast_party_id *init)
+void ast_party_id_init(struct ast_party_id *init)
{
init->number = NULL;
init->name = NULL;
@@ -1775,15 +1767,7 @@
ast_party_subaddress_set(&dest->subaddress, &src->subaddress);
}
-/*!
- * \internal
- * \brief Destroy the party id contents
- *
- * \param doomed The party id to destroy.
- *
- * \return Nothing
- */
-static void ast_party_id_free(struct ast_party_id *doomed)
+void ast_party_id_free(struct ast_party_id *doomed)
{
if (doomed->number) {
ast_free(doomed->number);
More information about the asterisk-commits
mailing list