On 2009 May 19, Tuesday 15:14:36 [email protected] wrote:
Hi,
in this code you don't send expires header when the expires value is 0.
However, according to RCF3265, 3.1.1, 0 is a valid value. Please see the
attached patch for my fix proposal.
br
Szo
> Author: sayer
> Date: 2009-05-19 15:14:35 +0200 (Tue, 19 May 2009)
> New Revision: 1388
>
> Modified:
> trunk/apps/announce_transfer/AnnounceTransfer.cpp
> trunk/core/AmSipDialog.cpp
> trunk/core/AmSipDialog.h
> Log:
> refer optionally with expires
> some fix with CRLF on refer-to
> some fix with content_type on announce_transfer
>
> based on patch by Balint Kovacs
>
>
>
> Modified: trunk/apps/announce_transfer/AnnounceTransfer.cpp
> ===================================================================
> --- trunk/apps/announce_transfer/AnnounceTransfer.cpp 2009-05-19 11:22:47
> UTC (rev 1387) +++
> trunk/apps/announce_transfer/AnnounceTransfer.cpp 2009-05-19 13:14:35 UTC
> (rev 1388) @@ -143,8 +143,7 @@
> if (getHeader(req.hdrs,"Event") != "refer")
> throw AmSession::Exception(481, "Subscription does not exist");
>
> - if ((strip_header_params(getHeader(req.hdrs,"Content-Type"))
> - != "message/sipfrag"))
> + if ((strip_header_params(req.content_type) != "message/sipfrag"))
> throw AmSession::Exception(415, "Unsupported Media Type");
>
> string sipfrag_sline = req.body.substr(8, req.body.find("\n") - 8);
>
> Modified: trunk/core/AmSipDialog.cpp
> ===================================================================
> --- trunk/core/AmSipDialog.cpp 2009-05-19 11:22:47 UTC (rev 1387)
> +++ trunk/core/AmSipDialog.cpp 2009-05-19 13:14:35 UTC (rev 1388)
> @@ -449,11 +449,16 @@
> }
> }
>
> -int AmSipDialog::refer(const string& refer_to)
> +int AmSipDialog::refer(const string& refer_to,
> + int expires)
> {
> switch(status){
> - case Connected:
> - return sendRequest("REFER", "", "", "Refer-To: "+refer_to);
> + case Connected: {
> + string hdrs = "Refer-To: " + refer_to + CRLF;
> + if (expires>0)
> + hdrs+= "Expires: " + int2str(expires) + CRLF;
> + return sendRequest("REFER", "", "", hdrs);
> + }
> case Disconnecting:
> case Pending:
> DBG("refer(): we are not yet connected."
> @@ -478,7 +483,7 @@
> AmSipDialog tmp_d(*this);
>
> tmp_d.setRoute("");
> - tmp_d.contact_uri = "Contact: <" + tmp_d.remote_uri + ">\n";
> + tmp_d.contact_uri = "Contact: <" + tmp_d.remote_uri + ">" CRLF;
> tmp_d.remote_uri = target;
>
> string r_set;
> @@ -655,7 +660,7 @@
> string::size_type comma_pos;
>
> comma_pos = m_route.find(',');
> - //route += "Route: " + m_route.substr(0,comma_pos) + "\n";
> + //route += "Route: " + m_route.substr(0,comma_pos) + "\r\n";
> route.push_back(m_route.substr(0,comma_pos));
>
> if(comma_pos != string::npos)
>
> Modified: trunk/core/AmSipDialog.h
> ===================================================================
> --- trunk/core/AmSipDialog.h 2009-05-19 11:22:47 UTC (rev 1387)
> +++ trunk/core/AmSipDialog.h 2009-05-19 13:14:35 UTC (rev 1388)
> @@ -176,7 +176,8 @@
> int invite(const string& hdrs,
> const string& content_type,
> const string& body);
> - int refer(const string& refer_to);
> + int refer(const string& refer_to,
> + int expires = -1);
> int transfer(const string& target);
> int drop();
--- AmSipDialog.cpp.orig 2009-06-11 10:34:44.000000000 +0200
+++ AmSipDialog.cpp 2009-06-11 10:45:54.000000000 +0200
@@ -455,7 +455,7 @@
switch(status){
case Connected: {
string hdrs = "Refer-To: " + refer_to + CRLF;
- if (expires>0)
+ if (expires>=0)
hdrs+= "Expires: " + int2str(expires) + CRLF;
return sendRequest("REFER", "", "", hdrs);
}
_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev