Hi, I've been playing a bit with msilo.c code and changed some things to make
it more flexible. The changes are made from SVN rev 3632.
This is my changelog:
- Notification "From" is now the original destination ("registrar" parameter
deleted). I think this is better since the sender won't see a new IM window
from a strange user when OpenSer dens back the notification. Instead it will
see it in the same IM window.
- Added "offline_message" parameter allowing HTML. So the admin could set him
own notification message in openser.cfg. If not set, the default value is:
"<em>I'm offline. The message will be delivered when I'm online.</em>"
- Deleted "Contact" header in notification (not necessary in MESSAGE since
MESSAGE doesn't establish a dialog).
- Deleted CONTACT* and OFFLINE_MESSAGE* #defines and buf1[1024] (not necessary
now)
- Added HEADERS #define to set "Content-Type" header as "text/html".
I've tested it and seems to work correctly, what do you think about those
changes? could they be submitted (with updated doc of course)?
Regards.
--
Iñaki Baz Castillo
[EMAIL PROTECTED]
--- msilo.c.original 2008-02-06 10:32:28.000000000 +0100
+++ msilo.c 2008-02-06 12:25:33.000000000 +0100
@@ -38,6 +38,11 @@
* 2004-06-07 updated to the new DB api (andrei)
* 2006-09-10 m_dump now checks if registering UA supports MESSAGE method (jh)
* 2006-10-05 added max_messages module variable (jh)
+ * 2008-02-08: notification "From" is now the original destination ("registrar" parameter deleted) (ibc)
+ deleted "Contact" header in notification (not necessary in MESSAGE) (ibc)
+ added "offline_message" parameter allowing HTML (ibc)
+ deleted CONTACT* and OFFLINE_MESSAGE* #defines and buf1[1024] (not necessary now) (ibc)
+ added HEADERS #define to set "Content-Type" header as "text/html" (ibc)
*/
#include <stdio.h>
@@ -66,12 +71,8 @@
#include "../tm/tm_load.h"
-#define CONTACT_PREFIX "Content-Type: text/plain"CRLF"Contact: <"
-#define CONTACT_SUFFIX ">;msilo=yes"CRLF
-#define CONTACT_PREFIX_LEN (sizeof(CONTACT_PREFIX)-1)
-#define CONTACT_SUFFIX_LEN (sizeof(CONTACT_SUFFIX)-1)
-#define OFFLINE_MESSAGE "] is offline. The message will be delivered when user goes online."
-#define OFFLINE_MESSAGE_LEN (sizeof(OFFLINE_MESSAGE)-1)
+#define HEADERS "Content-Type: text/html"CRLF""
+#define HEADERS_LEN (sizeof(HEADERS)-1)
#include "ms_msg_list.h"
#include "msfuncs.h"
@@ -131,7 +132,7 @@
static str ms_db_url = str_init(DEFAULT_DB_URL);
static str ms_db_table = str_init("silo");
-str ms_registrar = {NULL, 0}; /*"sip:[EMAIL PROTECTED]";*/
+str ms_offline_message = str_init("<em>I'm offline. The message will be delivered when I'm online.</em>");
str ms_reminder = {NULL, 0};
str ms_outbound_proxy = {NULL, 0};
@@ -185,7 +186,7 @@
static param_export_t params[]={
{ "db_url", STR_PARAM, &ms_db_url.s },
{ "db_table", STR_PARAM, &ms_db_table.s },
- { "registrar", STR_PARAM, &ms_registrar.s },
+ { "offline_message", STR_PARAM, &ms_offline_message.s },
{ "reminder", STR_PARAM, &ms_reminder.s },
{ "outbound_proxy",STR_PARAM, &ms_outbound_proxy.s },
{ "expire_time", INT_PARAM, &ms_expire_time },
@@ -341,8 +342,8 @@
if(ms_send_time>0 && ms_reminder.s!=NULL)
register_timer(m_send_ontimer, 0, ms_send_time);
- if(ms_registrar.s!=NULL)
- ms_registrar.len = strlen(ms_registrar.s);
+ if(ms_offline_message.s!=NULL)
+ ms_offline_message.len = strlen(ms_offline_message.s);
if(ms_reminder.s!=NULL)
ms_reminder.len = strlen(ms_reminder.s);
if(ms_outbound_proxy.s!=NULL)
@@ -401,7 +402,6 @@
int nr_keys = 0, val, lexpire;
content_type_t ctype;
static char buf[512];
- static char buf1[1024];
int mime;
int printbuf_len;
@@ -463,13 +463,6 @@
}
}
- if(pto->uri.len == ms_registrar.len &&
- !strncasecmp(pto->uri.s, ms_registrar.s, ms_registrar.len))
- {
- LM_DBG("message to MSILO REGISTRAR!\n");
- goto error;
- }
-
/* get the owner */
memset(&puri, 0, sizeof(struct sip_uri));
if(owner)
@@ -582,13 +575,6 @@
pfrom = (struct to_body*)msg->from->parsed;
LM_DBG("'From' header: <%.*s>\n", pfrom->uri.len, pfrom->uri.s);
- if(ms_registrar.s && pfrom->uri.len == ms_registrar.len &&
- !strncasecmp(pfrom->uri.s, ms_registrar.s, ms_registrar.len))
- {
- LM_DBG("message from MSILO REGISTRAR!\n");
- goto error;
- }
-
db_keys[nr_keys] = &sc_from;
db_vals[nr_keys].type = DB_STR;
@@ -693,26 +679,12 @@
update_stat(ms_stored_msgs, 1);
#endif
- if(ms_registrar.len <= 0
- || ms_registrar.len+CONTACT_PREFIX_LEN+CONTACT_SUFFIX_LEN+1>=1024)
- goto done;
-
LM_DBG("sending info message.\n");
- strcpy(buf1, CONTACT_PREFIX);
- strncat(buf1, ms_registrar.s, ms_registrar.len);
- strncat(buf1, CONTACT_SUFFIX, CONTACT_SUFFIX_LEN);
- str_hdr.len = CONTACT_PREFIX_LEN+ms_registrar.len+CONTACT_SUFFIX_LEN;
- str_hdr.s = buf1;
-
- strncpy(buf, "User [", 6);
- body.len = 6;
- if(pto->uri.len+OFFLINE_MESSAGE_LEN+7/*6+1*/ < 512)
- {
- strncpy(buf+body.len, pto->uri.s, pto->uri.len);
- body.len += pto->uri.len;
- }
- strncpy(buf+body.len, OFFLINE_MESSAGE, OFFLINE_MESSAGE_LEN);
- body.len += OFFLINE_MESSAGE_LEN;
+ str_hdr.s = HEADERS;
+ str_hdr.len = HEADERS_LEN;
+
+ strncpy(buf, ms_offline_message.s, ms_offline_message.len);
+ body.len = ms_offline_message.len;
body.s = buf;
/* look for Contact header -- must be parsed by now*/
ctaddr.s = NULL;
@@ -743,7 +715,7 @@
tmb.t_request(&msg_type, /* Type of the message */
(ctaddr.s)?&ctaddr:&pfrom->uri, /* Request-URI */
&pfrom->uri, /* To */
- &ms_registrar, /* From */
+ &pto->uri, /* From is the destination uri*/
&str_hdr, /* Optional headers including CRLF */
&body, /* Message body */
(ms_outbound_proxy.s)?&ms_outbound_proxy:0, /* outbound uri */
_______________________________________________
Devel mailing list
[email protected]
http://lists.openser.org/cgi-bin/mailman/listinfo/devel