[telepathy-sofiasip/master] Make keepalive-interval parameter a uint32 with saner semantics
Mikhail Zabaluev
mikhail.zabaluev at nokia.com
Thu Jun 18 04:32:02 PDT 2009
---
src/sip-connection-helpers.c | 19 ++++++---------
src/sip-connection-manager.c | 6 ++--
src/sip-connection-private.h | 3 +-
src/sip-connection.c | 50 +++++++++++++++++++++++++++++------------
4 files changed, 48 insertions(+), 30 deletions(-)
diff --git a/src/sip-connection-helpers.c b/src/sip-connection-helpers.c
index 1b58511..6d590b2 100644
--- a/src/sip-connection-helpers.c
+++ b/src/sip-connection-helpers.c
@@ -379,8 +379,8 @@ tpsip_conn_update_nua_outbound (TpsipConnection *conn)
static void
priv_sanitize_keepalive_interval (TpsipConnectionPrivate *priv)
{
- gint minimum_interval;
- if (priv->keepalive_interval > 0)
+ guint minimum_interval;
+ if (priv->keepalive_interval != 0)
{
minimum_interval =
(priv->keepalive_mechanism == TPSIP_CONNECTION_KEEPALIVE_REGISTER)
@@ -388,7 +388,7 @@ priv_sanitize_keepalive_interval (TpsipConnectionPrivate *priv)
: TPSIP_CONNECTION_MINIMUM_KEEPALIVE_INTERVAL;
if (priv->keepalive_interval < minimum_interval)
{
- g_warning ("keepalive interval is too low, pushing to %d", minimum_interval);
+ g_warning ("keepalive interval is too low, pushing to %u", minimum_interval);
priv->keepalive_interval = minimum_interval;
}
}
@@ -400,14 +400,11 @@ tpsip_conn_update_nua_keepalive_interval (TpsipConnection *conn)
TpsipConnectionPrivate *priv = TPSIP_CONNECTION_GET_PRIVATE (conn);
long keepalive_interval;
- if (priv->keepalive_interval < 0)
+ if (!priv->keepalive_interval_specified)
return;
if (priv->keepalive_mechanism == TPSIP_CONNECTION_KEEPALIVE_NONE)
keepalive_interval = 0;
- else if (priv->keepalive_interval == 0)
- /* XXX: figure out proper default timeouts depending on transport */
- keepalive_interval = TPSIP_CONNECTION_DEFAULT_KEEPALIVE_INTERVAL;
else
{
priv_sanitize_keepalive_interval (priv);
@@ -432,13 +429,13 @@ tpsip_conn_update_nua_contact_features (TpsipConnection *conn)
if (priv->keepalive_mechanism != TPSIP_CONNECTION_KEEPALIVE_REGISTER)
return;
- if (priv->keepalive_interval < 0)
+ if (priv->keepalive_interval == 0)
return;
priv_sanitize_keepalive_interval (priv);
- timeout = (priv->keepalive_interval > 0)
- ? priv->keepalive_interval
- : TPSIP_CONNECTION_DEFAULT_KEEPALIVE_INTERVAL;
+ timeout = priv->keepalive_interval_specified
+ ? priv->keepalive_interval
+ : TPSIP_CONNECTION_DEFAULT_KEEPALIVE_INTERVAL;
contact_features = g_strdup_printf ("expires=%u", timeout);
nua_set_params(priv->sofia_nua,
NUTAG_M_FEATURES(contact_features),
diff --git a/src/sip-connection-manager.c b/src/sip-connection-manager.c
index 4e190fe..0a01bdf 100644
--- a/src/sip-connection-manager.c
+++ b/src/sip-connection-manager.c
@@ -58,7 +58,7 @@ typedef struct {
gboolean loose_routing;
gboolean discover_binding;
gchar *keepalive_mechanism;
- gint keepalive_interval;
+ guint keepalive_interval;
gboolean discover_stun;
gchar *stun_server;
guint stun_port;
@@ -162,8 +162,8 @@ static const TpCMParamSpec tpsip_params[] = {
/* Mechanism used for connection keepalive maintenance */
{ "keepalive-mechanism", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING,
0, NULL, G_STRUCT_OFFSET (TpsipConnParams, keepalive_mechanism) },
- /* KA interval */
- { "keepalive-interval", DBUS_TYPE_INT32_AS_STRING, G_TYPE_INT,
+ /* Keep-alive interval */
+ { "keepalive-interval", DBUS_TYPE_UINT32_AS_STRING, G_TYPE_UINT,
0, NULL, G_STRUCT_OFFSET (TpsipConnParams, keepalive_interval) },
/* Use SRV DNS lookup to discover STUN server */
{ "discover-stun", DBUS_TYPE_BOOLEAN_AS_STRING, G_TYPE_BOOLEAN,
diff --git a/src/sip-connection-private.h b/src/sip-connection-private.h
index f26bf22..4344322 100644
--- a/src/sip-connection-private.h
+++ b/src/sip-connection-private.h
@@ -47,7 +47,7 @@ struct _TpsipConnectionPrivate
gchar *alias;
gchar *transport;
TpsipConnectionKeepaliveMechanism keepalive_mechanism;
- gint keepalive_interval;
+ guint keepalive_interval;
gboolean discover_stun;
gchar *stun_host;
guint stun_port;
@@ -57,6 +57,7 @@ struct _TpsipConnectionPrivate
gchar *extra_auth_password;
gboolean loose_routing;
gboolean discover_binding;
+ gboolean keepalive_interval_specified;
gboolean dispose_has_run;
};
diff --git a/src/sip-connection.c b/src/sip-connection.c
index 40bdc2b..66efa15 100644
--- a/src/sip-connection.c
+++ b/src/sip-connection.c
@@ -229,19 +229,37 @@ tpsip_connection_set_property (GObject *object,
break;
}
case PROP_KEEPALIVE_MECHANISM: {
- priv->keepalive_mechanism = g_value_get_enum (value);
- if (priv->sofia_nua) {
- tpsip_conn_update_nua_outbound (self);
- tpsip_conn_update_nua_keepalive_interval (self);
- }
+ TpsipConnectionKeepaliveMechanism mech = g_value_get_enum (value);
+ if (priv->keepalive_interval_specified && priv->keepalive_interval == 0)
+ {
+ if (mech != TPSIP_CONNECTION_KEEPALIVE_NONE
+ && mech != TPSIP_CONNECTION_KEEPALIVE_AUTO)
+ g_warning ("keep-alive mechanism selection is ignored when interval is 0");
+ }
+ else
+ {
+ priv->keepalive_mechanism = mech;
+ if (priv->sofia_nua != NULL)
+ {
+ tpsip_conn_update_nua_outbound (self);
+ tpsip_conn_update_nua_keepalive_interval (self);
+ }
+ }
break;
}
case PROP_KEEPALIVE_INTERVAL: {
- priv->keepalive_interval = g_value_get_int (value);
- if (priv->sofia_nua
- && priv->keepalive_mechanism != TPSIP_CONNECTION_KEEPALIVE_NONE) {
- tpsip_conn_update_nua_keepalive_interval(self);
- }
+ priv->keepalive_interval = g_value_get_uint (value);
+ priv->keepalive_interval_specified = TRUE;
+ if (priv->keepalive_interval == 0)
+ {
+ priv->keepalive_mechanism = TPSIP_CONNECTION_KEEPALIVE_NONE;
+ if (priv->sofia_nua != NULL)
+ tpsip_conn_update_nua_outbound (self);
+ }
+ if (priv->sofia_nua)
+ {
+ tpsip_conn_update_nua_keepalive_interval(self);
+ }
break;
}
case PROP_DISCOVER_BINDING: {
@@ -339,7 +357,9 @@ tpsip_connection_get_property (GObject *object,
break;
}
case PROP_KEEPALIVE_INTERVAL: {
- g_value_set_int (value, priv->keepalive_interval);
+ /* FIXME: get the keepalive interval from NUA in case anything
+ * really retrieves this property */
+ g_value_set_uint (value, priv->keepalive_interval);
break;
}
case PROP_DISCOVER_BINDING: {
@@ -492,10 +512,10 @@ tpsip_connection_class_init (TpsipConnectionClass *klass)
G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
INST_PROP(PROP_KEEPALIVE_MECHANISM);
- param_spec = g_param_spec_int ("keepalive-interval", "Keepalive interval",
- "Interval between keepalives in seconds "
- "(0 = internal default, -1 = let the stack decide)",
- -1, G_MAXINT32, -1,
+ param_spec = g_param_spec_uint ("keepalive-interval", "Keepalive interval",
+ "Interval between keepalive probes in seconds "
+ "(0 = disabled, unset = use a default interval)",
+ 0, G_MAXUINT32, 0,
G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
INST_PROP(PROP_KEEPALIVE_INTERVAL);
--
1.5.6.5
More information about the telepathy-commits
mailing list