/*****************************************************************************
* Preamble
*****************************************************************************/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
#include <vlc/vlc.h>
#include <vlc_sout.h>
#include "stream_output.h"
* Sout-side functions
****************************************************************************/
-/**
- * Create and initialize a session descriptor
- *
- * \return a new session descriptor
- */
-static session_descriptor_t * sout_AnnounceSessionCreate (vlc_object_t *obj,
- const char *cfgpref)
-{
- size_t cfglen = strlen (cfgpref);
- if (cfglen > 100)
- return NULL;
-
- char varname[cfglen + sizeof ("description")], *subvar = varname + cfglen;
- strcpy (varname, cfgpref);
-
- session_descriptor_t *p_session = calloc (1, sizeof (*p_session));
- if (p_session == NULL)
- return NULL;
-
- strcpy (subvar, "name");
- p_session->psz_name = var_GetNonEmptyString (obj, varname);
- strcpy (subvar, "group");
- p_session->psz_group = var_GetNonEmptyString (obj, varname);
-
- strcpy (subvar, "description");
- p_session->description = var_GetNonEmptyString (obj, varname);
- strcpy (subvar, "url");
- p_session->url = var_GetNonEmptyString (obj, varname);
- strcpy (subvar, "email");
- p_session->email = var_GetNonEmptyString (obj, varname);
- strcpy (subvar, "phone");
- p_session->phone = var_GetNonEmptyString (obj, varname);
-
- return p_session;
-}
-
/**
* Register a new session with the announce handler, using a pregenerated SDP
*
* \param p_sout a sout instance structure
* \param psz_sdp the SDP to register
- * \param psz_uri session address (needed for SAP address auto detection)
+ * \param psz_dst session address (needed for SAP address auto detection)
* \param p_method an announce method descriptor
* \return the new session descriptor structure
*/
session_descriptor_t *
-sout_AnnounceRegisterSDP( sout_instance_t *p_sout, const char *cfgpref,
- const char *psz_sdp, const char *psz_uri,
- announce_method_t *p_method )
+sout_AnnounceRegisterSDP( sout_instance_t *p_sout, const char *psz_sdp,
+ const char *psz_dst, announce_method_t *p_method )
{
session_descriptor_t *p_session;
announce_handler_t *p_announce = (announce_handler_t*)
vlc_object_yield( p_announce );
}
- p_session = sout_AnnounceSessionCreate(VLC_OBJECT (p_sout), cfgpref);
+ p_session = malloc( sizeof( *p_session ) );
+ memset( p_session, 0, sizeof( *p_session ) );
p_session->psz_sdp = strdup( psz_sdp );
/* GRUIK. We should not convert back-and-forth from string to numbers */
struct addrinfo *res;
- if (vlc_getaddrinfo (VLC_OBJECT (p_sout), psz_uri, 0, NULL, &res) == 0)
+ if (vlc_getaddrinfo (VLC_OBJECT (p_sout), psz_dst, 0, NULL, &res) == 0)
{
if (res->ai_addrlen <= sizeof (p_session->addr))
memcpy (&p_session->addr, res->ai_addr,
return VLC_ENOOBJ;
}
i_ret = announce_UnRegister( p_announce, p_session );
+ if( i_ret == 0 )
+ free( p_session );
vlc_object_release( p_announce );
return i_ret;
}
-/**
- * Destroy a session descriptor and free all
- *
- * \param p_session the session to destroy
- * \return Nothing
- */
-void sout_AnnounceSessionDestroy( session_descriptor_t *p_session )
-{
- if( p_session )
- {
- free (p_session->psz_name);
- free (p_session->psz_group);
- free (p_session->psz_sdp);
- free (p_session->description);
- free (p_session->sdpformat);
- free (p_session->url);
- free (p_session->email);
- free (p_session->phone);
- free( p_session );
- }
-}
-
/**
* \return the SAP announce method
*/
{
if( p_announce->p_sap )
{
- vlc_object_kill ((vlc_object_t *)p_announce->p_sap);
- /* Wait for the SAP thread to exit */
- vlc_thread_join( (vlc_object_t *)p_announce->p_sap );
- announce_SAPHandlerDestroy( p_announce->p_sap );
+ /* Exit the SAP */
+ vlc_object_release( p_announce->p_sap );
}
/* Free the structure */
- vlc_object_destroy( p_announce );
+ vlc_object_release( p_announce );
return VLC_SUCCESS;
}