#include "linphonecore.h"
#include "sal.h"
-typedef enum {
- LinphoneUpnpStateIdle,
- LinphoneUpnpStatePending,
- LinphoneUpnpStateAdding, // Only used by port binding
- LinphoneUpnpStateRemoving, // Only used by port binding
- LinphoneUpnpStateNotAvailable, // Only used by uPnP context
- LinphoneUpnpStateOk,
- LinphoneUpnpStateKo,
-} UpnpState;
+typedef struct _UpnpSession UpnpSession;
+typedef struct _UpnpContext UpnpContext;
-
-typedef struct _UpnpPortBinding {
- ms_mutex_t mutex;
- UpnpState state;
- upnp_igd_ip_protocol protocol;
- char local_addr[LINPHONE_IPADDR_SIZE];
- int local_port;
- char external_addr[LINPHONE_IPADDR_SIZE];
- int external_port;
- int retry;
- int ref;
-} UpnpPortBinding;
-
-typedef struct _UpnpStream {
- UpnpPortBinding *rtp;
- UpnpPortBinding *rtcp;
- UpnpState state;
-} UpnpStream;
-
-typedef struct _UpnpSession {
- UpnpStream *audio;
- UpnpStream *video;
- UpnpState state;
-} UpnpSession;
-
-typedef struct _UpnpContext {
- upnp_igd_context *upnp_igd_ctxt;
- UpnpPortBinding *sip_tcp;
- UpnpPortBinding *sip_tls;
- UpnpPortBinding *sip_udp;
- UpnpState state;
- UpnpState old_state;
- MSList *pending_configs;
-
- ms_mutex_t mutex;
-} UpnpContext;
-
-void linphone_core_update_local_media_description_from_upnp(SalMediaDescription *desc, UpnpSession *session);
+int linphone_core_update_local_media_description_from_upnp(SalMediaDescription *desc, UpnpSession *session);
+int linphone_core_update_upnp_from_remote_media_description(LinphoneCall *call, const SalMediaDescription *md);
int linphone_core_update_upnp(LinphoneCore *lc, LinphoneCall *call);
-int upnp_call_process(LinphoneCall *call);
-UpnpSession* upnp_session_new();
-void upnp_session_destroy(LinphoneCall* call);
-int upnp_context_init(LinphoneCore *lc);
-void upnp_context_uninit(LinphoneCore *lc);
+int linphone_upnp_call_process(LinphoneCall *call);
+UpnpSession* linphone_upnp_session_new(LinphoneCall *call);
+void linphone_upnp_session_destroy(UpnpSession* session);
+LinphoneUpnpState linphone_upnp_session_get_state(UpnpSession *session);
+
+UpnpContext *linphone_upnp_context_new(LinphoneCore *lc);
+void linphone_upnp_context_destroy(UpnpContext *ctx);
+void linphone_upnp_refresh(UpnpContext *ctx);
+LinphoneUpnpState linphone_upnp_context_get_state(UpnpContext *ctx);
+const char *linphone_upnp_context_get_external_ipaddress(UpnpContext *ctx);
+int linphone_upnp_context_get_external_port(UpnpContext *ctx);
+bool_t linphone_upnp_context_is_ready_for_register(UpnpContext *ctx);
+void linphone_core_update_upnp_state_in_call_stats(LinphoneCall *call);
#endif //LINPHONE_UPNP_H