sal_address_destroy(u);
}
+int linphone_address_get_port_int(const LinphoneAddress *u) {
+ return sal_address_get_port_int(u);
+}
+const char* linphone_address_get_port(const LinphoneAddress *u) {
+ return sal_address_get_port(u);
+}
/** @} */
}
linphone_core_enable_ipv6(lc,ipv6);
memset(&tr,0,sizeof(tr));
- tr.udp_port=lp_config_get_int(lc->config,"sip","sip_port",5060);
- tr.tcp_port=lp_config_get_int(lc->config,"sip","sip_tcp_port",0);
-
+ if (lp_config_get_int(lc->config,"sip","sip_random_port",0)) {
+ tr.udp_port=(0xDFF&+random())+1024;
+ } else {
+ tr.udp_port=lp_config_get_int(lc->config,"sip","sip_port",5060);
+ }
+ if (lp_config_get_int(lc->config,"sip","sip_tcp_random_port",0)) {
+ tr.tcp_port=(0xDFF&+random())+1024;
+ } else {
+ tr.tcp_port=lp_config_get_int(lc->config,"sip","sip_tcp_port",0);
+ }
/*start listening on ports*/
linphone_core_set_sip_transports(lc,&tr);
* is not used.
* @ingroup network_parameters
**/
-int linphone_core_get_sip_transport(LinphoneCore *lc, LCSipTransports *tr){
+int linphone_core_get_sip_transports(LinphoneCore *lc, LCSipTransports *tr){
memcpy(tr,&lc->sip_conf.transports,sizeof(*tr));
return 0;
}
static void proxy_update(LinphoneCore *lc){
ms_list_for_each(lc->sip_conf.proxies,(void (*)(void*))&linphone_proxy_config_update);
+ MSList* list=ms_list_copy(lc->sip_conf.deleted_proxies);
+ for(;list!=NULL;list=list->next){
+ LinphoneProxyConfig* cfg = (LinphoneProxyConfig*) list->data;
+ if (ms_time(NULL) - cfg->deletion_date > 5) {
+ lc->sip_conf.deleted_proxies =ms_list_remove(lc->sip_conf.deleted_proxies,(void *)cfg);
+ ms_message("clearing proxy config for [%s]",linphone_proxy_config_get_addr(cfg));
+ linphone_proxy_config_destroy(cfg);
+ }
+ }
+ ms_list_free(list);
}
static void assign_buddy_info(LinphoneCore *lc, BuddyInfo *info){
const char *linphone_address_get_display_name(const LinphoneAddress* u);
const char *linphone_address_get_username(const LinphoneAddress *u);
const char *linphone_address_get_domain(const LinphoneAddress *u);
+/**
+ * Get port number as an integer value.
+ *
+ */
+int linphone_address_get_port_int(const LinphoneAddress *u);
+/**
+ * Get port number, null if not present.
+ */
+const char* linphone_address_get_port(const LinphoneAddress *u);
void linphone_address_set_display_name(LinphoneAddress *u, const char *display_name);
void linphone_address_set_username(LinphoneAddress *uri, const char *username);
void linphone_address_set_domain(LinphoneAddress *uri, const char *host);
bool_t publish;
bool_t dial_escape_plus;
void* user_data;
+ time_t deletion_date;
};
struct _LinphoneAuthInfo
#include "sipsetup.h"
#include "lpconfig.h"
#include "private.h"
+#include "mediastreamer2/mediastream.h"
#include <ctype.h>
contact=linphone_address_new(obj->reg_identity);
linphone_address_set_domain (contact,localip);
linphone_address_set_port_int(contact,linphone_core_get_sip_port(obj->lc));
- ret=linphone_address_as_string_uri_only (contact);
+ linphone_address_set_display_name(contact,NULL);
+ LCSipTransports tr;
+ linphone_core_get_sip_transports(obj->lc,&tr);
+ if (tr.udp_port <= 0 && tr.tcp_port>0) {
+ sal_address_add_param(contact,"transport","tcp");
+ }
+ ret=linphone_address_as_string(contact);
linphone_address_destroy(contact);
}
linphone_address_destroy (proxy);
lc->sip_conf.proxies=ms_list_remove(lc->sip_conf.proxies,(void *)cfg);
/* add to the list of destroyed proxies, so that the possible unREGISTER request can succeed authentication */
lc->sip_conf.deleted_proxies=ms_list_append(lc->sip_conf.deleted_proxies,(void *)cfg);
+ cfg->deletion_date=ms_time(NULL);
/* this will unREGISTER */
linphone_proxy_config_edit(cfg);
if (lc->default_proxy==cfg){
+
char *sal_address_get_display_name_unquoted(const SalAddress *addr);
const char *sal_address_get_username(const SalAddress *addr);
const char *sal_address_get_domain(const SalAddress *addr);
+const char * sal_address_get_port(const SalAddress *addr);
+int sal_address_get_port_int(const SalAddress *uri);
+
void sal_address_set_display_name(SalAddress *addr, const char *display_name);
void sal_address_set_username(SalAddress *addr, const char *username);
void sal_address_set_domain(SalAddress *addr, const char *host);
char *sal_address_as_string(const SalAddress *u);
char *sal_address_as_string_uri_only(const SalAddress *u);
void sal_address_destroy(SalAddress *u);
-
+void sal_address_add_param(SalAddress *u,const char* name,const char* value);
osip_free(tmp);
return ret;
}
+void sal_address_add_param(SalAddress *u,const char* name,const char* value) {
+ osip_uri_uparam_add (((osip_from_t*)u)->url,ms_strdup(name),ms_strdup(value));
+}
void sal_address_destroy(SalAddress *u){
osip_from_free((osip_from_t*)u);
ctx->keepalive_period=value;
eXosip_set_option (EXOSIP_OPT_UDP_KEEP_ALIVE, &value);
}
+const char * sal_address_get_port(const SalAddress *addr) {
+ const osip_from_t *u=(const osip_from_t*)addr;
+ return null_if_empty(u->url->port);
+}
+int sal_address_get_port_int(const SalAddress *uri) {
+ const char* port = sal_address_get_port(uri);
+ if (port != NULL) {
+ return atoi(port);
+ } else {
+ return 5060;
+ }
+}
*/
abstract public void setDebugMode(boolean enable);
- //abstract public void setLogHandler(LinphoneLogHandler handler);
+ abstract public void setLogHandler(LinphoneLogHandler handler);
}