# HG changeset patch # User Richard Dunbar # Date 1555789466 14400 # Node ID e24deaebffc67d033f6c3dc30450e6bee12c6050 # Parent b9fbde67970f75fbd5072bda55f143ca7672ce31 amule: add debian libupnp1.8.patch diff -r b9fbde67970f -r e24deaebffc6 amule/receipt --- a/amule/receipt Sat Apr 20 17:16:39 2019 +0100 +++ b/amule/receipt Sat Apr 20 15:44:26 2019 -0400 @@ -19,6 +19,8 @@ # Rules to configure and make the package. compile_rules() { + patch -p1 < $stuff/libupnp1.8.patch || exit 1 + # What works for imule (see https://aur.archlinux.org/packages/imule) # might work for amule also: sed -i 's/pubkey.DEREncode(asink);/pubkey.AccessMaterial().Save(asink);/g' \ diff -r b9fbde67970f -r e24deaebffc6 amule/stuff/libupnp1.8.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/amule/stuff/libupnp1.8.patch Sat Apr 20 15:44:26 2019 -0400 @@ -0,0 +1,241 @@ +--- a/src/UPnPBase.cpp ++++ b/src/UPnPBase.cpp +@@ -29,22 +29,12 @@ + + #ifdef ENABLE_UPNP + +-// check for broken Debian-hacked libUPnP + #include +-#ifdef STRING_H // defined in UpnpString.h Yes, I would have liked UPNPSTRING_H much better. +-#define BROKEN_DEBIAN_LIBUPNP +-#endif + + #include "UPnPBase.h" + + #include // For transform() + +-#ifdef BROKEN_DEBIAN_LIBUPNP +- #define GET_UPNP_STRING(a) UpnpString_get_String(a) +-#else +- #define GET_UPNP_STRING(a) (a) +-#endif +- + std::string stdEmptyString; + + const char s_argument[] = "argument"; +@@ -1127,7 +1117,7 @@ bool CUPnPControlPoint::PrivateDeletePor + + + // This function is static +-int CUPnPControlPoint::Callback(Upnp_EventType EventType, void *Event, void * /*Cookie*/) ++int CUPnPControlPoint::Callback(Upnp_EventType EventType, const void *Event, void * /*Cookie*/) + { + std::ostringstream msg; + std::ostringstream msg2; +@@ -1149,24 +1139,24 @@ int CUPnPControlPoint::Callback(Upnp_Eve + msg2<< "UPNP_DISCOVERY_SEARCH_RESULT: "; + // UPnP Discovery + upnpDiscovery: +- struct Upnp_Discovery *d_event = (struct Upnp_Discovery *)Event; ++ UpnpDiscovery *d_event = (UpnpDiscovery *)Event; + IXML_Document *doc = NULL; + int ret; +- if (d_event->ErrCode != UPNP_E_SUCCESS) { +- msg << UpnpGetErrorMessage(d_event->ErrCode) << "."; ++ if (UpnpDiscovery_get_ErrCode(d_event) != UPNP_E_SUCCESS) { ++ msg << UpnpGetErrorMessage(UpnpDiscovery_get_ErrCode(d_event)) << "."; + AddDebugLogLineC(logUPnP, msg); + } + // Get the XML tree device description in doc +- ret = UpnpDownloadXmlDoc(d_event->Location, &doc); ++ ret = UpnpDownloadXmlDoc(UpnpDiscovery_get_Location_cstr(d_event), &doc); + if (ret != UPNP_E_SUCCESS) { + msg << "Error retrieving device description from " << +- d_event->Location << ": " << ++ UpnpDiscovery_get_Location_cstr(d_event) << ": " << + UpnpGetErrorMessage(ret) << + "(" << ret << ")."; + AddDebugLogLineC(logUPnP, msg); + } else { + msg2 << "Retrieving device description from " << +- d_event->Location << "."; ++ UpnpDiscovery_get_Location_cstr(d_event) << "."; + AddDebugLogLineN(logUPnP, msg2); + } + if (doc) { +@@ -1195,7 +1185,7 @@ upnpDiscovery: + } + // Add the root device to our list + upnpCP->AddRootDevice(rootDevice, urlBase, +- d_event->Location, d_event->Expires); ++ UpnpDiscovery_get_Location_cstr(d_event), UpnpDiscovery_get_Expires(d_event)); + } + // Free the XML doc tree + IXML::Document::Free(doc); +@@ -1216,28 +1206,28 @@ upnpDiscovery: + case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: { + //fprintf(stderr, "Callback: UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE\n"); + // UPnP Device Removed +- struct Upnp_Discovery *dab_event = (struct Upnp_Discovery *)Event; +- if (dab_event->ErrCode != UPNP_E_SUCCESS) { ++ UpnpDiscovery *dab_event = (UpnpDiscovery *)Event; ++ if (UpnpDiscovery_get_ErrCode(dab_event) != UPNP_E_SUCCESS) { + msg << "error(UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE): " << +- UpnpGetErrorMessage(dab_event->ErrCode) << ++ UpnpGetErrorMessage(UpnpDiscovery_get_ErrCode(dab_event)) << + "."; + AddDebugLogLineC(logUPnP, msg); + } +- std::string devType = dab_event->DeviceType; ++ std::string devType = UpnpDiscovery_get_DeviceType_cstr(dab_event); + // Check for an InternetGatewayDevice and removes it from the list + std::transform(devType.begin(), devType.end(), devType.begin(), tolower); + if (stdStringIsEqualCI(devType, UPnP::Device::IGW)) { +- upnpCP->RemoveRootDevice(dab_event->DeviceId); ++ upnpCP->RemoveRootDevice(UpnpDiscovery_get_DeviceID_cstr(dab_event)); + } + break; + } + case UPNP_EVENT_RECEIVED: { + //fprintf(stderr, "Callback: UPNP_EVENT_RECEIVED\n"); + // Event reveived +- struct Upnp_Event *e_event = (struct Upnp_Event *)Event; +- const std::string Sid = e_event->Sid; ++ UpnpEvent *e_event = (UpnpEvent *)Event; ++ const std::string Sid = UpnpEvent_get_SID_cstr(e_event); + // Parses the event +- upnpCP->OnEventReceived(Sid, e_event->EventKey, e_event->ChangedVariables); ++ upnpCP->OnEventReceived(Sid, UpnpEvent_get_EventKey(e_event), UpnpEvent_get_ChangedVariables(e_event)); + break; + } + case UPNP_EVENT_SUBSCRIBE_COMPLETE: +@@ -1252,16 +1242,15 @@ upnpDiscovery: + //fprintf(stderr, "Callback: UPNP_EVENT_RENEWAL_COMPLETE\n"); + msg << "error(UPNP_EVENT_RENEWAL_COMPLETE): "; + upnpEventRenewalComplete: +- struct Upnp_Event_Subscribe *es_event = +- (struct Upnp_Event_Subscribe *)Event; +- if (es_event->ErrCode != UPNP_E_SUCCESS) { ++ UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)Event; ++ if (UpnpEventSubscribe_get_ErrCode(es_event) != UPNP_E_SUCCESS) { + msg << "Error in Event Subscribe Callback"; + UPnP::ProcessErrorMessage( +- msg.str(), es_event->ErrCode, NULL, NULL); ++ msg.str(), UpnpEventSubscribe_get_ErrCode(es_event), NULL, NULL); + } else { + #if 0 + TvCtrlPointHandleSubscribeUpdate( +- GET_UPNP_STRING(es_event->PublisherUrl), ++ UpnpEventSubscribe_get_PublisherUrl_cstr(es_event), + es_event->Sid, + es_event->TimeOut ); + #endif +@@ -1280,29 +1269,29 @@ upnpEventRenewalComplete: + msg << "error(UPNP_EVENT_SUBSCRIPTION_EXPIRED): "; + msg2 << "UPNP_EVENT_SUBSCRIPTION_EXPIRED: "; + upnpEventSubscriptionExpired: +- struct Upnp_Event_Subscribe *es_event = +- (struct Upnp_Event_Subscribe *)Event; ++ UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)Event; + Upnp_SID newSID; + memset(newSID, 0, sizeof(Upnp_SID)); + int TimeOut = 1801; + int ret = UpnpSubscribe( + upnpCP->m_UPnPClientHandle, +- GET_UPNP_STRING(es_event->PublisherUrl), ++ ++ UpnpEventSubscribe_get_PublisherUrl_cstr(es_event), + &TimeOut, + newSID); + if (ret != UPNP_E_SUCCESS) { + msg << "Error Subscribing to EventURL"; + UPnP::ProcessErrorMessage( +- msg.str(), es_event->ErrCode, NULL, NULL); ++ msg.str(), UpnpEventSubscribe_get_ErrCode(es_event), NULL, NULL); + } else { + ServiceMap::iterator it = +- upnpCP->m_ServiceMap.find(GET_UPNP_STRING(es_event->PublisherUrl)); ++ upnpCP->m_ServiceMap.find(UpnpEventSubscribe_get_PublisherUrl_cstr(es_event)); + if (it != upnpCP->m_ServiceMap.end()) { + CUPnPService &service = *(it->second); + service.SetTimeout(TimeOut); + service.SetSID(newSID); + msg2 << "Re-subscribed to EventURL '" << +- GET_UPNP_STRING(es_event->PublisherUrl) << ++ UpnpEventSubscribe_get_PublisherUrl_cstr(es_event) << + "' with SID == '" << + newSID << "'."; + AddDebugLogLineC(logUPnP, msg2); +@@ -1321,17 +1310,16 @@ upnpEventSubscriptionExpired: + case UPNP_CONTROL_ACTION_COMPLETE: { + //fprintf(stderr, "Callback: UPNP_CONTROL_ACTION_COMPLETE\n"); + // This is here if we choose to do this asynchronously +- struct Upnp_Action_Complete *a_event = +- (struct Upnp_Action_Complete *)Event; +- if (a_event->ErrCode != UPNP_E_SUCCESS) { ++ UpnpActionComplete *a_event = (UpnpActionComplete *)Event; ++ if (UpnpActionComplete_get_ErrCode(a_event) != UPNP_E_SUCCESS) { + UPnP::ProcessErrorMessage( + "UpnpSendActionAsync", +- a_event->ErrCode, NULL, +- a_event->ActionResult); ++ UpnpActionComplete_get_ErrCode(a_event), NULL, ++ UpnpActionComplete_get_ActionResult(a_event)); + } else { + // Check the response document + UPnP::ProcessActionResponse( +- a_event->ActionResult, ++ UpnpActionComplete_get_ActionResult(a_event), + ""); + } + /* No need for any processing here, just print out results. +@@ -1342,12 +1330,11 @@ upnpEventSubscriptionExpired: + case UPNP_CONTROL_GET_VAR_COMPLETE: { + //fprintf(stderr, "Callback: UPNP_CONTROL_GET_VAR_COMPLETE\n"); + msg << "error(UPNP_CONTROL_GET_VAR_COMPLETE): "; +- struct Upnp_State_Var_Complete *sv_event = +- (struct Upnp_State_Var_Complete *)Event; +- if (sv_event->ErrCode != UPNP_E_SUCCESS) { ++ UpnpStateVarComplete *sv_event = (UpnpStateVarComplete *)Event; ++ if (UpnpStateVarComplete_get_ErrCode(sv_event) != UPNP_E_SUCCESS) { + msg << "m_UpnpGetServiceVarStatusAsync"; + UPnP::ProcessErrorMessage( +- msg.str(), sv_event->ErrCode, NULL, NULL); ++ msg.str(), UpnpStateVarComplete_get_ErrCode(sv_event), NULL, NULL); + } else { + #if 0 + // Warning: The use of UpnpGetServiceVarStatus and +--- a/src/UPnPBase.h ++++ b/src/UPnPBase.h +@@ -490,9 +490,19 @@ public: + // Callback function + static int Callback( + Upnp_EventType EventType, +- void* Event, ++ const void* Event, + void* Cookie); + ++#if UPNP_VERSION < 10800 ++ /* in libupnp 1.6 Event is not const */ ++ static int Callback( ++ Upnp_EventType EventType, ++ void* Event, ++ void* Cookie) { ++ return Callback(EventType, (const void *)Event, Cookie); ++ } ++#endif ++ + private: + void OnEventReceived( + const std::string &Sid, +--- a/configure.in ++++ b/configure.in +@@ -220,7 +220,7 @@ MULE_ARG_ENABLE([upnp], [yes], [do not c + MULE_IF_ENABLED_ANY([monolithic, amule-daemon],, [MULE_ENABLEVAR([upnp])=no]) + MULE_IF_ENABLED([upnp], [ + LIBUPNP_CHECK( +- [1.6.6], ++ [1.6.24], + [MULE_APPEND([LIBUPNP_CPPFLAGS], [-DENABLE_UPNP=1])], + [MULE_ENABLEVAR([upnp])=disabled + MULE_WARNING([UPnP code has been disabled because ${libupnp_error}.])]