-Mon Jan 16 12:47:24 CST 2012
+Mon Jan 16 17:26:19 CST 2012
* @sa @RFC3265, #nua_i_subscribe, #nua_i_refer, NUTAG_ALLOW_EVENTS()
*/
+#if 0
static int nua_notify_client_init(nua_client_request_t *cr,
msg_t *, sip_t *,
tagi_t const *tags);
+
+
static int nua_notify_client_init_etag(nua_client_request_t *cr,
msg_t *msg, sip_t *sip,
tagi_t const *tags);
+
static int nua_notify_client_request(nua_client_request_t *cr,
msg_t *, sip_t *,
tagi_t const *tags);
sip_t const *sip,
nta_outgoing_t *orq,
tagi_t const *tags);
-
+#endif
+#if 0
static nua_client_methods_t const nua_notify_client_methods = {
SIP_METHOD_NOTIFY, /* crm_method, crm_method_name */
0, /* crm_extra */
nua_notify_client_report, /* crm_report */
NULL, /* crm_complete */
};
+#endif
+
+nua_client_methods_t const nua_notify_client_methods = {
+ SIP_METHOD_NOTIFY, /* crm_method, crm_method_name */
+ 0, /* crm_extra */
+ { /* crm_flags */
+ /* create_dialog */ 1,
+ /* in_dialog */ 1,
+ /* target refresh */ 1
+ },
+ NULL, /* crm_template */
+ NULL, /* crm_init */
+ NULL, /* crm_send */
+ NULL, /* crm_check_restart */
+ NULL, /* crm_recv */
+ NULL, /* crm_preliminary */
+ NULL, /* crm_report */
+ NULL, /* crm_complete */
+};
/**@internal Send NOTIFY. */
int nua_stack_notify(nua_t *nua,
{
return nua_client_create(nh, e, &nua_notify_client_methods, tags);
}
-
+#if 0
static int nua_notify_client_init(nua_client_request_t *cr,
msg_t *msg, sip_t *sip,
tagi_t const *tags)
return nua_base_client_request(cr, msg, sip, tags);
}
-
+#endif
/** @NUA_EVENT nua_r_notify
*
* Response to an outgoing @b NOTIFY request.
*
* @END_NUA_EVENT
*/
-
+#if 0
static int nua_notify_client_report(nua_client_request_t *cr,
int status, char const *phrase,
sip_t const *sip,
return 0;
}
-
+#endif
static void nua_notify_usage_refresh(nua_handle_t *nh,
nua_dialog_state_t *ds,
cseq = sip_cseq_create(nh->nh_home, callsequence, SIP_METHOD_NOTIFY);
nua_handle_bind(nh, &mod_sofia_globals.destroy_private);
- if (exptime > 0) {
- switch_snprintf(sstr, sizeof(sstr), "active;expires=%u", (unsigned) exptime);
- } else {
- switch_snprintf(sstr, sizeof(sstr), "terminated;reason=noresource");
+ if (exptime <= 0) {
+ exptime = 5;
}
+ switch_snprintf(sstr, sizeof(sstr), "active;expires=%u", (unsigned) exptime);
+
tmp = (char *)contact;
contact = sofia_glue_get_url_from_contact(tmp, 0);
char *sql;
if (now) {
+
+#if 0 // I think actually doing it right and sending terminated notify breaks dumb phones.
sql = switch_mprintf("select full_to, full_from, contact, expires, call_id, event, network_ip, network_port, "
"NULL as ct, NULL as pt "
" from sip_subscriptions where (expires = -1 or (expires > 0 and expires <= %ld)) and hostname='%q'",
sofia_glue_execute_sql_callback(profile, profile->ireg_mutex, sql, sofia_presence_send_sql, profile);
switch_safe_free(sql);
+#endif
sql = switch_mprintf("delete from sip_subscriptions where (expires = -1 or (expires > 0 and expires <= %ld)) and hostname='%q'",
(long) now, mod_sofia_globals.hostname);
}
-int sofia_sub_del_callback(void *pArg, int argc, char **argv, char **columnNames)
-{
- sofia_profile_t *profile = (sofia_profile_t *) pArg;
- nua_handle_t *nh;
-
- if (argv[0]) {
- if ((nh = nua_handle_by_call_id(profile->nua, argv[0]))) {
- nua_handle_destroy(nh);
- }
- }
- return 0;
-}
-
void sofia_reg_send_reboot(sofia_profile_t *profile, const char *user, const char *host, const char *contact, const char *user_agent,
const char *network_ip)
{
sofia_glue_actually_execute_sql(profile, sql, NULL);
- if (now) {
- switch_snprintf(sql, sizeof(sql),
- "select call_id from sip_subscriptions where (expires = -1 or (expires > 0 and expires <= %ld)) and hostname='%s'", (long) now,
- mod_sofia_globals.hostname);
- } else {
- switch_snprintfv(sql, sizeof(sql), "select sub_to_user,sub_to_host,call_id from sip_subscriptions where expires >= -1 and hostname='%q'",
- mod_sofia_globals.hostname);
- }
-
- sofia_glue_execute_sql_callback(profile, NULL, sql, sofia_sub_del_callback, profile);
-
-
sofia_presence_check_subscriptions(profile, now);
if (now) {
switch_snprintfv(sql, sizeof(sql), "delete from sip_authentication where expires > 0 and hostname='%q'", mod_sofia_globals.hostname);
sofia_glue_actually_execute_sql(profile, sql, NULL);
- switch_snprintfv(sql, sizeof(sql), "select sub_to_user,sub_to_host,call_id from sip_subscriptions where expires >= -1 and hostname='%q'",
- mod_sofia_globals.hostname);
- sofia_glue_execute_sql_callback(profile, NULL, sql, sofia_sub_del_callback, profile);
-
switch_snprintfv(sql, sizeof(sql), "delete from sip_subscriptions where expires >= -1 and hostname='%q'", mod_sofia_globals.hostname);
sofia_glue_actually_execute_sql(profile, sql, NULL);