Kaynağa Gözat

presence Add RPC command presence.cleanup

Olle E. Johansson 12 yıl önce
ebeveyn
işleme
68094dd363

+ 46 - 24
modules/presence/README

@@ -16,9 +16,9 @@ Edited by
 
 
 Juha Heinanen
 Juha Heinanen
 
 
-   Copyright © 2006 Voice Sistem SRL
+   Copyright © 2006 Voice Sistem SRL
 
 
-   Copyright © 2009 Juha Heinanen
+   Copyright © 2009 Juha Heinanen
      __________________________________________________________________
      __________________________________________________________________
 
 
    Table of Contents
    Table of Contents
@@ -70,7 +70,11 @@ Juha Heinanen
               5.1. refreshWatchers
               5.1. refreshWatchers
               5.2. cleanup
               5.2. cleanup
 
 
-        6. Installation
+        6. RPC Commands
+
+              6.1. presence.cleanup
+
+        7. Installation
 
 
    2. Developer Guide
    2. Developer Guide
 
 
@@ -170,7 +174,11 @@ Chapter 1. Admin Guide
         5.1. refreshWatchers
         5.1. refreshWatchers
         5.2. cleanup
         5.2. cleanup
 
 
-   6. Installation
+   6. RPC Commands
+
+        6.1. presence.cleanup
+
+   7. Installation
 
 
 1. Overview
 1. Overview
 
 
@@ -245,19 +253,19 @@ Chapter 1. Admin Guide
    If set, the module is a fully operational presence server. Otherwise,
    If set, the module is a fully operational presence server. Otherwise,
    it is used as a 'library', for its exported functions.
    it is used as a 'library', for its exported functions.
 
 
-   Default value is “NULL�.
+   Default value is "NULL".
 
 
    Example 1.1. Set db_url parameter
    Example 1.1. Set db_url parameter
 ...
 ...
 modparam("presence", "db_url",
 modparam("presence", "db_url",
-        "mysql://openser:openserrw@localhost/openser")
+        "mysql://kamailio:kamailiorw@localhost/kamailio")
 ...
 ...
 
 
 3.2. presentity_table(str)
 3.2. presentity_table(str)
 
 
    The name of the db table where PUBLISH presence information is stored.
    The name of the db table where PUBLISH presence information is stored.
 
 
-   Default value is “presentity�.
+   Default value is "presentity".
 
 
    Example 1.2. Set presentity_table parameter
    Example 1.2. Set presentity_table parameter
 ...
 ...
@@ -269,7 +277,7 @@ modparam("presence", "presentity_table", "presentity")
    The name of the db table where active subscription information is
    The name of the db table where active subscription information is
    stored.
    stored.
 
 
-   Default value is “active_watchers�.
+   Default value is "active_watchers".
 
 
    Example 1.3. Set active_watchers_table parameter
    Example 1.3. Set active_watchers_table parameter
 ...
 ...
@@ -280,7 +288,7 @@ modparam("presence", "active_watchers_table", "active_watchers")
 
 
    The name of the db table where subscription states are stored.
    The name of the db table where subscription states are stored.
 
 
-   Default value is “watchers�.
+   Default value is "watchers".
 
 
    Example 1.4. Set watchers_table parameter
    Example 1.4. Set watchers_table parameter
 ...
 ...
@@ -292,7 +300,7 @@ modparam("presence", "watchers_table", "watchers")
    The period in seconds between checks if there are expired messages
    The period in seconds between checks if there are expired messages
    stored in database.
    stored in database.
 
 
-   Default value is “100�. A zero or negative value disables this
+   Default value is "100". A zero or negative value disables this
    activity.
    activity.
 
 
    Example 1.5. Set clean_period parameter
    Example 1.5. Set clean_period parameter
@@ -305,7 +313,7 @@ modparam("presence", "clean_period", 100)
    The period at which to synchronize cached subscriber info with the
    The period at which to synchronize cached subscriber info with the
    database.
    database.
 
 
-   Default value is “100�. A zero or negative value disables
+   Default value is "100". A zero or negative value disables
    synchronization.
    synchronization.
 
 
    Example 1.6. Set db_update_period parameter
    Example 1.6. Set db_update_period parameter
@@ -323,7 +331,7 @@ modparam("presence", "db_update_period", 100)
    than 0. When notifier_processes is less than or equal to 0 NOTIFY
    than 0. When notifier_processes is less than or equal to 0 NOTIFY
    requests are sent immediately.
    requests are sent immediately.
 
 
-   Default value is “5�.
+   Default value is "5".
 
 
    Example 1.7. Set waitn_time parameter
    Example 1.7. Set waitn_time parameter
 ...
 ...
@@ -340,7 +348,7 @@ modparam("presence", "waitn_time", 10)
    Separate notifier processes are only run when subs_db_mode is 3 (DB
    Separate notifier processes are only run when subs_db_mode is 3 (DB
    only mode).
    only mode).
 
 
-   Default value is “10�.
+   Default value is "10".
 
 
    Example 1.8. Set notifier_poll_rate parameter
    Example 1.8. Set notifier_poll_rate parameter
 ...
 ...
@@ -360,7 +368,7 @@ modparam("presence", "notifier_poll_rate", 20)
    NOTIFY requests can be sent on a dialog at the same time, there are
    NOTIFY requests can be sent on a dialog at the same time, there are
    race conditions which result in CSeq re-use.
    race conditions which result in CSeq re-use.
 
 
-   Default value is “1�.
+   Default value is "1".
 
 
    Example 1.9. Set notifier_processes parameter
    Example 1.9. Set notifier_processes parameter
 ...
 ...
@@ -372,7 +380,7 @@ modparam("presence", "notifier_processes", 2)
    The prefix used when generating to_tag when sending replies for
    The prefix used when generating to_tag when sending replies for
    SUBSCRIBE requests.
    SUBSCRIBE requests.
 
 
-   Default value is “10�.
+   Default value is "10".
 
 
    Example 1.10. Set to_tag_pref parameter
    Example 1.10. Set to_tag_pref parameter
 ...
 ...
@@ -385,7 +393,7 @@ modparam("presence", "to_tag_pref", 'pres')
    when sending a 200OK for a publish. It is used for forcing the client
    when sending a 200OK for a publish. It is used for forcing the client
    to send an update before the old publish expires.
    to send an update before the old publish expires.
 
 
-   Default value is “0�.
+   Default value is "0".
 
 
    Example 1.11. Set expires_offset parameter
    Example 1.11. Set expires_offset parameter
 ...
 ...
@@ -397,7 +405,7 @@ modparam("presence", "expires_offset", 10)
    The the maximum admissible expires value for PUBLISH/SUBSCRIBE message
    The the maximum admissible expires value for PUBLISH/SUBSCRIBE message
    (in seconds).
    (in seconds).
 
 
-   Default value is “3600�.
+   Default value is "3600".
 
 
    Example 1.12. Set max_expires parameter
    Example 1.12. Set max_expires parameter
 ...
 ...
@@ -468,7 +476,7 @@ modparam("presence", "subs_db_mode", 1)
    database or there are other external entities inserting data into the
    database or there are other external entities inserting data into the
    presentity table.
    presentity table.
 
 
-   Default value is “1�.
+   Default value is "1".
 
 
    Example 1.15. Set publ_cache parameter
    Example 1.15. Set publ_cache parameter
 ...
 ...
@@ -481,7 +489,7 @@ modparam("presence", "publ_cache", 0)
    This parameter will be used as the power of 2 when computing table
    This parameter will be used as the power of 2 when computing table
    size.
    size.
 
 
-   Default value is “9 (512)�.
+   Default value is "9 (512)".
 
 
    Example 1.16. Set subs_htable_size parameter
    Example 1.16. Set subs_htable_size parameter
 ...
 ...
@@ -493,7 +501,7 @@ modparam("presence", "subs_htable_size", 11)
    The size of the in-memory hash table to store publish records. This
    The size of the in-memory hash table to store publish records. This
    parameter will be used as the power of 2 when computing table size.
    parameter will be used as the power of 2 when computing table size.
 
 
-   Default value is “9 (512)�.
+   Default value is "9 (512)".
 
 
    Example 1.17. Set pres_htable_size parameter
    Example 1.17. Set pres_htable_size parameter
 ...
 ...
@@ -508,7 +516,7 @@ modparam("presence", "pres_htable_size", 11)
    empty NOTIFY to an message-summary event. This parameter is enabled by
    empty NOTIFY to an message-summary event. This parameter is enabled by
    default, thus addering to the standard.
    default, thus addering to the standard.
 
 
-   Default value is “1 �.
+   Default value is "1 ".
 
 
    Example 1.18. Set send_fast_notify parameter
    Example 1.18. Set send_fast_notify parameter
 ...
 ...
@@ -523,7 +531,7 @@ modparam("presence", "send_fast_notify", 0)
    this check requires extra processing that should be avoided if this
    this check requires extra processing that should be avoided if this
    feature is not supported by the clients.
    feature is not supported by the clients.
 
 
-   Default value is “0 �.
+   Default value is "0 ".
 
 
    Example 1.19. Set enable_sphere_check parameter
    Example 1.19. Set enable_sphere_check parameter
 ...
 ...
@@ -538,7 +546,7 @@ modparam("presence", "enable_sphere_check", 1)
    on. Disabling this will keep subscriptions active on unreliable
    on. Disabling this will keep subscriptions active on unreliable
    networks.
    networks.
 
 
-   Default value is “1�.
+   Default value is "1".
 
 
    Example 1.20. Set timeout_rm_subs parameter
    Example 1.20. Set timeout_rm_subs parameter
 ...
 ...
@@ -740,7 +748,21 @@ pres_update_watchers("sip:[email protected]", "presence");
                 :cleanup:fifo_reply
                 :cleanup:fifo_reply
                 _empty_line_
                 _empty_line_
 
 
-6. Installation
+6. RPC Commands
+
+   6.1. presence.cleanup
+
+6.1.  presence.cleanup
+
+   Manually triggers the cleanup functions for the active_watchers,
+   presentity, and watchers tables. Useful if you have set clean_period
+   and/or db_update_period to zero or less.
+
+   Name: presence.cleanup
+
+   Parameters: none
+
+7. Installation
 
 
    The module requires 3 tables in the Kamailio database: "presentity",
    The module requires 3 tables in the Kamailio database: "presentity",
    "active_watchers" and "watchers". The SQL syntax to create them can be
    "active_watchers" and "watchers". The SQL syntax to create them can be

+ 19 - 0
modules/presence/doc/presence_admin.xml

@@ -901,6 +901,25 @@ pres_update_watchers("sip:[email protected]", "presence");
 	</section>
 	</section>
 </section>
 </section>
 
 
+<section>
+	<title>RPC Commands</title>
+	<section>
+	  <title>
+		<function moreinfo="none">presence.cleanup</function>
+	  </title>
+	  <para>
+		Manually triggers the cleanup functions for the active_watchers, presentity,
+		and watchers tables. Useful if you have set <varname>clean_period</varname>
+		and/or <varname>db_update_period</varname> to zero or less.
+	  </para>
+	  <para>
+		Name: <emphasis>presence.cleanup</emphasis>
+	  </para>
+	  <para>Parameters: <emphasis>none</emphasis></para>
+
+	</section>
+</section>
+
 <section>
 <section>
 	<title>Installation</title>
 	<title>Installation</title>
 	<para>
 	<para>

+ 41 - 0
modules/presence/presence.c

@@ -73,6 +73,8 @@
 #include "notify.h"
 #include "notify.h"
 #include "../../mod_fix.h"
 #include "../../mod_fix.h"
 #include "../../timer_proc.h"
 #include "../../timer_proc.h"
+#include "../../rpc.h"
+#include "../../rpc_lookup.h"
 
 
 MODULE_VERSION
 MODULE_VERSION
 
 
@@ -127,6 +129,7 @@ static int w_pres_update_watchers(struct sip_msg *msg, char *puri,
 		char *pevent);
 		char *pevent);
 static int fixup_refresh_watchers(void** param, int param_no);
 static int fixup_refresh_watchers(void** param, int param_no);
 static int fixup_update_watchers(void** param, int param_no);
 static int fixup_update_watchers(void** param, int param_no);
+static int presence_init_rpc(void);
 
 
 int counter =0;
 int counter =0;
 int pid = 0;
 int pid = 0;
@@ -231,6 +234,11 @@ static int mod_init(void)
 		LM_ERR("failed to register MI commands\n");
 		LM_ERR("failed to register MI commands\n");
 		return -1;
 		return -1;
 	}
 	}
+	if(presence_init_rpc()!=0)
+	{
+		LM_ERR("failed to register RPC commands\n");
+		return -1;
+	}
 
 
 	db_url.len = db_url.s ? strlen(db_url.s) : 0;
 	db_url.len = db_url.s ? strlen(db_url.s) : 0;
 	LM_DBG("db_url=%s/%d/%p\n", ZSW(db_url.s), db_url.len,db_url.s);
 	LM_DBG("db_url=%s/%d/%p\n", ZSW(db_url.s), db_url.len,db_url.s);
@@ -1780,4 +1788,37 @@ static int fixup_update_watchers(void** param, int param_no)
 		return fixup_spve_null(param, 1);
 		return fixup_spve_null(param, 1);
 	}
 	}
 	return 0;
 	return 0;
+
+}
+
+void rpc_presence_cleanup(rpc_t* rpc, void* c)
+{
+	LM_DBG("rpc_presence_cleanup:start\n");
+
+	(void) msg_watchers_clean(0,0);
+	(void) msg_presentity_clean(0,0);
+	(void) timer_db_update(0,0);
+		
+	rpc->printf(c, "Reload OK");
+	return;
+}
+
+static const char* rpc_presence_cleanup_doc[2] = {
+	"Manually triggers the cleanup functions for the active_watchers, presentity, and watchers tables.",
+	0
+};
+
+rpc_export_t presence_rpc[] = {
+	{"presence.cleanup", rpc_presence_cleanup, rpc_presence_cleanup_doc, 0},
+	{0, 0, 0, 0}
+};
+
+static int presence_init_rpc(void)
+{
+	if (rpc_register_array(presence_rpc)!=0)
+	{
+		LM_ERR("failed to register RPC commands\n");
+		return -1;
+	}
+	return 0;
 }
 }