Module: sip-router
Branch: master
Commit: bdba8801cdea18d5cd2852cdecf692a15d349925
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=bdba880…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Tue May 25 16:14:32 2010 +0200
xhttp: new module to handle http requests
- the module can handle http requests sent over TCP/TLS to SIP server
- event_route[xhttp:request] is executed in such case
- if you need to handle HTTP requests without Content-Lenght header, set
tcp_accept_no_cl=1
- it may conflict in HTTP handling with xmlrpc as they use same concept,
you can set parameter mode=1 for xmrpc module and then call xmlrpc
functions from event_route[xhttp:request]
- you can use url_match parameter to filter which HTTP requests are
handled by this module
---
modules/xhttp/Makefile | 14 ++
modules/xhttp/README | 114 +++++++++
modules/xhttp/doc/Makefile | 4 +
modules/xhttp/doc/xhttp.xml | 37 +++
modules/xhttp/doc/xhttp_admin.xml | 108 +++++++++
modules/xhttp/xhttp_mod.c | 468 +++++++++++++++++++++++++++++++++++++
6 files changed, 745 insertions(+), 0 deletions(-)
Diff: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commitdiff;h=bdb…
Module: sip-router
Branch: master
Commit: e6d56890d7325da00e76ef561185d7b7426514d7
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=e6d5689…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Tue May 25 16:19:43 2010 +0200
xcap_server: new module providing xcap server functinality
- re-use the transport layer from SIP server
- XCAP documents can be sent via SIP (UDP, TCP, TLS, SCTP, HTTP and
HTTPS
- re-use xcap table from K presence server to store the documents
- implemented basic ops: PUT, GET and DELETE
- no much testing done so far
- todo: document validation and xcap diff operations
---
modules_k/xcap_server/Makefile | 22 +
modules_k/xcap_server/README | 310 ++++++++
modules_k/xcap_server/doc/Makefile | 4 +
modules_k/xcap_server/doc/xcap_server.xml | 37 +
modules_k/xcap_server/doc/xcap_server_admin.xml | 362 ++++++++++
modules_k/xcap_server/xcap_server.c | 860 +++++++++++++++++++++++
6 files changed, 1595 insertions(+), 0 deletions(-)
Diff: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commitdiff;h=e6d…
This patch does it for me:
---
--- modules/rr/record.c.ori 2010-05-25 13:10:48.000000000 +0200
+++ modules/rr/record.c 2010-05-25 13:37:26.000000000 +0200
@@ -41,6 +41,7 @@
#include "../../data_lump.h"
#include "record.h"
#include "rr_mod.h"
+#include "loose.h"
#define RR_PREFIX "Record-Route: <sip:"
@@ -291,12 +292,20 @@
}
if (append_fromtag) {
- if (parse_from_header(_m) < 0) {
- LM_ERR("From parsing failed\n");
- return -2;
+ if (is_direction(_m, RR_FLOW_UPSTREAM)==0) {
+ /* use to-tag in script! */
+
+ LM_DBG("from-tag not added on upstream request
(it's wrong anyway)! Must be done manually using
record_route(\";ftag=$tt\");");
+
+ tag = 0;
+ } else {
+ if (parse_from_header(_m) < 0) {
+ LM_ERR("From parsing failed\n");
+ return -2;
+ }
+ from = (struct to_body*)_m->from->parsed;
+ tag = &from->tag_value;
}
- from = (struct to_body*)_m->from->parsed;
- tag = &from->tag_value;
} else {
tag = 0;
}
---
Plus in script after loose_route():
if (check_route_param("vsf=")) {
# fix broken UAC not
sending initial route-set
$(var(vsf)) =
$(hdr(Route)[0]{s.select,0,,}{param.value,vsf}{s.select,0,>});
xlog("L_INFO", ">>
Stored UAC param vsf=$(var(vsf))");
if
(is_direction("upstream")) {
record_route(";ftag=$tt;vsf=$(var(vsf))");
} else {
record_route(";vsf=$(var(vsf))");
}
} else {
if
(is_direction("upstream")) {
record_route(";ftag=$tt");
} else {
record_route();
}
}
Br
Walter
Von: sr-dev-bounces(a)lists.sip-router.org
[mailto:sr-dev-bounces@lists.sip-router.org] Im Auftrag von NeoTel Lists
Gesendet: Dienstag, 25. Mai 2010 13:04
An: sr-dev(a)lists.sip-router.org
Betreff: [sr-dev] direction check missing in record_route()
Hi!
Can someone of the experts pls help me with a fix in
record.c/record_route() please?
IMHO in append_fromtag=1 mode the direction check is missing, if
record_route() is called in loose_route block.
(Sure, I know, there is no need to call record_route() there, but since
nearly all of the UA out there don't use first record set on reInvites,
I must do record routing on reInvites, too!)
(And I really do need the vsf parameter in subsequent messages J)
So I would do the following:
if (append_fromtag) {
if (is_direction(_m, RR_FLOW_UPSTREAM)) { /* if not in
dialog, would return 0 anyway, e.g. no Route param ftag present */
/* use to-tag! */
Unfortunately there is no "parse_to_header", bec. then it would be
simple....
How to access the to-tag, if any?
} else {
if (parse_from_header(_m) < 0) {
LM_ERR("From parsing failed\n");
return -2;
}
from = (struct to_body*)_m->from->parsed;
tag = &from->tag_value;
}
} else {
tag = 0;
}
--
What I do now is not nice: I set modparam("rr", "append_fromtag", 0) and
patched rr_mod.c and uac.c not to return an Error, if append_fromtag is
0 J
[root@p01-1 rr]# more ../../../rr_mod.c.patch
--- modules/rr/rr_mod.c.ori 2010-05-25 11:03:29.000000000 +0200
+++ modules/rr/rr_mod.c 2010-05-25 12:08:34.000000000 +0200
@@ -172,9 +172,10 @@
int n;
if (!append_fromtag) {
- LM_ERR("usage of \"is_direction\" function requires
parameter"
- "\"append_fromtag\" enabled!!");
- return E_CFG;
+ LM_WARN("usage of \"is_direction\" function requires
parameter"
+ "\"append_fromtag\" enabled!!"
+ " - must be done manually to work
correctly!");
+ /* return E_CFG; */
}
if (param_no==1) {
n = 0;
[root@p01-1 rr]# more ../../../uac.c.patch
--- modules/uac/uac.c.orig 2010-05-25 10:57:59.000000000 +0200
+++ modules/uac/uac.c 2010-05-25 11:00:40.000000000 +0200
@@ -206,9 +206,13 @@
if (from_restore_mode==FROM_AUTO_RESTORE) {
/* we need the append_fromtag on in RR */
if (!uac_rrb.append_fromtag) {
- LM_ERR("'append_fromtag' RR param is not
enabled!"
- " - required by AUTO restore
mode\n");
- goto error;
+ LM_WARN("'append_fromtag' RR param is
not enabled!"
+ " - required by AUTO restore
mode"
+ " - make sure it's done
manually!\n");
+ /* normally ERR, but just remind script
writer, that she has to do ;ftag=$ft/$tt manually
+ normally this would be OK, but
record_route() add $ft in upsteam request
+ should be fixed in rr module!
+ goto error; */
}
/* get all requests doing loose route */
if (uac_rrb.register_rrcb( rr_checker, 0)!=0) {
--
Many thanks!
Walter
---------------------------------------
NeoTel Telefonservice GmbH & Co KG
Esterhazygasse 18a/15
A-1060 Wien
T: +43 1 4094181 - 81
M: +43 660 88866 - 81
F: +43 1 4094181 - 981
Hi!
Can someone of the experts pls help me with a fix in
record.c/record_route() please?
IMHO in append_fromtag=1 mode the direction check is missing, if
record_route() is called in loose_route block.
(Sure, I know, there is no need to call record_route() there, but since
nearly all of the UA out there don't use first record set on reInvites,
I must do record routing on reInvites, too!)
(And I really do need the vsf parameter in subsequent messages J)
So I would do the following:
if (append_fromtag) {
if (is_direction(_m, RR_FLOW_UPSTREAM)) { /* if not in
dialog, would return 0 anyway, e.g. no Route param ftag present */
/* use to-tag! */
Unfortunately there is no "parse_to_header", bec. then it would be
simple....
How to access the to-tag, if any?
} else {
if (parse_from_header(_m) < 0) {
LM_ERR("From parsing failed\n");
return -2;
}
from = (struct to_body*)_m->from->parsed;
tag = &from->tag_value;
}
} else {
tag = 0;
}
--
What I do now is not nice: I set modparam("rr", "append_fromtag", 0) and
patched rr_mod.c and uac.c not to return an Error, if append_fromtag is
0 J
[root@p01-1 rr]# more ../../../rr_mod.c.patch
--- modules/rr/rr_mod.c.ori 2010-05-25 11:03:29.000000000 +0200
+++ modules/rr/rr_mod.c 2010-05-25 12:08:34.000000000 +0200
@@ -172,9 +172,10 @@
int n;
if (!append_fromtag) {
- LM_ERR("usage of \"is_direction\" function requires
parameter"
- "\"append_fromtag\" enabled!!");
- return E_CFG;
+ LM_WARN("usage of \"is_direction\" function requires
parameter"
+ "\"append_fromtag\" enabled!!"
+ " - must be done manually to work
correctly!");
+ /* return E_CFG; */
}
if (param_no==1) {
n = 0;
[root@p01-1 rr]# more ../../../uac.c.patch
--- modules/uac/uac.c.orig 2010-05-25 10:57:59.000000000 +0200
+++ modules/uac/uac.c 2010-05-25 11:00:40.000000000 +0200
@@ -206,9 +206,13 @@
if (from_restore_mode==FROM_AUTO_RESTORE) {
/* we need the append_fromtag on in RR */
if (!uac_rrb.append_fromtag) {
- LM_ERR("'append_fromtag' RR param is not
enabled!"
- " - required by AUTO restore
mode\n");
- goto error;
+ LM_WARN("'append_fromtag' RR param is
not enabled!"
+ " - required by AUTO restore
mode"
+ " - make sure it's done
manually!\n");
+ /* normally ERR, but just remind script
writer, that she has to do ;ftag=$ft/$tt manually
+ normally this would be OK, but
record_route() add $ft in upsteam request
+ should be fixed in rr module!
+ goto error; */
}
/* get all requests doing loose route */
if (uac_rrb.register_rrcb( rr_checker, 0)!=0) {
--
Many thanks!
Walter
---------------------------------------
NeoTel Telefonservice GmbH & Co KG
Esterhazygasse 18a/15
A-1060 Wien
T: +43 1 4094181 - 81
M: +43 660 88866 - 81
F: +43 1 4094181 - 981
Module: sip-router
Branch: andrei/tcp_tls_changes
Commit: 93c495f34ebb001f9509db82acad5a7483b61d41
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=93c495f…
Author: Andrei Pelinescu-Onciul <andrei(a)iptel.org>
Committer: Andrei Pelinescu-Onciul <andrei(a)iptel.org>
Date: Thu May 20 18:24:38 2010 +0200
tls: async support (major tls core rewrite)
The new tls hook interface (exported by the tcp code) is now used.
All the IO operations are made through a custom SSL BIO, that
reads and writes in some memory buffers (see tls_bio.h), while
externally emulating a socket. This BIO provides in fact some
functions that will be called by the openssl code on IO.
In the case of a read event, the data is first read in memory
(using tcp_read_data()), then assigned to the BIO and after that
one of SSL_read(), SSL_connect/accept (if the connection is not
yet established) or SSL_write (if the last write wanted to read
some data due to re-keying) are called. They will all read from
the custom BIO. A SSL_read() might not use all the data (in some
very unlikely situations), so in this case the encrypted data is
queued and the tcp code is signaled (via some flags) that it
should repeat the read call when more space is available.
Writes are split in 2: 1st write on a new connection in async mode
and other writes (they need to be handled slightly differently).
The encrypted data will end up in a memory buffer (via SSL_write()
and the custom BIO). From there it will be either sent directly if
possible or queued (tcp_async). In the case when the SSL_write()
needs to read some data (e.g. re-keying), the whole clear text
data will be queued and the SSL_write() will be retried on the
first read event.
There is no separate async mode for tls, if tcp is in async mode,
then tls will be too and vice versa.
Runtime tunning (queue sizes a.s.o) and statistics are missing for
now.
(C) and license changes:
- moved tls_dump_verification_failure into a separate file
(tls_dump_vf.c), out of tls_server.c.
- the remaining tcp_server.[ch] code is either re-written (most of it,
the entire read & write part) or comes from old iptel code =>
changed the (c) to iptelorg only and the license to BSD-like
(only for tcp_server.[ch]).
---
modules/tls/tls_dump_vf.c | 144 ++++++
modules/tls/tls_dump_vf.h | 41 ++
modules/tls/tls_init.c | 2 +
modules/tls/tls_mod.c | 34 +-
modules/tls/tls_server.c | 1105 ++++++++++++++++++++++++---------------------
modules/tls/tls_server.h | 76 ++--
6 files changed, 831 insertions(+), 571 deletions(-)
Diff: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commitdiff;h=93c…