... | ... |
@@ -285,3 +285,53 @@ qvalue_t get_ruri_q(void) |
285 | 285 |
{ |
286 | 286 |
return ruri_q; |
287 | 287 |
} |
288 |
+ |
|
289 |
+ |
|
290 |
+ |
|
291 |
+/* |
|
292 |
+ * Get actual Request-URI |
|
293 |
+ */ |
|
294 |
+int get_request_uri(struct sip_msg* _m, str* _u) |
|
295 |
+{ |
|
296 |
+ /* Use new_uri if present */ |
|
297 |
+ if (_m->new_uri.s) { |
|
298 |
+ _u->s = _m->new_uri.s; |
|
299 |
+ _u->len = _m->new_uri.len; |
|
300 |
+ } else { |
|
301 |
+ _u->s = _m->first_line.u.request.uri.s; |
|
302 |
+ _u->len = _m->first_line.u.request.uri.len; |
|
303 |
+ } |
|
304 |
+ |
|
305 |
+ return 0; |
|
306 |
+} |
|
307 |
+ |
|
308 |
+ |
|
309 |
+/* |
|
310 |
+ * Rewrite Request-URI |
|
311 |
+ */ |
|
312 |
+int rewrite_uri(struct sip_msg* _m, str* _s) |
|
313 |
+{ |
|
314 |
+ char* buf; |
|
315 |
+ |
|
316 |
+ buf = (char*)pkg_malloc(_s->len + 1); |
|
317 |
+ if (!buf) { |
|
318 |
+ LOG(L_ERR, "ERROR: TOI: rewrite_uri: No memory left\n"); |
|
319 |
+ return -1; |
|
320 |
+ } |
|
321 |
+ |
|
322 |
+ memcpy(buf, _s->s, _s->len); |
|
323 |
+ buf[_s->len] = '\0'; |
|
324 |
+ |
|
325 |
+ _m->parsed_uri_ok = 0; |
|
326 |
+ if (_m->new_uri.s) { |
|
327 |
+ pkg_free(_m->new_uri.s); |
|
328 |
+ } |
|
329 |
+ |
|
330 |
+ _m->new_uri.s = buf; |
|
331 |
+ _m->new_uri.len = _s->len; |
|
332 |
+ |
|
333 |
+ DBG("TOI: rewrite_uri: Rewriting Request-URI with '%.*s'\n", _s->len, |
|
334 |
+ buf); |
|
335 |
+ return 0; |
|
336 |
+} |
|
337 |
+ |
78 | 82 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,37 @@ |
1 |
+/* |
|
2 |
+ *$Id$ |
|
3 |
+ * |
|
4 |
+ */ |
|
5 |
+ |
|
6 |
+ |
|
7 |
+#ifndef _modfix_h |
|
8 |
+#define _modfix_h |
|
9 |
+ |
|
10 |
+#include "mem/mem.h" |
|
11 |
+#include "str.h" |
|
12 |
+#include "error.h" |
|
13 |
+ |
|
14 |
+ |
|
15 |
+/* |
|
16 |
+ * Convert char* parameter to str* parameter |
|
17 |
+ */ |
|
18 |
+static int str_fixup(void** param, int param_no) |
|
19 |
+{ |
|
20 |
+ str* s; |
|
21 |
+ |
|
22 |
+ if (param_no == 1 || param_no == 2 ) { |
|
23 |
+ s = (str*)pkg_malloc(sizeof(str)); |
|
24 |
+ if (!s) { |
|
25 |
+ LOG(L_ERR, "str_fixup(): No memory left\n"); |
|
26 |
+ return E_UNSPEC; |
|
27 |
+ } |
|
28 |
+ |
|
29 |
+ s->s = (char*)*param; |
|
30 |
+ s->len = strlen(s->s); |
|
31 |
+ *param = (void*)s; |
|
32 |
+ } |
|
33 |
+ |
|
34 |
+ return 0; |
|
35 |
+} |
|
36 |
+ |
|
37 |
+#endif |