Folks,
We found that in some cases it is necessary to have a function which will save contact without sending reply to the UA. For example, it is useful when there is a need to do stateless forwarding of the REGISTER request, but at the same time save it in the local registration database (sending reply in this case will disable any retransmissions that might be necessary to ensure that the request actually reached the destination). Attached patch provides necessary functionality, it would be nice to have it included into the next release.
Thanks!
-Maxim
Actually, I think decoupling replying from usrloc would be a reasonable thing to do. That would also allow admin to decide whether a REGISTER is processed statelessly or statefuly.
-Jiri
At 05:33 PM 3/21/2003, Maxim Sobolev wrote:
Folks,
We found that in some cases it is necessary to have a function which will save contact without sending reply to the UA. For example, it is useful when there is a need to do stateless forwarding of the REGISTER request, but at the same time save it in the local registration database (sending reply in this case will disable any retransmissions that might be necessary to ensure that the request actually reached the destination). Attached patch provides necessary functionality, it would be nice to have it included into the next release.
Thanks!
-Maxim
-- Jiri Kuthan http://iptel.org/~jiri/
Hello Maxim,
thanks, I will integrate the patch.
regards, Jan.
On 21-03 18:33, Maxim Sobolev wrote:
Folks,
We found that in some cases it is necessary to have a function which will save contact without sending reply to the UA. For example, it is useful when there is a need to do stateless forwarding of the REGISTER request, but at the same time save it in the local registration database (sending reply in this case will disable any retransmissions that might be necessary to ensure that the request actually reached the destination). Attached patch provides necessary functionality, it would be nice to have it included into the next release.
Thanks!
-Maxim
--- modules/registrar/reg_mod.c 2003/03/21 13:37:50 1.1 +++ modules/registrar/reg_mod.c 2003/03/21 13:39:05 @@ -64,18 +64,21 @@ "registrar", (char*[]) { "save",
"lookup" }, (cmd_function[]) { save,"save_noreply",
lookup },save_noreply,
- (int[]){1, 1},
- (int[]){1, 1, 1}, (fixup_function[]) { domain_fixup,
domain_fixup },domain_fixup,
- 2,
3,
(char*[]) { /* Module parameter names */ "default_expires",
--- modules/registrar/save.c 2003/03/21 13:34:00 1.1 +++ modules/registrar/save.c 2003/03/21 13:37:00 @@ -309,11 +309,20 @@ return 0; }
+int save(struct sip_msg* _m, char* _t, char* _s) +{
- return save_real(_m, _t, _s, 1);
+}
+int save_noreply(struct sip_msg* _m, char* _t, char* _s) +{
- return save_real(_m, _t, _s, 0);
+}
/*
- Process REGISTER request and save it's contacts
*/ -int save(struct sip_msg* _m, char* _t, char* _s) +int save_real(struct sip_msg* _m, char* _t, char* _s, int doreply) { contact_t* c; int st; @@ -349,10 +358,10 @@ if (contacts(_m, c, (udomain_t*)_t, &user) < 0) goto error; }
- if (send_reply(_m) < 0) return -1;
if (doreply && send_reply(_m) < 0) return -1; else return 1;
error:
- send_reply(_m);
- if (doreply) send_reply(_m); return 0;
} --- modules/registrar/save.h 2003/03/21 13:37:14 1.1 +++ modules/registrar/save.h 2003/03/21 13:37:40 @@ -39,7 +39,9 @@ /*
- Process REGISTER request and save it's contacts
*/ +int save_real(struct sip_msg* _m, char* _t, char* _s, int); int save(struct sip_msg* _m, char* _t, char* _s); +int save_noreply(struct sip_msg* _m, char* _t, char* _s);
#endif /* SAVE_H */