vlc/vlc-2.2 | branch: master | Sebastian Ramacher <[email protected]> | Wed Aug 30 20:44:26 2017 +0200| [825dca78be3a81e2a1c5d04137aa01b1cb32dfd3] | committer: Jean-Baptiste Kempf
upnp: Add support for libupnp 1.8 Callbacks now take const void* as second argument and some members can only be accessed via getter functions. Signed-off-by: Sebastian Ramacher <[email protected]> Signed-off-by: Jean-Baptiste Kempf <[email protected]> (cherry picked from commit 3eb4e03512f45c1fa27c7f9a6759e8e7d3905720) Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=825dca78be3a81e2a1c5d04137aa01b1cb32dfd3 --- modules/services_discovery/upnp.cpp | 63 ++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 12 deletions(-) diff --git a/modules/services_discovery/upnp.cpp b/modules/services_discovery/upnp.cpp index b5f74097fb..9b6ed8727a 100644 --- a/modules/services_discovery/upnp.cpp +++ b/modules/services_discovery/upnp.cpp @@ -40,6 +40,44 @@ #include <assert.h> #include <limits.h> +#if UPNP_VERSION < 10800 +/* + * Compat functions and typedefs for libupnp prior to 1.8 + */ +typedef void* UpnpEventPtr; +typedef Upnp_Discovery UpnpDiscovery; +typedef Upnp_Action_Complete UpnpActionComplete; +typedef Upnp_Event UpnpEvent; +typedef Upnp_Event_Subscribe UpnpEventSubscribe; + +static const char* UpnpDiscovery_get_Location_cstr( const UpnpDiscovery* p_discovery ) +{ + return p_discovery->Location; +} + +static const char* UpnpDiscovery_get_DeviceID_cstr( const UpnpDiscovery* p_discovery ) +{ + return p_discovery->DeviceId; +} + +static IXML_Document* UpnpActionComplete_get_ActionResult( const UpnpActionComplete* p_result ) +{ + return p_result->ActionResult; +} + +static const char* UpnpEvent_get_SID_cstr( const UpnpEvent* p_e ) +{ + return p_e->Sid; +} + +static const char* UpnpEventSubscribe_get_SID_cstr( const UpnpEventSubscribe* p_s ) +{ + return p_s->Sid; +} +#else +typedef const void* UpnpEventPtr; +#endif + /* * Constants */ @@ -80,7 +118,7 @@ vlc_module_end(); /* * Local prototypes */ -static int Callback( Upnp_EventType event_type, void* p_event, void* p_user_data ); +static int Callback( Upnp_EventType event_type, UpnpEventPtr p_event, void* p_user_data ); const char* xml_getChildElementValue( IXML_Element* p_parent, const char* psz_tag_name ); @@ -325,7 +363,7 @@ int xml_getNumber( IXML_Document* p_doc, /* * Handles all UPnP events */ -static int Callback( Upnp_EventType event_type, void* p_event, void* p_user_data ) +static int Callback( Upnp_EventType event_type, UpnpEventPtr p_event, void* p_user_data ) { services_discovery_t* p_sd = ( services_discovery_t* ) p_user_data; services_discovery_sys_t* p_sys = p_sd->p_sys; @@ -336,22 +374,23 @@ static int Callback( Upnp_EventType event_type, void* p_event, void* p_user_data case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: case UPNP_DISCOVERY_SEARCH_RESULT: { - struct Upnp_Discovery* p_discovery = ( struct Upnp_Discovery* )p_event; + const UpnpDiscovery* p_discovery = ( const UpnpDiscovery* )p_event; IXML_Document *p_description_doc = 0; int i_res; - i_res = UpnpDownloadXmlDoc( p_discovery->Location, &p_description_doc ); + i_res = UpnpDownloadXmlDoc( UpnpDiscovery_get_Location_cstr( p_discovery ), &p_description_doc ); + if ( i_res != UPNP_E_SUCCESS ) { msg_Warn( p_sd, "Could not download device description! " "Fetching data from %s failed: %s", - p_discovery->Location, UpnpGetErrorMessage( i_res ) ); + UpnpDiscovery_get_Location_cstr( p_discovery ), UpnpGetErrorMessage( i_res ) ); return i_res; } MediaServer::parseDeviceDescription( p_description_doc, - p_discovery->Location, p_sd ); + UpnpDiscovery_get_Location_cstr( p_discovery ), p_sd ); ixmlDocument_free( p_description_doc ); } @@ -359,18 +398,18 @@ static int Callback( Upnp_EventType event_type, void* p_event, void* p_user_data case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: { - struct Upnp_Discovery* p_discovery = ( struct Upnp_Discovery* )p_event; + const UpnpDiscovery* p_discovery = ( const UpnpDiscovery* )p_event; - p_sys->p_server_list->removeServer( p_discovery->DeviceId ); + p_sys->p_server_list->removeServer( UpnpDiscovery_get_DeviceID_cstr( p_discovery ) ); } break; case UPNP_EVENT_RECEIVED: { - Upnp_Event* p_e = ( Upnp_Event* )p_event; + const UpnpEvent* p_e = ( const UpnpEvent* )p_event; - MediaServer* p_server = p_sys->p_server_list->getServerBySID( p_e->Sid ); + MediaServer* p_server = p_sys->p_server_list->getServerBySID( UpnpEvent_get_SID_cstr( p_e ) ); if ( p_server ) p_server->fetchContents(); } break; @@ -380,9 +419,9 @@ static int Callback( Upnp_EventType event_type, void* p_event, void* p_user_data { /* Re-subscribe. */ - Upnp_Event_Subscribe* p_s = ( Upnp_Event_Subscribe* )p_event; + const UpnpEventSubscribe* p_s = ( const UpnpEventSubscribe* )p_event; - MediaServer* p_server = p_sys->p_server_list->getServerBySID( p_s->Sid ); + MediaServer* p_server = p_sys->p_server_list->getServerBySID( UpnpEventSubscribe_get_SID_cstr( p_s ) ); if ( p_server ) p_server->subscribeToContentDirectory(); } break; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
