Hi,
attached patch converts the utils module to use the sr msg_send functionality.
Please review if the API is used correct.
In kamailio we use this "while( get_next_su( proxy, to, 0) == 0 );" construct
to loop over all destinations (e.g. for failover), how this is handled in sr?
Thanks,
Henning
Module: sip-router
Branch: janakj/kcore
Commit: cb0dd941f2b0d9a579bb98c6689ecabaf7189a6c
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=cb0dd94…
Author: Jan Janak <jan(a)iptel.org>
Committer: Jan Janak <jan(a)iptel.org>
Date: Sun Mar 29 21:50:15 2009 +0200
Adding the supported parser from kamailio core
---
lib/kcore/parse_supported.c | 143 +++++++++++++++++++++++++++++++++++++++++++
lib/kcore/parse_supported.h | 84 +++++++++++++++++++++++++
2 files changed, 227 insertions(+), 0 deletions(-)
diff --git a/lib/kcore/parse_supported.c b/lib/kcore/parse_supported.c
new file mode 100644
index 0000000..ddecf50
--- /dev/null
+++ b/lib/kcore/parse_supported.c
@@ -0,0 +1,143 @@
+/*
+ * $Id$
+ *
+ * Copyright (C) 2006 Andreas Granig <agranig(a)linguin.org>
+ *
+ * This file is part of Kamailio, a free SIP server.
+ *
+ * Kamailio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version
+ *
+ * Kamailio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/*!
+ * \file
+ * \brief Supported parser
+ * \ingroup parser
+ */
+
+#include "../mem/mem.h"
+#include "keys.h"
+#include "parse_supported.h"
+
+#define IS_DELIM(c) (*(c) == ' ' || *(c) == '\t' || *(c) == '\r' || *(c) == '\n' || *(c) == ',')
+
+/* from parser/parse_hname2.c: */
+#define LOWER_BYTE(b) ((b) | 0x20)
+#define LOWER_DWORD(d) ((d) | 0x20202020)
+#define READ(val) \
+ (*(val + 0) + (*(val + 1) << 8) + (*(val + 2) << 16) + (*(val + 3) << 24))
+
+
+/*!
+ * Parse Supported HF body.
+ */
+static inline int parse_supported_body(str *body, unsigned int *sup)
+{
+ register char* p;
+ register unsigned int val;
+ int len, pos = 0;
+
+ *sup = 0;
+
+ p = body->s;
+ len = body->len;
+
+ while (pos < len) {
+ /* skip spaces and commas */
+ for (; pos < len && IS_DELIM(p); ++pos, ++p);
+
+ val = LOWER_DWORD(READ(p));
+ switch (val) {
+
+ /* "path" */
+ case _path_:
+ if(pos + 4 <= len && IS_DELIM(p+4)) {
+ *sup |= F_SUPPORTED_PATH;
+ pos += 5; p += 5;
+ }
+ break;
+
+ /* "100rel" */
+ case _100r_:
+ if ( pos+6 <= len
+ && LOWER_BYTE(*(p+4))=='e' && LOWER_BYTE(*(p+5))=='l'
+ && IS_DELIM(p+6)) {
+ *sup |= F_SUPPORTED_100REL;
+ pos += SUPPORTED_100REL_LEN + 1;
+ p += SUPPORTED_100REL_LEN + 1;
+ }
+ break;
+
+ /* "timer" */
+ case _time_:
+ if ( pos+5 <= len && LOWER_BYTE(*(p+4))=='r'
+ && IS_DELIM(p+5) ) {
+ *sup |= F_SUPPORTED_TIMER;
+ pos += SUPPORTED_TIMER_LEN + 1;
+ p += SUPPORTED_TIMER_LEN + 1;
+ }
+ break;
+
+ /* unknown */
+ default:
+ /* skip element */
+ for (; pos < len && !IS_DELIM(p); ++pos, ++p);
+ break;
+ }
+ }
+
+ return 0;
+}
+
+/*!
+ * Parse all Supported headers
+ */
+int parse_supported( struct sip_msg *msg)
+{
+ unsigned int supported;
+ struct hdr_field *hdr;
+ struct supported_body *sb;
+
+ /* maybe the header is already parsed! */
+ if (msg->supported && msg->supported->parsed)
+ return 0;
+
+ /* parse to the end in order to get all SUPPORTED headers */
+ if (parse_headers(msg,HDR_EOH_F,0)==-1 || !msg->supported)
+ return -1;
+
+ /* bad luck! :-( - we have to parse them */
+ supported = 0;
+ for( hdr=msg->supported ; hdr ; hdr=hdr->sibling) {
+ if (hdr->parsed) {
+ supported |= ((struct supported_body*)hdr->parsed)->supported;
+ continue;
+ }
+
+ sb = (struct supported_body*)pkg_malloc(sizeof(struct supported_body));
+ if (sb == 0) {
+ LM_ERR("out of pkg_memory\n");
+ return -1;
+ }
+
+ parse_supported_body(&(hdr->body), &(sb->supported));
+ sb->supported_all = 0;
+ hdr->parsed = (void*)sb;
+ supported |= sb->supported;
+ }
+
+ ((struct supported_body*)msg->supported->parsed)->supported_all =
+ supported;
+ return 0;
+}
diff --git a/lib/kcore/parse_supported.h b/lib/kcore/parse_supported.h
new file mode 100644
index 0000000..9a177fd
--- /dev/null
+++ b/lib/kcore/parse_supported.h
@@ -0,0 +1,84 @@
+/*
+ * $Id$
+ *
+ * Copyright (C) 2006 Andreas Granig <agranig(a)linguin.org>
+ *
+ * This file is part of Kamailio, a free SIP server.
+ *
+ * Kamailio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version
+ *
+ * Kamailio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ *
+ * History:
+ * -------
+ * 2006-03-02 parse_supported() parses and cumulates all SUPPORTED
+ * headers (bogdan)
+ */
+
+/*!
+ * \file
+ * \brief Supported parser
+ * \ingroup parser
+ */
+
+#ifndef PARSE_SUPPORTED_H
+#define PARSE_SUPPORTED_H
+
+#include "msg_parser.h"
+#include "../mem/mem.h"
+
+
+#define F_SUPPORTED_PATH (1 << 0)
+#define F_SUPPORTED_100REL (1 << 1)
+#define F_SUPPORTED_TIMER (1 << 2)
+
+#define SUPPORTED_PATH_STR "path"
+#define SUPPORTED_PATH_LEN (sizeof(SUPPORTED_PATH_STR)-1)
+
+/* RFC 3262 */
+#define SUPPORTED_100REL_STR "100rel"
+#define SUPPORTED_100REL_LEN (sizeof(SUPPORTED_100REL_STR)-1)
+
+/* RFC 4028 */
+#define SUPPORTED_TIMER_STR "timer"
+#define SUPPORTED_TIMER_LEN (sizeof(SUPPORTED_TIMER_STR)-1)
+
+
+#define get_supported(p_msg) \
+ ((p_msg)->supported ? ((struct supported_body*)(p_msg)->supported->parsed)->supported_all : 0)
+
+
+struct supported_body {
+ unsigned int supported; /* supported mask for the current hdr */
+ unsigned int supported_all; /* suppoted mask for the all "supported" hdr
+ * - it's set only for the first hdr in
+ * sibling list*/
+};
+
+
+/*!
+ * Parse all Supported headers.
+ */
+int parse_supported( struct sip_msg *msg);
+
+
+static inline void free_supported(struct supported_body **sb)
+{
+ if (sb && *sb) {
+ pkg_free(*sb);
+ *sb = 0;
+ }
+}
+
+#endif /* PARSE_SUPPORTED_H */
Module: sip-router
Branch: master
Commit: 2701984ddd24dd074c2e29b6ac6ea22faffdb1b1
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=2701984…
Author: Jan Janak <jan(a)iptel.org>
Committer: Jan Janak <jan(a)iptel.org>
Date: Sat Mar 28 12:13:24 2009 +0100
Use shorter default send and SSL handshake timeouts
Instead of 120 seconds we use use 30 seconds by default for both SSL
handshake timeouts and send timeouts, this way the server can detect
connection problems faster.
---
modules/tls/tls_mod.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/modules/tls/tls_mod.c b/modules/tls/tls_mod.c
index f3f56b1..436785f 100644
--- a/modules/tls/tls_mod.c
+++ b/modules/tls/tls_mod.c
@@ -167,8 +167,8 @@ tls_domain_t cli_defaults = {
static str tls_method = STR_STATIC_INIT("TLSv1");
-int tls_handshake_timeout = 120;
-int tls_send_timeout = 120;
+int tls_handshake_timeout = 30;
+int tls_send_timeout = 30;
int tls_con_lifetime = 600; /* this value will be adjusted to ticks later */
int tls_log = 3;
int tls_session_cache = 0;