[asterisk-commits] file: branch group/pimp_my_sip r381150 - in /team/group/pimp_my_sip: include/...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Sun Feb 10 15:10:24 CST 2013
Author: file
Date: Sun Feb 10 15:10:20 2013
New Revision: 381150
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=381150
Log:
Add a session supplement callback for when the session is being destroyed.
Modified:
team/group/pimp_my_sip/include/asterisk/res_sip_session.h
team/group/pimp_my_sip/res/res_sip_session.c
Modified: team/group/pimp_my_sip/include/asterisk/res_sip_session.h
URL: http://svnview.digium.com/svn/asterisk/team/group/pimp_my_sip/include/asterisk/res_sip_session.h?view=diff&rev=381150&r1=381149&r2=381150
==============================================================================
--- team/group/pimp_my_sip/include/asterisk/res_sip_session.h (original)
+++ team/group/pimp_my_sip/include/asterisk/res_sip_session.h Sun Feb 10 15:10:20 2013
@@ -41,8 +41,8 @@
* \brief A structure containing SIP session media information
*/
struct ast_sip_session_media {
- /* RTP instance for audio */
- struct ast_rtp_instance *audio;
+ /* RTP instance for audio */
+ struct ast_rtp_instance *audio;
};
/*!
@@ -56,18 +56,18 @@
struct ast_sip_session {
/* Dialplan extension where incoming call is destined */
char exten[AST_MAX_EXTENSION];
- /* The endpoint with which Asterisk is communicating */
- struct ast_sip_endpoint *endpoint;
- /* The PJSIP details of the session, which includes the dialog */
- struct pjsip_inv_session *inv_session;
- /* The Asterisk channel associated with the session */
- struct ast_channel *channel;
+ /* The endpoint with which Asterisk is communicating */
+ struct ast_sip_endpoint *endpoint;
+ /* The PJSIP details of the session, which includes the dialog */
+ struct pjsip_inv_session *inv_session;
+ /* The Asterisk channel associated with the session */
+ struct ast_channel *channel;
/* Registered session supplements */
AST_LIST_HEAD(, ast_sip_session_supplement) supplements;
- /* Datastores added to the session by supplements to the session */
+ /* Datastores added to the session by supplements to the session */
struct ao2_container *datastores;
- /* Media information */
- struct ast_sip_session_media media;
+ /* Media information */
+ struct ast_sip_session_media media;
/* Workspace for tasks relating to this SIP session */
struct ast_sip_work *work;
};
@@ -78,25 +78,28 @@
* These can be registered by any module in order to add
* processing to incoming and outgoing SIP requests and responses
*/
-struct ast_sip_session_supplement {
- /*! Method on which to call the callbacks. If NULL, call on all methods */
- const char *method;
- /*! Notification that the session has begun */
- void (*session_begin)(struct ast_sip_session *session);
- /*! Notification that the session has ended */
- void (*session_end)(struct ast_sip_session *session);
- /*!
- * \brief Called on incoming SIP request
- * This method can indicate a failure in processing in its return. If there
- * is a failure, it is required that this method sends a response to the request.
- */
- int (*incoming_request)(struct ast_sip_session *session, struct pjsip_rx_data *rdata);
- /*! Called on an incoming SIP response */
- void (*incoming_response)(struct ast_sip_session *session, struct pjsip_rx_data *rdata);
- /*! Called on an outgoing SIP request */
- void (*outgoing_request)(struct ast_sip_session *session, struct pjsip_tx_data *tdata);
- /*! Called on an outgoing SIP response */
- void (*outgoing_response)(struct ast_sip_session *session, struct pjsip_tx_data *tdata);
+struct ast_sip_session_supplement{
+ /*! Method on which to call the callbacks. If NULL, call on all methods */
+ const char *method;
+ /*! Notification that the session has begun */
+ void (*session_begin)(struct ast_sip_session *session);
+ /*! Notification that the session has ended */
+ void (*session_end)(struct ast_sip_session *session);
+ /*! Notification that the session is being destroyed */
+ void (*session_destroy)(struct ast_sip_session *session);
+ /*!
+ * \brief Called on incoming SIP request
+ * This method can indicate a failure in processing in its return. If there
+ * is a failure, it is required that this method sends a response to the request.
+
+ */
+ int (*incoming_request)(struct ast_sip_session *session, struct pjsip_rx_data *rdata);
+ /*! Called on an incoming SIP response */
+ void (*incoming_response)(struct ast_sip_session *session, struct pjsip_rx_data *rdata);
+ /*! Called on an outgoing SIP request */
+ void (*outgoing_request)(struct ast_sip_session *session, struct pjsip_tx_data *tdata);
+ /*! Called on an outgoing SIP response */
+ void (*outgoing_response)(struct ast_sip_session *session, struct pjsip_tx_data *tdata);
/*! Next item in the list */
AST_LIST_ENTRY(ast_sip_session_supplement) next;
};
@@ -110,25 +113,25 @@
struct ast_sip_session_sdp_handler {
/*! An identifier for this handler */
const char *id;
- /*!
- * \brief Set session details based on a stream in an incoming SDP offer or answer
- * \param session The session for which the media is being negotiated
+ /*!
+ * \brief Set session details based on a stream in an incoming SDP offer or answer
+ * \param session The session for which the media is being negotiated
* \param sdp The entire SDP. Useful for getting "global" information, such as connections or attributes
- * \param stream The stream on which to operate
- * \retval 0 The stream was not handled by this handler. If there are other registered handlers for this stream type, they will be called.
- * \retval <0 There was an error encountered. No further operation will take place and the current negotiation will be abandoned.
- * \retval >0 The stream was handled by this handler. No further handler of this stream type will be called.
- */
- int (*handle_incoming_sdp_stream)(struct ast_sip_session *session, const struct pjmedia_sdp_session *sdp, struct pjmedia_sdp_media *stream);
- /*!
- * \brief Create an SDP media stream and add it to the outgoing SDP offer or answer
- * \param session The session for which media is being added
+ * \param stream The stream on which to operate
+ * \retval 0 The stream was not handled by this handler. If there are other registered handlers for this stream type, they will be called.
+ * \retval <0 There was an error encountered. No further operation will take place and the current negotiation will be abandoned.
+ * \retval >0 The stream was handled by this handler. No further handler of this stream type will be called.
+ */
+ int (*handle_incoming_sdp_stream)(struct ast_sip_session *session, const struct pjmedia_sdp_session *sdp, struct pjmedia_sdp_media *stream);
+ /*!
+ * \brief Create an SDP media stream and add it to the outgoing SDP offer or answer
+ * \param session The session for which media is being added
* \param sdp The entire SDP as currently built
- * \retval 0 This handler has no stream to add. If there are other registered handlers for this stream type, they will be called.
- * \retval <0 There was an error encountered. No further operation will take place and the current SDP negotiation will be abandoned.
- * \retval >0 The handler has a stream to be added to the SDP. No further handler of this stream type will be called.
- */
- int (*create_outgoing_sdp_stream)(struct ast_sip_session *session, struct pjmedia_sdp_session *sdp);
+ * \retval 0 This handler has no stream to add. If there are other registered handlers for this stream type, they will be called.
+ * \retval <0 There was an error encountered. No further operation will take place and the current SDP negotiation will be abandoned.
+ * \retval >0 The handler has a stream to be added to the SDP. No further handler of this stream type will be called.
+ */
+ int (*create_outgoing_sdp_stream)(struct ast_sip_session *session, struct pjmedia_sdp_session *sdp);
/*! Next item int he list. */
AST_LIST_ENTRY(ast_sip_session_sdp_handler) next;
};
Modified: team/group/pimp_my_sip/res/res_sip_session.c
URL: http://svnview.digium.com/svn/asterisk/team/group/pimp_my_sip/res/res_sip_session.c?view=diff&rev=381150&r1=381149&r2=381150
==============================================================================
--- team/group/pimp_my_sip/res/res_sip_session.c (original)
+++ team/group/pimp_my_sip/res/res_sip_session.c Sun Feb 10 15:10:20 2013
@@ -424,6 +424,9 @@
ast_debug(3, "Destroying SIP session\n");
while ((supplement = AST_LIST_REMOVE_HEAD(&session->supplements, next))) {
+ if (supplement->session_destroy) {
+ supplement->session_destroy(session);
+ }
ast_free(supplement);
}
ast_sip_destroy_work(session->work);
More information about the asterisk-commits
mailing list