-diff -ur mediastreamer-2.16.1/src/upnp/upnp_igd.c mediastreamer-2.16.1-upnp-1.14/src/upnp/upnp_igd.c
---- mediastreamer-2.16.1/src/upnp/upnp_igd.c 2017-04-06 11:27:56.000000000 +0200
-+++ mediastreamer-2.16.1-upnp-1.14/src/upnp/upnp_igd.c 2020-10-24 09:56:24.947219573 +0200
+--- 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
*
+ 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, UPNP_STRING(UpnpActionComplete_get_CtrlUrl(a_event)), UpnpActionComplete_get_ActionRequest(a_event), UpnpActionComplete_get_ActionResult(a_event));
++ upnp_igd_handle_send_action(igd_ctxt, UpnpActionComplete_get_CtrlUrl_cstr(a_event), UpnpActionComplete_get_ActionRequest(a_event), UpnpActionComplete_get_ActionResult(a_event));
}
}
break;
+ 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, UPNP_STRING(UpnpStateVarComplete_get_CtrlUrl(sv_event)), UpnpStateVarComplete_get_StateVarName_cstr(sv_event), UpnpStateVarComplete_get_CurrentVal_cstr(sv_event));
++ 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;
+ 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, UPNP_STRING(UpnpEventSubscribe_get_PublisherUrl(es_event)), UpnpEventSubscribe_get_SID_cstr(es_event), UpnpEventSubscribe_get_TimeOut(es_event));
++ 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;
int ret;
- ret = UpnpSubscribe(igd_ctxt->upnp_handle, UPNP_STRING(es_event->PublisherUrl), &TimeOut, newSID);
-+ ret = UpnpSubscribe(igd_ctxt->upnp_handle, UPNP_STRING(UpnpEventSubscribe_get_PublisherUrl(es_event)), &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, UPNP_STRING(UpnpEventSubscribe_get_PublisherUrl(es_event)), 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);
}
-@@ -1070,9 +1070,9 @@
+@@ -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 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(ip_address, port);
++ ret = UpnpInit2(interface, port);
if (ret != UPNP_E_SUCCESS) {
-- upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "UpnpInit() Error: %d", ret);
-+ upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "UpnpInit2() Error: %d", ret);
+ upnp_igd_print(igd_ctxt, UPNP_IGD_ERROR, "UpnpInit() Error: %d", ret);
UpnpFinish();
- ithread_mutex_destroy(&igd_ctxt->print_mutex);
- ithread_mutex_destroy(&igd_ctxt->devices_mutex);
-diff -ur mediastreamer-2.16.1/src/upnp/upnp_igd_cmd.c mediastreamer-2.16.1-upnp-1.14/src/upnp/upnp_igd_cmd.c
---- mediastreamer-2.16.1/src/upnp/upnp_igd_cmd.c 2017-04-06 11:27:56.000000000 +0200
-+++ mediastreamer-2.16.1-upnp-1.14/src/upnp/upnp_igd_cmd.c 2020-10-24 09:59:22.519393813 +0200
+@@ -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);
-+ struct UpnpActionComplete *a_event = (UpnpActionComplete *)event;
-+ upnp_igd_port_mapping_handle_action(igd_port_mapping_ctxt, UpnpActionComplete_get_ErrCode(a_event), UPNP_STRING(UpnpActionComplete_get_CtrlUrl(a_event)), UpnpActionComplete_get_ActionRequest(a_event), UpnpActionComplete_get_ActionResult(a_event));
++ 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;
-diff -ur mediastreamer-2.16.1/src/upnp/upnp_igd_private.h mediastreamer-2.16.1-upnp-1.14/src/upnp/upnp_igd_private.h
---- mediastreamer-2.16.1/src/upnp/upnp_igd_private.h 2017-04-06 11:27:56.000000000 +0200
-+++ mediastreamer-2.16.1-upnp-1.14/src/upnp/upnp_igd_private.h 2020-10-24 09:56:45.997524838 +0200
+--- 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_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);
-diff -ur mediastreamer-2.16.1/src/upnp/upnp_igd_utils.c mediastreamer-2.16.1-upnp-1.14/src/upnp/upnp_igd_utils.c
---- mediastreamer-2.16.1/src/upnp/upnp_igd_utils.c 2017-04-06 11:27:56.000000000 +0200
-+++ mediastreamer-2.16.1-upnp-1.14/src/upnp/upnp_igd_utils.c 2020-10-24 10:41:27.658376656 +0200
+--- 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 @@
}
}
break;
}
case UPNP_DISCOVERY_SEARCH_TIMEOUT:
-@@ -207,18 +207,18 @@
+@@ -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;
++ UpnpActionRequest *a_event = (UpnpActionRequest *)Event;
char *xmlbuff = NULL;
upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)",
- 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(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)) {
if (xmlbuff) {
upnp_igd_print(igd_ctxt, level, "ActRequest = %s", xmlbuff);
ixmlFreeDOMString(xmlbuff);
-@@ -227,8 +227,8 @@
+@@ -227,8 +226,8 @@
} else {
upnp_igd_print(igd_ctxt, level, "ActRequest = (null)");
}
if (xmlbuff) {
upnp_igd_print(igd_ctxt, level, "ActResult = %s", xmlbuff);
ixmlFreeDOMString(xmlbuff);
-@@ -240,15 +240,15 @@
+@@ -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;
++ UpnpActionComplete *a_event = (UpnpActionComplete *)Event;
char *xmlbuff = NULL;
upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)",
if (xmlbuff) {
upnp_igd_print(igd_ctxt, level, "ActRequest = %s", xmlbuff);
ixmlFreeDOMString(xmlbuff);
-@@ -257,8 +257,8 @@
+@@ -257,8 +255,8 @@
} else {
upnp_igd_print(igd_ctxt, level, "ActRequest = (null)");
}
if (xmlbuff) {
upnp_igd_print(igd_ctxt, level, "ActResult = %s", xmlbuff);
ixmlFreeDOMString(xmlbuff);
-@@ -270,83 +270,83 @@
+@@ -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;
++ UpnpStateVarRequest *sv_event = (UpnpStateVarRequest *)Event;
upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)",
- UpnpGetErrorMessage(sv_event->ErrCode), sv_event->ErrCode);
case UPNP_CONTROL_GET_VAR_COMPLETE: {
- struct Upnp_State_Var_Complete *sv_event =
- (struct Upnp_State_Var_Complete *)Event;
-+ UpnpStateVarComplete *sv_event =
-+ (UpnpStateVarComplete *)Event;
++ UpnpStateVarComplete *sv_event = (UpnpStateVarComplete *)Event;
upnp_igd_print(igd_ctxt, level, "ErrCode = %s(%d)",
- UpnpGetErrorMessage(sv_event->ErrCode), sv_event->ErrCode);
case UPNP_EVENT_SUBSCRIPTION_REQUEST: {
- struct Upnp_Subscription_Request *sr_event =
- (struct Upnp_Subscription_Request *)Event;
-+ UpnpSubscriptionRequest *sr_event =
-+ (UpnpSubscriptionRequest *)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, "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));
++ 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);
case UPNP_EVENT_RENEWAL_COMPLETE: {
- struct Upnp_Event_Subscribe *es_event =
- (struct Upnp_Event_Subscribe *)Event;
-+ UpnpEventSubscribe *es_event =
-+ (UpnpEventSubscribe *)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));
case UPNP_EVENT_UNSUBSCRIBE_COMPLETE: {
- struct Upnp_Event_Subscribe *es_event =
- (struct Upnp_Event_Subscribe *)Event;
-+ UpnpEventSubscribe *es_event =
-+ (UpnpEventSubscribe *)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));
case UPNP_EVENT_SUBSCRIPTION_EXPIRED: {
- struct Upnp_Event_Subscribe *es_event =
- (struct Upnp_Event_Subscribe *)Event;
-+ UpnpEventSubscribe *es_event =
-+ (UpnpEventSubscribe *)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));
break;
}
}
-diff -ur mediastreamer-2.16.1/src/upnp/upnp_igd_utils.h mediastreamer-2.16.1-upnp-1.14/src/upnp/upnp_igd_utils.h
---- mediastreamer-2.16.1/src/upnp/upnp_igd_utils.h 2017-04-06 11:27:56.000000000 +0200
-+++ mediastreamer-2.16.1-upnp-1.14/src/upnp/upnp_igd_utils.h 2020-10-24 09:57:35.918190644 +0200
+--- 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, ...);