From 27a5a679bed5f9eaca353c479310e574313d8288 Mon Sep 17 00:00:00 2001
From: Michael Jerris <mike@jerris.com>
Date: Wed, 11 Feb 2009 17:03:30 +0000
Subject: [PATCH] Thu Jan 15 09:38:34 CST 2009  Bernhard Suttner <bernhard DOT
 suttner AT comdasys DOT com>   * sip_util.c: fix 484 respose to REFER in
 sip_response_terminates_dialog()

  Asterisk (v 1.2.7.1) does response with 484 if a client does send a refer
  with a @ReferTo header to an unknown number.  This is therefore not
  fundamentally wrong and the dialog should not be destroyed!



git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@11829 d0543943-73ff-0310-b7d9-9358b9ac24b2
---
 libs/sofia-sip/.update                        |  2 +-
 libs/sofia-sip/libsofia-sip-ua/sip/sip_util.c | 13 ++++++++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update
index c47a8e95a4..f30fffd9d1 100644
--- a/libs/sofia-sip/.update
+++ b/libs/sofia-sip/.update
@@ -1 +1 @@
-Wed Feb 11 11:00:10 CST 2009
+Wed Feb 11 11:03:24 CST 2009
diff --git a/libs/sofia-sip/libsofia-sip-ua/sip/sip_util.c b/libs/sofia-sip/libsofia-sip-ua/sip/sip_util.c
index b553ed7fdb..cf470075a2 100644
--- a/libs/sofia-sip/libsofia-sip-ua/sip/sip_util.c
+++ b/libs/sofia-sip/libsofia-sip-ua/sip/sip_util.c
@@ -1164,14 +1164,25 @@ int sip_response_terminates_dialog(int response_code,
     return 0;
 
   case 484: /* Address Incomplete */
-  case 485: /* Ambiguous */
     /** @par 484 Address Incomplete and 485 Ambiguous
 
       Similar to 404 and 410, these
       responses came to a request whose Request-URI was provided by the
       peer in a @Contact header field.  Something has gone fundamentally
       wrong, and the dialog and all of its usages are destroyed.
+
+      Asterisk (v 1.2.7.1) does response with 484 if a client does send a refer
+      with a @ReferTo header to an unknown number.  This is therefore not
+      fundamentally wrong and the dialog should not be destroyed!
     */
+    if (method == sip_method_refer)
+    {
+      *return_graceful_terminate_usage = 0;
+      return 0;
+    }
+
+  case 485: /* Ambiguous */
+
     return terminate_dialog;
 
   case 486: /** @par 486 Busy Here