--- mediastreamer2-4.4.2/src/upnp/upnp_igd.c.orig 2020-09-24 11:44:00.000000000 +0200 +++ mediastreamer2-4.4.2/src/upnp/upnp_igd.c 2020-09-27 09:49:46.143972883 +0200 @@ -395,7 +395,7 @@ * d_event -- event associated with the new device * ********************************************************************************/ -void upnp_igd_add_device(upnp_igd_context *igd_ctxt, IXML_Document *desc_doc, struct Upnp_Discovery *d_event) { +void upnp_igd_add_device(upnp_igd_context *igd_ctxt, IXML_Document *desc_doc, UpnpDiscovery *d_event) { upnp_igd_device_node *deviceNode, *tmpdevnode; int found = 0; int ret; @@ -423,7 +423,7 @@ baseURL = upnp_igd_get_first_document_item(igd_ctxt, desc_doc, "URLBase"); relURL = upnp_igd_get_first_document_item(igd_ctxt, desc_doc, "presentationURL"); - ret = UpnpResolveURL((baseURL ? baseURL : d_event->Location), relURL, presURL); + ret = UpnpResolveURL((baseURL ? baseURL : UpnpDiscovery_get_Location_cstr(d_event)), relURL, presURL); if (UPNP_E_SUCCESS != ret) { upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error generating presURL from %s + %s", baseURL, relURL); @@ -444,7 +444,7 @@ if (found) { /* The device is already there, so just update */ /* the advertisement timeout field */ - tmpdevnode->device.advr_time_out = d_event->Expires; + tmpdevnode->device.advr_time_out = UpnpDiscovery_get_Expires(d_event); upnp_igd_print(igd_ctxt, UPNP_IGD_DEBUG, "IGD device: %s[%s] | Update expires(%d)", friendlyName, UDN, tmpdevnode->device.advr_time_out); } else { upnp_igd_print(igd_ctxt, UPNP_IGD_MESSAGE, "Add IGD device: %s[%s]", friendlyName, UDN); @@ -453,12 +453,12 @@ deviceNode = (upnp_igd_device_node *) malloc(sizeof(upnp_igd_device_node)); memset(deviceNode->device.services, '\0', sizeof(upnp_igd_service) * IGD_SERVICE_SERVCOUNT); strncpy(deviceNode->device.udn, UDN, sizeof(deviceNode->device.udn)); - strncpy(deviceNode->device.desc_doc_url, d_event->Location, sizeof(deviceNode->device.desc_doc_url)); + strncpy(deviceNode->device.desc_doc_url, UpnpDiscovery_get_Location_cstr(d_event), sizeof(deviceNode->device.desc_doc_url)); strncpy(deviceNode->device.friendly_name, friendlyName, sizeof(deviceNode->device.friendly_name)); strncpy(deviceNode->device.model_name, modelName, sizeof(deviceNode->device.model_name)); strncpy(deviceNode->device.model_number, modelNumber, sizeof(deviceNode->device.model_number)); strncpy(deviceNode->device.pres_url, presURL, sizeof(deviceNode->device.pres_url)); - deviceNode->device.advr_time_out = d_event->Expires; + deviceNode->device.advr_time_out = UpnpDiscovery_get_Expires(d_event); // Reset values serviceId = NULL; @@ -468,7 +468,7 @@ for (service = 0; service < IGD_SERVICE_SERVCOUNT; service++) { - if (upnp_igd_get_find_and_parse_service(igd_ctxt, desc_doc, d_event->Location, + if (upnp_igd_get_find_and_parse_service(igd_ctxt, desc_doc, UpnpDiscovery_get_Location_cstr(d_event), IGDServiceType[service], &serviceId, &event_url, &controlURL)) { upnp_igd_print(igd_ctxt, UPNP_IGD_DEBUG, "Subscribing to EventURL %s...",event_url); ret = @@ -883,7 +883,7 @@ * cookie -- Optional data specified during callback registration * ********************************************************************************/ -int upnp_igd_callback(Upnp_EventType event_type, void* event, void *cookie) { +int upnp_igd_callback(Upnp_EventType event_type, const void* event, void *cookie) { int ret = 1; upnp_igd_context *igd_ctxt = (upnp_igd_context*)cookie; upnp_context_add_client(igd_ctxt); @@ -891,16 +891,16 @@ switch(event_type) { case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: case UPNP_DISCOVERY_SEARCH_RESULT: { - struct Upnp_Discovery *d_event = (struct Upnp_Discovery *)event; + UpnpDiscovery *d_event = (UpnpDiscovery *)event; IXML_Document *desc_doc = NULL; int ret; - if (d_event->ErrCode != UPNP_E_SUCCESS) { - upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error in Discovery Callback -- %d", d_event->ErrCode); + if (UpnpDiscovery_get_ErrCode(d_event) != UPNP_E_SUCCESS) { + upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error in Discovery Callback -- %d", UpnpDiscovery_get_ErrCode(d_event)); } - ret = UpnpDownloadXmlDoc(d_event->Location, &desc_doc); + ret = UpnpDownloadXmlDoc(UpnpDiscovery_get_Location_cstr(d_event), &desc_doc); if (ret != UPNP_E_SUCCESS) { - upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error obtaining device description from %s -- error = %d", d_event->Location, ret); + upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error obtaining device description from %s -- error = %d", UpnpDiscovery_get_Location_cstr(d_event), ret); } else { upnp_igd_add_device(igd_ctxt, desc_doc, d_event); } @@ -910,64 +910,64 @@ } break; case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: { - struct Upnp_Discovery *d_event = (struct Upnp_Discovery *)event; - if (d_event->ErrCode != UPNP_E_SUCCESS) { - upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error in Discovery ByeBye Callback -- %d", d_event->ErrCode); + UpnpDiscovery *d_event = (UpnpDiscovery *)event; + if (UpnpDiscovery_get_ErrCode(d_event) != UPNP_E_SUCCESS) { + upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error in Discovery ByeBye Callback -- %d", UpnpDiscovery_get_ErrCode(d_event)); } - upnp_igd_remove_device(igd_ctxt, d_event->DeviceId); + upnp_igd_remove_device(igd_ctxt, UpnpDiscovery_get_DeviceID_cstr(d_event)); } break; /* SOAP Stuff */ case UPNP_CONTROL_ACTION_COMPLETE: { - struct Upnp_Action_Complete *a_event = (struct Upnp_Action_Complete *)event; + UpnpActionComplete *a_event = (UpnpActionComplete *)event; - if (a_event->ErrCode != UPNP_E_SUCCESS) { - upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error in Action Complete Callback -- %d", a_event->ErrCode); + if (UpnpActionComplete_get_ErrCode(a_event) != UPNP_E_SUCCESS) { + upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error in Action Complete Callback -- %d", UpnpActionComplete_get_ErrCode(a_event)); } else { - upnp_igd_handle_send_action(igd_ctxt, UPNP_STRING(a_event->CtrlUrl), a_event->ActionRequest, a_event->ActionResult); + upnp_igd_handle_send_action(igd_ctxt, UpnpActionComplete_get_CtrlUrl_cstr(a_event), UpnpActionComplete_get_ActionRequest(a_event), UpnpActionComplete_get_ActionResult(a_event)); } } break; case UPNP_CONTROL_GET_VAR_COMPLETE: { - struct Upnp_State_Var_Complete *sv_event = (struct Upnp_State_Var_Complete *)event; + UpnpStateVarComplete *sv_event = (UpnpStateVarComplete *)event; - if (sv_event->ErrCode != UPNP_E_SUCCESS) { - upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error in Get Var Complete Callback -- %d", sv_event->ErrCode); + if (UpnpStateVarComplete_get_ErrCode(sv_event) != UPNP_E_SUCCESS) { + upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error in Get Var Complete Callback -- %d", UpnpStateVarComplete_get_ErrCode(sv_event)); } else { - upnp_igd_handle_get_var(igd_ctxt, UPNP_STRING(sv_event->CtrlUrl), sv_event->StateVarName, sv_event->CurrentVal); + upnp_igd_handle_get_var(igd_ctxt, UpnpStateVarComplete_get_CtrlUrl_cstr(sv_event), UpnpStateVarComplete_get_StateVarName_cstr(sv_event), UpnpStateVarComplete_get_CurrentVal(sv_event)); } } break; /* GENA Stuff */ case UPNP_EVENT_RECEIVED: { - struct Upnp_Event *e_event = (struct Upnp_Event *)event; + UpnpEvent *e_event = (UpnpEvent *)event; - upnp_igd_handle_event(igd_ctxt, e_event->Sid, e_event->EventKey, e_event->ChangedVariables); + upnp_igd_handle_event(igd_ctxt, UpnpEvent_get_SID_cstr(e_event), UpnpEvent_get_EventKey(e_event), UpnpEvent_get_ChangedVariables(e_event)); } break; case UPNP_EVENT_SUBSCRIBE_COMPLETE: case UPNP_EVENT_UNSUBSCRIBE_COMPLETE: case UPNP_EVENT_RENEWAL_COMPLETE: { - struct Upnp_Event_Subscribe *es_event = (struct Upnp_Event_Subscribe *)event; + UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)event; - if (es_event->ErrCode != UPNP_E_SUCCESS) { - upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error in Event Subscribe Callback -- %d", es_event->ErrCode); + if (UpnpEventSubscribe_get_ErrCode(es_event) != UPNP_E_SUCCESS) { + upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error in Event Subscribe Callback -- %d", UpnpEventSubscribe_get_ErrCode(es_event)); } else { - upnp_igd_handle_subscribe_update(igd_ctxt, UPNP_STRING(es_event->PublisherUrl), es_event->Sid, es_event->TimeOut); + upnp_igd_handle_subscribe_update(igd_ctxt, UpnpEventSubscribe_get_PublisherUrl_cstr(es_event), UpnpEventSubscribe_get_SID_cstr(es_event), UpnpEventSubscribe_get_TimeOut(es_event)); } } break; case UPNP_EVENT_AUTORENEWAL_FAILED: case UPNP_EVENT_SUBSCRIPTION_EXPIRED: { - struct Upnp_Event_Subscribe *es_event = (struct Upnp_Event_Subscribe *)event; + UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)event; int TimeOut = 1801; Upnp_SID newSID; int ret; - ret = UpnpSubscribe(igd_ctxt->upnp_handle, UPNP_STRING(es_event->PublisherUrl), &TimeOut, newSID); + ret = UpnpSubscribe(igd_ctxt->upnp_handle, UpnpEventSubscribe_get_PublisherUrl_cstr(es_event), &TimeOut, newSID); if (ret == UPNP_E_SUCCESS) { upnp_igd_print(igd_ctxt, UPNP_IGD_DEBUG, "Subscribed to EventURL with SID=%s", newSID); - upnp_igd_handle_subscribe_update(igd_ctxt, UPNP_STRING(es_event->PublisherUrl), newSID, TimeOut); + upnp_igd_handle_subscribe_update(igd_ctxt, UpnpEventSubscribe_get_PublisherUrl_cstr(es_event), newSID, TimeOut); } else { upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "Error Subscribing to EventURL -- %d", ret); } @@ -996,10 +996,10 @@ * cookie -- The cookie pass in cb_fct or print_fct * ********************************************************************************/ -upnp_igd_context* upnp_igd_create(upnp_igd_callback_function cb_fct, upnp_igd_print_function print_fct, const char *address, void *cookie) { +upnp_igd_context* upnp_igd_create(upnp_igd_callback_function cb_fct, upnp_igd_print_function print_fct, const char *interface, void *cookie) { int ret; unsigned short port = 0; - const char *ip_address = address; + const char *ip_address = NULL; upnp_igd_context *igd_ctxt = (upnp_igd_context*)malloc(sizeof(upnp_igd_context)); igd_ctxt->devices = NULL; igd_ctxt->callback_fct = cb_fct; @@ -1068,9 +1068,9 @@ ithread_cond_init(&igd_ctxt->client_cond, NULL); } - upnp_igd_print(igd_ctxt, UPNP_IGD_DEBUG, "Initializing uPnP IGD with ipaddress:%s port:%u", ip_address ? ip_address : "{NULL}", port); + upnp_igd_print(igd_ctxt, UPNP_IGD_DEBUG, "Initializing uPnP IGD with interface:%s port:%u", interface ? interface : "{NULL}", port); - ret = UpnpInit(ip_address, port); + ret = UpnpInit2(interface, port); if (ret != UPNP_E_SUCCESS) { upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "UpnpInit() Error: %d", ret); UpnpFinish(); @@ -1085,9 +1085,7 @@ free(igd_ctxt); return NULL; } - if (!ip_address) { - ip_address = UpnpGetServerIpAddress(); - } + ip_address = UpnpGetServerIp6Address(); if (!port) { port = UpnpGetServerPort(); } --- mediastreamer2-4.4.2/src/upnp/upnp_igd_cmd.c.orig 2020-09-24 11:44:00.000000000 +0200 +++ mediastreamer2-4.4.2/src/upnp/upnp_igd_cmd.c 2020-09-27 10:01:04.473631389 +0200 @@ -95,7 +95,7 @@ return 0; } -int upnp_igd_port_mapping_callback(Upnp_EventType event_type, void* event, void *cookie) { +int upnp_igd_port_mapping_callback(Upnp_EventType event_type, const void* event, void *cookie) { int ret = 1; upnp_igd_port_mapping_context *igd_port_mapping_ctxt = (upnp_igd_port_mapping_context*)cookie; upnp_context_add_client(igd_port_mapping_ctxt->igd_ctxt); @@ -103,8 +103,8 @@ switch(event_type) { case UPNP_CONTROL_ACTION_COMPLETE: { - struct Upnp_Action_Complete *a_event = (struct Upnp_Action_Complete *)event; - upnp_igd_port_mapping_handle_action(igd_port_mapping_ctxt, a_event->ErrCode, UPNP_STRING(a_event->CtrlUrl), a_event->ActionRequest, a_event->ActionResult); + UpnpActionComplete *a_event = (UpnpActionComplete *)event; + upnp_igd_port_mapping_handle_action(igd_port_mapping_ctxt, UpnpActionComplete_get_ErrCode(a_event), UpnpActionComplete_get_CtrlUrl_cstr(a_event), UpnpActionComplete_get_ActionRequest(a_event), UpnpActionComplete_get_ActionResult(a_event)); } break; --- mediastreamer2-4.4.2/include/mediastreamer2/upnp_igd.h.orig 2020-09-24 11:44:00.000000000 +0200 +++ mediastreamer2-4.4.2/include/mediastreamer2/upnp_igd.h 2020-09-27 09:50:51.076954444 +0200 @@ -72,7 +72,7 @@ typedef struct _upnp_igd_context upnp_igd_context; -MS2_PUBLIC upnp_igd_context* upnp_igd_create(upnp_igd_callback_function cb_fct, upnp_igd_print_function print_fct, const char* address, void *cookie); +MS2_PUBLIC upnp_igd_context* upnp_igd_create(upnp_igd_callback_function cb_fct, upnp_igd_print_function print_fct, const char* interface, void *cookie); MS2_PUBLIC int upnp_igd_start(upnp_igd_context*igd_ctxt); int upnp_igd_is_started(upnp_igd_context *igd_ctxt); int upnp_igd_stop(upnp_igd_context*igd_ctxt); --- mediastreamer2-4.4.2/src/upnp/upnp_igd_private.h.orig 2020-09-24 11:44:00.000000000 +0200 +++ mediastreamer2-4.4.2/src/upnp/upnp_igd_private.h 2020-09-27 09:42:32.032991330 +0200 @@ -144,7 +144,7 @@ void upnp_context_handle_callbacks(upnp_igd_context *igd_ctx); void upnp_context_free_callbacks(upnp_igd_context *igd_ctx); -int upnp_igd_callback(Upnp_EventType event_type, void* event, void *cookie); +int upnp_igd_callback(Upnp_EventType event_type, const void* event, void *cookie); int upnp_igd_send_action(upnp_igd_context* igd_ctxt, upnp_igd_device_node *device_node, int service, const char *actionname, const char **param_name, const char **param_val, int param_count, Upnp_FunPtr fun, const void *cookie); --- mediastreamer2-4.4.2/src/upnp/upnp_igd_utils.c.orig 2020-09-24 11:44:00.000000000 +0200 +++ mediastreamer2-4.4.2/src/upnp/upnp_igd_utils.c 2020-09-27 10:57:56.005149537 +0200 @@ -178,7 +178,7 @@ } } -void upnp_igd_print_event(upnp_igd_context *igd_ctxt, upnp_igd_print_level level, Upnp_EventType EventType, void *Event) { +void upnp_igd_print_event(upnp_igd_context *igd_ctxt, upnp_igd_print_level level, Upnp_EventType EventType, const void *Event) { ithread_mutex_lock(&igd_ctxt->print_mutex); upnp_igd_print(igd_ctxt, level, "======================================================================"); @@ -188,18 +188,18 @@ case UPNP_DISCOVERY_ADVERTISEMENT_ALIVE: case UPNP_DISCOVERY_ADVERTISEMENT_BYEBYE: case UPNP_DISCOVERY_SEARCH_RESULT: { - struct Upnp_Discovery *d_event = (struct Upnp_Discovery *)Event; + UpnpDiscovery *d_event = (UpnpDiscovery *)Event; upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)", - UpnpGetErrorMessage(d_event->ErrCode), d_event->ErrCode); - upnp_igd_print(igd_ctxt, level, "Expires = %d", d_event->Expires); - upnp_igd_print(igd_ctxt, level, "DeviceId = %s", d_event->DeviceId); - upnp_igd_print(igd_ctxt, level, "DeviceType = %s", d_event->DeviceType); - upnp_igd_print(igd_ctxt, level, "ServiceType = %s", d_event->ServiceType); - upnp_igd_print(igd_ctxt, level, "ServiceVer = %s", d_event->ServiceVer); - upnp_igd_print(igd_ctxt, level, "Location = %s", d_event->Location); - upnp_igd_print(igd_ctxt, level, "OS = %s", d_event->Os); - upnp_igd_print(igd_ctxt, level, "Ext = %s", d_event->Ext); + UpnpGetErrorMessage(UpnpDiscovery_get_ErrCode(d_event)), UpnpDiscovery_get_ErrCode(d_event)); + upnp_igd_print(igd_ctxt, level, "Expires = %d", UpnpDiscovery_get_Expires(d_event)); + upnp_igd_print(igd_ctxt, level, "DeviceId = %s", UpnpDiscovery_get_DeviceID_cstr(d_event)); + upnp_igd_print(igd_ctxt, level, "DeviceType = %s", UpnpDiscovery_get_DeviceType_cstr(d_event)); + upnp_igd_print(igd_ctxt, level, "ServiceType = %s", UpnpDiscovery_get_ServiceType_cstr(d_event)); + upnp_igd_print(igd_ctxt, level, "ServiceVer = %s", UpnpDiscovery_get_ServiceVer_cstr(d_event)); + upnp_igd_print(igd_ctxt, level, "Location = %s", UpnpDiscovery_get_Location_cstr(d_event)); + upnp_igd_print(igd_ctxt, level, "OS = %s", UpnpDiscovery_get_Os_cstr(d_event)); + upnp_igd_print(igd_ctxt, level, "Ext = %s", UpnpDiscovery_get_Ext_cstr(d_event)); break; } case UPNP_DISCOVERY_SEARCH_TIMEOUT: @@ -207,18 +207,17 @@ break; /* SOAP */ case UPNP_CONTROL_ACTION_REQUEST: { - struct Upnp_Action_Request *a_event = - (struct Upnp_Action_Request *)Event; + UpnpActionRequest *a_event = (UpnpActionRequest *)Event; char *xmlbuff = NULL; upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)", - UpnpGetErrorMessage(a_event->ErrCode), a_event->ErrCode); - upnp_igd_print(igd_ctxt, level, "ErrStr = %s", a_event->ErrStr); - upnp_igd_print(igd_ctxt, level, "ActionName = %s", a_event->ActionName); - upnp_igd_print(igd_ctxt, level, "UDN = %s", a_event->DevUDN); - upnp_igd_print(igd_ctxt, level, "ServiceID = %s", a_event->ServiceID); - if (a_event->ActionRequest) { - xmlbuff = ixmlPrintNode((IXML_Node *)a_event->ActionRequest); + UpnpGetErrorMessage(UpnpActionRequest_get_ErrCode(a_event)), UpnpActionRequest_get_ErrCode(a_event)); + upnp_igd_print(igd_ctxt, level, "ErrStr = %s", UpnpActionRequest_get_ErrStr_cstr(a_event)); + upnp_igd_print(igd_ctxt, level, "ActionName = %s", UpnpActionRequest_get_ActionName_cstr(a_event)); + upnp_igd_print(igd_ctxt, level, "UDN = %s", UpnpActionRequest_get_DevUDN_cstr(a_event)); + upnp_igd_print(igd_ctxt, level, "ServiceID = %s", UpnpActionRequest_get_ServiceID_cstr(a_event)); + if (UpnpActionRequest_get_ActionRequest(a_event)) { + xmlbuff = ixmlPrintNode((IXML_Node *)UpnpActionRequest_get_ActionRequest(a_event)); if (xmlbuff) { upnp_igd_print(igd_ctxt, level, "ActRequest = %s", xmlbuff); ixmlFreeDOMString(xmlbuff); @@ -227,8 +226,8 @@ } else { upnp_igd_print(igd_ctxt, level, "ActRequest = (null)"); } - if (a_event->ActionResult) { - xmlbuff = ixmlPrintNode((IXML_Node *)a_event->ActionResult); + if (UpnpActionRequest_get_ActionResult(a_event)) { + xmlbuff = ixmlPrintNode((IXML_Node *)UpnpActionRequest_get_ActionResult(a_event)); if (xmlbuff) { upnp_igd_print(igd_ctxt, level, "ActResult = %s", xmlbuff); ixmlFreeDOMString(xmlbuff); @@ -240,15 +239,14 @@ break; } case UPNP_CONTROL_ACTION_COMPLETE: { - struct Upnp_Action_Complete *a_event = - (struct Upnp_Action_Complete *)Event; + UpnpActionComplete *a_event = (UpnpActionComplete *)Event; char *xmlbuff = NULL; upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)", - UpnpGetErrorMessage(a_event->ErrCode), a_event->ErrCode); - upnp_igd_print(igd_ctxt, level, "CtrlUrl = %s", a_event->CtrlUrl); - if (a_event->ActionRequest) { - xmlbuff = ixmlPrintNode((IXML_Node *)a_event->ActionRequest); + UpnpGetErrorMessage(UpnpActionComplete_get_ErrCode(a_event)), UpnpActionComplete_get_ErrCode(a_event)); + upnp_igd_print(igd_ctxt, level, "CtrlUrl = %s", UpnpActionComplete_get_CtrlUrl_cstr(a_event)); + if (UpnpActionComplete_get_ActionRequest(a_event)) { + xmlbuff = ixmlPrintNode((IXML_Node *)UpnpActionComplete_get_ActionRequest(a_event)); if (xmlbuff) { upnp_igd_print(igd_ctxt, level, "ActRequest = %s", xmlbuff); ixmlFreeDOMString(xmlbuff); @@ -257,8 +255,8 @@ } else { upnp_igd_print(igd_ctxt, level, "ActRequest = (null)"); } - if (a_event->ActionResult) { - xmlbuff = ixmlPrintNode((IXML_Node *)a_event->ActionResult); + if (UpnpActionComplete_get_ActionResult(a_event)) { + xmlbuff = ixmlPrintNode((IXML_Node *)UpnpActionComplete_get_ActionResult(a_event)); if (xmlbuff) { upnp_igd_print(igd_ctxt, level, "ActResult = %s", xmlbuff); ixmlFreeDOMString(xmlbuff); @@ -270,83 +268,77 @@ break; } case UPNP_CONTROL_GET_VAR_REQUEST: { - struct Upnp_State_Var_Request *sv_event = - (struct Upnp_State_Var_Request *)Event; + UpnpStateVarRequest *sv_event = (UpnpStateVarRequest *)Event; upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)", - UpnpGetErrorMessage(sv_event->ErrCode), sv_event->ErrCode); - upnp_igd_print(igd_ctxt, level, "ErrStr = %s", sv_event->ErrStr); - upnp_igd_print(igd_ctxt, level, "UDN = %s", sv_event->DevUDN); - upnp_igd_print(igd_ctxt, level, "ServiceID = %s", sv_event->ServiceID); - upnp_igd_print(igd_ctxt, level, "StateVarName= %s", sv_event->StateVarName); - upnp_igd_print(igd_ctxt, level, "CurrentVal = %s", sv_event->CurrentVal); + UpnpGetErrorMessage(UpnpStateVarRequest_get_ErrCode(sv_event)), UpnpStateVarRequest_get_ErrCode(sv_event)); + upnp_igd_print(igd_ctxt, level, "ErrStr = %s", UpnpStateVarRequest_get_ErrStr_cstr(sv_event)); + upnp_igd_print(igd_ctxt, level, "UDN = %s", UpnpStateVarRequest_get_DevUDN_cstr(sv_event)); + upnp_igd_print(igd_ctxt, level, "ServiceID = %s", UpnpStateVarRequest_get_ServiceID_cstr(sv_event)); + upnp_igd_print(igd_ctxt, level, "StateVarName= %s", UpnpStateVarRequest_get_StateVarName_cstr(sv_event)); + upnp_igd_print(igd_ctxt, level, "CurrentVal = %s", UpnpStateVarRequest_get_CurrentVal_cstr(sv_event)); break; } case UPNP_CONTROL_GET_VAR_COMPLETE: { - struct Upnp_State_Var_Complete *sv_event = - (struct Upnp_State_Var_Complete *)Event; + UpnpStateVarComplete *sv_event = (UpnpStateVarComplete *)Event; upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)", - UpnpGetErrorMessage(sv_event->ErrCode), sv_event->ErrCode); - upnp_igd_print(igd_ctxt, level, "CtrlUrl = %s", sv_event->CtrlUrl); - upnp_igd_print(igd_ctxt, level, "StateVarName= %s", sv_event->StateVarName); - upnp_igd_print(igd_ctxt, level, "CurrentVal = %s", sv_event->CurrentVal); + UpnpGetErrorMessage(UpnpStateVarComplete_get_ErrCode(sv_event)), UpnpStateVarComplete_get_ErrCode(sv_event)); + upnp_igd_print(igd_ctxt, level, "CtrlUrl = %s", UpnpStateVarComplete_get_CtrlUrl_cstr(sv_event)); + upnp_igd_print(igd_ctxt, level, "StateVarName= %s", UpnpStateVarComplete_get_StateVarName_cstr(sv_event)); + upnp_igd_print(igd_ctxt, level, "CurrentVal = %s", UpnpStateVarComplete_get_CurrentVal_cstr(sv_event)); break; } /* GENA */ case UPNP_EVENT_SUBSCRIPTION_REQUEST: { - struct Upnp_Subscription_Request *sr_event = - (struct Upnp_Subscription_Request *)Event; + UpnpSubscriptionRequest *sr_event = (UpnpSubscriptionRequest *)Event; - upnp_igd_print(igd_ctxt, level, "ServiceID = %s", sr_event->ServiceId); - upnp_igd_print(igd_ctxt, level, "UDN = %s", sr_event->UDN); - upnp_igd_print(igd_ctxt, level, "SID = %s", sr_event->Sid); + upnp_igd_print(igd_ctxt, level, "ServiceID = %s", UpnpSubscriptionRequest_get_ServiceId_cstr(sr_event)); + upnp_igd_print(igd_ctxt, level, "UDN = %s", UpnpSubscriptionRequest_get_UDN_cstr(sr_event)); + upnp_igd_print(igd_ctxt, level, "SID = %s", UpnpSubscriptionRequest_get_SID_cstr(sr_event)); break; } case UPNP_EVENT_RECEIVED: { - struct Upnp_Event *e_event = (struct Upnp_Event *)Event; + UpnpEvent *e_event = (UpnpEvent *)Event; char *xmlbuff = NULL; - upnp_igd_print(igd_ctxt, level, "SID = %s", e_event->Sid); - upnp_igd_print(igd_ctxt, level, "EventKey = %d", e_event->EventKey); - xmlbuff = ixmlPrintNode((IXML_Node *)e_event->ChangedVariables); + upnp_igd_print(igd_ctxt, level, "SID = %s", UpnpEvent_get_SID_cstr(e_event)); + upnp_igd_print(igd_ctxt, level, "EventKey = %d", UpnpEvent_get_EventKey(e_event)); + xmlbuff = ixmlPrintNode((IXML_Node *)UpnpEvent_get_ChangedVariables(e_event)); upnp_igd_print(igd_ctxt, level, "ChangedVars = %s", xmlbuff); ixmlFreeDOMString(xmlbuff); xmlbuff = NULL; break; } case UPNP_EVENT_RENEWAL_COMPLETE: { - struct Upnp_Event_Subscribe *es_event = - (struct Upnp_Event_Subscribe *)Event; + UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)Event; - upnp_igd_print(igd_ctxt, level, "SID = %s", es_event->Sid); + upnp_igd_print(igd_ctxt, level, "SID = %s", UpnpEventSubscribe_get_SID_cstr(es_event)); upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)", - UpnpGetErrorMessage(es_event->ErrCode), es_event->ErrCode); - upnp_igd_print(igd_ctxt, level, "TimeOut = %d", es_event->TimeOut); + UpnpGetErrorMessage(UpnpEventSubscribe_get_ErrCode(es_event)), UpnpEventSubscribe_get_ErrCode(es_event)); + upnp_igd_print(igd_ctxt, level, "TimeOut = %d", UpnpEventSubscribe_get_TimeOut(es_event)); break; } case UPNP_EVENT_SUBSCRIBE_COMPLETE: case UPNP_EVENT_UNSUBSCRIBE_COMPLETE: { - struct Upnp_Event_Subscribe *es_event = - (struct Upnp_Event_Subscribe *)Event; + UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)Event; - upnp_igd_print(igd_ctxt, level, "SID = %s", es_event->Sid); + upnp_igd_print(igd_ctxt, level, "SID = %s", UpnpEventSubscribe_get_SID_cstr(es_event)); upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)", - UpnpGetErrorMessage(es_event->ErrCode), es_event->ErrCode); - upnp_igd_print(igd_ctxt, level, "PublisherURL= %s", es_event->PublisherUrl); - upnp_igd_print(igd_ctxt, level, "TimeOut = %d", es_event->TimeOut); + UpnpGetErrorMessage(UpnpEventSubscribe_get_ErrCode(es_event)), UpnpEventSubscribe_get_ErrCode(es_event)); + upnp_igd_print(igd_ctxt, level, "PublisherURL= %s", UpnpEventSubscribe_get_PublisherUrl_cstr(es_event)); + upnp_igd_print(igd_ctxt, level, "TimeOut = %d", UpnpEventSubscribe_get_TimeOut(es_event)); break; } case UPNP_EVENT_AUTORENEWAL_FAILED: case UPNP_EVENT_SUBSCRIPTION_EXPIRED: { - struct Upnp_Event_Subscribe *es_event = - (struct Upnp_Event_Subscribe *)Event; + UpnpEventSubscribe *es_event = (UpnpEventSubscribe *)Event; - upnp_igd_print(igd_ctxt, level, "SID = %s", es_event->Sid); + upnp_igd_print(igd_ctxt, level, "SID = %s", UpnpEventSubscribe_get_SID_cstr(es_event)); upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)", - UpnpGetErrorMessage(es_event->ErrCode), es_event->ErrCode); - upnp_igd_print(igd_ctxt, level, "PublisherURL= %s", es_event->PublisherUrl); - upnp_igd_print(igd_ctxt, level, "TimeOut = %d", es_event->TimeOut); + UpnpGetErrorMessage(UpnpEventSubscribe_get_ErrCode(es_event)), UpnpEventSubscribe_get_ErrCode(es_event)); + upnp_igd_print(igd_ctxt, level, "PublisherURL= %s", UpnpEventSubscribe_get_PublisherUrl_cstr(es_event)); + upnp_igd_print(igd_ctxt, level, "TimeOut = %d", UpnpEventSubscribe_get_TimeOut(es_event)); break; } } --- mediastreamer2-4.4.2/src/upnp/upnp_igd_utils.h.orig 2020-09-24 11:44:00.000000000 +0200 +++ mediastreamer2-4.4.2/src/upnp/upnp_igd_utils.h 2020-09-27 09:51:21.930120631 +0200 @@ -39,7 +39,7 @@ void upnp_igd_print(upnp_igd_context *uIGD, upnp_igd_print_level level, const char *fmt, ...); void upnp_igd_print_event_type(upnp_igd_context *uIGD, upnp_igd_print_level level, Upnp_EventType S); -void upnp_igd_print_event(upnp_igd_context *uIGD, upnp_igd_print_level level, Upnp_EventType EventType, void *Event); +void upnp_igd_print_event(upnp_igd_context *uIGD, upnp_igd_print_level level, Upnp_EventType EventType, const void *Event); char *upnp_igd_get_first_document_item(upnp_igd_context *uIGD, IXML_Document *doc, const char *item); char *upnp_igd_get_element_value(upnp_igd_context *uIGD, IXML_Element *element); char *upnp_igd_get_first_element_item(upnp_igd_context *uIGD,IXML_Element *element, const char *item); --- mediastreamer2-4.4.2/configure.ac.orig 2021-07-05 06:50:46.295451589 +0200 +++ mediastreamer2-4.4.2/configure.ac 2021-07-05 17:16:33.665373367 +0200 @@ -717,7 +717,7 @@ AC_ARG_ENABLE(upnp, if test "$build_upnp" != "false" ; then PKG_CHECK_MODULES([LIBUPNP], [libupnp], - [if pkg-config --atleast-version=1.6 "libupnp < 1.7"; then + [if pkg-config --atleast-version=1.8 "libupnp"; then build_upnp=true old_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $LIBUPNP_CFLAGS -Werror -Wno-error=unused-variable" @@ -730,7 +730,7 @@ if test "$build_upnp" != "false" ; then AC_DEFINE(USE_PATCHED_UPNP, 1, [Define if upnp is patched])) CFLAGS="$old_CFLAGS" else - AC_MSG_ERROR([libupnp >= 1.6 < 1.5 required.]) + AC_MSG_ERROR([libupnp >= 1.8 required.]) fi], [if test "$build_upnp" == "true" ; then AC_MSG_ERROR([libupnp not found.])